多重共線性怎麼解?PCA 登場
某金融科技公司建立房價預測模型,使用多項特徵(如建坪、房齡、樓層、總價等)進行線性迴歸分析(Linear Regression Analysis)。資料分析師發現多個特徵之間存在高度相關性,導致模型係數不穩定、預測誤差上升。為解決此問題,下列哪一種方法最適合?
一家金融科技公司要預測房價,把「建坪、房齡、樓層、總價」等特徵一起丟進線性迴歸(Linear Regression)模型。
分析師發現:這些特徵彼此之間高度相關(比如建坪越大、總價通常越高),導致模型「係數不穩定」、預測結果跑掉了。
問你:遇到這種「特徵高度相關」的問題,應該用哪種方法解決?
一句話總結
特徵彼此高度相關(多重共線性)會讓線性迴歸係數飄移,解法是用 PCA(主成分分析,Principal Component Analysis)把原本相關的特徵,轉換成彼此獨立的新變數(主成分),讓模型算得穩。
先感受問題:兩個特徵說的是同一件事
假設「好房網」的分析師陳明要預測台北市每棟房子的售價,他收集了以下特徵:
看起來沒問題,但他在跑模型之前先做了相關係數(correlation)分析:
建坪 vs 公設比:相關係數 0.85(高)
房齡 vs 電梯年限:相關係數 0.88(高)
「建坪」和「總價」幾乎是同一件事的兩種說法。如果兩個人都用差不多的資訊在投票,模型不知道要聽誰的,係數就會跳來跳去。
這個現象叫多重共線性(Multicollinearity)。
直接忽略問題,會發生什麼事
陳明如果選擇「繼續保留所有特徵,不處理」,會踩到五個坑:
- 係數不穩定:多加一筆訓練資料,「建坪」的係數可能從 +50 跳到 -20,模型行為完全不可預測。
- 標準誤差膨脹:高度相關的特徵讓係數的標準誤差(standard error)變超大,統計檢定全部失效,不知道哪個特徵「真的重要」。
- 解釋能力喪失:老闆問「建坪每增加 1 坪,房價漲多少?」你回答不了,因為係數本身就是假的。
- 過擬合風險上升:相關特徵等於「重複投入雜訊」,模型把雜訊記起來,在新資料上表現差。
- 矩陣奇異,算不出解:特徵完全線性相關時,矩陣求逆(matrix inversion)會失敗,程式直接報錯。
PCA 怎麼把相關特徵變獨立
PCA 的思路不是「選哪個特徵」,而是「重新創造新的特徵,讓它們彼此獨立」。
對好房網的資料集來說,PCA 會做這件事:
- 找出原始特徵裡「最能解釋資料變化」的方向,叫做第一主成分(PC1)。PC1 可能是「建坪 × 0.6 + 總價 × 0.7 + 樓層 × 0.2」這樣的組合。
- 第二主成分(PC2)和 PC1 完全垂直(不相關),抓住資料裡 PC1 沒解釋到的部分。
- 以此類推,得到一組彼此獨立的新特徵。
轉換之後:
轉換後:PC1(r=0.00 與 PC2)、PC2(r=0.00 與 PC1)…
丟進線性迴歸後,係數就穩定了,模型不再「聽兩個人說同一件事而不知所措」。
這就是選項 B 講的:使用主成分分析(PCA)將相關特徵轉換為彼此獨立的主成分。
技術版:PCA 的數學步驟與程式碼
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
PCA 的核心是找到資料的共變異數矩陣(Covariance Matrix)的特徵向量(Eigenvector),每個特徵向量就是一個主成分方向,對應的特徵值(Eigenvalue)代表這個方向能解釋多少變異量。
- 把所有特徵標準化(每個特徵的平均值歸零、標準差歸一)
- 計算特徵之間的共變異數矩陣,看哪些特徵一起動、哪些獨立
- 找到這個矩陣的主要方向(特徵向量),這些方向彼此垂直(獨立)
- 把原始資料投影到這些新方向上,得到主成分
- 只保留解釋力高的前幾個主成分(如前 3 個解釋了 95% 的變異)
| 故事 | 程式碼 |
|---|---|
| 標準化特徵 | scaler = StandardScaler(); X_scaled = scaler.fit_transform(X) |
| 建立 PCA,保留 95% 變異 | pca = PCA(n_components=0.95) |
| 把原始資料轉成主成分 | X_pca = pca.fit_transform(X_scaled) |
| 看每個主成分解釋多少變異 | pca.explained_variance_ratio_ |
| 用主成分訓練迴歸模型 | model.fit(X_pca, y) |
- PCA(Principal Component Analysis,主成分分析)
- 一種降維技術,把相關的原始特徵轉換成一組彼此獨立的新特徵(主成分)。
- n_components=0.95
- 告訴 PCA「保留能解釋 95% 資料變異量的主成分數量」,自動決定要幾個主成分。
- explained_variance_ratio_
- 每個主成分能解釋多少比例的資料變異,加總到 0.95 就停。
- StandardScaler
- 標準化工具,PCA 之前必做,不然單位大的特徵(如總價幾百萬)會主導結果。
- Eigenvector(特徵向量)
- 每個主成分的方向,是原始特徵的線性組合,彼此正交(垂直)代表獨立。
PCA 的核心步驟是對共變異數矩陣做特徵分解:
# 共變異數矩陣
C = (1/n) * X_centered^T @ X_centered
# 特徵分解:找出彼此正交的方向 V 和對應的能量 λ
C @ V = λ × V
# 其中:
# λ(Eigenvalue,特徵值)= 這個主成分方向能解釋的變異量
# V(Eigenvector,特徵向量)= 這個主成分的方向(原始特徵的組合權重)
# 投影:把原始資料映射到主成分空間
X_pca = X_centered @ V[:, :k] # 取前 k 個主成分
蓋住程式碼,說出 PCA 的 5 步驟:
- 標準化特徵(StandardScaler)
- 計算共變異數矩陣
- 特徵分解,找出主成分方向
- 把資料投影到主成分空間
- 只保留解釋力夠的主成分(如 95%)
說得出來代表這段你會了。
為什麼其他選項是錯的
A繼續保留所有特徵,不進行任何處理
把所有原始特徵照單全收,不管它們之間是否高度相關,直接丟進模型訓練。
題目已經說「多個特徵之間存在高度相關性,導致模型係數不穩定、預測誤差上升」,這就是多重共線性的症狀。保留不處理等於放任問題繼續惡化:係數持續不穩定,模型換一批資料結果就完全不同,完全無法信任。
以為「特徵越多越好,AI 會自己學」的人。在線性迴歸裡,相關特徵不是「更多資訊」,而是「重複的噪音」,會讓矩陣算不穩。
C新增更多原始變數以提升模型表現
目前特徵不夠好,再去找更多特徵加進來,讓模型學到更多。
問題的根源是現有特徵「太相關」,不是「太少」。加入更多原始變數只會帶進更多潛在的相關特徵,多重共線性只會更嚴重,係數更不穩定。這是反方向操作。
記住「多加特徵 = 模型更強」這個直覺的人。這個直覺在特徵品質差或過少的情況下成立,但這題的問題是相關性,解法是降維或處理相關性,不是加更多資料。
D改用分類模型進行預測
換一種模型類型,改用分類(classification)而不是迴歸(regression)來預測房價。
房價是連續數值(2,800 萬、3,150 萬),是迴歸問題(regression),不是分類問題。分類模型的輸出是類別(如「貴 / 便宜」),不是具體數值,根本解決不了「預測房價數字」的需求。更重要的是,改換模型類型完全沒有處理多重共線性的問題。
對迴歸和分類的適用場景搞混的人。看到「線性迴歸效果不好」就以為要換模型,但問題不在「迴歸」這個選擇,而在「輸入特徵相關」這個資料問題。
同個考點下次怎麼變形
PCA 降維後,主成分還能對應到原始特徵嗎?
做完 PCA 得到 PC1、PC2,老闆問「PC1 是什麼意思?是房齡嗎?」
不能直接對應。PC1 是多個原始特徵的線性組合(例如「0.6 × 建坪 + 0.7 × 總價 + 0.2 × 樓層」),本身沒有直觀的物理意義。這是 PCA 的主要缺點:可解釋性低。需要可解釋性的場景(如向主管說明「房齡增加 1 年影響多少」),要考慮其他方法如逐步迴歸(Stepwise Regression)或 Lasso。
什麼情況下 PCA 反而讓模型變差?
PCA 把資料壓縮,應該只會幫忙不會壞事?
如果捨棄的主成分恰好與預測目標(y)高度相關,模型準確度會下降。PCA 是根據「哪個方向的變異最大」來選主成分,但「變異大」不等於「對預測有用」。解法是改用監督式降維方法,如 PLS(Partial Least Squares,偏最小二乘法),它會同時考慮 X 的變異和 y 的相關性。
除了 PCA,還有哪些處理多重共線性的方法?
PCA 是唯一解法嗎?
還有三種常用方法。第一是 Lasso 迴歸(L1 正規化),它會把相關特徵中的某一個係數直接壓成零,自動選出一個代表。第二是 Ridge 迴歸(L2 正規化),讓所有係數都變小,抑制係數的不穩定。第三是手動刪除高相關特徵,先算 VIF(Variance Inflation Factor,變異數膨脹因子),VIF 超過 10 的特徵優先考慮刪除。
醫學影像分析用 PCA 降維,和房價預測一樣的邏輯嗎?
影像的「特徵」是像素,幾萬個像素一定有大量相關,PCA 應該很有用?
完全一樣的邏輯,而且效果更明顯。一張 256×256 的 X 光片有 65,536 個像素特徵,相鄰像素幾乎必然高度相關。PCA 可以壓縮成幾十個主成分,保留 95% 的影像資訊量,大幅減少計算成本。這就是早期「特徵臉(Eigenface)」人臉辨識系統的核心原理。
怎麼決定 PCA 要保留幾個主成分?
保留越多主成分越準確,保留越少越快,要怎麼平衡?
有兩個常用方法。第一是「累積解釋變異比例」:畫出每個主成分的解釋量曲線(Scree Plot),找到曲線出現「手肘」(明顯彎折)的位置,或直接設門檻(保留到累積 90%、95% 的變異量)。第二是用交叉驗證(Cross-Validation):把不同數量的主成分都試一遍,看哪個設定讓下游模型的預測誤差最小。
想再往下看,這 5 個
- 主成分分析(Principal Component Analysis)正解核心:將相關特徵轉換為彼此正交的主成分,消除多重共線性並降維,讓線性迴歸係數重新穩定。
- 線性迴歸法(Linear Regression)本題的情境模型,多重共線性是線性迴歸的致命弱點,理解其係數不穩定的機制是解題關鍵。
- 降維處理(Dimensionality Reduction)PCA 屬於降維手段,將高維相關特徵壓縮成低維獨立主成分,是處理共線性的標準流程之一。
- L2 正則化(L2 Regularization (Ridge))另一種處理共線性的方法,讓所有係數整體縮小而非選擇特徵,和 PCA 同為易混淆的近似解法。
- 特徵工程(Feature Engineering)在模型訓練前對特徵進行選擇、轉換與組合的上位流程,PCA 降維和共線性處理皆屬其中環節。