はじめに
前回は、指数平滑法(Holt-Winters法)を使って需要予測を行いました。
しかし、
- 外部要因を考慮できない
- 複雑な変動に弱い
といった課題がありました。
今回は、より高度なモデルである
👉 SARIMAX(Seasonal ARIMA with eXogenous variables)
を使って予測を行っていきます。
01 ARIMAとは何か
ARIMAは、
👉 過去データのパターンから未来を予測するモデル
です。
正式名称👇
AutoRegressive Integrated Moving Average
重要になるのは、以下のモデルの形です。
order = (p, d, q)
ARIMAの重要なパラメータは以下です。
| パラメータ | 意味 |
|---|---|
| p | 自己回帰 |
| d | 差分 |
| q | 移動平均 |
p(自己回帰)
👉 過去の値を使って予測する
d(差分)
👉 トレンドを除去する
q(移動平均)
👉 過去の誤差を使う
イメージ
例👇
order = (1, 2, 1)
- 2回差分してトレンドを除去
- 1つ前の値を使用
- 1つ前の誤差も考慮
02 SARIMA
SARIMAは、
👉 ARIMA + 季節性
パラメータ
(p, d, q)(P, D, Q, s)
例👇
(1,1,1)(1,1,1,52)
👉 52週周期(年次季節性)
03 SARIMAX
SARIMAXは、「SARIMA + 外部要因」
Xとは?
👉 exogenous variables(外部要因)
今回の例👇
- covid
- christmas
- new_year
上記がこの内容になります。
💡 モデルの違いまとめ
| モデル | 内容 |
|---|---|
| ARIMA | 過去データ |
| SARIMA | 過去 + 季節性 |
| SARIMAX | 過去 + 季節性 + 外部要因 |
04 モデルの実装
モデル ① : 外部要因なし(ARIMA)
fit1 = SARIMAX(
train,
order=(1, 2, 1),
seasonal_order=(0, 0, 0, 0),
initialization_method="estimated"
).fit()
fcast1 = fit1.predict(
start=min(train.index),
end=max(score_exo.index)
)
👉 過去データのみ(過去の需要)で予測
モデル ② : 外部要因あり(SARIMAX)
fit2 = SARIMAX(
train,
exog=train_exo,
order=(1, 2, 1),
seasonal_order=(0, 0, 0, 0),
initialization_method="estimated"
).fit()
fcast2 = fit2.predict(
start=min(train.index),
end=max(score_exo.index),
exog=score_exo
)
👉 外部要因を加えて予測
※ 今回は季節性を考慮しない設定(0,0,0,0)としていますが、
実務では週次データの場合、(1,1,1,52)のように設定することが一般的です。
💡 モデルの考え方
このモデルは
需要 = 過去の需要
+ COVID影響
+ クリスマス
+ 年始
👉 現実に近い予測が可能になると考えられる
05 結果の比較
黒:実績(Actual)
青:外部要因なし(ARIMA)
緑:外部要因あり(SARIMAX)
06 結果の考察
指数平滑法と同じく「赤い線より左が学習データ、右が予測データ」となります。
青のデータと緑のデータを黒と比較すると、緑のグラフが実績値と近い予想ができているように見られます。
そのため、今回のデータでは「SARIMAXの方がより実績に近い予測ができている」と考えられます。
なぜ精度が上がるのか
需要は単純な時系列データではなく、以下のような要因の影響を受けます。
- 季節性(例:夏はアイスが売れる)
- イベント(例:クリスマスセール)
- 社会要因(例:コロナによる需要変動)
ARIMAのようなモデルは、
👉 「過去のデータのパターン」だけで予測を行います。
しかし実際の需要は、「なぜそのタイミングで売れたのか」という理由(背景)が存在します。
例で考える
例えば、以下のようなデータがあったとします。
- 毎年12月に売上が急増する
- 特定期間だけ需要が大きく落ちる
ARIMAの場合👇
👉 「12月は毎年上がる傾向がある」とだけ学習する
SARIMAXの場合👇
👉 「クリスマスだから売れている」
👉 「コロナだから需要が落ちている」
というように、
変化の原因を変数として理解できる
なぜこれが重要か
外部要因を入れることで、
👉 モデルが「変動の理由」を説明できるようになる
結果として👇
- 突発的な変化に強くなる
- 将来のイベントも予測に反映できる
- 過去のパターンだけに依存しなくなる
そのため、
👉 外部要因を入れることで説明力が上がる
👉 モデルが「なぜ売れるのか」を理解できるようになる
まとめ
今回は、
- ARIMA / SARIMA / SARIMAXの違い
- 外部要因の重要性
- SARIMAXによる予測
について整理しました。
SARIMAXを使うことで、単純な時系列だけでなく、
「イベントや社会要因を含めた予測」が可能になることが分かりました。
👉 需要予測では「過去データだけでなく、外部要因をどう取り込むか」が重要になります。

