04.10.4
【ベンチマーク】構造変化のあるデータ
コロナ禍による消費行動の変化、法改正による市場構造の転換、設備更新による歩留まりの向上——実務では「あるタイミングを境にデータの振る舞いが変わる」ケースが頻繁に起きる。このシナリオでは、構造変化を含む時系列に対して学習期間の選択がモデル精度にどれほど影響するかを検証する。
1. データの特徴 #
月次データ 48 か月(4 年分)で、前半 24 か月は水準 80 から月 +0.5 の緩やかな上昇、後半 24 か月は水準が 30 ポイント跳ね上がり、トレンドも月 +1.0 に加速します。テストは末尾 12 か月なので、学習に使えるのは変化前 24 か月と変化後 12 か月です。全期間で学習すると、SES や ARIMA は変化前 24 か月の低い水準に引っぱられて現在の水準を過小評価し、トレンド項を持つ HW加法も「月 +0.5 と +1.0 の中間」の傾きを推定してしまいます。
何が起きているか(ステップで見る) #
コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。
見るポイント:どこで区切ると左右のばらつきの合計が最小になるかを総当たりで探す。
2. 合成データの生成 #
次のコードは、np.where(t < 24, …) で前半と後半のトレンドを切り替えた 48 か月の系列を作り、変化点を紫の実線、テスト開始を赤の破線で示します。変化前の期間には薄い紫の帯を敷いて、どこまでが「古い振る舞い」かを一目で分かるようにします。
| |
3. 比較するパイプライン #
2 つの学習戦略を同じ 5 モデルで比べます。
| 戦略 | 学習期間 | モデル |
|---|---|---|
| 全期間 | 月1〜36 | 季節ナイーブ, SES, HW加法, ARIMA(1,1,1), ARIMA(2,1,1) |
| 変化後のみ | 月25〜36 | 季節ナイーブ, SES, HW加法, ARIMA(1,1,1), ARIMA(2,1,1) |
4. 実験と結果 #
次のコードは 5 モデルを forecast_model に集め、train_all(36 か月)と train_post(12 か月)の 2 通りで学習して 12 か月先を予測します。MASE を赤(全期間)と青(変化後)のグループ棒グラフに並べ、各棒の上に値を書き込みます。
| |
読み方のポイント #
全期間で学習した赤い棒は、SES も HW加法も ARIMA も MASE が 1 を大幅に超えます。変化前 24 か月の低い水準と月 +0.5 の緩いトレンドが推定を引っぱり、テスト期間の実際の水準(約 125〜140)に届かないためです。変化後のみで学習した青い棒は、12 点しか使っていないのに多くのモデルで MASE が半分以下に縮み、HW加法や ARIMA(1,1,1) は 1 の近くまで下がります。同じ ARIMA(1,1,1) で赤と青の差が 2 倍以上あるのに対し、青の棒どうし(モデル間)の差は 0.3 程度に収まるので、このデータでは「どのモデルか」より「どの期間か」が精度を決めています。
5. 誤差パターン分析 #
MASE だけでは「外れが一方向に偏っているか」が分かりません。次のコードは ARIMA(1,1,1) に絞り、上段に全期間学習と変化後学習の予測を実測と重ね、下段にテスト 12 か月の残差を棒で描いて平均(MBE)を破線で示します。
| |
全期間で学習した ARIMA(1,1,1) は、上段左で予測の破線が実測の点列の下をずっと走り、下段左では 12 本の残差の棒がすべて正の側に立って MBE が大きな正の値になります。これは変化前 24 か月の低い水準に引きずられた系統的な過小予測で、ばらつきの問題ではありません。変化後 12 か月だけで学習した ARIMA(1,1,1) は、上段右で破線が実測の点列の中を通り、下段右では棒が 0 の上下に散らばって MBE がほぼ 0 になります。残差が白色雑音に近づいたことで、ARIMA の予測区間も信頼できるものになります。
6. よくある失敗パターン #
最初の失敗は「データは多いほどよい」と思い込むことです。構造変化がある場合、変化前の 24 か月を含めるほど水準とトレンドの推定が古い振る舞いに寄り、このページの例では 5 モデルすべてで MASE が悪化しました。12 点しかなくても変化後だけで学習した方が精度は高くなります。二つ目は変化点を目視で決めることで、グラフを眺めて「この辺り」と選ぶと分析者ごとに結果が変わります。ruptures パッケージの Pelt や Binseg、あるいはこのページのステップ図で見た「区切りの左右のばらつきの合計が最小になる点」を総当たりで探す方法で、変化点を数値として再現可能に決めます。三つ目は、変化点を見つけても古いデータを捨てる以外の選択肢を考えないことで、変化点のダミー変数を外生変数として SARIMAX に渡すか、Prophet の changepoints に日付を指定すれば、変化前のデータも傾きの推定に活かせます。
- ウォークフォワード検証 — 時系列の正しい評価手法
- MASE — 季節ナイーブ基準の精度指標
- ARIMA モデル — 自己回帰と移動平均
- 指数平滑法 — 直近データに重みを置く予測