論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
定常性
Stationarity
時系列の統計的性質(平均・分散・自己共分散)が時間によらず一定であること。
ARIMA や予測モデルが成立する前提条件であり、 時系列分析の出発点。
時系列分析 弱定常 / 強定常 ADF 検定 単位根

🔖 キーワード索引

30秒結論 直感 弱定常 / 強定常 トレンドと差分 単位根 SSDSE 実演 ADF 検定 Python 実装 落とし穴 関連用語

stationarity」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「stationarity」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

定常性時系列弱定常強定常単位根検定ADF 検定差分ARIMAトレンド除去

これらのキーワードは「stationarity の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30 秒で分かる結論

🍰 まずはやさしく

データの顔つきが変わらないことです。

正しい分析をするために使います。

毎日振るサイコロの結果のような状態です。

定常性の結論を短くまとめます。

💡 30秒で分かる結論

📍 あなたが今見ているもの

🍰 まずはやさしく

分析のスタート地点となる考え方です。

データの罠にハマらないために使います。

株価のように右肩上がりのデータが例です。

分析でどう使われるかを確認します。

時系列分析の論文や教科書で、 こんな表現を見たはずです:

原系列は非定常(ADF 検定: p = 0.421)であったため、
1 階差分を取ったところ定常性が確認された(ADF 検定: p < 0.001)。
定常化した差分系列に対して ARMA(2,1) モデルをあてはめた」

この「定常性」が時系列分析の出発点。 株価・GDP・物価指数のようなトレンド・季節性・変化点を持つ系列は非定常で、 そのまま分析すると「見せかけの回帰(spurious regression)」などの罠に陥ります。 ARIMA や VAR、 状態空間モデルの理論的基盤として、 まず定常性を理解することが必須です。

📍 あなたが今見ているもの(文脈ボックス)

このページは 定常性 (Stationarity) を解説する用語ページです。
カテゴリ:時系列分析
ジャストインタイム型データサイエンス教育の一環として、必要な時に参照し、関連概念とともに学べる構成になっています。
基準ページ:correlation.html(149KB、12セクション、SSDSE-B 実値計算)と同等以上の品質を目指しています。

🎨 直感で掴む — 「時間が経っても同じ顔つき」

🍰 まずはやさしく

時間をずらしても同じに見えることです。

データの性質を直感的に掴むために使います。

気温の季節的な変化は定常ではありません。

見た目でどう見分けるかを学びます。

定常な系列 vs 非定常な系列

「定常」とは、 系列を時間軸でずらしても 「統計的に同じデータ」に見える こと。 具体例で:

系列の例定常 / 非定常理由
サイコロを毎日振った結果定常平均 3.5、 分散一定、 時間によらず同じ
白色雑音(ノイズ)定常平均 0、 分散 $\sigma^2$、 自己相関 0
日本の GDP(過去 70 年)非定常右肩上がりのトレンド/戦後成長/バブル等
日経平均株価(過去 30 年)非定常トレンド・ボラティリティ変動
気温の日次データ非定常(季節性)夏は高く、 冬は低い周期パターン
気温データから季節成分を除いた残差準定常平均は一定、 分散はほぼ一定
株価の日次収益率(log return)準定常差分を取ったので、 トレンドが除去される

視覚的判定法

  1. 系列プロット:横軸時間、 縦軸値。 「上昇/下降トレンド」「水準シフト」があれば非定常を疑う
  2. 分割平均・分割分散:系列を前半・後半に分けて平均・分散を計算。 大きく違えば非定常
  3. 自己相関関数(ACF):定常系列なら ACF はゆっくり 0 に減衰。 非定常では長く高い値が続く

時間軸ずらしの直感

定常系列を「時刻 100 を中心とした 50 個」と「時刻 200 を中心とした 50 個」に分けたとき、 ヒストグラムを描くとほぼ同じ形。 非定常系列ではこれが全く違う形になります。

🎨 直感で掴む

時系列の平均・分散・自己共分散が時刻によらず一定であるという仮定。多くの時系列モデル(AR、 ARMA、 ARIMA)は弱定常性を前提に成立する。トレンドや周期成分を持つ生時系列は通常非定常。

場面使い方
探索的データ分析分布や関係性の最初の確認
モデル比較仮定の妥当性を裏付ける指標として
レポート作成標準的な要約統計量・指標として明記

🎨 もう一歩踏み込む直感

「定常性」を本当に使いこなすには、 教科書的な定義だけでは足りません。 ここでは現場で役立つ追加の比喩・実例を整理します。 上の「🎨 直感で掴む」を補強する内容です。

💡 学習のコツ:3 つの直感がそれぞれ独立した「引き出し」になります。 場面に応じて、 一番フィットする比喩を取り出せるように、 例を 1-2 個自分の言葉で言い換えてみると定着します。

🎨 概念図で押さえる

弱定常性は「平均・分散・自己共分散が時刻に依存しない」状態。 ここでは概念図で「定常・非定常・差分定常」の違いを視覚化する。

定常時系列と非定常時系列の比較概念図
図 A. 左:弱定常過程は赤の点線(平均レベル)周りで振動する。 右:非定常過程はトレンドを伴って平均が時間と共に上昇する。
自己相関関数 ACF の減衰パターン概念図
図 B. ACF(自己相関関数)の減衰速度から定常・非定常を見抜く。 急速減衰は定常の証拠。 ゆっくり減衰なら単位根を疑う。
差分による定常化の概念図
図 C. 1 階差分で非定常 I(1) を定常 I(0) に変換する流れ。 SSDSE-B-2026 の実測では全国死亡数(A4200 合計)がこの典型例(レベル p = 0.991 → 差分後 p = 0.0017)。 県別人口は減少の加速により差分でも定常化しにくい。

🎮 触って理解する

スライダーで時系列にトレンド成分・分散変化・季節成分を加え、 平均や分散が時間とともにどう崩れるかを体感しましょう。 白色雑音は固定シードで生成しているので、 スライダーを 0 に戻せば必ず同じ定常系列に戻ります。 「差分をとる」ボタンでトレンドが除去され、 非定常が定常化する様子も確認できます(1 階差分 $\Delta X_t = X_t - X_{t-1}$)。

0
0
0
図の上をドラッグ/マウスオーバーすると各時点の値を表示
区間平均 (mean)分散 (var)
前半(時刻 前 50%)
後半(時刻 後 50%)
差(後半 − 前半)
判定の目安:定常(平均・分散が時間で不変)
※ 前半・後半の平均差と分散比による簡易目安です。 正式には ADF 検定などを使います(下記 Python 実装を参照)。

💡 直感 — 「統計的性質が時間で変わらない」

定常とは、 系列を時間軸のどこで切り取っても平均・分散・自己共分散が同じに見えること。 上の図でトレンドを 0、 分散変化を 0、 季節成分を 0 にすると、 前半と後半の平均・分散がほぼ一致し、 帯(移動平均・移動分散)も水平に伸びます。 逆にトレンドを上げると後半の平均だけが持ち上がり、 分散変化を上げると後半の帯だけが広がります —— これが非定常の正体です。

⚠️ よくある落とし穴 — 「見せかけの回帰」

トレンドを持つ 2 本の非定常系列は、 中身が無関係でも強い相関・高い $R^2$ を示してしまいます(spurious regression、 Granger & Newbold 1974)。 上の図で「差分をとる」を押すとトレンドが消え、 前半・後半の平均差が一気に縮むことを確認してください。 回帰の前に定常化(差分化)する——これが鉄則です。 なお分散変化(不均一分散)は差分だけでは消えないため、 対数変換や GARCH 系のモデルが必要になる点も図で体感できます。

🚀 発展 — 単位根検定・和分・ARIMA

「差分をとれば定常になる」系列は和分過程と呼ばれ、 $d$ 回の差分で定常化するなら $I(d)$ と書きます(レベルが非定常・1 階差分で定常なら $I(1)$)。 非定常かどうかは単位根検定(ADF・KPSS・Phillips-Perron)で判定し、 定常系列に対して自己回帰・移動平均を当てはめるのが arima.html(ARIMA$(p,d,q)$)です。 差分次数 $d$ は「何回差分すれば定常になるか」に対応します。 関連して time-series.htmlautocorrelation.html も参照してください。 見せかけの回帰の一般論は regression-analysis.html にまとめてあります。

📐 数式 — 定常性の定義

🍰 まずはやさしく

定常性を数式で決めたルールです。

厳密に判定するために使います。

平均や分散(データの散らばり)で考えます。

2 種類の定義について詳しく読みます。

強定常(厳密定常、 Strictly Stationary)

【強定常の定義】
$$\text{任意の } k, t_1, \dots, t_k, h \text{ に対し}$$
$$F(y_{t_1}, y_{t_2}, \dots, y_{t_k}) = F(y_{t_1+h}, y_{t_2+h}, \dots, y_{t_k+h})$$
「結合分布関数 $F$ が時間平行移動で不変」。 全ての統計量が時間に依存しない。

弱定常(共分散定常、 Weakly / Covariance Stationary)

【弱定常の定義(3 条件)】
$$\text{(i) } E[y_t] = \mu \quad \text{(時間によらず一定)}$$
$$\text{(ii) } \mathrm{Var}[y_t] = \sigma^2 < \infty \quad \text{(分散が有限で一定)}$$
$$\text{(iii) } \mathrm{Cov}[y_t, y_{t+h}] = \gamma(h) \quad \text{(自己共分散は時差 h のみに依存)}$$
「平均」「分散」「自己共分散」の 3 つだけを規定。 強定常より弱い条件。

強定常 ⊃ 弱定常 …とは限らない

普通は強定常 ⇒ 弱定常 だが、 厳密には:

単位根と非定常

AR(1) モデル $y_t = \phi y_{t-1} + \varepsilon_t$ について:

トレンドと差分

非定常系列 $y_t$ から定常系列を抽出する典型手法:

【1 階差分】
$$\Delta y_t = y_t - y_{t-1}$$
「前期との差」。 線形トレンドを 1 階差分で除去できる。
【2 階差分】
$$\Delta^2 y_t = \Delta(\Delta y_t) = y_t - 2y_{t-1} + y_{t-2}$$
2 次トレンドを除去。 ARIMA(p, 2, q) で使う。
【季節差分】
$$\Delta_s y_t = y_t - y_{t-s}$$
$s$:季節周期(月次なら 12、 四半期なら 4)。 季節性を除去する。

拡張 Dickey-Fuller 検定(ADF)

「単位根が存在する(非定常)」を帰無仮説とする検定:

【ADF 検定の回帰式】
$$\Delta y_t = \alpha + \beta t + \rho y_{t-1} + \sum_{i=1}^{p} \delta_i \Delta y_{t-i} + \varepsilon_t$$
$\rho = 0$ なら単位根、 $\rho < 0$ なら定常。 検定統計量 $\hat{\rho}/\mathrm{SE}$ で $H_0: \rho = 0$ を検定。

$p < 0.05$ なら「単位根なし」=「定常」と結論。

📐 数式または定義

定常性 (Stationarity) の中心となる数式・定義は次の通りです。

$$ E[X_t]=\mu, \quad \mathrm{Var}(X_t)=\sigma^2, \quad \mathrm{Cov}(X_t, X_{t+h})=\gamma(h) $$

📐 もう一段の数式表現

「定常性」を厳密に書き下すと、 以下の形になります。 既出の数式と合わせて読むと、 概念の骨格が見えてきます。

【定常性・追加表現】
$$ E[X_t] = \mu,\quad \mathrm{Var}(X_t) = \sigma^2,\quad \mathrm{Cov}(X_t, X_{t+k}) = \gamma(k) \quad (\text{すべての } t) $$
弱定常の 3 条件。 平均・分散・自己共分散がすべて時刻 t に依存しない。 時間差 k のみに依存。
📌 ポイント:数式を見たら各記号の単位・値域を声に出して確認してみると、 抽象度がぐっと下がります。 「変数 X は連続値、 0 以上、 単位は人」のように。

🔬 数式を「言葉」で読み解く

$y_t$
時刻 $t$ における時系列の値(例:2024 年第 1 四半期の GDP)
$E[y_t] = \mu$
「時刻 $t$ の期待値」が時間によらず同じ $\mu$。 つまり「いつ見ても平均は同じ」
$\mathrm{Var}[y_t] = \sigma^2$
分散も時間によらず同じ。 「いつ見ても散らばり具合が同じ」
$\mathrm{Cov}[y_t, y_{t+h}] = \gamma(h)$
「時刻 $t$ と $t+h$」の関係性が、 $t$ ではなく 時差 $h$ だけ で決まる。「1 期離れた関係性は、 いつ見ても同じ」
$\Delta y_t = y_t - y_{t-1}$
「前期との差」。 階段状に増える数列でも、 差を取れば「階段の段の高さ」だけが残り、 一定値になる。
$\rho$ in ADF
ラグ 1 の係数。 0 なら「単位根がある(非定常)」、 負なら「過去の値が減衰する(定常)」。
$\sum_i \delta_i \Delta y_{t-i}$
「Augmented」の部分。 高次の自己相関を制御するラグ項。

🔬 数式を言葉で読み解く

🔬 数式を言葉で読み解く(拡張版)

追加の数式についても、 各記号を 1 つずつ「日本語」で言い換えます。 「数式を音読する」とは、 こういう作業のことです。

左辺
本用語が「何を定義しようとしているのか」を端的に表す。 ここを最初に押さえる。
右辺の主要項
左辺を成立させるための構成要素。 各項の符号・順序・係数に意味がある。
下付き・上付き添字
時刻・サンプル番号・次元など、 「どの集合の上で操作するか」を示す重要情報。 見落とすと意味が反転することも。
演算子(Σ, ∫, ∏ など)
すべての要素を集約する」操作。 範囲(i=1..n など)を必ず一緒に読む。

🔬 数式を言葉で読み解く(深掘り 800 字版)

弱定常性の定義 $E[X_t] = \mu,\ V[X_t] = \sigma^2,\ \mathrm{Cov}(X_t, X_{t+h}) = \gamma(h)$ を、 一語ずつほどいて読みます。 $E[X_t] = \mu$:時点 $t$ がどこであっても、 期待値(平均)は同じ定数 $\mu$ という条件。 これは「時間が経っても確率変数の真の中心は動かない」という強い宣言です。 SSDSE-B-2026 の全国出生数(A4101 の 47 都道府県合計)は 2012 年度の約 103.7 万人から 2023 年度の約 72.7 万人へ減少していますので、 この式に当てはめると左辺の平均は時点 $t$ で異なります。 したがってレベルでは非定常です。 $V[X_t] = \sigma^2$:分散も時点に依存しないという条件。 もし株価のように「平穏な時期」と「ボラティリティの高い時期」が交互に来るなら、 この式は破れます(ARCH/GARCH モデルが扱う対象)。 $\mathrm{Cov}(X_t, X_{t+h}) = \gamma(h)$:時間差 $h$ だけに依存し、 絶対時刻 $t$ には依存しない自己共分散構造。 言い換えると「明日と今日の関係性は、 100 年前の明日と今日の関係性と同じ」と仮定します。 この自己共分散関数 $\gamma(h)$ を $\gamma(0)$ で割れば自己相関関数 $\rho(h)$ になります。 弱定常性が成立すると、 Wold の分解定理によって「任意の弱定常過程は決定論的成分と MA(∞) 成分の和に書ける」と保証されます。 これが ARMA モデルの土台。 さらに強定常性(同時分布が時間シフトで不変)は弱定常より強い条件で、 正規時系列なら一致しますが、 非正規の場合は一致しません。 実務では「弱定常で十分」と割り切るのが一般的です。 なお SSDSE-B-2026 に GDP や県内総生産の列は存在しません。 SSDSE-B-2026 の実在列、 例えば全国死亡数(A4200 合計)の 1 階差分を扱う場合、 ADF 検定で p < 0.05(実測 p = 0.0017)となれば弱定常と判定し、 ARMA や VAR を当てはめる流れになります。

🎯 用語固有 narration ブロック — 定常性 × SSDSE-B-2026

🎯 ねらい:定常性は ARIMA のような時系列モデルの大前提。 SSDSE-B-2026 の県別人口時系列でレベル非定常 → 1 階差分定常へ移ることで、 予測モデルが安全に動く土台を作ります。

📥 入力:47 都道府県 × 12 年度(2012-2023)の年次総人口データ、 形状 (47, 12) の DataFrame。 SSDSE-B-2026 の A1101 列を pivot した形を想定します。

📤 出力:各県の ADF 統計量・p 値・1 階差分後の p 値・定常判定(True/False)が並ぶ DataFrame。 さらに地図上で「定常 vs 非定常」県を色分け表示。

💬 解釈:実測(各県 12 時点、 maxlag=1)では、 レベルの ADF で単位根を棄却できない県が 47 県中 44 県(p > 0.10)と大半が非定常。 2012-2023 は人口減少が加速した期間のため、 1 階差分後も 5% で定常と判定されるのは 2 県(山梨・熊本)にとどまります。 短い系列では「差分すれば必ず定常化する」とは限らない、 という実例です。

🧮 実データで計算してみる — SSDSE-B-2026 年次データ

SSDSE-B-2026 は 2012〜2023 年度の 12 年 × 47 都道府県のパネルデータで、 実在列(A1101 総人口、 A4101 出生数、 A4200 死亡数など)から年次時系列が取れます。 ここでは「日本全国の総人口(A1101 の 47 都道府県合計、 2012〜2023 年度)」を題材にします。 以下の数値はすべて実 CSV から計算した実測値です。

ステップ 1:原系列のプロット観察

全国総人口(A1101 合計)は 2012 年度の 12,758.9 万人から 2023 年度の 12,435.3 万人へと一貫して減少。 これは明らかに非定常(時間とともに平均が変わる)。

ステップ 2:基本統計の分割比較

期間平均人口(万人)標準偏差(万人)
2012〜201712,721.724.9
2018〜202312,570.894.3

前半と後半で平均が約 151 万人違い、 標準偏差も約 4 倍に拡大。 平均・分散とも時間とともに変わっており、 非定常と判断できる。

ステップ 3:差分系列で定常化を試みる

STEP 1 1 階差分を取る
$\Delta y_t = y_t - y_{t-1}$(前年度差、 実測値)
・2013:$\Delta = -17.5$ 万人
・2016:$\Delta = -5.1$ 万人
・2020:$\Delta = -40.9$ 万人
・2021:$\Delta = -64.6$ 万人
・2023:$\Delta = -59.3$ 万人
差分系列は水準トレンドを除去するが、 減少幅そのものが年々拡大している(減少の加速)→ 完全に定常ではない

ステップ 4:ADF 検定の実測結果

STEP 2 原系列と差分系列の ADF 検定(maxlag=1, autolag='AIC')
・原系列 $y_t$(全国総人口):ADF 統計量 = 4.99、 $p = 1.000$ → 非定常(H₀ 棄却できず)
・1 階差分 $\Delta y_t$:ADF 統計量 = −0.21、 $p = 0.937$ → まだ非定常(減少が加速しているため)
2012-2023 の総人口は単純な I(1) ではない。 一方、 同じ CSV の全国死亡数(A4200 合計)はレベルで $p = 0.991$、 1 階差分で ADF 統計量 = −3.95、 $p = 0.0017$ となり、 I(1)(1 階差分で定常化)の実例になる。

都道府県横断データでの「定常性類似概念」

SSDSE-B-2026 を単年度(例:2023 年度の 47 都道府県)で切り出すとクロスセクションになり、 時間軸はありません。 その場合の「定常性類似」の概念として:

これらは時系列の定常性と数学的に同型の概念です。

🧮 実値で計算してみる(SSDSE-B-2026)

独立行政法人統計センターが公開する SSDSE-B-2026.csv(2012〜2023 年度 × 47 都道府県)を用いた具体的計算例を示します。

SSDSE-B-2026 の各年度の「総人口」(A1101 の全国合計)を時系列とみなすと、明らかな下降トレンドがあり ADF 検定の p 値 = 1.000 > 0.05 で非定常(実測)。1 階差分でも p 値 = 0.937 と定常化しない(減少の加速)。一方、全国死亡数(A4200 合計)は 1 階差分で p 値 = 0.0017 となり定常化する(差分定常 I(1) 過程の実例)。

項目値・指標
データ件数12 年度 × 47 都道府県 = 564 行
対象指標総人口 A1101・出生数 A4101・死亡数 A4200 など
計算結果上記説明参照(すべて実 CSV から算出)

🧮 SSDSE-B-2026 で追加実値計算

『教育用標準データセット SSDSE-B-2026』(47 都道府県、 約 100 変数)を題材に、 「定常性」を実際の数値で確認します。 数式が「動く感覚」を得ることが目的です。

対象 計算結果
SSDSE-B-2026 / 全国出生数(A4101 合計、 2012-2023)のラグ 1 自己相関ρ₁ = 0.754(実測、 高い慣性)
出生数の差分系列 ΔY_t = Y_t − Y_{t−1} の平均−2.8 万人/年(実測。 0 でない=下降ドリフトあり)
全国死亡数(A4200 合計)の 1 階差分の ADF 検定 p 値p = 0.0017 < 0.05 で帰無仮説『単位根あり=非定常』を棄却(実測)
📚 補足:上の値は SSDSE-B-2026 をローカルに読み込んで再現できます。 引数のパスやファイル名は環境に合わせて変更してください。 同じ概念を異なるデータ(例:金融時系列、 売上データ)に当てはめると、 用語の普遍性が体感できます。

🧮 数式に値を入れて手で計算する: 定常性の判定

合成時系列の前半/後半平均と分散を比較する。

Step 1: 2 期間統計

期間平均分散
前半10.21.5
後半10.51.6

Step 2: 判定

平均差 = 0.3, 分散差 = 0.1 → 小 → 定常と判断 非定常時系列は差分化必要

🐍 Python で再現

1
2
3
4
5
import numpy as np
m_diff = abs(10.5 - 10.2)
v_diff = abs(1.6 - 1.5)
print(f"平均差: {m_diff:.1f}, 分散差: {v_diff:.1f}")
print(f"定常: {m_diff < 1 and v_diff < 1}")

📤 実行結果

平均差: 0.3, 分散差: 0.1 定常: True

💬 手計算 (Step 2) 定常と Python 出力が完全一致。

🐍 Python 実装 — statsmodels の ADF 検定

1. 基本:ADF 検定の実行

🎯 このコードでやること: SSDSE-B-2026 で時系列 (全国総人口の年次推移) を作り、 ADF 単位根検定で定常性を判定

📥 入力例 (SSDSE-B-2026): 全国総人口 = A1101 の 47 都道府県合計 (2012-2023 年度, 年次) y = 時系列 (長さ 12)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller

# SSDSE-B-2026 を読込(先頭列 'SSDSE-B-2026' が年度)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
# 全国合計の年次時系列を作成(例:総人口 A1101)
y = df.groupby('SSDSE-B-2026')['A1101'].sum().sort_index().values

# ADF 検定(n=12 と短いので maxlag は小さく)
result = adfuller(y, maxlag=1, autolag='AIC')
print(f"ADF Statistic: {result[0]:.4f}")
print(f"p-value      : {result[1]:.4f}")
print(f"Lags used    : {result[2]}")
print(f"Critical values:")
for key, val in result[4].items():
    print(f"  {key}: {val:.4f}")

# 判定
if result[1] < 0.05:
    print("→ 定常(H₀ を棄却)")
else:
    print("→ 非定常(H₀ を棄却できず)")
📤 実行結果 (実測): ADF 統計量 = 4.9882, p-value = 1.0000 臨界値: 1% = -4.223, 5% = -3.189, 10% = -2.730 → p > 0.05 で帰無仮説『単位根あり = 非定常』棄却できず → 原系列 y (全国総人口) は非定常

💬 読み方: ADF 検定は帰無『単位根あり (非定常)』。 p > 0.05 で棄却できない → 非定常と判定 → 差分が必要。 ARIMA や VAR の前に必ず実施する『前提チェック』。

2. 差分を取って再検定

🎯 このコードでやること: 1 階差分 (Δy = y_t - y_{t-1}) を取って再び ADF 検定し、 定常になったか確認

📥 入力例 (SSDSE-B-2026): y_diff = np.diff(y) (長さ 11)
1
2
3
4
5
6
7
# 1 階差分
y_diff = np.diff(y)

result_diff = adfuller(y_diff, maxlag=1, autolag='AIC')
print(f"After 1st difference:")
print(f"ADF Statistic: {result_diff[0]:.4f}")
print(f"p-value      : {result_diff[1]:.4f}")
📤 実行結果 (実測): 総人口 A1101 の 1 階差分: ADF 統計量 = -0.2147, p-value = 0.9367 → p > 0.05 で棄却できず → 差分後も非定常 (減少が加速しているため) 参考: 全国死亡数 A4200 の 1 階差分: ADF 統計量 = -3.9529, p-value = 0.0017 → p < 0.01 で帰無棄却 → こちらは差分で定常化 (I(1))

💬 読み方: 1 階差分で定常化すれば I(1) (1 階和分過程)、 2 階差分なら I(2)。 多くの経済時系列は I(1) で、 ARIMA(p,1,q) の d=1 として扱う。 ただし実測の総人口のように減少が加速する系列では 1 階差分でも定常化しないことがある。 差分しすぎは情報損失なので最小限に。

3. KPSS 検定(補完的検定)

ADF と逆の帰無仮説:「定常である」が H₀。 ADF と組み合わせて判定するのが標準。

🎯 このコードでやること: KPSS 検定で『帰無仮説=定常』として ADF と二重チェック

📥 入力例 (SSDSE-B-2026): y = 全国総人口 (A1101 合計, 長さ 12)
1
2
3
4
5
6
from statsmodels.tsa.stattools import kpss

kpss_stat, kpss_p, lags, crit = kpss(y, regression='c', nlags='auto')
print(f"KPSS Statistic: {kpss_stat:.4f}")
print(f"p-value       : {kpss_p:.4f}")
# 判定:p < 0.05 なら H₀ 棄却=非定常
📤 実行結果 (実測): 総人口 A1101: KPSS 統計量 = 0.6321, p-value = 0.0197 → p < 0.05 で帰無『定常』棄却 → 非定常 (ADF と一致) 総人口の 1 階差分: KPSS 統計量 = 0.5004, p = 0.0416 → 差分後もなお非定常 参考: 死亡数 A4200 の 1 階差分: KPSS 統計量 = 0.2696, p > 0.10 → 定常

💬 読み方: ADF と KPSS は帰無仮説が逆。 両方の検定で『非定常』が一致すると確信が高い。 一方が定常で他方が非定常なら、 トレンド項や定数項の指定を見直す。 ロバスト性のため両検定併用が定石。

4. ACF と PACF の可視化

🎯 このコードでやること: ACF・PACF プロットを描いて自己相関の構造を可視化し AR/MA 次数を推定

📥 入力例 (SSDSE-B-2026): y = 全国総人口 (長さ 12), y_diff = 1 階差分後の系列 (長さ 11)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

fig, axes = plt.subplots(2, 2, figsize=(14, 8))

# 原系列(n=12 なので lags は小さく)
plot_acf(y, lags=4, ax=axes[0, 0], title='ACF (original)')
plot_pacf(y, lags=4, ax=axes[0, 1], title='PACF (original)')

# 差分系列
plot_acf(y_diff, lags=4, ax=axes[1, 0], title='ACF (diff)')
plot_pacf(y_diff, lags=4, ax=axes[1, 1], title='PACF (diff)')

plt.tight_layout(); plt.show()
# 非定常系列の ACF はゆっくり減衰、 定常化したら速やかに 0 に
📤 実行結果 (実測): 原系列 ACF: lag1 = 0.692, lag2 = 0.410, lag3 = 0.169 (ゆっくり減衰 → 非定常の兆候) 差分系列 ACF: lag1 = 0.744 (差分後も高い自己相関が残る) → 差分系列にも構造が残る = 総人口は単純な I(1) でない、 という ADF の結果と整合

💬 読み方: ACF (自己相関) で MA 次数、 PACF (偏自己相関) で AR 次数を判断するのが Box-Jenkins 法の基本。 ACF が急減し PACF が lag k でストンと落ちれば AR(k)。 逆なら MA。

5. ローリング平均・分散の可視化

🎯 このコードでやること: ADF・KPSS・Ljung-Box (残差ホワイトノイズ) の 3 検定をまとめて実行する自前関数

📥 入力例 (SSDSE-B-2026): y_series = pd.Series(y) # 全国総人口 (長さ 12)
y_series = pd.Series(y)
roll_mean = y_series.rolling(window=5).mean()
roll_std = y_series.rolling(window=5).std()

plt.figure(figsize=(10, 5))
plt.plot(y_series, label='Original')
plt.plot(roll_mean, label='Rolling mean', color='red')
plt.plot(roll_std, label='Rolling std', color='black')
plt.legend(); plt.title('Visual stationarity check')
plt.show()
# 定常なら rolling mean と rolling std は時間によらずほぼ水平
📤 実行結果 (実測、 全国死亡数 A4200 の 1 階差分に適用): ADF: stat=-3.9529, p=0.0017 → 定常 KPSS: stat= 0.2696, p>0.10 → 定常 Ljung-Box: Q(2)=1.457, p=0.483 → 自己相関なし (ホワイトノイズ的) → 3 検定すべて合格、 モデル適合 OK

💬 読み方: Ljung-Box は『残差に自己相関が残っていないか』のチェック。 残差がホワイトノイズになっていれば、 モデルが時系列の構造を完全に取り尽くしている (定常モデルとして適切)。

6. AIC で ARIMA 次数を選ぶ

🎯 このコードでやること: statsmodels の ARIMA で複数の次数 (p, d, q) をあてはめ、 AIC 最小のモデルを選ぶ(pmdarima.auto_arima の手動版)

📥 入力例 (SSDSE-B-2026): y = 全国死亡数 (A4200 の 47 都道府県合計, 2012-2023, 長さ 12) 探索範囲: (p, q) ∈ {0, 1}, d = 1 (ADF/KPSS の結果から)
1
2
3
4
5
6
7
from statsmodels.tsa.arima.model import ARIMA

y = df.groupby('SSDSE-B-2026')['A4200'].sum().sort_index().values.astype(float)
for order in [(0,1,0), (1,1,0), (0,1,1), (1,1,1)]:
    model = ARIMA(y, order=order).fit()
    print(f"ARIMA{order} AIC={model.aic:.1f}")
# 差分次数 d は ADF/KPSS で決め、 p, q を AIC で比較する
📤 実行結果 (実測): ARIMA(0, 1, 0) AIC=269.8 ← best ARIMA(1, 1, 0) AIC=271.6 ARIMA(0, 1, 1) AIC=271.7 ARIMA(1, 1, 1) AIC=273.7 → d=1 (1 階差分で定常)、 n=12 と短いためドリフト付きランダムウォークが最良

💬 読み方: 差分次数 d は ADF/KPSS の結果から、 p, q は AIC で選ぶ。 サンプルが短いと複雑なモデルは AIC で不利になり、 単純なモデルが選ばれやすい。 最終的に残差診断と PACF/ACF で確認する。 大規模データでは pmdarima.auto_arima による自動探索も便利。

🐍 Python 実装

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller, kpss

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
# 年度 (先頭列 'SSDSE-B-2026') ごとに全国合計して時系列化 (2012-2023, 長さ 12)
ts = df.groupby('SSDSE-B-2026')['A1101'].sum().sort_index().values

print('ADF統計量:', adfuller(ts, maxlag=1)[0], 'p:', adfuller(ts, maxlag=1)[1])
print('KPSS統計量:', kpss(ts, regression='c', nlags='auto')[0])

ts_diff = np.diff(ts)
print('差分後 ADF p:', adfuller(ts_diff, maxlag=1)[1])
# 実行結果 (実測): ADF統計量 4.9882, p 1.0000 / KPSS統計量 0.6321
# 差分後 ADF p: 0.9367 (総人口は差分でも定常化しない)
📤 実行例(実測) ADF統計量: 4.988160428700185 p: 1.0 KPSS統計量: 0.632060697132273 差分後 ADF p: 0.9367434998790608

上記コードは pandas / numpy / statsmodels の標準的なライブラリを用い、SSDSE-B-2026.csv を直接読み込んで計算します(合成データ不使用)。47 都道府県のクロスセクションをそのまま時系列とみなすのは誤りで、必ず年度で集計(または 1 県を抽出)して時系列を作ります。

🐍 Python 実装(拡張版)

統計検定 ADF (Augmented Dickey-Fuller) で定常性を検定し、 差分系列で非定常の解消を試みる一連の流れを実装します。 SSDSE-B-2026 の出生数(A4101 の全国合計、 2012-2023 年度)を題材にします。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A4101(出生数) 北海道 24,430 東京都 86,348 沖縄県 12,549 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
from statsmodels.tsa.stattools import adfuller

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
y = df.groupby('SSDSE-B-2026')['A4101'].sum().sort_index()  # 全国出生数の年次系列 (2012-2023)

# ADF 検定(帰無仮説:単位根あり = 非定常)
result = adfuller(y, maxlag=1, autolag='AIC')
print(f'ADF統計量: {result[0]:.4f}')
print(f'p値: {result[1]:.4f}')
print(f'臨界値: {result[4]}')

# 非定常なら差分を取る
y_diff = y.diff().dropna()
result_diff = adfuller(y_diff, maxlag=1)
print(f'差分後 p値: {result_diff[1]:.4f}')
📤 実行結果 (実測): ADF統計量: 2.2201 p値: 0.9989 → 非定常(帰無棄却できず) 臨界値: 1%=-4.223, 5%=-3.189, 10%=-2.730 差分後 p値: 0.0753 → 5% では棄却できず、 10% 水準でようやく定常寄り

差分(diff)で定常化できる系列は I(1)(一次和分)と呼ばれ、 ARIMA(p,1,q) の対象。 2 階差分で定常化するなら I(2)。 実測の出生数は減少ペース自体が変化しているため 1 階差分でも 5% では定常と言い切れない(2 階差分では p = 0.0015 で定常化)。 n=12 の短い系列では検出力も低い点に注意。

🐍 定常性 実データ追補 (SSDSE-B-2026)

本セクションは SSDSE-B-2026 の年次系列を用い、 定常性チェックの 4 ステップ (平均・分散の時系列推移 → ADF 検定 → 差分系列 → KPSS 検定) を確認する。 各ブロックは「やること → 入力 → 実行例 → 結果の読み方」 を必ず併記。

① 平均と分散の年次推移を見る (時系列プロットの数値版)

このコードでやること: SSDSE-B-2026 の総人口 (A1101) を全国 47 都道府県分集計し、 年次ごとの平均・分散を比較して定常性の最初の手掛かりを取る。

📥 入力データ: data/raw/SSDSE-B-2026.csv (12 年 × 47 都道府県)

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
agg = df.groupby('SSDSE-B-2026')['A1101'].agg(['mean', 'std'])
print(agg.head(6))
print('---')
print(agg.tail(3))

📤 実行例:

mean std SSDSE-B-2026 2012 2714659.6 2693848.2 2013 2710936.2 2703207.5 2014 2707191.5 2714414.3 2015 2704143.5 2728692.7 2016 2703063.8 2745332.8 2017 2700425.5 2760661.7 --- mean std SSDSE-B-2026 2021 2670212.8 2791885.6 2022 2658425.5 2793536.0 2023 2645808.5 2797551.4

💬 結果の読み方: 47 都道府県平均の人口は 12 年で約 6.9 万人減と年々減少し、 県間のばらつき(std)は約 269 万人から約 280 万人へ微増(東京一極集中)。 一目で「平均が時間に依存する = 非定常」 という性質が確認できる。 これが ADF 検定や差分の必要性につながる。

② ADF 検定 (拡張ディッキー-フラー検定)

このコードでやること: 全国平均人口の年次系列に対し statsmodels.adfuller を適用し、 単位根の有無を p 値で判定する。

📥 入力データ: agg['mean'] (長さ 12 の年次系列)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from statsmodels.tsa.stattools import adfuller

series = agg['mean'].values
result = adfuller(series, maxlag=1, autolag='AIC')

print('ADF 統計量:', round(result[0], 4))
print('p 値      :', round(result[1], 4))
print('1% 臨界値 :', round(result[4]['1%'], 4))
print('5% 臨界値 :', round(result[4]['5%'], 4))
print('判定      :', '定常' if result[1] < 0.05 else '非定常 (単位根あり)')

📤 実行例:

ADF 統計量: 4.9882 p 値 : 1.0 1% 臨界値 : -4.223 5% 臨界値 : -3.189 判定 : 非定常 (単位根あり)

💬 結果の読み方: p 値 1.00 は 5% 水準を大きく上回り、 「単位根あり = 非定常」 を棄却できない。 すなわち系列は非定常。 12 年の平均推移を見ても明確な下方トレンドなので、 ADF 検定の結果と直感が一致している。

③ 1 階差分で定常化を試みる

このコードでやること: 系列を 1 階差分 (Δyt = yt - yt-1) で変換し、 ADF 検定を再実行する。

📥 入力データ: series (12 点)、 差分後は 11 点

1
2
3
4
5
6
7
8
9
d1 = np.diff(series)
print('差分系列の長さ:', len(d1))
print('差分の平均    :', round(d1.mean(), 2))
print('差分の標準偏差:', round(d1.std(ddof=1), 2))

result_d = adfuller(d1, maxlag=1, autolag='AIC')
print('ADF 統計量:', round(result_d[0], 4))
print('p 値      :', round(result_d[1], 4))
print('判定      :', '定常' if result_d[1] < 0.05 else '非定常')

📤 実行例:

差分系列の長さ: 11 差分の平均 : -6259.2 差分の標準偏差: 4554.1 ADF 統計量: -0.2147 p 値 : 0.9367 判定 : 非定常

💬 結果の読み方: 1 階差分後も p 値は 0.94 と高く、 5% 水準で定常とはいえない。 2012-2023 は人口減少が加速した期間で、 差分系列(=年間減少数)自体が拡大トレンドを持つためである。 「差分すれば必ず定常化する」わけではない実例。 同じ手順を全国死亡数(A4200 合計)に適用すると 1 階差分で p = 0.0017 となり定常化し、 こちらが ARIMA (AR-I-MA) における I (Integrated = 差分) の役割の素直な実例になる。

④ KPSS 検定で「定常性そのもの」 を直接検定する

このコードでやること: ADF は「単位根を帰無仮説」 とするのに対し、 KPSS は「定常を帰無仮説」 とする。 両方を併用するのが標準実務。

📥 入力データ: series (元系列) と d1 (差分系列)

1
2
3
4
5
6
7
8
from statsmodels.tsa.stattools import kpss
import warnings
warnings.filterwarnings('ignore')

for name, s in [('元系列', series), ('差分系列', d1)]:
    stat, p, lag, crit = kpss(s, regression='c', nlags='auto')
    judge = '定常' if p > 0.05 else '非定常 (帰無棄却)'
    print(f'{name}: KPSS={stat:.4f} p={p:.4f} -> {judge}')

📤 実行例:

元系列: KPSS=0.6321 p=0.0197 -> 非定常 (帰無棄却) 差分系列: KPSS=0.5004 p=0.0416 -> 非定常 (帰無棄却)

💬 結果の読み方: KPSS でも元系列・差分系列とも「定常」という帰無仮説が 5% で棄却され、 ADF の結論(どちらも非定常)と一致した。 両検定が一致すると判定の確信度は高い。 参考に全国死亡数(A4200 合計)の 1 階差分では KPSS p > 0.10 かつ ADF p = 0.0017 で、 両検定とも「定常」を支持する。 実務では ADF と KPSS を併記し、 ARIMA の階差階数 (d) は両方が「定常」 と認める最小階数を選ぶのが慣習。

⚠️ 落とし穴

① 非定常系列での「見せかけの回帰」
非定常な 2 つの時系列(例:日本の GDP とアメリカの GDP)を単純に回帰すると、 無関係でも高い $R^2$ が出る。 これが見せかけの回帰(spurious regression)。 必ず定常化(差分化)してから回帰する。 Granger と Newbold(1974)の有名な警告。
② ADF 検定の検出力不足
ADF 検定はサンプル数が少ないときの検出力(H₁ を正しく検出する確率)が弱い。 たった 30〜50 期のデータでは、 本当は定常でも「非定常」と判定されることが多い。 KPSS 検定や Phillips-Perron 検定と組み合わせるのが安全。
③ 過差分(over-differencing)
「とりあえず 1 階、 2 階と差分を取れば定常になる」と考えがちだが、 やり過ぎると系列の有用な情報を失う。 差分を取った後の自己相関構造を ACF で確認し、 過差分(MA 過程の負の根に近づく)を避ける。 必要最小限の差分次数を選ぶ。
④ 季節性を見落とす
月次・四半期データでは 季節性 が定常性を破る。 1 階差分だけでは不十分で、 季節差分 $\Delta_{12} y_t = y_t - y_{t-12}$ も必要。 SARIMA モデルや、 X-13 ARIMA-SEATS のような季節調整ソフトを使う。
⑤ 構造変化(structural break)
「2008 リーマンショック」「2020 コロナ」のような構造的変化があると、 全期間で定常性を仮定するのは無理。 構造変化点を Chow テスト・Bai-Perron テストで検出し、 サブ期間別にモデル化する。 または状態空間モデル・隠れマルコフモデルで動的に扱う。

⚠️ 落とし穴(追加版・各 100 字以上)

既出の落とし穴に加えて、 中級者でも踏みやすい応用フェーズの罠を集めました。 1 度経験するか、 ここで読んでおけば回避できます。

❌ 適用範囲の越境
「定常性」は特定の仮定の下で意味を持ちます。 仮定(独立性・線形性・定常性・尺度など)を確認せずに別ドメインに転用すると、 結果が解釈不能になります。 適用前にチェックリストで仮定を点検しましょう。
❌ サンプルサイズ不足での過信
SSDSE-B のように n=47 と小さいデータでは、 「定常性」の推定値も大きな不確実性を持ちます。 点推定だけでなく、 必ず信頼区間や標準誤差を併記してください。 報告で「±」を忘れない習慣をつけることが重要です。
❌ ハイパーパラメータ依存
「定常性」を実装する際、 ライブラリのデフォルト値が常に最適とは限りません。 主要な引数の意味を 1 度公式ドキュメントで確認し、 自分のデータでグリッドサーチや感度分析を行うと、 結果の頑健性が分かります。
❌ 結果の単独評価
単一の指標・単一のモデルだけで結論を出さず、 必ず複数の角度から確認しましょう。 「定常性」だけでなく、 並列・派生の手法でクロスチェックすると、 結果の頑健性が大きく上がります。 報告書には複数結果を併記。
❌ 再現性の軽視
乱数シード未固定、 パッケージバージョン未記録、 データ前処理の手順が口頭伝承——これらが揃うと半年後の自分でも結果を再現できません。 解析コードを Notebook 化し、 Git で管理する習慣を最初から付けるのが結果的に最速です。

🗺 概念マップ — 定常性の位置

時系列分析
├── データの性質
│   ├── 定常性 ◀ このページ
│   │   ├── 強定常(厳密定常)
│   │   ├── 弱定常(共分散定常)
│   │   ├── トレンド定常
│   │   └── 周期定常
│   ├── 非定常性
│   │   ├── トレンド付き
│   │   ├── 単位根
│   │   ├── 季節性
│   │   ├── 構造変化
│   │   └── ボラティリティ変動
│   └── 自己相関構造
├── 検定
│   ├── ADF 検定(H₀: 単位根)
│   ├── KPSS 検定(H₀: 定常)
│   ├── PP 検定
│   └── DF-GLS 検定
├── 定常化手法
│   ├── 1 階差分($\Delta y$)
│   ├── 2 階差分
│   ├── 季節差分($\Delta_s y$)
│   ├── 対数変換 + 差分(log return)
│   └── トレンド除去
└── モデル
    ├── ARMA(定常前提)
    ├── ARIMA(差分込み)
    ├── SARIMA(季節 + 差分)
    ├── VAR
    ├── VECM(共和分)
    └── GARCH(分散非定常)

❓ よくある質問

Q1. 強定常と弱定常、 どちらを気にすればいい?

実用ではほぼ常に弱定常(共分散定常)で十分。 ARIMA・VAR などの統計理論は弱定常を前提に組まれている。 強定常は理論的議論や非ガウス系列で重要。

Q2. ADF と KPSS、 どちらの結果を信じる?

両方を実行して合意を確認する。 食い違うときは、 サンプル数・構造変化・トレンド項の指定を見直す。 単独の判定より組み合わせが信頼できる。

Q3. 1 階差分で定常化しない場合は?

2 階差分を試す。 それでも非定常なら、 構造変化や明確なトレンドが疑われる。 対数変換、 季節差分、 トレンド除去を組み合わせる。 ARFIMA(分数階差分)も選択肢。

Q4. クロスセクションデータ(都道府県別、 国別)に定常性は適用される?

時系列の概念なので直接は適用されません。 ただし「群間均質性」「空間定常性」など類似概念はある。 SSDSE-B のような都道府県データでは、 「47 県の分布が単一の母集団から来ているか」という観点で議論できます。

Q5. パネルデータ(時系列 × クロスセクション)では?

パネル単位根検定(Im-Pesaran-Shin、 Levin-Lin-Chu、 Fisher-type など)がある。 個別系列ごとに定常性が異なる場合の処理も研究されている。

Q6. ARIMA で d を選ぶ実践的方法は?

(1) 系列プロットで明らかなトレンドがあれば $d \ge 1$、 (2) ADF で非定常なら差分を 1 回取って再検定、 (3) 定常になるまで繰り返す(通常 1 か 2 で十分)。 pmdarima.auto_arima で自動選択も。

Q7. 「定常」と「ホワイトノイズ」の違いは?

ホワイトノイズは最も基本的な定常系列(平均 0、 分散一定、 自己相関 0)。 定常系列の中には、 自己相関を持つもの(AR、 MA、 ARMA など)も含まれる。 ホワイトノイズ ⊂ 定常系列。

Q8. 季節性は「非定常」か「定常」か?

「決定的季節性」(毎年確実に夏は高い)は非定常。 「確率的季節性」(季節パターンが時間とともに変わる)も非定常。 季節差分や SARIMA でモデル化する。

Q9. 状態空間モデルでは定常性は不要?

状態空間モデルは非定常を直接扱えるので、 差分化は必須ではない。 ただしカルマンフィルタの収束や予測誤差の分散の解釈で、 状態方程式の定常性を意識する場面はある。

Q10. なぜ「単位根」と呼ぶ?

AR(p) モデル $\Phi(L) y_t = \varepsilon_t$ の特性方程式 $\Phi(z) = 0$ のが単位円 $|z| = 1$ 上にあるとき。 つまり $\phi = 1$ のとき AR(1) なら $1 - L = 0$ の根は $z = 1$。 これが「単位根」の語源。

Q11. データが正規分布でなくても ADF 検定は使える?

ADF の漸近分布は誤差項の正規性に頼らない(Said-Dickey の証明)。 ただしサンプル数が少ないとき非正規性の影響を受ける。 ブートストラップ ADF や PP 検定で頑健化できる。

Q12. 「単位根がある」と「I(1)」は同じ?

ほぼ同義。 単位根を 1 つだけ持つ系列が I(1)(1 階の和分過程)。 単位根を 2 つ持てば I(2)、 一般に I(d) で $d$ 階差分で定常化する。

Q13. 株価収益率は定常か?

「価格」は非定常(ランダムウォークに近い)。 「対数収益率 $r_t = \log(p_t / p_{t-1})$」はおおむね定常(平均 0 付近、 分散ほぼ一定)。 ただし分散自体が時間変動するボラティリティクラスタリング → GARCH モデルへ。

Q14. 自然科学(気象・地震)でも定常性は重要?

はい。 気温の年次平均は地球温暖化で非定常(トレンド)、 地震の発生頻度は領域に依存して非定常。 「気候の定常性」が議論されることも。 ノイズ除去・予測モデルの基盤として、 自然科学でも標準概念。

Q15. 機械学習(LSTM、 Transformer)では定常性は不要?

深層学習モデルは非定常データも扱えるが、 「定常化+学習」のほうが安定し、 サンプル効率も良い。 また定常化することで「真にモデルが捉えた関係」と「自明なトレンド」を区別できる。 ML でも前処理として推奨。

Q16. 「定常性検定をして p > 0.05 だったから非定常」と結論する危険性は?

p > 0.05 は「H₀ を棄却できない」だけで「H₀ が正しい」とは言わない。 サンプル数不足の可能性、 検出力の問題を考慮する。 単一の検定で断定せず、 ACF プロット、 ローリング統計量、 複数検定の結果を総合する。

🗺 学習ロードマップ

「定常性」を起点に、 同カテゴリ「時系列」を体系的に学ぶ推奨順序を示します。

  1. Week 1:本ページの定義・数式・直感を完全に押さえる。 1 日 30 分 × 5 日。
  2. Week 2:Python コードを写経し、 SSDSE-B-2026 で動作確認。 自分のデータでも試す。
  3. Week 3:「🔗 関連用語」の前提側を読み、 基礎を補強する。
  4. Week 4:「🔗 関連用語」の並列側を読み、 比較できる引き出しを増やす。
  5. Week 5:「🔗 関連用語」の発展側を読み、 上位概念や応用に進む。
  6. Week 6:関連グループ教材で全体像を再確認し、 知識を再構築する。

📚 備考:6 週間は目安です。 自分のペースで進めて構いません。 重要なのは「定義 → 実装 → 関連用語 → 再構成」のサイクルを 1 度回し切ること。

❓ さらなる FAQ

Q. 「定常性」は古い手法ですか? 最新の AI で代替できますか?
A. 古いから無価値ではありません。 むしろ「定常性」のような基礎概念は新手法の解釈に必要。 LLM が出した結果を評価するのにも、 結局この種の概念が使われます。
Q. SSDSE-B-2026 はどこで取得できますか?
A. 独立行政法人統計センターの公式サイト(www.nstac.go.jp)からダウンロード可能。 教育用標準データセット(SSDSE)として整備された CSV ファイル。
Q. Python 以外の言語で同じことをするには?
A. R では tidyverse、 Julia では DataFrames.jl、 SQL では集約関数とウィンドウ関数で同様の処理が可能。 概念は言語によらず共通です。
Q. 数式が苦手です。 どこから手を付ければ?
A. 「🎨 直感で掴む」を 3 回読み、 「🧮 実値で計算」で手を動かす。 数式は最後で OK です。 概念のが分かれば、 数式は記号の翻訳作業に過ぎなくなります。

📊 ADF 検定の詳細

Augmented Dickey-Fuller (ADF) 検定は、 時系列に「単位根」(unit root)があるかを判定する標準手法です。 単位根があれば非定常、 なければ定常と判定します。

【ADF 検定モデル】
$$ \Delta y_t = \alpha + \beta t + \gamma y_{t-1} + \sum_{i=1}^{p} \delta_i \Delta y_{t-i} + \varepsilon_t $$
帰無仮説 H₀: γ = 0(単位根あり = 非定常)。 検定統計量が臨界値より小さければ H₀ を棄却し定常と判定。
ケース解釈対処
p < 0.05定常と判定(H₀ 棄却)そのままモデリング可
p ≥ 0.05非定常を否定できない差分・対数変換・トレンド除去
差分後 p < 0.05I(1) 系列(1 階和分)ARIMA(p,1,q) を適用
差分後も p ≥ 0.05I(2) 以上2 階差分または別モデル

ADF と並んで KPSS 検定もよく使われます。 ADF は「単位根あり」を帰無、 KPSS は「定常」を帰無にするので、 両方併用すると判定がより確実になります。

stationarity ARIMA モデル VAR モデル 共和分 ARMA-GARCH 状態空間モデル HMM 隠れマルコフ

🔗 隣接手法への橋渡し

定常性は時系列分析の前提概念。 SSDSE-B-2026 は 2012〜2023 年度の 12 年 × 47 都道府県パネルなので、 実在列 (総人口 A1101 / 高齢人口 A1303 / 出生数 A4101 など) から各県 12 時点の時系列が取れる。 「平均と分散が時間とともに変化しないか」を ADF / KPSS 検定で確認し、 非定常なら差分 Δy_t = y_t − y_{t-1} や対数差分で定常化してから ARIMA / VAR に投入する。

非定常データに通常の相関・回帰を適用すると「見せかけの相関」(spurious correlation) が発生。 SSDSE-D など複数年データでは ADF + KPSS の二重チェックを必須化する。

🌳 手法選択フロー

SSDSE 時系列データに対する定常性検査と差分化のフロー。

  1. ① 時系列をプロット: matplotlib で生データを描画。 明確な上昇/下降トレンドや分散変化が目視できれば非定常の予兆。
  2. ② 検定で確認: statsmodels.tsa.stattools.adfuller (ADF, 帰無=単位根) と kpss (帰無=定常) を両方実行。 ADF p<0.05 かつ KPSS p>0.05 なら定常。 不一致なら弱定常 (差分定常 vs トレンド定常) の判別へ。
  3. ③ 定常化: 単位根があれば 1 階差分 d=1、 残れば 2 階差分 d=2。 対数を取ってから差分すると対数収益率になり、 経済データで有効。 季節性があれば季節差分 (12 ヶ月差分など)。

ARIMA(p, d, q) の d はこのフローで決定。 SSDSE-B-2026 を単年度で切り出した 47 都道府県データは横断面なので定常性議論は不要、 年度方向 (2012-2023 の 12 時点) の時系列として扱うときのみ適用。 12 時点と短いので maxlag を小さく取り、 検出力の低さに注意する。

🧭 さらに深掘り — 直感・落とし穴・発展の総整理

本節は既存の解説を壊さずに追記したまとめ強化編です。 「定常性とは何を仮定しているのか」を一段深く掴み直し、 実務で必ず出会う落とし穴と発展先を、 SSDSE-B-2026 の新しい実測例(東京都の総人口)を軸に整理します。

🎨 直感の再確認 — 「顔つきが時間で変わらない」

定常性は「時系列を時間軸のどこで切り出しても統計的な顔つき(平均・分散・自己共分散)が同じ」という仮定です。 弱定常(共分散定常)は平均・分散・自己共分散の 3 つだけを問い、 強定常はすべての結合分布を問います。 多くの時系列手法(AR・ARMA・ARIMA・VAR)は弱定常を土台に成立するため、 分析の最初の関門になります。 非定常なら定常化——線形トレンドは 1 階差分 $\Delta y_t = y_t - y_{t-1}$、 増加率が本質なら対数変換してから差分(対数差分=近似的な成長率)、 季節性は季節差分 $\Delta_s$ で除去します。

🧮 新しい実測例 — 東京都の総人口(A1101, 2012-2023)

既出の「全国合計」「死亡数」「出生数」とは別に、 特定県の時系列として東京都の総人口を取り上げます。 以下はすべて SSDSE-B-2026.csv(cp932, 2 行目のスキップ)から算出した実測値です。 12 時点(12 年)と短いため、 単位根検定の検出力は低く、 結果は目安として読む必要があります。

項目実測値判定
原系列 ADF(maxlag=1, autolag=AIC)統計量 = −2.00、 $p = 0.287$単位根を棄却できず → 非定常
原系列 KPSS(regression='c')統計量 = 0.656、 $p = 0.018$定常の帰無を棄却 → 非定常
原系列のラグ 1 自己相関$\rho_1 = 0.988$ほぼ 1(単位根に近い強い慣性)
1 階差分後 ADF統計量 = −1.20、 $p = 0.674$差分してもなお非定常

東京都の人口は 2012 年度 1,323.4 万人から 2023 年度 1,408.6 万人へ増加しましたが、 年差分(前年度差)を見ると +7.3 → +13.1 → …(増加)→ 2020 年度 +4.1 → 2021 年度 −3.8(コロナ禍で初の減少)→ +2.8 → +4.8 と、 差分系列そのものに構造変化が入っています。 このため 1 階差分でも定常化せず($p = 0.674$)、 「差分すれば必ず定常になる」という思い込みが崩れる好例になります。 ADF と KPSS が同時に非定常を示した点も、 両検定を併用する意義(下記)を裏づけます。

⚠️ 12 年短系列の注意:$n = 12$ では ADF・KPSS とも検出力・サイズ歪みが大きく、 $p$ 値はあくまで参考です。 本来は月次・四半期など長い系列で判定すべきで、 年次 12 点の結果は「傾向の確認」に留めるのが適切です。

⚠️ 落とし穴の総まとめ(重要)

🚀 発展 — 検定・和分・共和分・構造変化

🔗 関連ページ(相対リンク)