1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Databricks × 需要予測】#03 SARIMAXで需要予測を高度化する

1
Last updated at Posted at 2026-04-06

はじめに

前回は、指数平滑法(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 モデルの実装

image.png

モデル ① : 外部要因なし(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 結果の比較

image.png

黒:実績(Actual)
青:外部要因なし(ARIMA)
緑:外部要因あり(SARIMAX)

06 結果の考察

指数平滑法と同じく「赤い線より左が学習データ、右が予測データ」となります。

青のデータと緑のデータを黒と比較すると、緑のグラフが実績値と近い予想ができているように見られます。
そのため、今回のデータでは「SARIMAXの方がより実績に近い予測ができている」と考えられます。

なぜ精度が上がるのか

需要は単純な時系列データではなく、以下のような要因の影響を受けます。

  • 季節性(例:夏はアイスが売れる)
  • イベント(例:クリスマスセール)
  • 社会要因(例:コロナによる需要変動)

ARIMAのようなモデルは、

👉 「過去のデータのパターン」だけで予測を行います。

しかし実際の需要は、「なぜそのタイミングで売れたのか」という理由(背景)が存在します。

例で考える

例えば、以下のようなデータがあったとします。

  • 毎年12月に売上が急増する
  • 特定期間だけ需要が大きく落ちる

ARIMAの場合👇

👉 「12月は毎年上がる傾向がある」とだけ学習する


SARIMAXの場合👇

👉 「クリスマスだから売れている」
👉 「コロナだから需要が落ちている」

というように、

変化の原因を変数として理解できる


なぜこれが重要か

外部要因を入れることで、

👉 モデルが「変動の理由」を説明できるようになる

結果として👇

  • 突発的な変化に強くなる
  • 将来のイベントも予測に反映できる
  • 過去のパターンだけに依存しなくなる

そのため、
👉 外部要因を入れることで説明力が上がる
👉 モデルが「なぜ売れるのか」を理解できるようになる

まとめ

今回は、

  • ARIMA / SARIMA / SARIMAXの違い
  • 外部要因の重要性
  • SARIMAXによる予測

について整理しました。

SARIMAXを使うことで、単純な時系列だけでなく、
「イベントや社会要因を含めた予測」が可能になることが分かりました。

👉 需要予測では「過去データだけでなく、外部要因をどう取り込むか」が重要になります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?