時系列とは?意味と分析手法の使い分け|ARIMAからPython実装まで

時系列とは、株価・気温・売上のように時間の経過に沿って記録され、前後の値が影響し合うデータのことです。このデータから傾向や周期を読み取って将来を予測するのが時系列分析で、手法を選び間違えると予測は大きく外れます。ARIMAのような自己回帰系、季節性に強いSARIMAや指数平滑法、リアルタイム更新に向く状態空間モデル、非線形や長期依存を捉える深層学習まで、向くデータと前提が手法ごとに異なるためです。本記事では、時系列の意味と基礎の確認から、代表的な手法の使い分け、モデル選択と精度評価、Pythonでの前処理・実装までを、実務で判断できる粒度で整理します。

まとめ

結論から述べます。単変量で解釈性を求めるならARIMA、明確な季節周期があればSARIMAかProphet、軽量に短期運用したいなら指数平滑法、欠測やリアルタイム更新を伴うなら状態空間モデル、多変量で非線形・長期依存があればLSTMやTransformerが基本線です。モデル選択はAICやBICで複数候補を比較し、評価は時系列専用の検証(ウォークフォワード)とMAE・RMSE・MAPEで行います。前処理(欠損補完・リサンプリング・定常化)の質が精度を左右し、ここを飛ばすとどんな高度なモデルでも結果は安定しません。迷ったらまずARIMAかSARIMAを基準線に置き、そこから精度と説明責任の要件に応じて手法を上げ下げするのが安全です。

時系列分析の基礎|意味・定常性・構成要素

手法選定の前に、時系列という言葉の意味と、モデルが前提とする定常性・構成要素を押さえます。

時系列とは|意味と身近なデータ例、クロスセクションとの違い

時系列とは、株価・気温・売上・Webのアクセス数のように、一定の時間間隔で記録され、前後の値が相互に影響し合う(自己相関を持つ)データです。「じけいれつ」と読み、英語ではtime seriesと呼びます。SNSのタイムラインのように時間順に並ぶ点は共通しますが、時系列分析ではその並びに現れる傾向や周期を数値から読み取る点が異なります。同じ複数データでも、複数の対象を同一時点で横断的に観測したものはクロスセクションデータと呼び、時点をまたいだ変化を追う時系列とは扱いを分けます。日次の売上、月次の来店客数、秒単位のセンサー値などが典型例で、これらは前後の値が独立していないため、独立性を前提とする一般的な分析手法をそのまま当てはめられません。

定常性と単位根|モデルが前提とするデータ条件

定常性とは、平均・分散・自己共分散といった統計的性質が時間によって変わらない状態を指します。ARIMAをはじめ多くのモデルは定常性を前提とするため、トレンドや分散変化を持つ非定常データはそのまま当てはめると誤った結果を導きます。非定常かどうかはADF検定(単位根検定)で確認し、単位根が残る場合は差分を取って定常化します。差分の回数がARIMAのパラメータdに対応します。機械学習の前提を体系的に押さえたい場合は機械学習とは?初心者向けに基本概念と仕組みをわかりやすく解説も参照してください。

トレンド・季節性・不規則性の分解

時系列は、長期的な方向性であるトレンド、固定周期で繰り返す季節性、周期が一定でない循環性、予測困難な不規則変動(残差)に分解できます。変動幅が一定なら加法モデル、トレンドに比例して変動幅が広がるなら乗法モデルで分解します。先に季節性とトレンドを抽出して残差を切り分けることで、異常値の影響を抑えた分析が可能になります。循環性はトレンドと混同しやすく、固定周期を持たない点で季節性とは扱いを分けます。

代表的な時系列分析の手法と使い分け

手法は「データの前提」と「求める解釈性・計算コスト」で選びます。以下に主要6系統の前提と向き不向きを整理します。

手法 主な前提 向くデータ 計算コスト 解釈性
ARIMA 差分で定常化 単変量・中規模 低〜中
SARIMA 定常+季節周期 季節性のある単変量
指数平滑(Holt-Winters) トレンド・季節性 短期・軽量運用
状態空間・カルマン 逐次更新 欠測・リアルタイム
Prophet 加法的季節+祝日 強い季節性・業務系
LSTM・Transformer 大量データ 非線形・長期依存・多変量

実務ではまずARIMAかSARIMAを基準線として試し、それで精度が足りないときに限って深層学習へ進むのが定石です。解釈性を重視し、なぜその予測になったかを説明する必要がある業務では、ARIMA系や指数平滑法が第一候補になります。説明責任より当てることが最優先という場面で初めて、計算資源と専門知識を要するLSTMやTransformerを検討します。

ARIMA・SARIMA|自己回帰系の定番と季節調整

ARIMAはARIMA(p,d,q)の形で表され、pは自己回帰の項数、dは定常化のための差分回数、qは移動平均の項数を意味します。非定常データを差分で定常化してから当てはめられるため、実務での適用範囲が広いのが特長です。季節性が強いデータには、季節成分(P,D,Q,s)を加えたSARIMAを使います。sは季節周期で、月次データの年周期なら12を指定します。季節パターンを無視してARIMAを当てると周期変動を取りこぼし、誤差が膨らみます。

指数平滑法・状態空間モデル|軽量予測とリアルタイム更新

指数平滑法は、新しい観測値ほど大きな重みを与えて平均を取る手法で、計算負荷が低く短期予測やシステム組み込みに向きます。トレンドや季節性を含むホルト・ウィンターズ法まで拡張できますが、複雑な非線形構造には対応しきれません。状態空間モデルは観測できない潜在状態と観測値の関係を記述し、カルマンフィルターで状態を逐次更新します。欠測やノイズが多く、リアルタイムに予測を更新したい用途に適しています。

Prophet・深層学習(LSTM/Transformer)|季節性と長期依存

ProphetはMeta(旧Facebook)が公開する加法モデルベースの予測ライブラリで、トレンド・週次や年次の季節性・祝日効果を自動で組み込みます。PyPIとCRANで配布され、現在も維持されています。日付列dsと数値列yに整形するだけで予測でき、季節性の強い業務データで使いやすい一方、複雑な非線形依存には限界があります。LSTMは長期依存の学習に強く、Transformerは複数系列の同時予測や長期パターンで成果を上げています。深層学習は大量データと計算資源、専門知識を要するため、データ量が少ない案件では過剰です。LSTMの仕組みはLSTMとは何か?その基本概念と歴史を徹底解説で詳しく解説しています。

モデルの選び方と精度評価

候補を複数立て、情報量基準と時系列専用の検証で絞り込みます。単一指標やデータの並べ替えに頼った検証は、時系列では誤りを招きます。

AIC・BICと交差検証|過学習を避ける選定

AIC(赤池情報量基準)とBICは、予測精度とモデルの複雑さのバランスを測る指標で、値が小さいほど良いモデルとされます。AICは予測力を重視し、BICはモデルの簡潔さをより強く優先します。複数のp,d,q候補を比較する際の判断材料になります。検証では、通常のK分割交差検証は時間的依存を壊すため使えません。過去で学習し未来で検証するウォークフォワード法(時系列クロスバリデーション)を用い、移動平均などの単純なベンチマークと比較して実用性を確認します。

MAE・RMSE・MAPEの使い分け|誤差指標の読み方

MAE(平均絶対誤差)は外れ値の影響を受けにくく、RMSE(二乗平均平方根誤差)は大きな誤差を強く反映するため外れ値に敏感です。MAPE(平均絶対パーセント誤差)は割合で表すため業務での解釈はしやすい反面、実測値がゼロ付近だと分母が小さくなって指標が極端に膨らむため、ゼロ近傍を含むデータには不向きです。在庫の欠品など大外しを避けたいならRMSEを重視し、全体傾向を見るならMAEというように、目的に応じて指標を選びます。

データ前処理とPythonでの実装

時系列分析の精度は前処理で決まります。日付をインデックス化し、欠損日を明示してから補完し、粒度をそろえてリサンプリングし、必要に応じて定常化する。この順序を守ると、後段のモデル当てはめが安定します。以下はpandasで欠損補完・月次リサンプリング・トレンドと季節性の分解までを行う最小構成です(当環境のpython3.10/pandas2.3.3で実行確認済み)。

import numpy as np
import pandas as pd

# 日次の売上データ(欠損・不規則を含む想定)
# dates, values は各自の日付列・値列に置き換える
df = pd.DataFrame({"date": dates, "sales": values})
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")

# 1) 欠損日を明示してから線形補間で補完
df = df.asfreq("D")
df["sales"] = df["sales"].interpolate()

# 2) 月次へリサンプリングして粒度をそろえる
monthly = df["sales"].resample("MS").mean()

# 3) 12カ月の中心移動平均でトレンドを抽出
trend = monthly.rolling(window=12, center=True, min_periods=1).mean()

# 4) 加法モデルで季節成分と残差に分解
detrended = monthly - trend
seasonal = detrended.groupby(detrended.index.month).transform("mean")
resid = monthly - trend - seasonal
print(resid.std())   # 残差の散らばりで分解の妥当性を確認

ARIMAの当てはめにはstatsmodelsを使い、定常性確認はadfuller、モデル定義はstatsmodels.tsa.arima.modelのARIMAクラス(order=(p,d,q))が現行の入口です。Prophetはdsとy列に整形してfitとpredictで予測します。ライブラリのAPIはバージョンで変わるため、実装時はstatsmodelsとProphetの公式ドキュメントで最新の関数名を確認してください。需要予測で使うアルゴリズムの全体像はAI予測分析ツールで用いられる主なアルゴリズムと技術解説にまとめています。

業務での使いどころと手法選定の失敗パターン

時系列分析は、需要予測・在庫最適化・異常検知で費用対効果が出やすい領域です。一方で、手法選定と検証を誤ると現場で機能しません。使いどころと、避けるべきやり方を具体的に示します。

需要予測・在庫最適化・異常検知での使いどころ

小売やECでは、曜日・季節・イベントを織り込んだ需要予測で発注と在庫を最適化し、欠品と過剰在庫を同時に抑えられます。製造ラインのセンサーデータでは、正常パターンを学習して逸脱を検知し、故障の予兆を早期に捉える予知保全に使えます。金融ではボラティリティ推定によるリスク管理が代表例です。自社データでの予測モデル構築はAI予測分析ツールの開発支援でも対応しています。

やってはいけない検証と手法選定の失敗パターン

最も多い失敗は、時系列に通常のK分割交差検証を使うことです。未来のデータで過去を予測する形になり、本番では出ない高い精度が出てしまいます。次に多いのが、定常化せずARIMAを当てるケースで、トレンドを残したまま当てはめると予測が発散します。データ量が数百点しかないのにLSTMを持ち出すのも過剰で、ARIMAや指数平滑法のほうが安定します。災害やパンデミックのような過去に例のない外的要因は、どれだけ高度なモデルでも当てられません。予測は仮説として扱い、複数シナリオと再学習の体制を用意するのが現実的な備えです。

よくある質問

時系列とは何ですか、簡単に教えてください

時系列とは、時間の経過に沿って一定間隔で記録され、前後の値が影響し合うデータを指し、「じけいれつ」と読みます。売上やアクセス数のように前後がつながって動く点が普通のデータと異なり、その並びに現れる傾向や周期を読み取って将来を予測するのが時系列分析です。

時系列分析と回帰分析は何が違いますか?

最大の違いは時間的依存性です。回帰分析は各データ点を独立として扱いますが、時系列ではある時点の値が直前の値に強く影響されるため、自己相関を考慮したモデルが必要です。トレンドや季節性といった時間軸特有のパターンを前処理で分解する点も異なります。

定常性とは何ですか、なぜ必要ですか?

定常性とは、平均・分散・自己共分散が時間で変わらない性質です。ARIMAなど多くのモデルがこれを前提とするため、非定常データをそのまま使うと誤った予測になります。ADF検定で確認し、単位根が残れば差分を取って定常化します。

ARIMAモデルとは何ですか?

自己回帰(AR)、差分による和分(I)、移動平均(MA)を組み合わせた予測モデルで、ARIMA(p,d,q)と表します。pは過去の値との関係、dは定常化の差分回数、qは過去の誤差を取り込む項数です。季節性を含む場合はSARIMAに拡張します。

時系列分析の手法はどう選べばよいですか?

まずARIMAかSARIMAを基準線として試し、それでも精度が足りないときだけ深層学習へ進むのが基本の順序です。季節性が強ければSARIMAやProphet、軽量な短期運用なら指数平滑法、欠測やリアルタイム更新なら状態空間モデルを選びます。最終判断はAIC・BICの比較とウォークフォワード検証で行います。手法ごとの前提の一覧は本文「代表的な時系列分析の手法と使い分け」を参照してください。

関連記事

資料請求

RELATED POSTS 関連記事