現場で使える需要予測モデルを構築するためのデータ前処理と特徴量エンジニアリング
小売、製造、物流などの多様な業界において、需要予測は在庫適正化や欠品防止、サプライチェーン全体のコスト削減に直結する重要なテーマです。機械学習モデルの導入にあたり、LightGBMやProphet、深層学習モデルなどのアルゴリズム選定が注目されやすい傾向がありますが、実務現場において予測精度やモデルの頑健性を大きく左右するのは「データ前処理」と「特徴量エンジニアリング」であるケースが多いとされています。
時系列データには、通常のテーブルデータとは異なる時間軸特有の制約やバイアスが存在します。本記事では、現場で運用可能な需要予測モデルを構築するうえで押さえておくべき前処理の要点と特徴量作成のノウハウ、および実務で頻発するリーケージ(情報漏洩)の回避策について解説します。
1. データクリーニング:欠損値と外れ値の適切な処理
実務データは教科書的なデータセットと異なり、欠損やノイズが日常的に含まれています。これらを機械的に平均値やゼロで埋めるだけでは、モデルに誤ったバイアスを学習させてしまうリスクがあります。
在庫切れによる「ゼロ売上」と潜在需要の分離
需要予測において特に注意が必要なのが、「売上がゼロの日」の解釈です。真に需要がなくて売れなかったのか、あるいは「在庫切れ(品切れ)」によって買いたくても買えなかったのかによって、データの意味合いが全く異なります。 品切れ日を需要ゼロとして学習させると、モデルは「この時期は売れない」と過小予測を学習し、次期も発注を抑制して再び欠品を引き起こす「欠品の悪循環」に陥る可能性があります。
実務では以下のような対策が検討されるケースが多く見られます。
- 在庫フラグの連携: 在庫数がゼロだった期間の売上データを欠損(NaN)として扱い、学習対象から除外する、または補間アルゴリズムで潜在需要を推定する。
- 打ち切りデータ(Censored Data)としてのモデル化: 生の販売数量ではなく、Tobitモデルなどの打ち切り回帰アプローチを取り入れる。
外れ値・突発的ノイズの処理
一時的な特需(メディア露出、システム障害による二重計上、一時的なまとめ買いなど)は、適切なフラグを立てずにそのまま学習させると、過学習の原因となります。
- ウィンザライズ(Winsorizing): 異常に大きな値を、指定したパーセンタイル(例えば99パーセンタイル値)で頭打ちにする手法。
- 原因別のフラグ管理: 単に外れ値を除外するのではなく、「特需フラグ」「システム不具合期間」といったカテゴリ変数としてモデルに知らせることで、通常の予測値を歪めずに学習させることが可能になります。
2. 時間軸を捉える特徴量エンジニアリング
時系列予測では、単一時点のレコード情報だけでなく、「過去の推移」や「周期性」を明示的に特徴量として与える設計が精度向上の要泉となります。
ラグ特徴量(Lag Features)と移動窓統計量(Rolling Statistics)
過去の実績値から算出する特徴量は、モデルが直近の勢いや中長期のモメンタムを捉えるために不可欠です。
- 単純ラグ(Lag 1, Lag 7, Lag 14等): 1日前、前週同曜日、2週間前の同曜日の実績値。
- 移動平均・移動標準偏差(Rolling Mean / Std): 直近7日間、直近28日間の移動平均や標準偏差。
- 指数平滑化(EMA): 直近のデータにより大きな重みを与える移動平均。
[!NOTE] 予測リードタイムとの整合性 発注から納品まで3日かかる場合、推論時点から見て3日後以降の予測を行う必要があります。この場合、1日前の実績(Lag 1)を特徴量に含めると、本番運用時の推論時点で「まだ確定していない未来の情報」となってしまいます。予測リードタイムが $k$ 日である場合、使用可能なラグは $k$ 日以上前のデータ(Lag $k$, Lag $k+1, \dots$)に限定する設計が基本となります。
カレンダー情報と周期性のエンコーディング
季節性(Seasonality)を捉えるために、日付データから様々なメタ特徴量を抽出します。
- 日付属性: 月、日、曜日、四半期、祝日フラグ、休前日フラグ、五十日(ごとおび)フラグ。
- サイクリック特徴量(三角関数変換): 月(1〜12)や曜日(0〜6)は数値の大小関係ではなく「循環」する性質を持ちます。そのため、以下のように正弦(sin)と余弦(cos)へ変換することで、12月と1月の連続性をモデルに理解させやすくなります。 $$x_{\sin} = \sin\left(\frac{2\pi \times \text{month}}{12}\right), \quad x_{\cos} = \cos\left(\frac{2\pi \times \text{month}}{12}\right)$$
販促・イベント・外部要因特徴量
需要の変動要因の多くは、価格施策やイベントなどの外部刺激によって引き起こされます。
- 割引率・価格変化比率: 定価に対する実売価格の比率や、過去平均価格からの乖離率。
- プロモーションフラグ: チラシ掲載、クーポン配布、ポイントアップキャンペーンの実施有無。
- 気象データ: 気温、降水量、猛暑日フラグ(飲料やアパレル等の需要予測で特に有効)。
3. 実務で最も警戒すべき「データリーケージ(情報漏洩)」
データリーケージとは、予測時点では知り得ない「未来の情報」が訓練データの特徴量に混入してしまう現象です。オフラインの検証精度が極めて高かったにもかかわらず、本番リリースした途端に精度が大幅に崩壊する主因とされています。
【誤った分割(ランダム分割)】
Train: [ 1月 ] [ 3月 ] [ 5月 ] [ 7月 ]
Test: [ 2月 ] [ 4月 ] [ 6月 ] ───→ 未来のデータが学習に混ざりリーケージ発生
【正しい時系列分割(Time Series Split)】
Train: [ 1月 〜 4月 ] ─────────→ 過去のデータのみで学習
Test: [ 5月 ] ───→ 未来の期間を評価
時系列交差検証(Time Series Cross Validation)の徹底
通常のテーブルデータ分類ではStratified K-Foldなどのランダム分割が用いられますが、時系列データでランダム分割を行うと、未来の情報が訓練データに含まれてしまい、リーケージが発生します。
必ず時系列順を保った分割(TimeSeriesSplit やローリングウィンドウ方式)を採用し、「過去のデータで学習し、その後の期間を検証する」バックテスト体制を構築する必要があります。
集計・標準化・ターゲットエンコーディングのスコープ
特徴量スケーリングやターゲットエンコーディング(目的変数のカテゴリ別平均値を用いたエンコード)を行う際、データセット全体で一括計算してしまうと、未来の目的変数値が訓練特徴量に漏洩します。必ず「学習期間のデータのみ」で統計量を計算し、それを検証データやテストデータへ適用(transform)するパイプラインを組むことが不可欠です。
4. 予測精度と運用負荷のバランス
特徴量を増やせば増やすほど表現力は向上しますが、本番環境におけるデータ取得パイプラインの複雑化やレイテンシの増大というトレードオフが生じます。
| 特徴量カテゴリ | 予測への寄与度 | 運用・保守の難易度 | 留意点 |
|---|---|---|---|
| カレンダー・日付属性 | 中〜高 | 低 | 日付から即時計算可能で安定性が極めて高い |
| 自社実績のラグ・移動平均 | 極めて高 | 中 | リードタイム制約の順守と欠損補完パイプラインが必要 |
| 販促・プロモーション予定 | 高 | 中〜高 | 施策変更や急なキャンペーン前倒しへの追従設計が必須 |
| 外部データ(気象・競合等) | 中 | 高 | 外部API障害時のフォールバック処理や予報誤差の考慮が必要 |
システム運用を長期間安定させるためには、初期フェーズでは保守性の高い基本特徴量(カレンダーおよび自社実績ラグ)を中心に立ち上げ、運用体制の成熟に合わせて外部データや高度な集計特徴量を段階的に追加していくアプローチが現実的です。
まとめ
需要予測モデルの成否は、アルゴリズムの複雑さ以上に、業務背景を反映した前処理と時系列の特性を厳密に考慮した特徴量エンジニアリングに依存します。
- 在庫切れと実需要を区別し、データの欠損・外れ値の意味を正しく捉える
- 予測リードタイムに矛盾しないラグ特徴量と周期性表現を設計する
- 時系列交差検証を徹底し、未来情報のリーケージを確実に排除する
現場のビジネスプロセスとデータ生成メカニズムを丁寧に紐解きながら、堅牢なデータパイプラインを構築していくことが、実用的な需要予測AIを実現するための基盤となります。