時系列データにおける移動平均を使うメリットとは

移動平均は株価や天気などの時間で細かく変化する時系列データの全体の傾向をつかみたいときに使用します。
はじめに
今回は移動平均についてまとめました。移動平均は主に時系列データを扱う時に使用します。
移動平均とは
株価や気温などの時系列データは時間で細かく変化するため、全体の傾向を掴みにくい場合があります。そのようなときには「移動平均」を用いることで、変化をより滑らかにしてデータを俯瞰できます。
どのように使用するか
今回はpandas-datareaderを使用します。
Web上の様々なソースにアクセスできるPythonライブラリの1つです。既存のPython環境にPandasが入っていれば使えるわけではないのでインストールが必要です。
pip install pandas_datareader
必要なライブラリをインポートします。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as web
import datetime as dt
今回はFRED(St.Louis Fed)を使用します。
これは、ビットコインの米ドルに対する価格のデータです。
start = dt.date(2017,1,1)
end = dt.date(2023,1,1)
code = "CBBTCUSD"
df = web.DataReader(code,"fred",start,end)
データの長さと欠損値の数を確認します。
print(f"data length:{len(df)}")
print(f"\n{df.isnull().sum()}"
data_length:2192
CBBTCUSD 1
今回のデータでは欠損値が1つしかないので欠損値がある行を削除します。
df = df.dropna(axis = 0)
dfを可視化します。
plt.figure(figsize = (10,5))
sns.lineplot(
x = "DATE",
y = "CBBTCUSD",
data = df
)
データの量が多く、年度によって値が細かく変わっているので、全体の流れがつかみにくいです。
ここで便利なのが「移動平均」です。多くの場合の移動平均はデータ長の10%の値に設定する場合が多いです。windowにデータ長の10%の値を指定します。引数min_periodsに整数値を指定すると、その値の個数のデータが含まれていれば結果が算出されます。
df["10%MA"] = df["CBBTCUSD"].rolling(window = 219,min_periods = 0).mean()
移動平均も含めたグラフを出力します。
plt.figure(figsize = (10,5))
for col in df.columns:
graph = sns.lineplot(
x = "DATE",
y = col,
data = df,
label = col
)
plt.legend(loc = "upper left")
移動平均があることによって、全体の傾向がつかみやすく、より分かりやすいグラフになったかと思います。
まとめ
今回は移動平均についてまとめました。
移動平均によって、変化が激しい時系列データでも全体の傾向をつかむことができるので、そのようなデータに遭遇した際には使ってみると良いかもしれません。