algo-forecast-arima について
トレンドや季節性のある単変量時系列を扱う分析担当者向けの ARIMA 予測スキルです。定常性の検定、パラメーター選択、モデル適合、残差診断を経て、信頼区間付きの予測を作成します。
主な機能
- 01定常性の検定と対処
- 02ACF/PACFによるパラメーター選択
- 03ARIMAまたは季節性SARIMAの適合
- 04Ljung-Boxによる残差検定
- 05信頼区間付き予測の作成
活用シーン
- 01売上や需要の時系列予測
- 02トレンドのあるトラフィック予測
- 03単変量の季節データ分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-forecast-arimaインストール後、Claude Code で/algo-forecast-arimaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/sample_scenario.mdreferences/acf-pacf.mdseasonal-arima.md詳細
ARIMA 時系列モデル
概要
ARIMA(p,d,q) は、自己回帰(AR)、差分化(I)、移動平均(MA)を組み合わせて時系列を予測します。季節変動に対応したバリエーションは SARIMA(p,d,q)(P,D,Q,s) です。定常データが必要です(差分化によって定常性を実現します)。明確なトレンドや季節性のパターンがある単変量時系列に最適です。
使用する場面
使用条件:
- 単変量時系列(売上、需要、トラフィック)を予測する場合
- データに明確なトレンドや季節性のパターンがある場合
- 統計的特性を備えた解釈可能なモデルが必要な場合
使用しない場面:
- 多数の外部特徴量を用いた多変量予測の場合(ML モデルを使用してください)
- 非常に長期の予測の場合(ARIMA の信頼区間は急速に広がります)
- 不規則なデータやイベント駆動型のデータの場合(因果モデルを使用してください)
アルゴリズム
IRON LAW: ARIMA Requires STATIONARY Data
Non-stationary data (trend, changing variance) violates ARIMA assumptions.
Test stationarity with ADF test (p < 0.05 = stationary).
If non-stationary: difference the series (d=1 usually suffices).
If still non-stationary after d=2, ARIMA may not be appropriate.
フェーズ 1:入力の検証
確認項目:時間間隔が規則的であること、欠損値がないこと(必要に応じて補完)、観測数が最低 50 件あること(理想的には季節周期を 2 回以上含むこと)。ADF 検定で定常性を検定します。 ゲート: データの間隔が規則的で、十分な長さがあり、定常性が評価されていること。
フェーズ 2:コアアルゴリズム
- 定常性:ADF 検定を実施します。p > 0.05 の場合は差分化します(d=1)。その後、再検定します。
- パラメーターの選択:ACF/PACF プロットを確認します。または auto_arima(AIC に基づくグリッドサーチ)を使用します。
- p(AR 項):PACF の打ち切りラグ
- q(MA 項):ACF の打ち切りラグ
- d:必要な差分化の回数
- モデルの適合:最尤推定
- 予測:信頼区間付きの予測値を生成します
フェーズ 3:検証
残差を確認します。残差はホワイトノイズ(自己相関がない状態)である必要があります。Ljung-Box 検定を実施します(p > 0.05 = 自己相関なし)。残差が正規分布に従うことも確認します。 ゲート: 残差が Ljung-Box 検定に合格し、パターンが残っていないこと。
フェーズ 4:出力
信頼区間付きの予測値を返します。
出力形式
{
"forecasts": [{"period": "2025-04", "forecast": 1250, "lower_95": 1100, "upper_95": 1400}],
"model": {"order": [1,1,1], "seasonal_order": [1,1,1,12], "aic": 520.3},
"metadata": {"training_periods": 60, "forecast_horizon": 12}
}
例
入出力の例
入力: 上昇トレンドのある月次観測値 12 件:[10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32]
ステップ 1: 1 階差分 = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2](一定 → 定常、d=1 で十分)
ステップ 2: ドリフト μ=2 の ARIMA(0,1,0) ランダムウォークが、最も単純な適合モデルです。
予測値の例(ドリフト=2 の ARIMA(0,1,0)):
- 期間 13:32 + 2 = 34
- 期間 14:32 + 4 = 36
- 期間 15:32 + 6 = 38
確認:差分系列は一定(2)→ AR/MA 項は不要です。残差は厳密に 0 → 完全適合(簡略化した例)。実データでは、残差が Ljung-Box 検定に合格する必要があります(p > 0.05)。
エッジケース
| 入力 | 期待される結果 | 理由 |
|---|---|---|
| トレンドも季節性もない | ARIMA(p,0,q) | 差分化が不要 |
| 強いトレンドのみ | ARIMA(p,1,q) | 1 階差分で線形トレンドを除去 |
| 季節性が複数ある | ARIMA では対応が難しい場合があります | 代わりに Prophet または TBATS を検討してください |
注意点
- 過剰な差分化:d=1 で十分なのに d=2 にすると、不要なノイズが生じます。再度差分化する前に、1 階差分が定常であるかを確認してください。
- Auto-ARIMA は万能ではありません:AIC に基づく選択では、過剰適合したモデルが選ばれることがあります。自動選択の結果にかかわらず、必ず残差診断を行ってください。
- 信頼区間は急速に広がります:複数ステップ先の予測では、不確実性が蓄積します。季節周期 2~3 回を超える期間については、点予測を過信しないでください。
- カレンダー効果:営業日、祝日、うるう年は、月次・週次データに影響します。ARIMA はこれらを標準では扱いません。回帰変数を追加するか、Prophet を使用してください。
- 構造変化:ARIMA はデータ生成プロセスが安定していることを前提とします。COVID、市場ショック、政策変更はこの前提を崩します。
参考資料
- ACF/PACF の解釈ガイドについては、
references/acf-pacf.mdを参照してください - SARIMA の季節パラメーターの選択については、
references/seasonal-arima.mdを参照してください