「明日の天気は?」と聞かれたら、あなたはまず今日の空を見上げるはずです。「次にくる単語は?」と問われたら、直前の単語につながりそうな語を探すでしょう。私たちが未来を予想するとき、たいていは直前の状態を手がかりにします。この「次は今だけに依存する」という素朴な発想を確率モデルにしたものが1次マルコフモデルです。
ところで、統計や機械学習を学び始めると、まず出会うのは正規分布です。身長のばらつき、測定誤差、テストの点数——「平均のまわりに釣鐘型に散らばるもの」を表す、あの分布です。ここで多くの人が、ふと混乱します。「正規分布も1次マルコフモデルも、どちらも確率のモデルだよね? 何が違うの? どう使い分けるの?」と。
結論を先に言うと、両者は見ているものがそもそも違います。正規分布は「1個の値がどうばらつくか」を表し、順序や時間の概念を持ちません。一方、1次マルコフモデルは「値が時間とともにどう連なっていくか」を表し、記憶(直前への依存)を持ちます。しかも面白いことに、この2つは対立するどころか、ガウス・マルコフ過程という形できれいに合流します。正規分布は「記憶ゼロの1次マルコフモデル」という特殊ケースとして、その中に含まれるのです。
この関係を理解すると、応用の見晴らしが一気に良くなります。たとえば——
- 時系列予測・金融: 株価やセンサ値のような「前の値を引きずる」データを AR モデル(自己回帰=ガウス・マルコフ過程)で扱う
- 音声認識・自然言語処理: 隠れマルコフモデル(HMM)や N-gram 言語モデルは1次マルコフ性を土台にする
- 異常検知: 「正常なら次はこの範囲に来るはず」という遷移の予測を外れた点を異常とみなす(正規分布の裾で外れ値を測るのとは別の発想)
本記事では、正規分布との違いを軸に、1次マルコフモデルを「独立性の仮定の違い」という視点から腹落ちさせます。同時分布の分解、自己相関、そして両者を統合する AR(1) 過程の導出までを、Python 実装と11枚の図で丁寧に追っていきましょう。

上の図が、この記事全体の見取り図です。左の正規分布では、点は順序なくばらまかれていて、どの順に並べても同じです。右の1次マルコフモデルでは、点が矢印で数珠つなぎになっていて、順序が意味を持ちます。この「順序を見るか見ないか」の違いこそが、両者を分ける本質です。
本記事の内容
- 正規分布と1次マルコフモデルは「何を」モデル化しているのかの違い(直感)
- 1次マルコフ性の定義と、同時分布の分解による定式化
- 独立(i.i.d.)が「記憶ゼロの1次マルコフ」である理由
- 両者を統合するガウス・マルコフ過程(AR(1))の導出:平均・分散・自己相関
- Python での実装と検証:時系列比較・順序シャッフル・自己相関・定常分布
前提知識
この記事は以下の記事の内容を前提にすると、より深く理解できます。
正規分布の確率密度関数と、条件付き確率 $p(x \mid y)$ の記法を知っていれば、あとは本文で説明します。
そもそも「何を」モデル化しているのか
まず、正規分布と1次マルコフモデルが答えようとしている問いの違いをはっきりさせましょう。ここを取り違えると、いつまでも「似た者どうし」に見えてしまいます。
正規分布が答える問いは、「この1つの量は、どんな値をとりやすいか」です。身長を測ったとき 170cm 付近が出やすく、極端な値は出にくい——この「出やすさの形」を釣鐘型の密度で表します。ここには時間も順序もありません。100人の身長を測って並べたとき、その並び順を入れ替えても、「身長の分布」は1ミリも変わりません。
1次マルコフモデルが答える問いは、「次の状態は、今の状態からどう決まるか」です。今日が晴れなら明日も晴れやすい、今日が雨なら明日も雨を引きずりやすい——この「状態から状態への移りやすさ」を表します。ここでは順序が命です。「晴れ・晴れ・雨・雨・雨」と「雨・晴れ・雨・晴れ・雨」は、たとえ晴れと雨の個数が同じでも、まったく違う現象として扱われます。
一言でまとめると、正規分布は静的なばらつきを、1次マルコフモデルは動的な移り変わりを記述します。前者に順序の情報はなく、後者では順序こそが情報です。
では、この「順序を見る/見ない」の違いは、数式ではどう表れるのでしょうか。鍵は、複数の確率変数の同時分布をどう分解するかにあります。次の節で見ていきましょう。
同時分布の分解:独立とマルコフの分かれ道
$T$ 個の確率変数 $x_1, x_2, \dots, x_T$ をまとめて考えます。天気なら「$T$ 日分の天気」、時系列なら「$T$ 時点分の観測値」です。これらすべての振る舞いは、同時分布 $p(x_1, x_2, \dots, x_T)$ に完全に書き込まれています。問題は、この巨大な同時分布をどう「分解」して扱うか、です。
どんな同時分布も、確率の乗法定理を繰り返すだけで、次のように「1個ずつ条件付きで書く」形に必ず分解できます(これは仮定ではなく恒等式です):
$$ p(x_1, \dots, x_T) = p(x_1)\, p(x_2 \mid x_1)\, p(x_3 \mid x_1, x_2) \cdots p(x_T \mid x_1, \dots, x_{T-1}) $$
各因子 $p(x_t \mid x_1, \dots, x_{t-1})$ は「過去すべてを知ったうえでの、次の1個の分布」です。このままでは過去が積み上がっていくので、$t$ が大きくなるほど条件が膨らみ、手に負えません。ここで登場するのが2つの「割り切り」です。
割り切りその1:独立(i.i.d.)。 「過去は次に何の影響も与えない」と仮定します。すると条件はすべて消えて、
$$ p(x_1, \dots, x_T) = \prod_{t=1}^{T} p(x_t) $$
正規分布を「独立に $T$ 回サンプリングする」のは、まさにこの形です。各 $x_t$ が同じ正規分布 $N(\mu, \sigma^2)$ から独立に出てくる——これが i.i.d.(independent and identically distributed) です。
割り切りその2:1次マルコフ性。 「次は直前の1つだけに依存し、それより昔は(直前を知っていれば)関係ない」と仮定します。すなわち
$$ p(x_t \mid x_1, \dots, x_{t-1}) = p(x_t \mid x_{t-1}) $$
これをマルコフ性、とくに直前の1つだけを見るものを1次(first-order)と呼びます。この仮定を入れると、同時分布は次のように分解されます:
$$ \begin{equation} p(x_1, \dots, x_T) = p(x_1) \prod_{t=2}^{T} p(x_t \mid x_{t-1}) \end{equation} $$
最初の $p(x_1)$ を初期分布、$p(x_t \mid x_{t-1})$ を遷移分布(遷移確率)と呼びます。天気の例なら「初日の天気の確率」と「今日→明日の移りやすさ」です。過去がいくら長くても、覚えておくべきは「直前の1つ」だけ——これが1次マルコフモデルの威力です。

上の図は、2つの分解をグラフィカルモデル(各変数を丸、依存関係を矢印で表す図)で描いたものです。上段の i.i.d. は矢印が1本もありません——どの変数も互いに無関係です。下段の1次マルコフは、隣どうしにだけ矢印が伸びています——各変数は直前からのみ影響を受けます。矢印の有無こそが、順序を見るか見ないかの違いそのものです。
この図をよく見ると、重要なことに気づきます。i.i.d. は「矢印を全部消した1次マルコフ」にほかなりません。1次マルコフの遷移分布 $p(x_t \mid x_{t-1})$ が、たまたま $x_{t-1}$ に依存せず $p(x_t)$ になったとき、それが独立なのです。この包含関係は記事の後半でもう一度、AR(1) の $\phi=0$ という形で具体的に確かめます。
では、この「割り切り方の違い」は、実際のデータの見た目にどう表れるのでしょうか。まずは目で見て確かめましょう。
見た目で違いを確かめる:i.i.d.正規列とAR(1)列
抽象的な分解の話を、具体的なデータで体感しましょう。ここでは、1次マルコフモデルの最も基本的で扱いやすい例である AR(1) 過程(1次自己回帰過程)を使います。AR(1) は次の式で系列を作ります:
$$ x_t = \phi\, x_{t-1} + \varepsilon_t, \qquad \varepsilon_t \sim N(0, \sigma^2) $$
「次の値 $x_t$ は、直前の値 $x_{t-1}$ を $\phi$ 倍したものに、正規分布のノイズ $\varepsilon_t$ を足したもの」という意味です。$\phi$ は記憶の強さを表すパラメータで、$0$ に近いほど直前を忘れ、$1$ に近いほど直前を強く引きずります。なぜこれが1次マルコフモデルなのかは次節で式で確認しますが、まずは i.i.d. 正規列と並べて眺めてみます。
import numpy as np
import matplotlib.pyplot as plt
def ar1(n, phi, sigma, x0=0.0, rng=None):
"""1次自己回帰過程 x_t = phi*x_{t-1} + N(0, sigma^2) を生成"""
rng = rng or np.random.default_rng(0)
x = np.empty(n)
x[0] = x0
for t in range(1, n):
x[t] = phi * x[t - 1] + rng.normal(0, sigma)
return x
n = 200
iid = np.random.default_rng(42).normal(0, 1, n) # i.i.d. 正規列
# 定常分散を1に揃えるため sigma = sqrt(1 - phi^2) にする(理由は後述)
ar = ar1(n, phi=0.9, sigma=np.sqrt(1 - 0.9**2), rng=np.random.default_rng(42))
fig, ax = plt.subplots(2, 1, figsize=(10, 5), sharex=True)
ax[0].plot(iid); ax[0].set_title("i.i.d. 正規列")
ax[1].plot(ar); ax[1].set_title("AR(1), phi=0.9")
plt.show()

2つの系列は、実はまったく同じ正規分布 $N(0,1)$ を1時点の分布として持っています(分散を揃えたので)。それでも見た目はまるで違います。上の i.i.d. 列は、隣の値と無関係なのでギザギザに激しく上下します。下の AR(1) 列は、直前の値を9割引きずるので滑らかに大きくうねり、いったん上に行くとしばらく上に留まります。同じ「ばらつきの大きさ」でも、記憶があるかないかで時間的な質感はここまで変わるのです。
「1時点の分布が同じなのに見た目が違う」——この不思議を、もっとはっきり示す実験があります。系列の順序をシャッフルしてみましょう。
決定的な違い:順序をシャッフルすると何が起きるか
正規分布と1次マルコフモデルの違いを一撃で可視化するのが、この「シャッフル実験」です。AR(1) 系列を作り、その値の並び順だけをランダムに入れ替えます。値の集合はまったく同じ、順序だけが壊れた状態です。
n = 400
ar = ar1(n, phi=0.9, sigma=np.sqrt(1 - 0.9**2), rng=np.random.default_rng(7))
perm = np.random.default_rng(3).permutation(n)
shuf = ar[perm] # 値は同じ、順序だけシャッフル
fig, ax = plt.subplots(2, 2, figsize=(11, 5.6))
ax[0, 0].plot(ar); ax[0, 0].set_title("元のAR(1)系列")
ax[0, 1].hist(ar, bins=30); ax[0, 1].set_title("元のヒストグラム")
ax[1, 0].plot(shuf); ax[1, 0].set_title("シャッフル後")
ax[1, 1].hist(shuf, bins=30); ax[1, 1].set_title("シャッフル後のヒストグラム")
plt.show()

この図が示すことは決定的です。右列のヒストグラム(値の分布)は、シャッフル前後でまったく同じです。当たり前です——同じ値の集合を並べ替えただけですから。正規分布の視点からは、この2つの系列は完全に等価です。ところが左列の時系列を見ると別物です。上のなめらかなうねりは、シャッフル後には跡形もなく消え、i.i.d. のようなギザギザになりました。
つまり、1次マルコフモデルが捉えている情報は、値の分布ではなく「順序(並び)」の中に宿っているのです。正規分布はこの順序情報を最初から見ていないので、シャッフルに気づきません。逆に言えば、データの「並びのクセ」を活かしたいなら、正規分布だけでは足りず、マルコフ的なモデルが要る、ということです。
では、この「順序のクセ」を数値で測るにはどうすればよいでしょうか。使うのが自己相関です。
記憶を数値で測る:自己相関
自己相関(autocorrelation)は、「$k$ 時点離れた値どうしが、どれくらい似ているか」を測る量です。ラグ $k$ の自己相関 $\rho_k$ は、系列を平均 $\bar{x}$ で中心化してから
$$ \rho_k = \frac{\sum_{t} (x_t – \bar{x})(x_{t-k} – \bar{x})}{\sum_{t} (x_t – \bar{x})^2} $$
で計算します。$\rho_0 = 1$(自分自身との相関は1)で、$\rho_k$ が0に近いほど「$k$ 時点前とは無関係」を意味します。i.i.d. 列なら、$k \geq 1$ の自己相関はすべてほぼ0になるはずです。一方、AR(1) 列なら記憶がある分だけ、自己相関が残るはずです。確かめましょう。
def acf(x, maxlag):
x = x - x.mean()
denom = np.sum(x * x)
return np.array([np.sum(x[k:] * x[:len(x)-k]) / denom
for k in range(maxlag + 1)])
n, maxlag = 4000, 25
iid = np.random.default_rng(11).normal(0, 1, n)
ar = ar1(n, phi=0.8, sigma=np.sqrt(1 - 0.8**2), rng=np.random.default_rng(12))
lags = np.arange(maxlag + 1)
print("i.i.d. ラグ1-3:", np.round(acf(iid, maxlag)[1:4], 3))
print("AR(1) ラグ1-3:", np.round(acf(ar, maxlag)[1:4], 3))
print("理論 phi^k ラグ1-3:", np.round(0.8**lags[1:4], 3))
このコードを実行すると、i.i.d. ラグ1-3 はおおむね [0.01, 0.02, 0.02] 程度と0付近に、AR(1) ラグ1-3 は [0.79, 0.62, 0.48] 程度となり、理論値 phi^k = [0.8, 0.64, 0.512] にほぼ一致します。図にすると違いは一目瞭然です。

シアンの丸(i.i.d.)はラグ1以降ぺたんと0に張り付いています——過去は何も残っていません。オレンジの四角(AR(1))はラグとともになめらかに減衰し、黒破線の理論曲線 $\rho_k = \phi^k$ にぴったり乗っています。この $\phi^k$ という指数(幾何級数的)減衰が、1次マルコフモデルの記憶の正体です。次節でこの式がどこから来るのかを導出しますが、直感としては「毎時刻 $\phi$ 倍に薄まりながら過去が効き続ける」と捉えてください。
ここまでで、正規分布(順序を見ない)と1次マルコフ(順序=記憶を見る)の違いを、目でも数値でも確認しました。いよいよ、この2つを1つの枠組みで結ぶガウス・マルコフ過程の数学に入ります。
統合:ガウス・マルコフ過程 AR(1) の導出
AR(1) 過程が「正規分布を土台にした1次マルコフモデル」であることを、式で確かめましょう。定義は再掲すると
$$ x_t = \phi\, x_{t-1} + \varepsilon_t, \qquad \varepsilon_t \sim N(0, \sigma^2), \quad |\phi| < 1 $$
で、$\varepsilon_t$ は各時刻で独立とします。まずなぜこれが1次マルコフかを確認します。$x_t$ の値は、$x_{t-1}$ の値と、それとは独立な新しいノイズ $\varepsilon_t$ だけで決まります。$x_{t-2}$ 以前の情報は、$x_{t-1}$ を通してしか $x_t$ に伝わりません。つまり $x_{t-1}$ を知ってしまえば、それより過去は $x_t$ の予想に何も足しません:
$$ p(x_t \mid x_{t-1}, x_{t-2}, \dots) = p(x_t \mid x_{t-1}) $$
これはまさに1次マルコフ性です。しかも遷移分布は正規分布になります。$x_{t-1}$ を固定すれば $\phi x_{t-1}$ は定数で、そこに $N(0,\sigma^2)$ のノイズが乗るだけなので
$$ p(x_t \mid x_{t-1}) = N\!\left(x_t;\ \phi\, x_{t-1},\ \sigma^2 \right) $$
「中心が $\phi x_{t-1}$ に平行移動した正規分布」です。遷移そのものが正規分布——これがガウス・マルコフ過程と呼ばれるゆえんです。
定常分布の平均と分散
次に、この過程を長く回したときに落ち着く定常分布を求めます。定常状態では $x_t$ と $x_{t-1}$ が同じ分布に従うので、平均と分散が時刻によらず一定になります。まず平均 $m = \mathbb{E}[x_t]$ を求めます。両辺の期待値をとると、$\mathbb{E}[\varepsilon_t]=0$ なので
$$ m = \phi\, m + 0 \quad\Longrightarrow\quad (1-\phi)\,m = 0 \quad\Longrightarrow\quad m = 0 $$
平均は0です。次に分散 $v = \mathrm{Var}(x_t)$ を求めます。$x_{t-1}$ と $\varepsilon_t$ は独立なので、$x_t = \phi x_{t-1} + \varepsilon_t$ の分散は各項の分散の和になります:
$$ v = \mathrm{Var}(\phi\, x_{t-1} + \varepsilon_t) = \phi^2\, \mathrm{Var}(x_{t-1}) + \mathrm{Var}(\varepsilon_t) $$
定常状態では $\mathrm{Var}(x_{t-1}) = \mathrm{Var}(x_t) = v$ なので、これを代入すると
$$ v = \phi^2 v + \sigma^2 $$
$v$ について解くために $\phi^2 v$ を左辺へ移すと $ (1-\phi^2)\,v = \sigma^2 $、したがって
$$ \begin{equation} v = \frac{\sigma^2}{1 – \phi^2} \end{equation} $$
$|\phi|<1$ を課したのは、この分散が有限の正の値になる(過程が発散しない)ためです。ここで、先ほどのコードで sigma = sqrt(1 – phi^2) と置いた理由がわかります。そうすると $v = (1-\phi^2)/(1-\phi^2) = 1$ となり、$\phi$ をどう変えても定常分散が1に揃うので、i.i.d. 列と公平に見比べられたのです。
定常分布は正規分布
平均0・分散 $\sigma^2/(1-\phi^2)$ とわかりましたが、分布の形は何でしょうか。$x_t$ を過去にさかのぼって展開すると
$$ x_t = \varepsilon_t + \phi\,\varepsilon_{t-1} + \phi^2 \varepsilon_{t-2} + \cdots = \sum_{k=0}^{\infty} \phi^k\, \varepsilon_{t-k} $$
これは独立な正規分布の(無限個の)重み付き和です。正規分布は「足しても正規分布のまま」という再生性を持つので、この和もまた正規分布になります。よって定常分布は
$$ x_t \sim N\!\left(0,\ \frac{\sigma^2}{1-\phi^2}\right) $$
1次マルコフモデルの1時点の分布が、正規分布に落ち着くわけです。順序という余分な構造を捨てて「ある1時刻の値だけ」を見れば、それは正規分布——ここで正規分布とマルコフモデルが再会します。
自己相関 $\rho_k=\phi^k$ の導出
最後に、図で見た $\rho_k = \phi^k$ を導きます。ラグ $k$ の自己共分散 $\gamma_k = \mathbb{E}[x_t\, x_{t-k}]$(平均0なので)を考えます。$x_t = \phi x_{t-1} + \varepsilon_t$ の両辺に $x_{t-k}$ を掛けて期待値をとると、$\varepsilon_t$ は過去の $x_{t-k}$($k\geq1$)と独立で $\mathbb{E}[\varepsilon_t x_{t-k}]=0$ なので
$$ \gamma_k = \phi\, \mathbb{E}[x_{t-1} x_{t-k}] + \mathbb{E}[\varepsilon_t x_{t-k}] = \phi\, \gamma_{k-1} $$
「1ラグ進むごとに $\phi$ 倍になる」という漸化式です。$\gamma_0 = v$ から始めて繰り返し適用すると $\gamma_k = \phi^k \gamma_0$。自己相関は $\rho_k = \gamma_k/\gamma_0$ なので
$$ \begin{equation} \rho_k = \phi^k \end{equation} $$
図で見た指数減衰が、きれいに導けました。$\phi=0$ を代入すると $\rho_k = 0$($k\geq1$)——すなわち i.i.d.。これが「独立は記憶ゼロの1次マルコフ」の数式による確認です。
導出が済んだので、$\phi$ を動かして記憶の強さがどう軌道に表れるかを見てみましょう。
記憶の強さ φ を動かす
$\phi$ は $0$(記憶なし=i.i.d.)から $1$ 近く(強い記憶)まで、1次マルコフモデルの性格を連続的に変えるツマミです。実際に軌道を並べてみます。
n = 300
for phi in [0.0, 0.5, 0.9, 0.99]:
s = np.sqrt(1 - phi**2) if phi < 1 else 0.1
x = ar1(n, phi=phi, sigma=s, rng=np.random.default_rng(100))
plt.plot(x, label=f"phi={phi}")
plt.legend(); plt.show()

$\phi=0$(グレー)は完全にギザギザで、i.i.d. 正規列そのものです。$\phi=0.5$ で少しうねりが出て、$\phi=0.9$(オレンジ)ではっきりと大きな波になり、$\phi=0.99$(赤)ではほとんど酔歩(ランダムウォーク)のようにゆっくり漂います。$\phi \to 1$ で分散 $\sigma^2/(1-\phi^2)$ が発散に近づくのが、この暴れ方に対応します。ツマミ1つで「無記憶」から「強い記憶」まで連続に動かせるのが、AR(1) の美点です。
記憶の減衰そのものも図にしておきましょう。

$\phi^k$ のカーブは、「1次マルコフは直前しか見ていないのに、なぜ数時刻前とも相関が残るのか?」という疑問に答えます。直接の依存は直前だけでも、その直前がさらに1つ前に依存し……と数珠つなぎに伝わるため、$k$ 時刻前の影響が $\phi^k$ という指数の形で間接的に残るのです。$\phi=0.95$ なら10時刻前でも約6割が残り、$\phi=0.5$ なら数時刻でほぼ消えます。
次に、導出した「定常分布は正規分布」を、シミュレーションで確かめます。
定常分布が正規分布に一致することの確認
長く回した AR(1) 系列のヒストグラムが、理論の正規分布 $N(0,\, \sigma^2/(1-\phi^2))$ に重なるかを見ます。
n, phi, sigma = 60000, 0.8, 1.0
x = ar1(n, phi=phi, sigma=sigma, rng=np.random.default_rng(5))[100:] # バーンイン除去
var_stat = sigma**2 / (1 - phi**2) # 理論の定常分散
print("標本分散:", round(x.var(), 3), " 理論分散:", round(var_stat, 3))
grid = np.linspace(-4, 4, 400) * np.sqrt(var_stat)
pdf = np.exp(-grid**2 / (2*var_stat)) / np.sqrt(2*np.pi*var_stat)
plt.hist(x, bins=60, density=True, alpha=0.6)
plt.plot(grid, pdf, "k-", lw=2)
plt.show()
このコードの print は 標本分散: 2.747 理論分散: 2.778 のように、標本と理論がほぼ一致します($\sigma^2/(1-\phi^2)=1/(1-0.64)=2.78$)。

オレンジのヒストグラム(AR(1) の標本)と黒い理論曲線(正規分布)はきれいに重なっています。記憶を持つ1次マルコフ過程でも、時間方向を潰して「1時点の値の分布」だけを見れば、それは正規分布——導出した結論がシミュレーションでも確認できました。裏を返せば、正規分布のヒストグラムだけを見ていては、その裏にある $\phi=0.8$ の記憶構造には決して気づけない、ということでもあります。
ここまでは連続値の AR(1) を見てきました。1次マルコフモデルは、離散の状態(晴れ・曇り・雨のような)でも同じ発想で作れます。最後にその代表例を見ておきましょう。
離散版の1次マルコフ:天気モデル
状態が「晴れ・曇り・雨」のように有限個の場合、遷移分布は遷移確率行列 $\bm{P}$ で表せます。$P_{ij}$ は「今日が状態 $i$ のとき、明日が状態 $j$ になる確率」です。各行の和は1になります(明日は必ずどれかの天気になるので)。

この図の遷移確率で、天気の系列をシミュレーションしてみます。比較のため、同じ定常分布から独立にサンプリングした i.i.d. 列も並べます。
P = np.array([[0.7, 0.2, 0.1], # 晴れ →
[0.3, 0.4, 0.3], # 曇り →
[0.2, 0.4, 0.4]]) # 雨 →
rng = np.random.default_rng(21)
n, seq = 60, [0]
for _ in range(n - 1):
seq.append(rng.choice(3, p=P[seq[-1]])) # 直前の状態の行から次を引く
# 定常分布 pi (P^T の固有値1の固有ベクトル)
vals, vecs = np.linalg.eig(P.T)
pi = np.real(vecs[:, np.argmin(np.abs(vals - 1))]); pi /= pi.sum()
iid = np.random.default_rng(22).choice(3, size=n, p=pi) # 同じ定常分布から独立に
print("定常分布 pi:", np.round(pi, 3))
定常分布 pi: は [0.462, 0.308, 0.231] 程度になります(晴れが最も出やすい)。この2つの系列を色帯で描くと、記憶の有無がくっきり出ます。

上段の1次マルコフ列は、同じ天気が数日続いて「塊(かたまり)」になる傾向がはっきり見えます。晴れが続いたり、雨が居座ったり——遷移行列の対角成分($P_{ii}$)が大きい=「今日と同じ天気になりやすい」ことの表れです。下段の i.i.d. 列は、まったく同じ晴れ・曇り・雨の出現割合(定常分布)を持つのに、日ごとにバラバラで塊になりません。連続値の AR(1) で見た「うねり vs ギザギザ」の、離散版がこの「塊 vs バラバラ」です。連続でも離散でも、1次マルコフモデルの本質は「直前を引きずる」という一点にあります。
独立性の階層でとらえ直す
最後に、正規分布(i.i.d.)と1次マルコフモデル、そしてその先を、包含関係として整理しておきましょう。

一番内側の i.i.d.($\phi=0$、記憶ゼロ)は、正規分布から独立にサンプリングする世界です。それを含むのが 1次マルコフ(直前だけを見る)。さらにそれを含むのが 高次マルコフ(直近 $p$ 個を見る、AR($p$) など)や、より一般の確率過程です。「独立」は決して「マルコフの外」にあるのではなく、マルコフモデルの中で記憶をゼロにした特殊ケースなのです。
この階層は、モデル選択の指針にもなります。データに順序の意味がない(並べ替えても同じ)なら i.i.d.=正規分布などで十分。直前を引きずるクセがあるなら1次マルコフ(AR(1))。もっと長い周期やより複雑な依存があるなら高次モデルへ——という具合に、必要な「記憶の深さ」に応じて内側から外側へ広げていけばよいわけです。
まとめ
本記事では、1次マルコフモデルを正規分布との違いを軸に解説しました。要点を整理します。
- 見ているものが違う: 正規分布は「1つの値のばらつき」(順序なし・i.i.d.)を、1次マルコフモデルは「次は今だけに依存する連なり」(順序=記憶)を表す
- 同時分布の分解が分かれ道: i.i.d. は $\prod_t p(x_t)$、1次マルコフは $p(x_1)\prod_t p(x_t\mid x_{t-1})$。矢印を全部消したのが独立
- 順序シャッフルで判定できる: 正規分布はヒストグラムを見るだけなので順序に無関心、1次マルコフの情報は並びに宿るのでシャッフルで壊れる
- 自己相関で記憶を測る: AR(1) では $\rho_k = \phi^k$ の指数減衰。i.i.d. は $\phi=0$ でラグ1以降ゼロ
- AR(1) が両者を統合する: 遷移は正規分布 $N(\phi x_{t-1}, \sigma^2)$、定常分布は正規分布 $N(0, \sigma^2/(1-\phi^2))$。$\phi=0$ で i.i.d. 正規分布に退化する
- 独立は記憶ゼロの1次マルコフという包含関係で、両者は同じ枠組みに収まる
「正規分布か、マルコフモデルか」は二者択一ではありません。正規分布という『ばらつきの形』を、マルコフという『時間の連なり』に埋め込む——この視点を持つと、時系列モデル・状態空間モデル・カルマンフィルタ・HMM といった一段上のモデルが、すべて「正規分布とマルコフ性の組み合わせ」として見通せるようになります。
次のステップとして、以下の記事も参考にしてください。