時系列分析入門ミニ教科書
売上・株価・気温・サーバ負荷 ── ビジネスデータの多くが時系列です。本ミニ教科書は 定常性 → ACF/PACF → ARIMA → Prophet → 状態空間 → 評価 の順に 6 章で全体像を掴める構成。Python 実行可能なコード付き。
時系列データの特徴
時系列データとは 時刻順に並んだ観測値の列。売上・株価・気温・サーバ負荷など、ビジネスの中核データの多くが時系列。普通の回帰と違い、順序・自己相関・季節性 を扱う必要があります。
時系列の 4 成分
- トレンド(Trend): 長期的な増減傾向
- 季節成分(Seasonality): 周期的なパターン(年・月・週・日内)
- 周期成分(Cycle): 季節と違い周期長が一定でない波(景気循環など)
- 残差(Residual / Irregular): トレンド・季節を除いた不規則な変動
定常性(Stationarity)
期待値・分散・自己共分散 が時間に依存しない時系列を (弱)定常 と呼ぶ。
多くの時系列モデルは 定常性を前提 とする。トレンドや季節があると非定常 → 差分 や 季節差分 を取って定常化する。
ランダムウォーク(株価のような非定常)を、定常を前提とした AR モデルでそのまま当てると 見せかけの相関 が出て予測がデタラメになる。まず差分を取って定常化 してからモデル化するのが時系列分析の鉄則。
自己相関と ACF / PACF
時系列の最大の特徴は 過去の値と現在の値が相関している こと。これを定量化するのが 自己相関関数(ACF) と 偏自己相関関数(PACF)。
自己相関関数(ACF)
ラグ だけ離れた観測値同士の相関。AR(1) モデルなら指数減衰、MA(q) モデルなら ラグ目で ストン と消える。
偏自己相関関数(PACF)
中間のラグの影響を取り除いた『純粋な』ラグ の相関。AR(p) のオーダー判定 に使う(PACF が p ラグ目で消える)。
ACF / PACF の組み合わせでモデル選択
- AR(p): ACF 緩やか減衰 / PACF が p ラグ目で消える
- MA(q): ACF が q ラグ目で消える / PACF 緩やか減衰
- ARMA(p,q): 両方とも緩やか減衰
PACF が 1 ラグ目だけ突き出ていれば AR(1)、2 ラグ目まで突き出ていれば AR(2)、と直感的にオーダーが推定できる。実務では `auto_arima`(pmdarima)で AIC 最小のモデルを自動選択することも多い。
AR / MA / ARIMA モデル
ARIMA(p, d, q) は時系列分析の古典的かつ強力な汎用モデル。AR(自己回帰)・I(差分)・MA(移動平均)の 3 要素で構成。
AR(p) ─ 自己回帰モデル
過去 期の自分自身 から現在を線形回帰。 を1未満にすると定常。
MA(q) ─ 移動平均モデル
過去 期の誤差(ショック) が現在に影響する構造。AR と双対的な関係(無限和で相互に表現可能)。
ARIMA(p, d, q)
I(d): 階差分を取って定常化。
例: ARIMA(1, 1, 1) は『1 階差分後に AR(1) + MA(1) を当てる』モデル。
SARIMA(p,d,q)(P,D,Q,s): 季節差分・季節 AR・季節 MA を加えた季節版。 は周期(月次なら 12)。
ARIMA は線形・1 変量・短期予測に強い。長期予測 は単に平均値に収束する弱点があり、非線形パターン(指数増加・閾値効果)も苦手。これらは Prophet や状態空間モデル、最近では Transformer ベースの時系列モデル(Temporal Fusion Transformer 等)が補う。
Prophet ─ ビジネス向け汎用ツール
Prophet は Meta が公開したオープンソース時系列予測ライブラリ。ARIMA より使いやすく、季節性・休日効果を自動で扱う ためビジネス分析で広く採用。
モデル構造
- g(t): トレンド(線形 or ロジスティック)
- s(t): 季節性(年・週・日次)
- h(t): 休日効果(クリスマス・ブラックフライデーなど)
- ε: 残差
Prophet の強み
- 欠損値・外れ値に頑健(ベイズ的に推定)
- 変化点(changepoint) を自動検出 → トレンドの折れ目を表現
- ハイパーパラメータ調整が少ない(初心者でも使える)
- 休日リスト(`holidays` パラメータ)で日本の祝日も簡単に扱える
- 信頼区間 を自動で出力
# pip install prophet
from prophet import Prophet
import pandas as pd
# df: ds(日付), y(値) の 2 列
df = pd.read_csv('sales.csv')
m = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
holidays=pd.DataFrame({
'holiday': 'cyber-monday',
'ds': pd.to_datetime(['2024-12-02', '2025-12-01']),
}),
)
m.fit(df)
future = m.make_future_dataframe(periods=30)
forecast = m.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())Prophet が向く: 日次〜月次のビジネス時系列、季節性が明確、休日効果が大きい(EC・小売・観光)。
ARIMA が向く: 短期高精度予測、定常 / 弱季節性データ、統計的解釈が必要。
深層学習(LSTM・Transformer)が向く: 多変量・大規模・長期依存・非線形パターン。
状態空間モデルとカルマンフィルタ
状態空間モデル(State Space Model) は、観測値の背後に 隠れた状態 を仮定する柔軟なフレームワーク。ARIMA・指数平滑法・Prophet などの背景にある統一理論でもあります。
基本構造
- 状態方程式: (状態の遷移)
- 観測方程式: (状態から観測値へ)
- は独立な正規ノイズ
カルマンフィルタ
予測ステップ: 時刻 までの情報で時刻 の状態を予測
更新ステップ: 時刻 の観測値で予測を補正
これを繰り返すことで、雑音だらけの観測値から真の状態を抽出 できる。GPS のノイズ補正・ロボット制御・経済時系列・宇宙工学で広く使用。
局所水準モデル(最も簡単な状態空間モデル)
(レベルがランダムウォーク)、(観測誤差付きで観測)。 指数平滑法と等価で、ノイズの多いデータから滑らかなトレンド を抽出できる。
拡張・派生
- 局所線形トレンドモデル: レベル + スロープ。長期予測に強い
- 基本構造時系列モデル(BSM): レベル + スロープ + 季節 + 周期
- 動的線形モデル(DLM): 係数が時間変化する回帰
- 粒子フィルタ: 非線形・非ガウスに対応
`statsmodels.tsa.statespace`: SARIMAX・UnobservedComponents・DynamicFactor 等。`pykalman`: シンプルなカルマンフィルタ。`tensorflow_probability.sts`: ベイズ推定で状態空間モデル。
予測精度の評価とバックテスト
時系列予測の評価は 普通の機械学習と違う ─ 時間順を保った検証 が必須。
評価指標
- MAE(平均絶対誤差): 解釈しやすい。外れ値に頑健
- RMSE: 大きな誤差を強調。最適化向き
- MAPE(平均絶対パーセント誤差): 。売上予測など『%』で語る業界の標準。0 付近の値があると不安定
- SMAPE: 対称版 MAPE。0 付近にも頑健
- MASE: ナイーブ予測(前期同値)との相対誤差。スケール非依存で比較しやすい
ローリング(時系列)交差検証
過去データで学習 → 未来データで検証 を時間軸に沿って繰り返す。
例: 1〜100 で学習 → 101〜110 で評価 / 1〜110 で学習 → 111〜120 で評価 / ...
未来データを学習に使わない のがポイント。普通の k-fold CV は時系列では使えない。
予測区間と確率的予測
「来月の売上予測 100」より、「来月の売上予測 100、80% 区間 [85, 115]」 の方が実務には有用。在庫量や人員配置の意思決定が 不確実性を考慮できる ため。Prophet・ベイズ法・分位点回帰で出力可能。
次に学ぶこと
- [準1級 教科書 第 4 章 時系列](/textbook/grade-pre1) ─ 統計検定の標準理論
- [ブログ: 時系列予測 入門](/blog/time-series-forecasting-introduction)
- [プログラミング入門](/programming) ─ Pandas で時系列を扱う
- 深層学習: LSTM / Temporal Fusion Transformer / N-BEATS