投資のためのデータサイエンス

個人の投資活動に役立つデータ分析にまつわる話題を綴ります。

Pythonで学ぶ統計学(12):予測のための時系列データの統計モデル化(Holt-Wintersモデル)(その1)

本年1月に数値時系列の将来予測のモデルとしてよく使われるARIMAモデルを紹介した。今回は、機械学習の場面でARIMAモデルと共によく用いられるHolt-Winters法(三重指数平滑法)を取り上げる。
「指数平滑法」は時系列データのスムージング手法としては昔から一般的な手法である。時点を過去に遡るにつれて重みが指数関数的に減少する移動平均法である。計算上は現在時点と一つ前時点の値を保持すればよく、計算コードとして書きやすい手法である。
Holt-Winters法は上記の単純な指数平滑法に加えて、トレンド(階差)と季節変動成分についても指数平滑法でスムージングを行う方法である。

時系列データの表現

ここでは「系列」を、数値の連なったものと考える。これを、(x,y) により表現する。ここで、 x は順序(1ずつ増える)を表し、 y は値を表す。
また、 y に関する未知の値を\hat{y}と表す。以下の式は、1時点先の値を現在の値と同じと予測する「ナイーブ」な予測式である。


\hat{y}_{x+1}=y_{x}

今後はこの未来の時点の期待値のことを「レベル」と表現する。

単純指数平滑法

0から1までの間の値をとる指数平滑定数を \alphaとするとき、以下の式で表されるのが単純指数平滑法による予測である。


\hat{y}_{x}=\alpha y_{x} + (1-\alpha )\hat{y}_{x-1}

二重指数平滑法

系列 yの階差をとったもの、すなわち b=y_{x}-y_{x-1}を「トレンド」と表現する。二重指数平滑法は、以下の式のように「レベル」と「トレンド」の両方についての指数平滑法である。


l_{x}=\alpha y_{x}+(1-\alpha )(l_{x-1}+b_{x-1}) \ \ \ \ \ (level)\\
b_{x}=\beta (l_{x}-l_{x-1})+(1-\beta )b_{x-1} \ \ \ \ \ (trend)\\
\hat{y}_{x+1}=l_{x}+b_{x} \ \ \ \ \ (forecast)

Holt-Winters法(三重指数平滑法)

上記に加えて、季節変動についても指数平滑を行うモデルをHolt-Winters法(三重指数平滑法)といい、以下のように表される。


l_{x}=\alpha (y_{x}-s_{x-L})+(1-\alpha )(l_{x-1}+b_{x-1}) \ \ \ \ \ (level)\\
b_{x}=\beta (l_{x}-l_{x-1})+(1-\beta )b_{x-1} \ \ \ \ \ (trend)\\
s_{x}=\gamma (y_{x}-l_{x})+(1-\gamma )s_{x-L} \ \ \ \ \ (seasonal)\\
\hat{y}_{x+m}=l_{x}+mb_{x}+s_{x-L+1+(m-1)mod L} \ \ \ \ \ (forecast)

尚、トレンドの初期値b_{0}は一般に以下の値を利用する。


b_{0}=\frac{1}{L}(\frac{y_{L+1}-y_{1}}{L}+\frac{y_{L+2}-y_{2}}{L}+\cdots +\frac{y_{L+L}-y_{L}}{L})

Holt-Winters法の適用は、季節変動のある時系列に限られる。