M4.0 15 分鐘閱讀 2026年9月

M4.0 明天的天氣只看今天:Markov Chain 與 Transition Matrix

從一份氣象紀錄開始

你手上有一個城市過去幾年的天氣紀錄,每天只記「晴」或「雨」。翻過幾頁之後你發現一個規律:晴天的隔天有八成還是晴天;雨天的隔天有四成會放晴。 沒有別的訊息——前天、上週、季節都先不看。

今天是晴天。請先用直覺回答兩個問題,並且寫下你有多確定、依據是什麼:

  1. 接下來三天都是晴天的機率大概多少?
  2. 一百天之後那一天是晴天的機率大概多少?——它還跟「今天是晴天」有關嗎?

第一題多數人會算 0.8×0.8×0.80.510.8\times0.8\times0.8\approx0.51,而且很有信心。第二題的答案就分歧了:有人說「一百天太遠了,跟今天無關,晴雨各半」;有人說「晴天比較黏,應該晴天多一點,大概六成?」;也有人說「八成」,因為「天氣傾向不變」。這三個答案裡只有一個對,而且對的那個人通常也說不出為什麼是那個數字、以及什麼時候這個數字會失效。這一篇就是要把這件事說清楚。

課堂提問Q1

先不急著算。把「晴天的隔天八成晴、雨天的隔天四成晴」翻成數學:這裡的隨機變數是什麼?我們要算的量又是什麼?「只看今天」這個假設在數學上要怎麼寫?

先想一想,再展開看整理後的答案

最直覺的說法是「隨機變數是天氣」,這是對的但不夠精確——每一天各有一個。令 Xn{S,R}X_n\in\{\text{S},\text{R}\} 是第 nn 天的天氣(S 晴、R 雨),n=0n=0 是今天。一整串 X0,X1,X2,X_0,X_1,X_2,\dots 是一個 stochastic process(隨時間演進的一串隨機變數)。

「只看今天」寫成一條關於 conditional probability 的等式:

Pr(Xn+1=yXn=x, Xn1,,X0)=Pr(Xn+1=yXn=x).\Pr(X_{n+1}=y\mid X_n=x,\ X_{n-1},\dots,X_0)=\Pr(X_{n+1}=y\mid X_n=x).

給了今天,再多給過去任何資訊都不改變明天的分佈。這叫 Markov property。紀錄裡那兩個數字則是另一個假設:Pr(Xn+1=yXn=x)\Pr(X_{n+1}=y\mid X_n=x) 不隨 nn(time-homogeneous,規則每天一樣)。

我們要算的量有兩個:第一題是一個聯合事件的機率 Pr(X1=X2=X3=SX0=S)\Pr(X_1=X_2=X_3=\text{S}\mid X_0=\text{S});第二題是一個邊際分佈 Pr(X100=SX0=S)\Pr(X_{100}=\text{S}\mid X_0=\text{S})。兩個都只由那兩個數字決定——這正是 Markov property 的威力:整個過程的所有機率,都由「一步的規則」生出來。

先抓住這個畫面

想像一顆棋子在兩個格子之間跳。每一天它擲一次骰子決定要不要換格子:站在「晴」格時,八成留下、兩成跳到「雨」格;站在「雨」格時,六成留下、四成跳回「晴」格。棋子沒有記憶——它不知道自己在這一格已經待了幾天,每天擲的骰子都一樣。

現在不放一顆棋子,放一千顆,全部從「晴」格出發。第一天結束後約八百顆留在「晴」、兩百顆到了「雨」。第二天,「晴」格裡的八百顆有八成留下(640),「雨」格裡的兩百顆有四成回來(80),所以「晴」格有 720 顆。第三天再算一次……你會看到「晴」格的數量往某個值靠過去,然後不再動。那個不再動的分配,就是這一篇要找的東西。 而「往它靠過去」的速度,決定了「一百天後跟今天有沒有關係」。

把畫面寫成矩陣

把「一步的規則」排成一張表,列是今天、欄是明天:

P=(P(S,S)P(S,R)P(R,S)P(R,R))=(0.80.20.40.6),P(x,y)=Pr(Xn+1=yXn=x).P=\begin{pmatrix} P(\text{S},\text{S}) & P(\text{S},\text{R})\\ P(\text{R},\text{S}) & P(\text{R},\text{R})\end{pmatrix} =\begin{pmatrix}0.8&0.2\\0.4&0.6\end{pmatrix},\qquad P(x,y)=\Pr(X_{n+1}=y\mid X_n=x).

這叫 transition matrix。它每一列的和都是 1(今天是 xx,明天總得在某一格),元素都非負;符合這兩個條件的矩陣叫 stochastic matrix。

把「今天的分佈」寫成列向量 p0=(Pr(X0=S),Pr(X0=R))p_0=(\Pr(X_0=\text{S}),\Pr(X_0=\text{R}))。明天的分佈是

p1(y)=xp0(x)P(x,y)p1=p0P.p_1(y)=\sum_x p_0(x)\,P(x,y)\quad\Longleftrightarrow\quad p_1=p_0P .

這一行是 law of total probability:明天在 yy,要嘛今天在 S 然後跳到 yy,要嘛今天在 R 然後跳到 yy。再走一天就是再乘一次,所以

pn=p0Pn.p_n=p_0P^n .

矩陣乘法就是「把一步的規則連續套 nn 次」。 兩步的轉移 P2(x,y)=zP(x,z)P(z,y)P^2(x,y)=\sum_z P(x,z)P(z,y) 是「先到某個中繼 zz、再到 yy」對所有 zz 加總,這叫 Chapman–Kolmogorov 等式,它只是矩陣乘法的定義。

第一題現在是三個條件機率相乘(Markov property 讓每一步只看前一步):

Pr(X1=X2=X3=SX0=S)=P(S,S)3=0.83=0.512.\Pr(X_1=X_2=X_3=\text{S}\mid X_0=\text{S})=P(\text{S},\text{S})^3=0.8^3=0.512 .

直覺答案對了,而且現在知道它為什麼對:三個 0.80.8 能直接相乘,靠的正是 Markov property;如果「連晴兩天後第三天更容易下雨」,這條就不成立。

不再動的分配

一個分佈 π\pi 如果滿足

πP=π,xπ(x)=1,\pi P=\pi,\qquad \sum_x\pi(x)=1,

就叫 stationary distribution:今天的分配是 π\pi,明天還是 π\pi。用 2 狀態手算,πP=π\pi P=\pi 的第一個分量是 0.8πS+0.4πR=πS0.8\pi_\text{S}+0.4\pi_\text{R}=\pi_\text{S},整理成 0.2πS=0.4πR0.2\,\pi_\text{S}=0.4\,\pi_\text{R}。讀法:每天從 S 流出的量等於從 R 流回的量(流量平衡)。加上 πS+πR=1\pi_\text{S}+\pi_\text{R}=1

π=(23,13).\pi=\Big(\tfrac23,\tfrac13\Big).

一般地,π\piPP 對應 eigenvalue 11 的左 eigenvector。任何 stochastic matrix 都有 eigenvalue 11(因為 P1=1P\mathbb 1=\mathbb 1,右 eigenvector 是全 1 向量),所以 π\pi 一定存在;有限狀態、且任兩格互相到得了(irreducible)時它唯一。

多快忘掉今天

第二題問的是 p100p_{100}。用 π\pipn(S)p_n(\text{S}) 分解成「極限」加「離極限的差」。令 dn=pn(S)23d_n=p_n(\text{S})-\tfrac23。從 pn+1(S)=0.8pn(S)+0.4(1pn(S))=0.4pn(S)+0.4p_{n+1}(\text{S})=0.8\,p_n(\text{S})+0.4\,(1-p_n(\text{S}))=0.4\,p_n(\text{S})+0.4 可得

dn+1=0.4dnpn(S)=23+(p0(S)23)0.4n.d_{n+1}=0.4\,d_n\quad\Longrightarrow\quad p_n(\text{S})=\tfrac23+\Big(p_0(\text{S})-\tfrac23\Big)\,0.4^{\,n}.

(驗算:p0(S)=1p_0(\text{S})=1p1(S)=23+130.4=0.8p_1(\text{S})=\tfrac23+\tfrac13\cdot0.4=0.8,正確。)那個 0.4=0.8+0.610.4=0.8+0.6-1PP 的第二個 eigenvalue λ2\lambda_2。今天的影響每天縮成 0.40.4 倍:五天後剩 0.451%0.4^5\approx1\%,一百天後是 0.410010400.4^{100}\approx10^{-40},什麼都不剩。

所以第二題的答案是 230.667\tfrac23\approx0.667跟今天是晴是雨無關。「各半」錯在忽略了規則不對稱(晴天比雨天黏);「八成」錯在把「一天的規則」當成「長期的比例」——晴天雖然八成留下,但一旦掉進雨天要花幾天才回來,長期比例是兩種黏性相對強弱的結果,πS/πR=P(R,S)/P(S,R)=0.4/0.2=2\pi_\text{S}/\pi_\text{R}=P(\text{R},\text{S})/P(\text{S},\text{R})=0.4/0.2=2

展開細節一般的收斂敘述:Perron–Frobenius 給的三件事

有限狀態、irreducible(任兩格互相到得了)且 aperiodic(不會被鎖在固定的節拍裡,例如「每天一定換格」那種)的 chain,滿足:(i) stationary distribution π\pi 唯一;(ii) 對任何 p0p_0p0Pnπp_0P^n\to\pi;(iii) 收斂速度是幾何的,p0PnπCλ2n\|p_0P^n-\pi\|\le C\,|\lambda_2|^n,其中 λ2\lambda_2PP 絕對值第二大的 eigenvalue。上面 2 狀態的計算就是這個定理的手算版本:λ2=0.4\lambda_2=0.4C=p0(S)23C=|p_0(\text{S})-\tfrac23|。標準證明見 Norris [1] 第 1 章或 Levin–Peres [3] 第 4 章。

另外,π\pi 還有一個「時間平均」的意義:一條單一軌跡裡,晴天所佔的天數比例以機率 1 收斂到 πS\pi_\text{S}(ergodic theorem)。這是為什麼「一千顆棋子的分配」與「看一條紀錄很多年」會給同一個 23\tfrac23

回頭看那兩個直覺

理論的判斷。 在「只看今天、規則不隨時間變」這兩個假設下:連續三天晴的機率是 0.5120.512;一百天後晴的機率是 23\tfrac23,與今天無關,而且大約五到十天後就已經看不出差別。這兩個結論的全部依據就是 PP 的四個數字。直覺答對第一題,是因為「相乘」剛好就是 Markov property;直覺在第二題分歧,是因為「長期比例」不是任何單一數字能讀出來的——它是流量平衡 πSP(S,R)=πRP(R,S)\pi_\text{S}P(\text{S},\text{R})=\pi_\text{R}P(\text{R},\text{S}) 的解。

哪裡可能失準。 兩個假設都可能不成立。真實天氣有季節(PPnn 變,就沒有單一的 π\pi),也可能有超過一天的記憶(連晴幾天後轉雨的機率變高,Markov property 失效——但注意,把「昨天+今天」合起來當一個狀態,它又變回 Markov chain,只是狀態變成四個)。另外 aperiodic 也是必要的:如果 P=(0110)P=\begin{pmatrix}0&1\\1&0\end{pmatrix}(每天一定變天),π=(12,12)\pi=(\tfrac12,\tfrac12) 仍然存在,但 pnp_n 永遠在 (1,0)(1,0)(0,1)(0,1) 之間跳,永遠不會「忘掉今天」。

動手跑一次

理論預測有三個數字可以對:0.5120.51223\tfrac23、以及「dnd_n 每天縮 0.40.4 倍」。用十行程式驗證,然後刻意違反一個假設。

import numpy as np
rng = np.random.default_rng(0)
P = np.array([[0.8, 0.2], [0.4, 0.6]])          # 0 = S, 1 = R
N, x = 200_000, 0                                # 今天晴
path = np.empty(N, dtype=int)
for n in range(N):
    x = rng.choice(2, p=P[x]); path[n] = x
print("長期晴天比例", (path == 0).mean())         # ≈ 0.667
p = np.array([1.0, 0.0])
for n in range(1, 6):
    p = p @ P; print(n, p[0], p[0] - 2/3)          # 差每天 ×0.4
# 違反 Markov:連晴兩天後轉雨機率升到 0.5(二階規則)

先消化一下

想一想

一個網站有三個頁面,紀錄顯示使用者「下一個點哪一頁」只跟「現在在哪一頁」有關。你想知道使用者長期停留在各頁的時間比例。該用什麼工具?

想一想

把天氣的 transition matrix 換成 P=(0110)P=\begin{pmatrix}0&1\\1&0\end{pmatrix}(晴雨每天必換)。下列哪個敘述正確?

想一想

紀錄顯示這個城市「連晴三天後,第四天下雨的機率會從 0.2 升到 0.5」。對「連續三天晴的機率」與「長期晴天比例」兩個結論,各有什麼影響?

參考文獻

  1. Norris, J. R. Markov Chains. Cambridge University Press, 1997.(第 1 章:離散時間 chain、transition matrix、stationary distribution 與收斂定理。)
  2. Grimmett, G., Stirzaker, D. Probability and Random Processes, 3rd ed. Oxford University Press, 2001.(第 6 章 Markov chains。)
  3. Levin, D. A., Peres, Y. Markov Chains and Mixing Times, 2nd ed. AMS, 2017.(第 4 章:收斂速度與 λ2\lambda_2。)