04.12.1
SES
SimpleExpSmoothing(data_train).fit(smoothing_level=0.1) で 33 か月先を予測します。SES は水準しか持たないため予測は水平線になり、冬に 3000 を超え夏に 2000 近くまで落ちる季節の波を表せないことが図で分かります。直感 #
毎月の天然ガス消費量から来月の値を見積もるとき、2013 年の値と先月の値を同じ重みで平均するのは不自然です。SES は「先月を \(\alpha\)、それ以前の見積もりを \(1 - \alpha\)」で混ぜる更新を毎月繰り返すので、2 か月前の重みは \(\alpha(1-\alpha)\)、3 か月前は \(\alpha(1-\alpha)^2\) と指数的に小さくなります。\(\alpha\) を 0.9 にすれば直近の値をほぼそのまま予測に使い、0.1 にすれば 20 か月以上前の値も効く滑らかな線になります。更新式は \(\ell_t = \alpha y_t + (1 - \alpha)\ell_{t-1}\) の 1 本だけで、予測はこの最終値 \(\ell_T\) を未来のすべての月に置くので、SES の予測線は必ず水平になります。
1. ライブラリ #
| |
何が起きているか(ステップで見る) #
コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。
見るポイント:α は「新しい値をどれだけ信じるか」。小さいほど滑らか、大きいほど直近に追従。
2. サンプルデータ #
Natural Gas Consumption(NATURALGAS) の月次データを使います。数値の単位は BCF(10 億立方フィート)で、2013 年 1 月から 2022 年 9 月までの 117 か月分を辞書で直接埋め込み、日付 index の DataFrame に整えます。
| |
| Natural Gas Consumption(BCF) | |
|---|---|
| 2013-01-01 | 2878.8 |
| 2013-02-01 | 2567.2 |
| 2013-03-01 | 2521.1 |
| 2013-04-01 | 1967.5 |
| 2013-05-01 | 1752.5 |
全期間を折れ線で描くと、暖房需要で 1 月に 3000 BCF 前後の山、夏に 2000 BCF 前後の谷を作る 12 か月周期と、10 年で山が 2900 から 3600 へ上がるゆるやかな上昇トレンドが見えます。
| |

3. データの分割 #
予測性能を評価するため、2020 年 1 月より前の 84 か月を学習用、2020 年 1 月以降の 33 か月を検証用に分けます。時系列ではランダムに分けず、必ず時間順に切ります。
| |

4. モデルの学習と予測 #
学習データ 84 か月に SES を当て、\(\alpha = 0.1\) を固定して 33 か月先まで予測します。fit は学習期間の各月で水準 \(\ell_t\) を更新し、forecast はその最終値を未来に置くだけです。
| |
| |

実行結果の読み方 #
× の予測線は 2400 BCF 前後の水平線になり、検証データの冬の山(3300〜3600)を 1000 以上下回り、夏の谷(2100 前後)は 300 ほど上回ります。これは SES が水準 \(\ell_t\) しか持たず、学習期間の最後の値を未来に置くだけだからです。\(\alpha = 0.1\) と小さいため、平滑水準は 2019 年 12 月の 3170.7 という高い値にはほとんど引っぱられず、過去 2〜3 年の平均に近い水準で落ち着いています。ses.params["smoothing_level"] で指定した \(\alpha\)、ses.fittedvalues で学習期間内の平滑線を取り出すと、観測の山谷より 1〜2 か月遅れて小さく波打つ線が確認できます。
使いどころと落とし穴 #
SES が向くのは、水準がゆっくり変わるだけでトレンドも季節性もない系列、たとえば在庫回転率や故障率の月次推移です。天然ガス消費量のように 12 か月周期の山谷が水準の 40% もある系列では、どんな \(\alpha\) を選んでも水平線しか出せないので、季節を持つ Holt-Winters 法 に進む必要があります。\(\alpha\) を手で決めるときは、0.1〜0.3 なら平滑化(ノイズ除去)寄り、0.7 以上なら直近追従寄りと覚え、fit() に何も渡さずに最尤推定した値と比べて判断します。最尤推定の \(\alpha\) が 0.9 を超えたら「前月の値をそのまま使う」ナイーブ予測とほぼ同じで、SES を使う意味は薄いという合図です。
- 単純指数平滑法 (SES) — 指数的な重みで滑らかに予測する基本形
- Holtの線形指数平滑法 — SESにトレンド成分を加えた拡張
- Holt-Wintersの手法 — トレンドと季節性を同時に平滑化し 12 か月周期の山谷も再現する