iPAS AI 應用規劃師 中級 科目一

多重共線性怎麼解?選哪個模型?

原題 26

在房價預測任務中,若發現特徵如「房間數」與「坪數」存在高度多重共線性(Multicollinearity),為降低共線性對模型參數估計的負面影響,應優先選擇下列哪種模型?

白話

你在預測房價,用了兩個特徵:「房間數」和「坪數」。但這兩個特徵高度相關,房間越多坪數通常也越大,這叫「多重共線性」(Multicollinearity)。

多重共線性會讓模型的「參數估計」出問題:不知道該把房價的貢獻歸給「房間數」還是「坪數」,導致係數不穩定、可解釋性差。

問你:哪個模型最能降低多重共線性對參數估計的負面影響?

點選你的答案。

01 總結

一句話總結

面對多重共線性,應該選含 L1 正則化的 LASSO 迴歸:LASSO 的 L1 懲罰會強制把高度相關特徵中「貢獻較小」的那個係數壓到零,自動做特徵選擇,解決係數不穩定的問題

02 情境

先感受問題:兩個特徵說的是同一件事

假設你在「好房網」建立房價預測模型,訓練資料有 10,000 筆,特徵包括:房間數、坪數、樓層、屋齡、地段。

你做了個相關係數分析,發現問題:

房間數 × 坪數:相關係數 0.94(超高!)
1 房通常 20~30 坪,3 房通常 50~70 坪,5 房通常 80~120 坪
→ 這兩個特徵幾乎在說同一件事

你用普通線性迴歸來訓練,結果係數跑出來:

房間數的係數:+150 萬
坪數的係數:−3 萬(負的?越大越便宜?)

這不合常識。問題出在:兩個特徵高度相關時,模型不知道該怎麼「分配功勞」,結果係數互相抵消,甚至出現方向錯誤(負號)。

這就是多重共線性造成的「參數估計不穩定」問題。

03 對照

普通線性迴歸遇到共線性,為什麼會崩潰

普通線性迴歸(OLS,最小平方法)的目標是找到一組係數,讓預測誤差最小。遇到共線性時的五個問題:

  1. 係數方差爆炸:當兩個特徵高度相關,OLS 的解析解涉及矩陣求逆,但相關係數接近 1 時矩陣接近奇異(不可逆),數值不穩定,係數方差可以飆到幾百倍。
  2. 係數符號錯誤:如上面例子,坪數的係數出現負號。這讓模型完全不可解釋。
  3. 係數隨樣本大幅波動:換一批訓練資料,係數可能從 +150 萬變成 −30 萬,模型極度不穩定。
  4. 無法做特徵重要性分析:係數不穩定,你不能靠係數大小判斷「房間數重要還是坪數重要」。
  5. 預測能力反而還好(但不能信任係數):奇怪的是,OLS 在共線性情況下,預測的 RMSE 不一定很差(因為兩個特徵合起來還是包含了資訊),但係數完全不可信。這讓問題更難被察覺。
04 解法

LASSO 的 L1 正則化:強制選一個,丟掉另一個

LASSO(Least Absolute Shrinkage and Selection Operator)的核心機制:在損失函數裡加入一個懲罰項,讓模型不能隨意把係數設很大。

回到好房網的例子。LASSO 訓練後的係數:

房間數的係數:0(LASSO 把它壓成零了!)
坪數的係數:+6.8 萬(每增加 1 坪,房價增加 6.8 萬)
樓層、屋齡、地段:正常的係數

LASSO 做了一個決定:在「房間數」和「坪數」這兩個高度相關的特徵中,它自動選了「坪數」(解釋力更連續、更精確),把「房間數」的係數壓成了零,等同於丟掉了這個特徵。

這就是 L1 正則化的「稀疏特性(sparsity)」:會讓部分係數精確等於零,自動做特徵選擇(Feature Selection)。普通的 L2 正則化(Ridge 迴歸)只會把係數壓小,不會壓成零。

這就是選項 D 講的:含 L1 正則化的 LASSO 迴歸模型

技術版:LASSO 的公式與 L1 vs L2 的幾何直覺

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

LASSO 的目標函數:

# OLS(普通線性迴歸)
minimize: Σ (y_i - ŷ_i)²

# LASSO(L1 正則化)
minimize: Σ (y_i - ŷ_i)² + λ × Σ |β_j|

# λ(lambda):正則化強度,越大代表懲罰越重,係數越小(越多零)
Step 1 純故事版
  1. OLS 說:「只要預測誤差最小就好,係數要多大給多大」
  2. LASSO 說:「預測誤差要小,但係數的絕對值加起來不能太大(L1 懲罰)」
  3. 面對兩個高度相關的特徵,LASSO 發現「只留一個也能預測得一樣準」,就把另一個係數壓成零
  4. 結果:特徵自動選擇,多重共線性問題被解決
Step 2 中文 ↔ 程式碼對照
故事程式碼
建立 LASSO 模型from sklearn.linear_model import Lasso
設定正則化強度model = Lasso(alpha=0.1)
訓練model.fit(X_train, y_train)
查看係數(有些會是 0)print(model.coef_)
比較:Ridge(L2 正則化)from sklearn.linear_model import Ridge
Step 3 符號角色表
β_j(beta j)
第 j 個特徵的係數。LASSO 的目標是讓一些 β_j 精確等於 0。
λ(lambda)
正則化強度超參數。λ 越大,懲罰越重,更多係數被壓成 0,特徵選擇越激進;λ 太大會讓模型欠擬合。
L1 懲罰:Σ |β_j|
所有係數絕對值的總和。L1 的「絕對值」幾何形狀是菱形,最佳解容易落在菱形的「角」上,即某個係數恰好等於 0。這就是為什麼 L1 會產生稀疏解(有零)。
L2 懲罰:Σ β_j²(Ridge 用這個)
所有係數平方的總和。L2 的幾何形狀是圓形,最佳解不容易落在坐標軸上,係數只會趨近於零但不等於零。Ridge 不做特徵選擇。
Step 4 完整公式對應

L1 和 L2 的直覺比較:

# 有兩個相關特徵 x1(房間數)和 x2(坪數)
# OLS:可能給出 β1 = 150, β2 = -3(不穩定)
# Ridge(L2):可能給出 β1 = 45, β2 = 40(兩個都縮小,但都不為零)
# LASSO(L1):可能給出 β1 = 0, β2 = 68(直接丟掉房間數)

# 什麼時候用哪個?
# LASSO:有很多特徵,想自動選特徵,要稀疏解
# Ridge:相信每個特徵都有貢獻,只是想穩定係數,不要稀疏
# Elastic Net:兩個都要(α × L1 + (1-α) × L2)
Step 5 自我複述

蓋住公式,說出 LASSO 解決多重共線性的機制:

  1. 多重共線性讓 OLS 的係數不穩定、可能出錯方向
  2. LASSO 在損失函數加 L1 懲罰(係數絕對值總和)
  3. L1 懲罰的幾何特性讓最佳解容易出現在「某係數 = 0」的位置
  4. 相關特徵中,LASSO 自動選一個留下,把其他壓成零
  5. 結果:稀疏係數、特徵選擇、係數穩定
05 陷阱

為什麼其他選項不是最佳答案

A不受多重共線性影響的決策樹模型

字面在說什麼

決策樹在分裂時每次只選一個特徵,不同時使用多個特徵,所以不存在「參數估計因為共線性而不穩定」的問題。

為什麼不是最佳答案

決策樹確實對多重共線性不敏感,但題目問的是「降低共線性對參數估計的負面影響」。決策樹的「分裂規則」不是「參數估計」,而是選擇最佳分裂特徵和閾值。如果你需要一個線性可解釋的係數(「每增加 1 坪,房價增加多少元」),決策樹根本沒有這種輸出。題目的背景是「參數估計」問題,決策樹迴避了問題而不是解決了問題。

誰會選錯

知道「決策樹不怕共線性」但沒注意題目問的是「參數估計」的考生。注意:題目的核心是線性模型的參數估計問題,決策樹換了問題框架,不在討論範疇內。

B傳統線性迴歸模型,不含正則化項

字面在說什麼

直接用普通最小平方法(OLS)做線性迴歸,不加任何正則化。

為什麼不對

這是多重共線性問題最糟糕的選擇。普通線性迴歸在遇到高度共線的特徵時,係數方差爆炸、係數可能出現錯誤方向、不同訓練集給出截然不同的係數。OLS 沒有任何機制來處理共線性,它會如實「承受」所有數值不穩定的後果。題目說「降低共線性對參數估計的負面影響」,OLS 完全反其道而行。

誰會選錯

只知道「線性迴歸可以估計參數」但不清楚「共線性對 OLS 的破壞」的考生。這是最應該被排除的選項。

C支持向量機搭配線性核函數

字面在說什麼

用 SVM(Support Vector Machine)的線性版本來做迴歸,尋找最大間隔的超平面。

為什麼不對

線性 SVM 確實有正則化機制(C 參數控制間隔大小),能一定程度穩定係數。但線性 SVM 使用的是 L2 類型的懲罰,不會把係數壓成零,不做特徵選擇。面對「房間數」和「坪數」高度相關時,SVM 可能給兩個特徵都分配一些係數(類似 Ridge),不會解決「哪個特徵是真正主力」的問題。此外 SVM 迴歸(SVR)的係數可解釋性比 LASSO 差,不適合需要解釋「每坪增加多少元」的商業場景。

誰會選錯

知道 SVM 有正則化、比 OLS 穩定,就選它的考生。記住:處理多重共線性「最有效」的線性模型是 LASSO,因為它的 L1 特性直接解決共線特徵的分配問題(壓成零),SVM 的穩定性不如 LASSO 針對這個問題有效。

06 變形

同個考點下次怎麼變形

變形 1 邊界

LASSO 把「房間數」係數壓成零,是不是代表房間數完全不重要?

直覺

係數為零就代表這個特徵沒用?

答案

不一定。當兩個特徵高度相關時,LASSO 選擇其中一個的邏輯是:在相同解釋力下,只保留一個特徵就夠了。被壓成零的特徵(房間數)不是「沒有資訊」,而是「它的資訊已經被另一個特徵(坪數)涵蓋了」。如果你移除坪數只保留房間數,房間數的係數就會是非零的。這是「多重共線性」的本質:兩個特徵互相代理,選任一個都能解釋大部分變異。

變形 2 反例

如果不想丟掉任何特徵,但又想穩定係數,應該選哪個模型?

直覺

LASSO 太激進了,我想保留所有特徵但讓係數穩定一點,怎麼辦?

答案

用 Ridge 迴歸(L2 正則化)。Ridge 的懲罰項是係數的平方和(不是絕對值),幾何上是圓形約束,最佳解不在坐標軸上,所以所有係數都會縮小但不為零。Ridge 能穩定 OLS 的數值問題(降低係數方差),但不做特徵選擇,兩個相關特徵都保留(係數各自縮小)。如果你想兩個都保留(例如商業上需要解釋「每增加一個房間」的貢獻),Ridge 比 LASSO 適合。

變形 3 升級版

Elastic Net 是什麼?什麼時候用它而不是 LASSO?

直覺

L1 和 L2 有各自的優缺點,有沒有兩個都要的?

答案

Elastic Net = α × L1 + (1-α) × L2,用一個 α 參數控制兩者比例。適合用在:(1) 特徵數量遠多於樣本數(p >> n)的高維問題;(2) 有很多特徵組成「群組」,群組內高度相關(LASSO 只選一個,但你可能想每個群組各選幾個);(3) LASSO 選出的特徵太少或太不穩定(LASSO 在高度相關特徵間的選擇可能不穩定,Elastic Net 更穩定)。房價預測這種特徵數量適中的場景,LASSO 已經夠用。

變形 4 跨領域

多重共線性在醫療預測模型中有什麼特別的問題?

直覺

醫療特徵也會高度相關?例如血壓和心跳?

答案

是的,而且影響更嚴重。醫療模型的係數常被用來做「臨床解釋」(「血壓每高 10 mmHg,風險增加多少倍」)。如果共線性讓係數不穩定甚至符號錯誤,醫生可能做出錯誤的臨床解讀。醫療場景特別常見的共線性來源:BMI 和體重、年齡和各種慢性病標誌物、不同但相關的血液指標(如不同形式的膽固醇)。LASSO 在醫療基因組學(genomics)非常常見,因為基因數量遠多於樣本數,且基因之間高度相關。

變形 5 評估指標

怎麼偵測資料集裡是否存在多重共線性?

直覺

感覺「房間數和坪數很相關」不夠,要怎麼量化?

答案

最常用的指標是 VIF(Variance Inflation Factor,方差膨脹因子):對每個特徵 x_j,用其他所有特徵迴歸預測它,計算 R²,VIF = 1 / (1 - R²)。VIF > 5 就要注意,VIF > 10 是嚴重共線性。房間數的 VIF 如果是 25,代表係數的方差因為共線性膨脹了 25 倍。其他方法:(1) 相關係數矩陣熱圖(看哪些特徵對的顏色深);(2) 條件數(Condition Number):矩陣最大最小特徵值的比,> 30 代表有共線性問題。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二次 iPAS AI 應用規劃師 中級 科目一 第 26 題

查看官方原文 PDF