ARTICLE

Pythonで時系列予測をするには?Prophet・LSTM・LightGBMの使い方と比較

2026/9/16

SHARE

Pythonの時系列予測の手法比較(Prophet・LSTM・LightGBM・SARIMA)から実装コード例、売上予測・在庫管理への活用まで解説します。

Py

Pythonで時系列予測をするには?Prophet・LSTM・LightGBMの使い方と比較

ARTICLE株式会社renue
renue

株式会社renue

2026/9/16 公開

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

時系列予測とは?基本概念とPythonが選ばれる理由

時系列予測とは、過去の時間順データをもとに将来の値を推定する機械学習・統計の手法です。売上予測、在庫管理、需要予測、株価予測など、ビジネスのあらゆる場面で活用されています。

Pythonが時系列予測に選ばれる主な理由は、豊富なライブラリにあります。Prophet(Meta開発)、statsmodels(SARIMA)、TensorFlow/Keras(LSTM)、LightGBM(勾配ブースティング)など、用途に応じたツールが揃っています。2025〜2026年現在、機械学習系ライブラリの進化により、従来は統計専門家が行っていた時系列予測を、データアナリストやエンジニアでも実装できるようになっています。

主要4手法の比較:Prophet・LSTM・LightGBM・SARIMA

時系列予測の主要手法を比較します。

手法得意なデータ実装難易度主な用途
Prophet季節性・祝日あり売上・トラフィック予測
LSTM長期依存関係あり株価・センサーデータ
LightGBM外部特徴量が豊富需要予測・在庫管理
SARIMA線形・定常時系列短期需要・経済指標

精度面では状況により異なりますが、各手法を同じ学習期間・予測期間・評価指標で比較する必要があります。R²やMAEなどのスコアはデータと検証条件に依存します(時系列の交差検証)。手法の選択はデータの特性と目的次第です。

Prophetの使い方と実装コード例

ProphetはMetaが開発したオープンソースライブラリで、ビジネスデータの予測に特化しています。季節性(年・週・日次)と祝日効果を自動的に考慮でき、パラメータ調整が少ないため、まず試す手法として最適です。

インストールと基本実装

pip install prophet pandas
from prophet import Prophet
import pandas as pd

# データ準備(ds: 日付列, y: 目的変数列)
df = pd.read_csv('sales_data.csv')
df = df.rename(columns={'date': 'ds', 'sales': 'y'})

# モデル構築・学習
model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=False
)
model.fit(df)

# 将来30日の予測
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)

# 結果確認
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(30))

# 可視化
fig = model.plot(forecast)
fig.savefig('forecast.png')

Prophetの強みはyhat_lower/yhat_upperで予測区間も自動出力される点です。祝日効果を加えたい場合はadd_country_holidays(country_name='JP')で日本の祝日を一行で反映できます。

LSTMの使い方と実装コード例

LSTM(Long Short-Term Memory)は、長期的な時系列依存関係を学習できるリカレントニューラルネットワークです。複雑なパターンや非線形な変動を持つデータに強く、センサーデータや金融データの予測に適しています。

基本実装(Keras使用)

正規化の係数は学習期間だけで算出し、検証・テスト期間には同じ変換を適用します。以下は各日の前日までの実測値を使う翌日予測の例です(TensorFlowの時系列予測前処理のデータ漏洩防止)。

pip install tensorflow pandas scikit-learn
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

# データ読み込みとスケーリング(1日1行、日付・売上の欠損がない前提)
df = pd.read_csv('sales_data.csv', parse_dates=['date'])
df = df.sort_values('date').reset_index(drop=True)
data = df['sales'].values.reshape(-1, 1)
# 後段の80%分割と、その末尾10%の検証期間を先に確定する
split = int((len(data) - 30) * 0.8)
fit_split = int(split * 0.9)
scaler = MinMaxScaler()
scaler.fit(data[:30 + fit_split])  # 検証・テストの目的変数を含めない
data_scaled = scaler.transform(data)

# シーケンスデータ作成(過去30日で翌日を予測)
def create_sequences(data, seq_length=30):
    X, y = [], []
    for i in range(len(data) - seq_length):
        X.append(data[i:i+seq_length])
        y.append(data[i+seq_length])
    return np.array(X), np.array(y)

X, y = create_sequences(data_scaled, seq_length=30)
split = int(len(X) * 0.8)
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]

# モデル構築
model = Sequential([
    LSTM(50, return_sequences=True, input_shape=(30, 1)),
    Dropout(0.2),
    LSTM(50, return_sequences=False),
    Dropout(0.2),
    Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.1)

# 予測と逆変換
y_pred_scaled = model.predict(X_test)
y_pred = scaler.inverse_transform(y_pred_scaled)

LSTMはデータ量が少ないと過学習しやすい点に注意が必要です。Dropoutで正則化し、学習期間・系列の複雑さ・モデル規模を変えながら、将来期間の検証誤差でデータ量の十分さを判断します(TensorFlowの学習・検証例)。

LightGBMによる時系列予測:特徴量エンジニアリングが鍵

LightGBMは勾配ブースティングベースのアルゴリズムで、本来は時系列専用ではありませんが、適切な特徴量エンジニアリングにより高精度な予測が可能です。外部変数(気温、曜日、キャンペーン有無など)を組み合わせた需要予測・在庫管理に特に有効です。

時系列特徴量の作成と学習

以下は1日1行のデータで、予測日の前日までの実績が毎日得られる翌日予測を評価する例です。テスト期間全体を開始日に一括予測する場合は、期間中の実績をラグに使えないため、予測値を順に入力する再帰予測などへ変更します(単一ステップ・複数ステップ予測の違い)。

pip install lightgbm pandas scikit-learn
import pandas as pd
import lightgbm as lgb
from sklearn.metrics import mean_absolute_error

df = pd.read_csv('sales_data.csv', parse_dates=['date'])
df = df.sort_values('date').reset_index(drop=True)

# 時系列特徴量の作成
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['dayofweek'] = df['date'].dt.dayofweek
df['is_weekend'] = df['dayofweek'].isin([5, 6]).astype(int)

# ラグ特徴量(過去7日・30日の値)
for lag in [1, 7, 14, 30]:
    df[f'lag_{lag}'] = df['sales'].shift(lag)

# 移動平均特徴量
df['rolling_mean_7'] = df['sales'].shift(1).rolling(7).mean()
df['rolling_mean_30'] = df['sales'].shift(1).rolling(30).mean()

df = df.dropna()

# 学習・テスト分割(時系列なので末尾をテストに)
split_date = '2024-10-01'
train = df[df['date'] < split_date]
test = df[df['date'] >= split_date]

feature_cols = ['year','month','day','dayofweek','is_weekend',
                'lag_1','lag_7','lag_14','lag_30',
                'rolling_mean_7','rolling_mean_30']

model = lgb.LGBMRegressor(n_estimators=500, learning_rate=0.05, random_state=42)
model.fit(train[feature_cols], train['sales'])

y_pred = model.predict(test[feature_cols])
mae = mean_absolute_error(test['sales'], y_pred)
print(f'MAE: {mae:.2f}')

LightGBMは学習速度が速く、特徴量重要度も確認できるため、ビジネス解釈のしやすさという点でも優れています。model.feature_importances_で各特徴量の貢献度を把握し、不要な特徴量を削除してモデルを軽量化できます。

手法選択の実践ガイド:売上予測・在庫管理への活用

どの手法を選べばよいかは、データの特性と目的によって決まります。

売上予測への活用

ECサイトや小売業の売上予測では、季節性・週次パターン・祝日効果が重要です。この場合はProphetが最初の選択肢になります。データ量が豊富で、キャンペーン有無や天気など外部要因も加味したい場合はLightGBMが適しています。

在庫管理・需要予測への活用

在庫最適化では過剰在庫と欠品の両方をコントロールする必要があります。LightGBMに曜日・月・ラグ特徴量を加えたアプローチが実務でよく用いられます。予測精度を評価する指標としてはMAE(平均絶対誤差)やMAPE(平均絶対パーセント誤差)が一般的です。

判断フローチャート

  • データが少ない(数百件以下)かつ季節性あり → Prophet
  • 外部特徴量が豊富・高速学習が必要 → LightGBM
  • 複雑な非線形パターン・大量データあり → LSTM
  • 線形・定常データで統計的解釈が必要 → SARIMA

データ分析・AI予測モデル導入支援

時系列予測・需要予測のAIシステム構築から、データサイエンティスト採用まで支援します。

無料相談はこちら

よくある質問(FAQ)

Q1. ProphetとLSTMはどちらが精度が高いですか?

一概には言えません。データの性質によります。季節性が明確で外れ値が少ないビジネスデータではProphetが安定した精度を示すことが多く、長期的な複雑なパターンを持つデータではLSTMが優れる場合があります。まずProphetで試し、精度が不十分な場合にLSTMやLightGBMを検討するのが現実的なアプローチです。

Q2. 時系列予測に必要なデータ量の目安は?

手法によって異なります。Prophetは標準設定では2サイクルを超える履歴があると週・年の季節性を自動で有効にしますが、これは精度の保証ではありません(公式の季節性設定)。LSTMの必要件数は系列・モデル規模に依存し、将来期間の検証で判断します。LightGBMも件数だけで実用精度は決まらず、ラグ特徴量の欠損行を削除する場合は先頭データが減ることを考慮する必要があります。

Q3. 時系列データのクロスバリデーションはどうすればよいですか?

通常のランダム分割は使えません。時系列では「過去で学習し、未来を検証する」原則を守ります。Prophetのcross_validation()関数や、scikit-learnのTimeSeriesSplitを使うことで、データの時間的順序を保ったウォークフォワード検証が実装できます。

Q4. 外れ値や欠損値はどう処理すればよいですか?

Prophetは欠損値(NaN)を自動的に無視して学習できます。LightGBMはラグ特徴量のNaNもそのまま扱えます。本記事の例は過去30日分が揃う行に評価条件を合わせるため削除していますが、削除は必須ではありません(公式の欠損値処理)。外れ値は事前に四分位範囲(IQR法)でクリッピングするのが一般的です。

Q5. Pythonの時系列予測ライブラリは他に何がありますか?

主要なものとして、statsmodels(ARIMA/SARIMA)、sktime(統一APIで複数手法を比較)、NeuralForecast(N-BEATS、N-HiTS等の深層学習モデル)、mlforecast(LightGBM/XGBoostの時系列特化版)などがあります。2025年以降はNeuralForecastやmlforecastが注目されており、従来のLSTMより高精度を示すケースも増えています。

Q6. 多変量時系列予測(複数の説明変数)はどうすればよいですか?

LightGBMは多変量が得意で、気温・価格・プロモーション情報などを特徴量として直接追加できます。Prophetもadd_regressor()で外部変数を追加可能です。LSTMでは入力の次元数を増やすことで多変量に対応できますが、特徴量選択とスケーリングに注意が必要です。

あわせて読みたい

AI活用のご相談はrenueへ

renueは自社開発のAIツールを自社運用するAIコンサルティングファームです。

→ 詳細を見る

SHARE

FAQ

よくある質問

Prophet(Meta開発:トレンド+季節性の分解に強い・初心者向け)、LSTM(ディープラーニング:複雑な非線形パターンの学習)、LightGBM(勾配ブースティング:特徴量エンジニアリングで高精度)の3手法が代表的です。データの特性と目的に応じて使い分けます。

Prophet:設定が簡単・季節性の自動検出・説明可能性が高い・小〜中規模データ向け。LSTM:複雑なパターンに強い・大量データが必要・チューニングが難しい。LightGBM:特徴量エンジニアリングが鍵で、表形式の特徴量を利用できます。KaggleのM5 Forecasting - Accuracyでは4位の解法にLightGBMが使われていますが、全時系列コンペの使用率や精度順位を示すものではありません(出典:https://www.kaggle.com/competitions/m5-forecasting-accuracy/writeups/monsaraida-4th-place-solution)。

売上予測(月次・週次の売上見込み)、需要予測(在庫管理・発注最適化)、トラフィック予測(Webサイト・アプリ)、異常検知(設備の故障予兆)、株価・為替予測、電力需要予測、人員配置の最適化が代表的な活用場面です。

pip install prophetでインストール→データをds(日付)とy(値)の2列に整形→model = Prophet()でモデル作成→model.fit(df)で学習→model.predict(future)で予測→model.plot(forecast)で可視化の流れです。数行のコードで本格的な時系列予測が実行できます。

適切な特徴量の追加(曜日・祝日・天候・イベント等の外部要因)、ハイパーパラメータの最適化(Optuna等での自動チューニング)、交差検証(時系列対応のクロスバリデーション)での精度評価、複数モデルのアンサンブル(予測値の平均)が精度向上の主な手法です。

Prophet公式ドキュメント(https://facebook.github.io/prophet/docs/quick_start.html)、Kaggleの時系列コンペ(Store Sales・M5 Forecasting等、https://www.kaggle.com/competitions/m5-forecasting-accuracy/overview)、書籍「Pythonではじめる時系列分析入門」(https://www.kspub.co.jp/book/detail/5369821.html)、CourseraのSequences, Time Series and Prediction(https://www.coursera.org/learn/tensorflow-sequences-time-series-and-prediction)が学習リソースです。まずProphetで基本を学び、LightGBMに進むのが効率的です。

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

関連記事

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

無料資料をダウンロード