統計ロードマップ
Time Series

時系列分析入門ミニ教科書

売上・株価・気温・サーバ負荷 ── ビジネスデータの多くが時系列です。本ミニ教科書は 定常性 → ACF/PACF → ARIMA → Prophet → 状態空間 → 評価 の順に 6 章で全体像を掴める構成。Python 実行可能なコード付き。

Chapter 1

時系列データの特徴

時系列データとは 時刻順に並んだ観測値の列。売上・株価・気温・サーバ負荷など、ビジネスの中核データの多くが時系列。普通の回帰と違い、順序・自己相関・季節性 を扱う必要があります。

時系列の 4 成分

  • トレンド(Trend): 長期的な増減傾向
  • 季節成分(Seasonality): 周期的なパターン(年・月・週・日内)
  • 周期成分(Cycle): 季節と違い周期長が一定でない波(景気循環など)
  • 残差(Residual / Irregular): トレンド・季節を除いた不規則な変動
原系列トレンド季節残差月(48 ヶ月)
図: 原系列 = トレンド + 季節 + 残差 に分解

定常性(Stationarity)

弱定常

期待値・分散・自己共分散 が時間に依存しない時系列を (弱)定常 と呼ぶ。

多くの時系列モデルは 定常性を前提 とする。トレンドや季節があると非定常 → 差分季節差分 を取って定常化する。

💡 なぜ定常性が必要か

ランダムウォーク(株価のような非定常)を、定常を前提とした AR モデルでそのまま当てると 見せかけの相関 が出て予測がデタラメになる。まず差分を取って定常化 してからモデル化するのが時系列分析の鉄則。

ADF 検定で定常性を確認
初回のみ Pyodide(~10MB)を CDN から読み込みます
Chapter 2

自己相関と ACF / PACF

時系列の最大の特徴は 過去の値と現在の値が相関している こと。これを定量化するのが 自己相関関数(ACF)偏自己相関関数(PACF)

自己相関関数(ACF)

ラグ だけ離れた観測値同士の相関。AR(1) モデルなら指数減衰、MA(q) モデルなら ラグ目で ストン と消える。

051015-0.200.51.0ラグ kACFAR(1), φ=0.7±2/√n(95% CI)
図: ACF: AR(1) は指数減衰、MA(q) は 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 最小のモデルを自動選択することも多い。

Chapter 3

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 を当てはめる
初回のみ Pyodide(~10MB)を CDN から読み込みます
💡 ARIMA の限界

ARIMA は線形・1 変量・短期予測に強い。長期予測 は単に平均値に収束する弱点があり、非線形パターン(指数増加・閾値効果)も苦手。これらは Prophet や状態空間モデル、最近では Transformer ベースの時系列モデル(Temporal Fusion Transformer 等)が補う。

Chapter 4

Prophet ─ ビジネス向け汎用ツール

Prophet は Meta が公開したオープンソース時系列予測ライブラリ。ARIMA より使いやすく、季節性・休日効果を自動で扱う ためビジネス分析で広く採用。

モデル構造

  • g(t): トレンド(線形 or ロジスティック)
  • s(t): 季節性(年・週・日次)
  • h(t): 休日効果(クリスマス・ブラックフライデーなど)
  • ε: 残差

Prophet の強み

  • 欠損値・外れ値に頑健(ベイズ的に推定)
  • 変化点(changepoint) を自動検出 → トレンドの折れ目を表現
  • ハイパーパラメータ調整が少ない(初心者でも使える)
  • 休日リスト(`holidays` パラメータ)で日本の祝日も簡単に扱える
  • 信頼区間 を自動で出力
Prophet で 30 日予測(疑似コード)
# 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)が向く: 多変量・大規模・長期依存・非線形パターン。

Chapter 5

状態空間モデルとカルマンフィルタ

状態空間モデル(State Space Model) は、観測値の背後に 隠れた状態 を仮定する柔軟なフレームワーク。ARIMA・指数平滑法・Prophet などの背景にある統一理論でもあります。

基本構造

  • 状態方程式: (状態の遷移)
  • 観測方程式: (状態から観測値へ)
  • は独立な正規ノイズ

カルマンフィルタ

逐次的に状態を推定するアルゴリズム

予測ステップ: 時刻 までの情報で時刻 の状態を予測

更新ステップ: 時刻 の観測値で予測を補正

これを繰り返すことで、雑音だらけの観測値から真の状態を抽出 できる。GPS のノイズ補正・ロボット制御・経済時系列・宇宙工学で広く使用。

局所水準モデル(最も簡単な状態空間モデル)

(レベルがランダムウォーク)、(観測誤差付きで観測)。 指数平滑法と等価で、ノイズの多いデータから滑らかなトレンド を抽出できる。

拡張・派生

  • 局所線形トレンドモデル: レベル + スロープ。長期予測に強い
  • 基本構造時系列モデル(BSM): レベル + スロープ + 季節 + 周期
  • 動的線形モデル(DLM): 係数が時間変化する回帰
  • 粒子フィルタ: 非線形・非ガウスに対応
🛠 Python ライブラリ

`statsmodels.tsa.statespace`: SARIMAX・UnobservedComponents・DynamicFactor 等。`pykalman`: シンプルなカルマンフィルタ。`tensorflow_probability.sts`: ベイズ推定で状態空間モデル。

Chapter 6

予測精度の評価とバックテスト

時系列予測の評価は 普通の機械学習と違う時間順を保った検証 が必須。

評価指標

  • MAE(平均絶対誤差): 解釈しやすい。外れ値に頑健
  • RMSE: 大きな誤差を強調。最適化向き
  • MAPE(平均絶対パーセント誤差): 売上予測など『%』で語る業界の標準。0 付近の値があると不安定
  • SMAPE: 対称版 MAPE。0 付近にも頑健
  • MASE: ナイーブ予測(前期同値)との相対誤差。スケール非依存で比較しやすい

ローリング(時系列)交差検証

Time Series Cross-Validation

過去データで学習 → 未来データで検証 を時間軸に沿って繰り返す。

例: 1〜100 で学習 → 101〜110 で評価 / 1〜110 で学習 → 111〜120 で評価 / ...

未来データを学習に使わない のがポイント。普通の k-fold CV は時系列では使えない。

TimeSeriesSplit でローリング CV
初回のみ Pyodide(~10MB)を CDN から読み込みます

予測区間と確率的予測

「来月の売上予測 100」より、「来月の売上予測 100、80% 区間 [85, 115]」 の方が実務には有用。在庫量や人員配置の意思決定が 不確実性を考慮できる ため。Prophet・ベイズ法・分位点回帰で出力可能。

次に学ぶこと

  • [準1級 教科書 第 4 章 時系列](/textbook/grade-pre1) ─ 統計検定の標準理論
  • [ブログ: 時系列予測 入門](/blog/time-series-forecasting-introduction)
  • [プログラミング入門](/programming) ─ Pandas で時系列を扱う
  • 深層学習: LSTM / Temporal Fusion Transformer / N-BEATS