MODULE 03 — COVARIANCE & THE COVARIANCE MATRIX

兩件事會不會一起動 —— 共變異數與它的矩陣

玩完這關,你會親手把「兩欄數字」壓成一個數字、再排成一張 2×2 表格。而那張表格,就是 PCA 唯一吃的那道菜。

① 這關在解什麼問題

你手上有一份實價登錄:500 筆成交,每筆有坪數總價兩欄。你算得出坪數的標準差是 8.4 坪、 總價的標準差是 620 萬 —— 兩個數字都很正確,而且都很沒用,因為你真正想知道的那句話它們一個字都沒回答:

坪數大的物件,是不是同時也比較貴?而且「同時」的程度有多強?強到可以用坪數猜價格嗎?

標準差的結構性缺陷在這裡:它一次只看一欄。坪數的標準差不管總價那欄長什麼樣、總價的標準差也不管坪數 —— 你可以把總價那欄整個打亂順序,兩個標準差完全不變,但「一起動」這件事已經被你毀掉了。 所以答案不可能藏在任何單一欄位的統計量裡,它必須是一個跨兩欄、而且會被配對順序影響的量。

這關給你的工具叫共變異數(covariance),以及把它排成表格之後的共變異數矩陣。 後者是這份教材的軸心零件:04 關要拆它、05 關整個 PCA 就是在對它動手。

上一關留下的洞

02 關的結論是一句很漂亮的話:把一欄數字中心化,它就是一條向量, 而變異數 = 這條向量跟自己的內積 ÷ (n−1)

既然是「跟自己」的內積,那下一個問題根本是自動冒出來的:跟別人的內積是什麼意思? 這關就是在回答這一句,而答案短得有點好笑 —— 那就是共變異數,什麼新東西都不用學。

② 從國中的「正負相乘」開始

先把國中座標平面搬過來,但做一個關鍵動作:把原點搬到平均。每個點的座標不再寫「唸了 12 小時、考 16 分」, 而是寫「比平均多唸 3.2 小時、比平均多考 4.6 分」。以平均為中心畫一個十字,平面被切成四塊:

國中的「負負得正」在這裡突然變得很有意義:它讓「一起低」跟「一起高」算成同一件事,因為兩者都是同步。 共變異數就是把每個點的(x 偏差 × y 偏差)全部加起來、再平均掉,讓正負互相抵消,剩下的就是這團資料的傾向

這張圖在幹嘛
你會看到什麼:一個已經把原點搬到平均的座標平面。四個象限標了「(+)×(+)=+」這種算式, 淡綠底=相乘為正、淡紅底=相乘為負。中間那顆點是某一個同學,虛線框是他的 「x 偏差 × y 偏差」矩形。 你可以動什麼:只有一件事:拖那顆點。它會在四個象限之間跑,顏色與虛線框跟著變。 要看出什麼:象限決定符號,離十字的距離決定份量 —— 這句話講完,共變異數就沒有第三個機制了。

拖動那顆點走遍四個象限,看它的貢獻怎麼變號。虛線框的面積就是這個點的貢獻大小 —— 離十字越遠,框越大,發言權越大。

這一點的貢獻(x 偏差 × y 偏差)
x − x̄ 比平均多唸幾小時
y − ȳ 比平均多考幾分
相乘
所在象限
這一點在說什麼

為什麼要除以 (n−1)

02 關的變異數同一個理由:你想要的是「平均而言的傾向」,不是「資料越多數字越大」。 分母用 n−1 而不是 n,是因為 x̄ 和 ȳ 是從同一批資料估出來的,已經吃掉一個自由度。 全站統一樣本版(ddof = 1),LAB.M 的預設值就是它。

③ 主實驗:九個同學的唸書時數與分數

橫軸是每週唸書時數(小時),縱軸是週考分數(滿分 20)。九個點都可以拖。 綠點正在把共變異數往上推,紅點正在往下扯。

這張圖在幹嘛
你會看到什麼:九個同學的散點;藍虛線 = x̄(平均時數)、 橘虛線 = ȳ(平均分數),交叉點是新原點;點是 綠色代表它把 cov 往上推、紅色代表往下扯。 右邊每個點各有一根貢獻條(往右=正、往左=負)。 你可以動什麼:九個點都可以拖;四顆按鈕可以一次換掉整組資料(正相關 / 負相關 / 無關 / 一點離群值翻盤)。 拖到的那個點會畫出它到新原點的矩形。 要看出什麼:cov 是所有點的貢獻抵消之後剩下的傾向;而一個離群值就能改寫整份結論 —— 因為它的貢獻是兩個偏差相乘,以平方的速度放大。

藍虛線 = x̄(平均時數)、橘虛線 = ȳ(平均分數),交叉點就是新原點。 背景淡綠是正貢獻象限、淡紅是負貢獻象限。拖動任一點會畫出它到新原點的矩形 —— 那塊面積就是它的貢獻。

共變異數 cov(時數, 分數)單位:小時 × 分
相關係數 corr(沒有單位,永遠在 −1 ~ 1)
x̄ 平均時數
ȳ 平均分數
Σ(x−x̄)(y−ȳ) 貢獻總和
÷ (n−1)
var(時數) = 02 關的變異數
var(分數)
每個點對 cov 的貢獻(往右=正,往左=負)
現在發生什麼事

先玩這兩個

① 按「無關」,然後只拖最右邊那一點往右上角拉到底。貢獻條會冒出一根長長的綠色,cov 從幾乎 0 一路衝上去 —— 一個點就能改寫整份結論,這正是「一點離群值翻盤」那個 preset 想讓你看的事。

② 從「正相關」開始,把最右邊那個高分同學垂直往下拖到分數很低。他的貢獻條會翻紅、整體 cov 明顯掉下來 —— 因為他從「右上」跑到了「右下」象限。象限決定符號,離十字的距離決定份量,就這兩件事。

④ 共變異數就是內積 —— 把這座橋整條搭完

上面那個 Σ(x−x̄)(y−ȳ) 你會算了,但它跟01 關的箭頭、影子、夾角 有什麼關係,到現在還是一句「聽說是同一件事」。這一節把橋一格一格鋪到底 —— 而且鋪完之後你會多拿到一個東西: 迴歸的斜率

第一步:把資料筆數砍到最小,直到看得見為止

九個同學的中心化向量是 9 維的,畫不出來。所以先砍到只剩三個同學(叫他們甲、乙、丙), 每人只有兩個數字:唸書時數與分數。中心化之後,時數那一欄變成三個偏差,排成一條向量:

cx = (甲比平均多唸幾小時,乙比平均多唸幾小時,丙比平均多唸幾小時) cy 同理,只是換成「比平均多考幾分」。三個同學 → 三格 → 這是一條 3 維向量。

3 維還是不好畫。但這裡有一件事救了我們:那三格加起來一定是 0。 因為平均就是從這三個數字算出來的 —— 減掉平均之後,正的部分和負的部分必然剛好抵光 (下面那張表最後一列會現場驗證,你怎麼拖它都是 0.00)。

「三個數字,但加起來被綁死是 0」= 其實只有兩個是自由的(這就是分母為什麼是 n−1 而不是 n 的真正原因)。 兩個自由度 = 一張平面。所以我們可以把 cxcy 原封不動地畫成平面上的兩支箭頭。

那張平面的兩根軸是什麼(唯一需要一點信任的地方,但我們會現場對帳)

圖上橫軸是 (甲−乙)/√2、縱軸是 (甲+乙−2×丙)/√6。 你完全不用管這兩條式子從哪來,唯一要知道的是:它們互相垂直、長度都是 1 (就像普通座標紙的 x 軸和 y 軸一樣)。這代表換到這張平面上不會扭曲任何長度或角度

不用相信我:讀數盤裡有兩行刻意並列 —— 一行是「圖上兩支箭頭的內積」, 一行是「用三個同學的偏差直接乘出來的內積」。它們永遠是同一個數字。

這張圖在幹嘛
你會看到什麼:上圖(向量空間)藍箭頭 cx(時數那一欄)、 橘箭頭 cy(分數那一欄)、綠粗箭頭= cy 投影到 cx 上的影子、紅虛箭頭=剩下那塊垂直分量, 交會處有直角記號,中間有夾角 θ 的弧線。
下圖(資料空間):甲乙丙三個人的散點、平均十字、以及綠色迴歸線
你可以動什麼:藍點橘點(就是兩支箭頭的尖端); 或按四顆按鈕直接跳到「同方向 / 垂直 / 反方向 / 完全平行」。你一拖,下圖那三個同學的成績就跟著改 —— 因為那兩支箭頭就是他們的成績。 要看出什麼:上面那三個大數字永遠一模一樣(內積 = 長度×長度×cos θ = cov×(n−1)); 而箭頭的夾角決定 cov 的正負:小於 90° 正、垂直就是 0、大於 90° 負。

向量空間:一支箭頭 = 一整欄資料。是時數欄、是分數欄。 是「cy 之中沿著 cx 的那一塊」,跟 01 關的投影是同一張圖、同一組顏色。

資料空間:同一件事的另一種畫法 —— 一個點 = 一個同學。 綠線的斜率就是上圖那個投影係數(下面第三段會對數字)。

cx · cy
內積:對應格子相乘再全部加起來
|cx| |cy| cos θ
長度 × 長度 × 夾角的餘弦
cov(x, y) × (n−1)
從下圖三個同學的真實成績算出來
三者的最大差距
內積(圖上兩支箭頭)
內積(用三個偏差,3 維)
|cx| 藍箭頭長度
|cy| 橘箭頭長度
θ 兩支箭頭的夾角
cos θ = 相關係數 r
cov(時數, 分數)
corr(時數, 分數) 對帳用
var(時數) = |cx|²/(n−1)
投影係數(綠箭頭 ÷ 藍箭頭)
cov ÷ var(時數) = 迴歸斜率
兩支箭頭的三格 = 三個同學(拖箭頭這裡就會變)
同學時數分數 cx 的一格cy 的一格相乘
現在這兩支箭頭在說什麼

為什麼是三個同學,不是兩個

兩個同學會壞掉:只有兩筆資料時,中心化後的兩格必然是「一正一負、大小相同」 (因為要加起來等於 0),所以 cx 一定長成 (d, −d) 這個樣子。 兩支箭頭永遠躺在同一條線上,夾角只可能是 0° 或 180°,corr 只可能是 ±1 —— 「垂直 → cov = 0」那一格根本畫不出來。三筆是能同時演出正、零、負的最小筆數,所以用三個。

第二步:三句對應,這是本節的結論

把上面拖出來的東西寫成三句話。反白那一列就是你現在的狀態

兩支箭頭的關係夾角 θ內積 cx · cycov(x, y)影子(投影)
朝同一邊< 90° 綠箭頭跟藍箭頭同向
互相垂直= 90°00 綠箭頭縮成一點(藍這把尺量不到橘)
朝相反邊> 90° 綠箭頭指向藍箭頭的後方

三句話合起來就是一條等式,而它是01 關那條的原封不動搬過來:

cov(x, y) = (cx · cy) / (n − 1) = |cx| |cy| cos θ / (n − 1) 所以 cov 的正負號完全由 cos θ 決定(前面兩個長度永遠 ≥ 0)。 而把兩個長度除掉,剩下的就是 cos θ 本人 = 相關係數 —— 那是下一節的主題。
所以這一段的結論是

共變異數不是「跟內積有關」,它就是內積本人,只差一個除以 (n−1)。 「兩件事會不會一起動」這個統計問題,被翻譯成「兩支箭頭是不是朝同一邊」這個幾何問題 —— 一步都沒有遺漏。

第三步:投影係數 = 迴歸的斜率(順手拿到的贈品)

上面那張圖裡的綠箭頭還沒被榨乾。01 關說過, 把 cy 投影到 cx 上,那個影子是 cx 的幾倍,這個倍數叫投影係數

投影係數 = (cy · cx) / (cx · cx) = cov(x, y) / var(x) 上下同時除以 (n−1),分子變成 cov、分母變成 var —— 就這麼一步,沒有別的。

而這個數字有一個你天天在用的名字:最小平方迴歸的斜率。也就是「x 每多 1 單位,y 平均多多少」。 讀數盤最後兩行就是在對這件事的帳:投影係數cov ÷ var(時數) 永遠是同一個數字, 而它就是下圖那條綠線的斜率

為什麼「投影」剛好就是「最好的直線」

直覺一句話:迴歸在做的事是「用 cx 的倍數去逼近 cy,讓剩下的誤差最小」。而「誤差最小」在幾何上就是 誤差必須垂直於 cx(不垂直的話,沿著 cx 再挪一點就能更短)—— 那正是圖上紅虛箭頭跟直角記號在演的事。所以迴歸 = 投影, 最小平方法就是「取影子」的別名。

完整的推導(含多個變數、含截距、含 (XTX)−1XTy 那條公式) 不在這份教材的射程內 —— 那是迴歸分析那本書的內容。這裡只要你抓到一件事: 那條式子裡的 XTX,就是這一關的共變異數矩陣 會拆給你看)。

第四步:回到九筆資料 —— 畫不出來,但一個字都不用改

三個同學能畫,九個不能,因為 cx 變成 9 維向量,而你沒有 9 維的紙。 但算法完全沒有變:內積還是「對應格子相乘再加起來」,只是從 3 格變成 9 格;長度還是「平方和開根號」; 夾角還是「內積除以兩個長度再取反餘弦」。維度只是 for 迴圈跑幾圈的差別。

cx · cy = Σi (xi − x̄)(yi − ȳ) i 從 1 跑到 n。n = 3 就是三格,n = 500 就是五百格,n = 一百萬也一樣。 這條式子跟 ③ 主實驗讀數盤裡那行「Σ(x−x̄)(y−ȳ) 貢獻總和」是同一個東西

02 關已經把這件事在「跟自己」的情況下講過一次了: 變異數 = cx 跟自己的內積 ÷ (n−1)。這一關只是把第二個參數換成別人, 於是整條主線收成一句話:

內積 → 跟自己 = 變異數 → 跟別人 = 共變異數 → 全部兩兩排成表 = 共變異數矩陣 沒有任何新公式登場過。從 01 關到這裡,你只學了一個 dot

⑤ 為什麼有了共變異數還要相關係數

共變異數有一個致命的實務問題:它帶單位。上面那個數字的單位是「小時 × 分」,你根本沒辦法回答 「18.6 小時·分算大還是小」。更糟的是,我只要換個單位、資料一個點都沒動,這個數字就會整個變掉。

這張圖在幹嘛
你會看到什麼:還是 那九個同學(青色點) 加上平均十字。注意圖上唯一會變的東西是座標軸旁邊那些刻度數字,點本身一格都不會動。 你可以動什麼:兩個滑桿分別把 x、y 的單位放大(例如小時→分鐘→秒、20 分制→100 分制); 四顆按鈕是常見倍數的捷徑。它們改的是「單位」,不是資料。 要看出什麼:形狀完全沒變,但 cov 暴衝好幾千倍、corr 連第 6 位小數都不動 —— cov 帶單位,corr 不帶。最後一行還會證明 corr 就是兩條中心化向量的 cos。

拉兩個滑桿(把時數換成分鐘、把 20 分制換成 100 分制),盯著這張圖: 形狀一模一樣、點的相對位置完全沒動,只有座標軸上的刻度數字變了。然後看右邊 cov 怎麼暴衝、corr 怎麼一動不動。

x 單位放大倍數(時數)×1
y 單位放大倍數(分數)×1
cov(原始單位)
cov(換單位後)
cov 被放大了幾倍
corr(原始單位)
corr(換單位後)
兩條中心化向量的 cos
實測結果

共變異數 cov相關係數 corr
單位小時 × 分(沒人看得懂)沒有單位
換單位會不會變會,乘上兩邊的倍數不會,完全免疫
範圍−∞ ~ +∞,大小沒有基準固定 −1 ~ +1
能不能跨題目比不能(房價的 cov 跟身高的 cov 沒得比)可以,0.8 就是比 0.3 強
能不能加減、排成矩陣可以,這是它存在的理由可以,但丟掉了各欄的量級資訊
幾何身分兩條中心化向量的內積同一組向量的 cos
接回 01 關

讀數盤最後一行不是巧合,是同一條算式01 關的餘弦相似度是「內積除以兩條向量的長度」, 目的就是把長度的影響洗掉、只留方向。把 x 那欄中心化得到 cx、 y 那欄中心化得到 cy,那麼:

corr(x, y) = (cx · cy) / (|cx| |cy|) = cos θ 換單位=把向量整條拉長,方向沒動 → cos 不動。這就是 corr 對單位免疫的全部原因。

於是 corr 的兩個性質完全不用背,直接從 01 關繼承:cos 一定落在 −1 ~ 1; 而 |corr| = 1 就代表 θ = 0° 或 180°,兩條中心化向量完全平行 —— 平行的意思是 cy = k·cx,也就是所有點精準落在一條直線上。 你可以在上面主實驗把九個點排成一條斜線試試,corr 會走到 ±1.000。

⑥ 共變異數矩陣:把所有內積排成一張表

現在有兩欄,於是有四種配對:x 跟 x、x 跟 y、y 跟 x、y 跟 y。四個內積排成 2×2,就是共變異數矩陣:

C = var(x)cov(x, y)cov(x, y)var(y) 對角線是「每一欄自己有多散」(02 關),非對角線是「兩欄一起動的程度」(這一關)。

下面四格熱力圖吃的就是上面主實驗那份資料(你在上面拖點,這裡會跟著變)。顏色表示正負與大小: 綠=正紅=負,越深代表絕對值越大。

這張圖在幹嘛
你會看到什麼:上面四格=共變異數矩陣 C 的四個數字(綠=正紅=負,底色越深絕對值越大)。下面那張圖中心化後的九個點 (原點就是新原點),軸上的藍色刻痕是每個點的 x′ 座標、 橘色刻痕是 y′ 座標 —— 刻痕散得越開,對角線那個數字越大。 你可以動什麼:一個滑桿:把整團資料轉幾度(0°~180°)。 也可以回 拖點,這四格會跟著變。 要看出什麼:轉的時候對角線兩個數字瘋狂互相搬東西,但它們的和從頭到尾不動(那個和叫 tr(C)); 而某個特定角度會讓非對角線變成 0 —— 那個角度就是 PCA 的答案。
C₁₁ = var(x)
x 欄的中心化向量跟自己的內積 ÷ (n−1):唸書時數自己有多散。
C₁₂ = cov(x, y)
x 的中心化向量 · y 的中心化向量 ÷ (n−1):兩欄一起動的程度。
C₂₁ = cov(y, x)
跟右上是同一個數字。因為內積可交換(a·b = b·a),所以 C 必定對稱。
C₂₂ = var(y)
y 欄的中心化向量跟自己的內積 ÷ (n−1):分數自己有多散。

這張圖是中心化後的那團資料(原點就是新原點)。軸上的藍色刻痕是每個點的 x 座標、 橘色刻痕是 y 座標 —— 它們的散開程度就是對角線那兩個數字。

把整團資料轉幾度
C₁₁ var(x′)
C₂₂ var(y′)
C₁₂ = C₂₁ cov
corr(x′, y′)
C₁₁ + C₂₂(對角線和)
轉的時候發生什麼事

順手發現的不變量

你轉了半圈,對角線兩個數字瘋狂互相搬東西,但它們的和從頭到尾沒動過。這個和叫矩陣的跡(trace), 意思是「這團資料的總變異量」—— 轉座標軸不會憑空生出或消滅資訊,只會換一種分法。 05 關算「主軸解釋了幾成變異」,分母就是它。

現場提問 —— 這關唯一不給答案的問題

慢慢拉那個滑桿,你會抓到某個角度讓非對角線趨近 0(讀數會變綠並跳出提示)。非對角線 = 0 的意思是: 在這組新座標軸下,兩個座標完全不一起動、彼此無關。整團資料被擺正了 —— 一根軸吃下絕大部分的變異,另一根軸只剩薄薄一層。

能不能不用手拉、直接算出那個角度?它有什麼特別?這個問題的答案就是 PCA 的全部內容 —— 那個方向叫主軸,算它的工具是04 關的特徵向量,成品在 05 關的角度掃描。先把「非對角線歸零」這個畫面記住,那是你之後所有直覺的來源。 (順手記住你拉到的那個角度 —— 這份九個同學的資料,答案是 52.5°;轉半圈後的 142.5° 是同一根軸。05 關會換成一份身高體重的資料,用一行算式把角度直接解出來,你回來對一下這兩件事是不是同一回事。)

n 欄就是 n×n:三欄的靜態示範

共變異數矩陣沒有「只能 2×2」這回事。十個人量了身高(cm)體重(kg)鞋號(EU)三欄, 配對方式從 4 種變成 9 種,於是矩陣是 3×3。下表每一格都是頁面載入時用 JS 真的算出來的 (合成資料,不是真的量誰):

cov身高體重鞋號

淡底那條對角線一路都是變異數(身高自己的、體重自己的、鞋號自己的),因為 cov(a, a) 就是 var(a)。 非對角線一定沿對角線鏡射對稱。每一格的單位都不一樣(cm²、cm·kg、kg·EU…)—— 這就是為什麼實務上會再看一張相關係數矩陣

corr身高體重鞋號

相關係數矩陣的對角線永遠是 1.000(任何東西跟自己完全相關),非對角線一律落在 −1 ~ 1,可以直接互相比大小。

⑦ 這個數字越大越小,到底要怎麼讀

你已經會算那張 C 了。真正卡人的是下一步:「18.61」這個數字算大還是算小? 這一節把「怎麼讀」拆成四件可以逐條檢查的事,每一件都用你在 ③ 主實驗拖出來的那份資料現場算給你看 —— 你回上面拖點,這一節的每個數字都會跟著變。

一、cov 的絕對大小本身沒有意義,因為它帶單位

這件事你在 ⑤ 換單位那個實驗已經親眼看過了:兩個滑桿一拉,散點圖的形狀一模一樣、 每個點的相對位置一格都沒動,只有座標軸上的刻度數字變了 —— 而 cov 從 18 暴衝到六萬多。這裡只把結論釘死:

cov(時數用小時
cov(時數改用,資料完全沒動)
現算

所以這一段的結論是

看 cov 的時候只准看三件事,其他都是幻覺:

  1. 正負號 —— 唯一不受單位影響的資訊(換單位只會乘上正的倍數)。
  2. 跟自己比 —— 跟同一張 C 裡的對角線比,也就是下面第三點的柯西上限。
  3. 轉成 corr —— 把單位洗掉之後才有「大小」可言。

反過來說:「這個 cov 是 18.61,所以關係中等」是一句沒有意義的話,因為 18.61 可以是 0.0052 也可以是 66996, 取決於你用什麼單位量。

二、正負號怎麼讀(這一半的資訊完全可靠)

符號是四象限投票的結果(② 那張圖),也是兩條中心化向量的夾角(④ 那張圖)。 下表反白的那一列就是你現在這份資料

cov 的符號兩條向量的夾角資料雲長什麼樣一句人話
cov > 0小於 90°(偏同一邊) 雲從左下往右上斜x 大的時候 y 通常也大 —— 唸得多的分數也高
cov ≈ 0約 90°(垂直) 雲是圓的、或平的、或對稱的曲線看不出直線傾向(注意:不等於無關,見 ⑩ 反例區
cov < 0大於 90°(偏相反邊) 雲從左上往右下斜x 大的時候 y 通常小 —— 一個高另一個就低

對角線沒有這個問題:C11C22 是變異數, 是「一堆平方加起來」,所以永遠 ≥ 0,永遠沒有符號可讀 —— 它們只回答「這一欄自己有多散」。

三、跟自己比:非對角線有一個天花板,而它占了幾成就是 |r|

這是把「大小」變成可讀量表的關鍵一步。非對角線不是隨便多大都行,它被對角線綁住

|C12| ≤ √(C11 · C22) 柯西–施瓦茲不等式。用向量的話講就一句廢話:|cx · cy| ≤ |cx| |cy| —— 因為中間差的就是 cos θ,而 cos 最大是 1。這裡不證,直接現場算給你看。
C₁₁ = var(時數)
C₂₂ = var(分數)
天花板 √(C₁₁ · C₂₂)
實際的 |C₁₂|
占了天花板幾 %
|r|(相關係數的絕對值)
兩者的差距
現算

所以這一段的結論是

「這個 cov 很大」正確的說法是「它頂到自己天花板的九成」。天花板由兩個對角線決定, 所以非對角線永遠要跟對角線一起讀 —— 單獨看一格數字,永遠讀不出東西。 而「占幾成」這個百分比不是別的東西,它就是 |r|,所以你其實一直都只需要 r。

四、相關係數量表:|r| 多少才叫「有關係」

把 cov 換成 r 之後才有量表可用。但先講一句誠實話:下面這張表是領域慣例,不是鐵則。 量化交易裡日報酬 r = 0.05 就足以賺錢;物理實驗的校正曲線 r = 0.98 會被退件說雜訊太大。 同一個 0.5,在不同領域是「很強」和「垃圾」。

這張圖在幹嘛
你會看到什麼:26 顆青色資料點、一條紫虛線(你拖出來的「趨勢主軸」, 點就是沿著它散開的)、一條綠線(從那 26 顆點真的算出來的迴歸線)。 你可以動什麼:紫色那顆把手(標「拖我」)。把它拉長 = 趨勢比雜訊更強 → 點更貼線; 轉方向 = 趨勢變正變負;按「換一組雜訊」會重抽那 26 顆點的隨機偏移。 要看出什麼:用眼睛猜這團點的 r 是多少,再看右邊讀數。你會發現自己系統性地高估 —— 一團看起來「明顯有關係」的雲,r 常常只有 0.6。這就是為什麼不能用眼睛下結論。

r 不是設定值,是從畫面上那 26 顆點真的算出來的LAB.M.corr)。 雜訊的大小固定不動,你唯一在改的是趨勢主軸的長度與方向。

相關係數 r(先猜再看)
|r|
r² —— x 能解釋 y 的變異幾 %
趨勢主軸的長度(訊號)
垂直方向的雜訊大小(固定)
現在這團點在說什麼

|r|r²(解釋掉幾成變異)實務上的意思(一般社會科學 / 工程慣例)
< 0.3< 9 % 幾乎看不出關係。這種強度不要拿來做決策,很可能是雜訊或樣本太小。
0.3 ~ 0.79 ~ 49 % 看得出趨勢,但單筆預測會錯得很兇。可以說「有傾向」,不能說「可以用 x 推 y」。
0.7 ~ 0.9549 ~ 90 % 很強,拿來預測有實用價值。大部分教科書說的「高度相關」在這一格。
> 0.95> 90 % 幾乎是同一件事。實務上看到這種值先懷疑自己:是不是兩欄本來就是同一個東西換算過來的(例如公分與英吋)。
量表的三個附註

r² 比 r 好懂:r = 0.7 聽起來很強,但 r² = 0.49,意思是「還有一半的變異你完全解釋不了」。 報告數字時給 r²,別人比較不會誤會。

r 大不代表斜率大。r 只講「點有多貼那條線」,不講那條線有多斜。 斜率是另一個數字(④ 那節的投影係數 cov/var(x))—— 一條幾乎水平但點貼得死緊的線,r 可以到 0.99。

n 很小的時候 r 隨便就很大。三個點就幾乎一定排得像一條線。看到 r = 0.9 先問「n 是多少」。

所以整個 ⑦ 的結論是

拿到一張共變異數矩陣,逐格盯著數字大小是白費工。正確的讀法只有三步: 對角線看「每一欄自己有多散」(永遠 ≥ 0,兩個加起來是 tr(C) = 總變異量); 非對角線只讀符號 要讀強弱就換成 r(= 非對角線占天花板的比例),再套量表。

⑧ 數學長怎樣

先看程式。整關的三個等式寫成 JS 就這幾行,而且核心只有 dot 一個函式:

// 一欄數字 = 一條 n 維向量(n = 幾筆資料,不是幾欄)
const hours = [2, 3.5, 5, 6.5, 8, 10.5, 12, 14.5, 17];
const score = [6,   9,  7,  12, 10,   11, 16,   14, 18];
const n = hours.length;

const mean   = (a) => a.reduce((s, v) => s + v, 0) / a.length;
const center = (a) => { const m = mean(a); return a.map((v) => v - m); };
const dot    = (a, b) => a.reduce((s, v, i) => s + v * b[i], 0);
const len    = (a) => Math.sqrt(dot(a, a));

const cx = center(hours), cy = center(score);   // 兩條中心化向量

const varx = dot(cx, cx) / (n - 1);             // 變異數:自己跟自己(02 關)
const cov  = dot(cx, cy) / (n - 1);             // 共變異數:換成跟別人 ← 就這樣
const corr = dot(cx, cy) / (len(cx) * len(cy)); // 把長度洗掉 ← 就是 cos(01 關)
const C    = [[varx, cov], [cov, dot(cy, cy) / (n - 1)]];   // 共變異數矩陣

這頁的互動全部走 LAB.M,不另外寫一份:LAB.M.cov(x, y)LAB.M.corr(x, y)LAB.M.covMatrix(pts)(ddof 預設 1,樣本版)。三欄示範的 3×3 是自己補的兩層迴圈,因為 LAB.M 只做 2×2。

換成符號版,注意它跟程式是逐字對應的:

cov(x, y) = Σi (xi − x̄)(yi − ȳ) / (n − 1) xi = 第 i 筆的 x 值(第 i 個同學唸幾小時) · x̄ = x 那欄的平均(x 加一橫,讀作 x-bar)
Σi = 把 i 從 1 跑到 n 全部加起來 · n = 資料筆數(9 個同學) · n − 1 = 自由度
corr(x, y) = cov(x, y) / (σx σy) = cos θ σx(sigma-x)= x 那欄的標準差 = √var(x) · θ = 兩條中心化向量的夾角
分母就是兩條向量的長度(各除以 √(n−1))—— 除以長度=把單位洗掉,只剩純粹的方向關係
C = cov(x, x)cov(x, y)cov(y, x)cov(y, y)var(x)cov(x, y)cov(x, y)var(y) C 的第 i 列第 j 欄 = cov(第 i 欄, 第 j 欄)。因為 cov(a, b) = cov(b, a)(內積可交換),所以 CT = C,永遠對稱。

如果你想要一眼看穿的寫法:把中心化後的資料排成一個 n×2 矩陣 X(每列一筆資料、每欄一個變數),那麼 C = XTX / (n − 1)。 上標 T 唸作轉置(transpose),意思就是把矩陣的列跟欄對調 —— 本來 n×2 的 X,轉過來就是 2×n 的 XT(原本一列一筆資料,變成一列一個變數)。 於是 XTX 這個動作的效果 就是把每一欄跟每一欄兩兩做內積、排成一張表 —— 共變異數矩陣沒有任何新東西,它是一張內積表。

本頁符號小抄(畫面上出現過的每一個字母)

這一頁凡是出現在圖上、讀數盤上、按鈕上的符號,全部列在這裡。看到不認識的符號就查這張表

符號怎麼唸它是什麼
xi / yix-sub-i 第 i 筆資料的兩個值。下標 i 就是「第幾個同學」。
nn 資料筆數(幾個同學),不是幾欄。主實驗是 9、 是 3。
/ ȳx-bar / y-bar 那一欄的平均。加一橫就是「取平均」。圖上的藍虛線 / 橘虛線就是它,交叉點是新原點。
cx / cyc-x / c-y 中心化向量:把一欄的每個值減掉自己那欄的平均之後排成的向量。有 n 筆資料它就有 n 格。 圖上那兩支箭頭就是它。
|cx|c-x 的長度(norm) 向量的長度 = √(每格平方加起來)。它跟標準差只差一個 √(n−1)。
cx · cyc-x dot c-y 內積:對應格子相乘再全部加起來。cov 就是它除以 (n−1)。
Σisigma(大寫) 加總:把 i 從 1 跑到 n,把後面那串東西全部加起來。
n − 1n 減一 自由度。分母不用 n 是因為 x̄ 是從同一批資料估出來的,已經吃掉一個自由度(全站統一 ddof = 1,樣本版)。 具體症狀在 的表格:三個偏差加起來一定是 0,所以只有 2 個是自由的。
θtheta 兩條中心化向量的夾角(0°~180°)。它決定 cov 的正負:<90° 正、=90° 零、>90° 負。
cos θcosine theta 夾角的餘弦,範圍 −1~1。它就是相關係數
σxsigma-x(小寫) x 那一欄的標準差 = √var(x)。跟大寫 Σ(加總)是完全不同的東西,只是長得像。
rr 相關係數(= corr = cos θ),永遠在 −1~1,沒有單位。
r squared r 的平方,讀作「拿 x 猜 y 能解釋掉 y 的變異的幾 %」。
C大寫 C 共變異數矩陣。兩欄資料 → 2×2;三欄 → 3×3。
C11 C22C-one-one / C-two-two C 的對角線:var(x) 與 var(y)。第一個下標是列、第二個是欄。永遠 ≥ 0。
C12 C21C-one-two / C-two-one C 的非對角線:cov(x, y)。兩格永遠是同一個數字(內積可交換)。
tr(C)trace C(跡) 對角線兩個數字相加 = C₁₁ + C₂₂ = 這團資料的總變異量。轉座標軸不會改變它。
X大寫 X 把中心化後的資料排成的矩陣:每一列一筆資料、每一欄一個變數(所以是 n×2)。
XTX transpose(轉置) 把 X 的列跟欄對調:n×2 變成 2×n(本來一列一筆資料,變成一列一個變數)。
XTXX-transpose X 這個乘法的效果就是把每一欄跟每一欄兩兩做內積、排成一張表。除以 (n−1) 就是 C。
甲 / 乙 / 丙 那三個同學的名字,對應 cx 的三格。
(甲−乙)/√2、(甲+乙−2×丙)/√6 那張圖的兩根座標軸。你不用管它們從哪來,唯一要知道的是 它們互相垂直、長度都是 1,所以圖上的長度/夾角/內積跟 3 維裡算出來的完全一樣 —— 那節的讀數盤有兩行在現場對帳。

⑨ 工程師的「原來如此」

一、投資組合的風險不是加法 —— cov 最貴的應用

你有兩檔資產,報酬率的標準差各是 σ1、σ2。直覺會說「各買一半,風險就是兩者平均」。錯。各半的組合,變異數是:

σp² = w1²σ1² + w2²σ2² + 2 w1w2 cov(r1, r2) w 是權重。前兩項是「各自的風險」,最後那項是這關的主角 —— 而且它可以是負的

如果兩檔的 cov 是的(一個跌的時候另一個常常漲),總風險會比兩檔各自的風險都小。 這不是話術,是上面那條等式的算術結果 —— 「分散風險」的嚴格定義就是「湊出負的共變異數」。 Markowitz 靠這件事拿了諾貝爾獎,而現代投組最佳化程式裡最大的那個物件,就是一張 n×n 的共變異數矩陣。

反過來也解釋了 2008 為什麼那麼慘:模型全都假設不同房貸資產的 cov 很低,結果崩盤時它們一起掉 —— cov 突然全部變成正的,號稱分散的組合其實是同一個押注。

二、卡爾曼濾波與雜訊白化 —— 共變異數矩陣=「我對自己有多沒把握」

卡爾曼濾波(GPS 定位、無人機姿態、SLAM、感測器融合的標準配備)追蹤的從來不是一個位置,而是 一個位置 + 一張共變異數矩陣 P。P 的對角線是「我對 x / y 各自的不確定度」,非對角線是「這兩個誤差會不會一起錯」。 把 P 畫出來就是誤差橢圓:對角線決定它多胖,非對角線決定它斜多少。整個演算法在做的事, 就是每收到一筆新觀測就更新這張矩陣。

另一個天天在用的是白化(whitening):如果輸入特徵之間的 cov 不是 0,代表你的維度彼此重複、 誤差面被拉成一條斜的長峽谷,梯度下降只能沿谷壁 zigzag。白化就是「把共變異數矩陣變成單位矩陣」—— 把非對角線壓成 0(=上面那個滑桿的目標)再把對角線正規化。BatchNorm 只做了對角線那一半, 做滿的版本叫 ZCA / PCA whitening,而怎麼把非對角線變 0,就是 0405 關的內容

⑩ 反例區:共變異數看不見的東西

共變異數很有用,但它有一個非常硬的限制:它只回答「有沒有直線傾向」。下面三組資料是三種不同的翻車方式,切換看看。

這張圖在幹嘛
你會看到什麼:青色資料點藍虛線 = x̄、 橘虛線 = ȳ,背景淡綠是正貢獻象限、淡紅是負貢獻象限。反例 ② 裡那顆 紅色大點是離群值。 你可以動什麼:上面三顆按鈕切換三組資料(點不能拖,這三組是刻意設計的反例); 反例 ② 多一顆「拿掉那顆離群值」按鈕,來回按它看 corr 怎麼跳。 要看出什麼:cov 跟 corr 這兩個數字會在什麼情況下說謊:曲線關係它看不見、 一顆離群值就能撐出假的相關、相關再高也不代表因果。

cov
corr
n(目前用幾個點)
var(x)
var(y)
這組資料在騙你什麼

踩坑清單

坑一:cov = 0 不等於「兩件事無關」

只等於「沒有直線關係」。上面那條拋物線的 cov 是 0.00,但 y 完全由 x 決定 —— 關係強到不能再強,只是不是直線。 cov = 0 的正確唸法是「不線性相關」,不是「獨立」。(反過來成立:真正獨立 → cov 一定是 0。)

坑二:cov 的大小不能跨資料集比較

它帶單位。房價資料的 cov 可能是 3.7×10⁷(坪·萬元),同學資料的 cov 是 18.61(小時·分),比大小完全沒有意義 —— 換單位那個實驗已經證明:資料一個點都沒動,我光換單位就能讓 cov 大一萬倍。要比強弱,一律用 corr。「那到底要怎麼讀那個數字」整套讀法在 ⑦ 這個數字怎麼讀:只讀符號、跟自己的天花板比、換成 r。

坑三:corr 對離群值極度敏感

上面反例 ② 的九個點裡有八個毫無關係(corr ≈ 0.07),加進一顆離群值就讓 corr 跳到 0.79。 因為每個點的貢獻是「兩個偏差相乘」,離群值的兩個偏差都很大,相乘之後以平方的速度放大它的發言權 —— 這跟 02 關變異數怕離群值是同一個病,而且更嚴重。 習慣動作:先畫散點圖,或改用 Spearman(對排名做 corr)。

坑四:相關不是因果

反例 ③ 的 corr 高達 0.96,但冰淇淋不會讓人溺水 —— 背後有第三個變數(氣溫)同時推動兩者。 共變異數只量「一起動」,對「誰造成誰」完全沒有意見。要談因果得靠實驗設計或因果推論,不是算一個數字就好。

⑪ 這關回答了什麼

什麼是共變異數?

兩欄數字「一起偏離自己平均」的平均程度。做法只有三步:以兩欄的平均為新原點算出每筆的偏差、把兩個偏差相乘、 把所有乘積加起來除以 (n−1)。

正的代表「同步」(大的一起大、小的一起小),負的代表「反向」,接近 0 代表沒有直線傾向。 象限那張圖是它最直觀的樣子:右上與左下的點投贊成票、左上與右下投反對票,離十字越遠票越重。

有了標準差為什麼還要共變異數?它多回答了什麼?

標準差是單欄的量,只知道「這一欄自己有多散」。你把另一欄整個打亂順序,兩欄的標準差一模一樣, 但配對關係已經被毀了 —— 所以標準差結構上不可能回答「一起動」。

共變異數多回答的是配對關係:坪數大的是不是同時比較貴、A 股跌的時候 B 股會不會一起跌。 它是第一個「看得到兩欄之間」的統計量,也是為什麼它能排成矩陣,而標準差只能排成一排數字。

共變異數矩陣是什麼意思?那四格分別在講什麼?為什麼一定對稱?

它是「所有欄位兩兩配對的內積表」。第 i 列第 j 欄 = cov(第 i 欄, 第 j 欄)。兩欄的版本是 2×2:

  • 左上 var(x):x 跟自己的內積 ÷ (n−1) —— x 自己有多散
  • 右上 cov(x, y):x 的中心化向量 · y 的中心化向量 ÷ (n−1) —— 兩欄一起動的程度
  • 左下 cov(y, x):跟右上是同一個數字
  • 右下 var(y):y 自己有多散

對稱的原因就是內積可以交換:a · b = b · a,所以 cov(x, y) 和 cov(y, x) 是同一條算式。 這不是巧合而是保證 —— 也正因為它是對稱矩陣,04 關才能保證它的特徵值一定是實數、 特徵向量一定互相垂直,PCA 才成立。去四格熱力圖拖上面的點,右上和左下永遠一起變。

共變異數跟內積有什麼關係?

是同一件事,不是「有關係」。把 x 那欄中心化成 cx、y 那欄中心化成 cy,則:

cov(x, y) = (cx · cy) / (n − 1)

02 關證明了變異數是「cx 跟自己的內積」,這關只是把第二個參數換成別人。 整條線是:內積 → 跟自己=變異數 → 跟別人=共變異數 → 全部排成表=共變異數矩陣(XTX / (n−1))。 沒有任何新公式,只有同一個內積被用在不同地方。

共變異數跟「投影」有什麼關係?(Max 直接問的那題)

有,而且是同一套東西的兩種讀法。內積 cx · cy 可以拆成 「影子的長度 × 尺的長度」01 關的結論)。所以:

  • 看正負 → 看兩條向量的夾角:小於 90° 就是 cov 正、等於 90°(垂直)就是 cov = 0、大於 90° 就是 cov 負。
  • 看強弱 → 看 cos θ,那就是相關係數 r。
  • 看「x 變 1 單位 y 會變多少」 → 看投影係數 (cy · cx) / (cx · cx), 也就是 cov(x, y) / var(x) —— 這正是最小平方迴歸的斜率

④ 那一節拖那兩支箭頭:三個數字(內積、|cx||cy|cos θ、cov×(n−1))永遠一模一樣, 而綠色投影箭頭的係數永遠等於下面那條迴歸線的斜率。

相關係數跟共變異數差在哪?什麼時候用哪一個?

差在有沒有除掉長度。cov 是內積、corr 是 cos。cov 帶單位、大小沒有基準;corr 沒有單位、永遠在 −1 ~ 1,可以跨題目比較。

要判斷關係強弱、要跟別的資料集比、要報告給人看 → 用 corr。要繼續算下去 (投組風險、卡爾曼濾波、PCA、任何要把矩陣丟進線代運算的場合)→ 用 cov,因為它保留了各欄的實際量級,而且可加。

補一個常見誤會:corr 矩陣就是「先把每欄除以自己的標準差,再算 cov 矩陣」。所以對標準化過的資料做 PCA 等於對 corr 矩陣做 PCA —— 而它跟直接對 cov 矩陣做 PCA 的結果會不一樣,細節在 05 關的單位陷阱

共變異數矩陣裡那個數字「越大越小」到底代表什麼?(Max 直接問的那題)

先講結論:cov 的絕對大小本身沒有意義,因為它帶單位。同一份資料,我把時數從小時換成秒, cov 就大 3600 倍,關係一點都沒變強。所以看 cov 只有三種讀法:

  • 讀正負號:正=一起動、負=反向、≈0=沒有直線傾向。這一半的資訊是可靠的。
  • 跟自己的上限比:非對角線的絕對值永遠 ≤ √(C11·C22)(柯西不等式)。 「它占了上限幾成」這個百分比就是 |r| —— 這才是「大小」唯一有意義的讀法。
  • 換成 corr:直接把上面那個百分比讀出來,順便得到可以跨資料集比較的量表。

對角線就單純多了:它一定 ≥ 0(那是變異數),越大代表那一欄自己越散;兩個加起來(跡 tr(C))= 這團資料的總變異量。 完整的現算對帳在 ⑦ 這個數字怎麼讀

共變異數 = 0 是不是代表兩件事沒關係?

不是。只代表沒有直線關係。反例 ① 的拋物線 cov = 0.00, 可是 y 完全由 x 決定(y = a·x² + b),關係強到 100%。cov 的四象限投票機制在對稱的拋物線上正負剛好抵消,所以它什麼都看不到。

正確的邏輯方向只有一邊成立:獨立 → cov = 0;但 cov = 0 ⇏ 獨立。 實務上的習慣動作是:算 corr 之前先畫散點圖,五秒鐘就能看出是不是直線。

這關留下什麼洞

你現在手上有一張 2×2 的共變異數矩陣,而且已經親眼看到:資料的形狀就塞在這四個數字裡 —— 胖瘦看對角線、斜不斜看非對角線。問題是,這四個數字擺在那裡,你看不出形狀,更算不出「主軸朝哪」。 你唯一找到那個角度的方法還是拉滑桿硬試。

所以下一步不是繼續學統計,而是回頭學一件更基本的事:一個矩陣要怎麼被看穿。矩陣有沒有「不會被它轉歪的方向」? 有的話那些方向在說什麼?04 關先把矩陣拆開來看骨架(特徵向量), 然後05 關把骨架裝回這張共變異數矩陣上 —— 那個你拉滑桿硬找的角度,會用一行算式解出來。

還有一個順便留下的洞:這張 C 除了「被拆開看主軸」之外,還有另一個身分 —— 把它反過來(求逆)當一把尺用, 就能量「這個點離資料中心算不算遠、算不算奇怪」,那把尺畫出來就是一顆橢圓。那是 機率統計 05 關:橢圓的真身 —— 拿 C 當一把尺