はじめに
需要予測は製造業において非常に重要な課題です。在庫が多すぎれば保管コストがかさみ、少なすぎれば欠品で機会損失が発生します。機械学習を使った需要予測は、この「適正在庫」の維持に貢献できます。
僕は製造業でデータ分析を担当しており、需要予測に関わる仕事をしてきました。この記事では、機械学習を使った需要予測の実装例と、精度を上げるための工夫を解説します。
需要予測に機械学習を使う理由
従来の需要予測では移動平均・指数平滑法などが使われてきましたが、機械学習を使うことで以下のメリットがあります。
- 複数の要因を考慮できる:季節性・祝日・天候・プロモーションなど
- 非線形な関係を捉えられる:単純な統計モデルでは難しいパターンを学習
- 自動的に特徴量を選択できる:重要な変数を自動で見つける
需要予測の実装例
データの準備
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 販売履歴データの読み込み
df = pd.read_csv('sales_history.csv')
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values('date')
# 特徴量の生成
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day_of_week'] = df['date'].dt.dayofweek
df['quarter'] = df['date'].dt.quarter
df['is_month_end'] = df['date'].dt.is_month_end.astype(int)
# 過去実績の特徴量(ラグ特徴量)
df['sales_lag_1'] = df['sales'].shift(1) # 1日前
df['sales_lag_7'] = df['sales'].shift(7) # 1週前
df['sales_lag_30'] = df['sales'].shift(30) # 1ヶ月前
# 移動平均
df['sales_ma_7'] = df['sales'].rolling(window=7).mean()
df['sales_ma_30'] = df['sales'].rolling(window=30).mean()
# 欠損値を除去
df = df.dropna()
学習・評価
# 時系列データは時間順に分割する(シャッフル厳禁)
train_size = int(len(df) * 0.8)
train = df[:train_size]
test = df[train_size:]
feature_cols = ['year', 'month', 'day_of_week', 'quarter',
'is_month_end', 'sales_lag_1', 'sales_lag_7',
'sales_lag_30', 'sales_ma_7', 'sales_ma_30']
X_train = train[feature_cols]
y_train = train['sales']
X_test = test[feature_cols]
y_test = test['sales']
# モデルの学習
model = GradientBoostingRegressor(n_estimators=200, learning_rate=0.05)
model.fit(X_train, y_train)
# 予測・評価
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"MAE: {mae:.2f}")
print(f"RMSE: {rmse:.2f}")
精度を上げるための工夫
① 祝日・イベント情報を追加する
祝日・年末年始・決算期などのイベントを特徴量に加えることで、精度が大きく改善することがあります。
import jpholiday
df['is_holiday'] = df['date'].apply(
lambda x: 1 if jpholiday.is_holiday(x) else 0
)
② 製品ごとにモデルを分ける
全製品を一つのモデルで予測しようとすると精度が下がることがあります。販売パターンが異なる製品群はモデルを分けることを検討しましょう。
③ LightGBMを使う
時系列の需要予測ではLightGBMが高精度・高速として広く使われています。
import lightgbm as lgb
model = lgb.LGBMRegressor(
n_estimators=1000,
learning_rate=0.05,
num_leaves=31,
random_state=42
)
model.fit(
X_train, y_train,
eval_set=[(X_test, y_test)],
callbacks=[lgb.early_stopping(50), lgb.log_evaluation(100)]
)
需要予測の結果を現場に活かす
どれだけ精度の高いモデルを作っても、現場に活用されなければ意味がありません。予測結果をExcelやPower BIで可視化して、現場担当者が使いやすい形で提供することも重要な仕事です。
まとめ
製造業における需要予測のポイントをまとめます。
- 時系列データは時間順に分割する(シャッフルしない)
- ラグ特徴量・移動平均・祝日情報が有効
- LightGBMは高精度・高速で需要予測向き
- 精度だけでなく現場への「使いやすさ」も重要
需要予測は一度作って終わりではなく、定期的に再学習・評価して精度を維持することが大切です。
💼 ITエンジニア転職特化
自分らしく働けるエンジニア転職を目指すなら【strategy career】
年収1000万・残業月30時間以下・リモート可の求人多数
※アフィリエイト広告を含みます
![]()
※本記事にはアフィリエイトリンクが含まれます。


コメント