中小企業のための実践的需要予測入門③

前の「中小企業のための実践的需要予測入門①」では需要予測の概要に関して話しまし、「中小企業のための実践的需要予測入門②」では統計モデルであるARIMAXのモデルを使って実際に予測をしてみました。

今回使用したデータとパラメータ

予測対象の商品や学習期間・テスト期間などの条件は、前回のARIMAXと同一としています。XGBoostでは機械学習モデルであるため、モデルを制御するための「ハイパーパラメータ」を設定する必要があります。これらの値を変更することで、モデルの振る舞いや精度を調整することが可能です。今回は、標準的かつ安定した構成を目指し、以下のように設定しました:

パラメータ設定値簡単な説明
n_estimators=100100本の木決定木を100本使って学習する(たくさんの弱い木を足し合わせて精度を上げる)
max_depth=3木の深さ3各決定木の深さは3に抑える(過学習しにくくなる)
learning_rate=0.10.1の学習率各ステップで学習する割合を0.1に(小さいほど慎重に学習)
random_state=42シード値固定結果を再現できるようにランダム性を固定している(テストの再現性確保)

予測結果

今回、test期間に実績が存在し、予測結果が得られた商品は 1,414アイテム でした。

これらの商品について、ARIMAXとXGBoostのどちらがより精度が高かったかを比較していきます。

🔸 予測精度の指標

前回は RMSE(平均二乗誤差の平方根) を使用しました。これは以下のように表現できます:

「1日あたりの予測値と実績値のズレの大きさを平均したもの」

ただし、RMSEは実績値が大きい商品では値が大きく出る傾向があり、「精度が良い or 悪い」を相対的に判断しづらいという課題があります。そのため今回は、MAPE(Mean Absolute Percentage Error) という指標も併用しました。言葉で表現すると以下のようになります。

「1日あたりの予測値と実績値のズレが、実績値に対してどの程度の割合だったかの平均」

また、数式的には以下の近似が成り立ちます(実績値が0に近くないことが前提):

🔸 精度の可視化:モデル別のMAPEプロット

下図は、商品ごとのMAPEをXGBoost(縦軸)とARIMAX(横軸)で比較したバブルチャートです。バブルの大きさは各商品の実績販売量を表しています。

グラフの見方としては以下です。

  • 青い領域(下側)にプロットされているほど、XGBoostの方が優れている
  • 対角線上に近いほど、両モデルで同等の精度

これを見るとどうでしょう?以下の事が言えるのではないでしょうか。

(1)全体的に精度は似ている
ARIMAXで精度が良かった商品は、XGBoostでも良く、逆もまた然り。
勝ち負けで言えば、ARIMAXが709勝、XGBoostが705勝と、ほぼ互角の結果でした。

(2)実績が大きい商品ほど精度が良い
バブルの大きさ(実績)が大きいほど、グラフの左下=高精度エリアに分布しています。
つまり、販売実績が多く安定している商品ほど、予測がしやすいという傾向があります。

🔸精度の評価:RMSEでも比較

個別のMAPEだけでなく、売上量が多い商品に重みを置いて全体として評価したい場合、RMSEの平均を比較するのが有効です。この値を算出してみると以下のようになります。

ARIMAX:4.23

XGBoost:4.15

→ この比較では XGBoostの方がわずかに良好な精度を示しました。

モデルの精度だけではなく「波形」も見る

予測モデルの良し悪しは数値だけでなく、実際の売上波形との乖離を見ることでも精度の判断が可能です。

  • 実績(黒線)
  • ARIMAX(赤線)
  • XGBoost(緑線)

のように重ねてみると、実績(黒)と予測(赤、緑)がほぼ重なっている場合は両モデルとも予測が安定していることが分かります。以下はその例になります。このような場合はMAPEがほぼ同じで、精度も変わらない例となります。

次はXGBoostが優れていた例を見ていきましょう。

これは今回扱った商品の中で最も販売数量が多かった商品に関するグラフです。グラフを見ると、赤線(ARIMAXによる予測値)が実績よりも高く推移しており、ARIMAXモデルは実際の販売数に対して過大に予測している傾向が見られます。

一方で、黄緑の線(XGBoostによる予測値)は実績値に近く、全体的に実績に沿った予測となっており、予測精度が高いことがわかります(MAPEで見てもARIMAX:0.64に対してXGBoost:0.25)。

では、なぜこのような予測結果の違いが生じたのでしょうか?
下のグラフは、この商品のモデル構築に使用した過去の実績データです。

グラフを見ると、直近の週末に販売数が極端に増加していることがわかります。ちょうどこの日はイベントが設定されており、販促などが行われた可能性があります。この変化を強く反映してしまったのがARIMAXモデルで、以後も同様に高い販売数が続くと予測したために過大な予測値になったと考えられます。
一方、XGBoostモデルはこの突発的な変化に引きずられず、全体の傾向を見ながら抑制的に予測しており、より実績に近い値となりました。

このように結果を丁寧に分析していくことで、どちらのモデルを採用すべきかの判断や、選定したモデルをどのように改善すべきかが見えてきます。この試行錯誤を繰り返すことで、予測精度は着実に向上していきます。

まとめ

今回は、Kaggleが提供する小売店データを活用し、
ARIMAX(統計モデル)とXGBoost(機械学習モデル)の精度比較を行いました。

📊 結果の要点

  • 全体としては 大きな差はないが、XGBoostの方がわずかに精度が良い
  • 特徴量が少ない(曜日・イベント)中では両者とも妥当な性能
  • 今後、特徴量を増やすことで 機械学習モデルの優位性がさらに発揮されると予想

🧠 今後の展望と提案

  • 特徴量が多くなればなるほど、統計モデルは不安定に、機械学習モデルは柔軟に対応可能
  • モデル選定とデータ選定の組み合わせが予測精度を左右する
  • 予測精度は「作って終わり」ではなく、「継続的に改善していく」ことが最も重要

もし「自社のデータでこのような予測を試してみたい」という方がいらっしゃれば、
ぜひお気軽にご相談ください。

コメント