線性迴歸總是跑不準?這份「模型進化指南」教你如何從數據處理到特徵工程全進化

你是不是也跟我以前一樣,剛學機器學習的時候,第一個接觸的就是「線性迴歸」(Linear Regression)? 那時候覺得這東西超簡單,不就是畫一條線穿過一堆點嗎?model.fit(X, y) 一行程式碼就收工了。但等我真的把這套東西拿到實戰場景,不管是預測公司的電商銷量,還是分析產品的轉化率,我才發現,現實數據根本不聽話。

老實說,線性迴歸雖然是「幼兒園」等級的算法,但要把它「用好」,其實非常考驗一個資料科學家的基本功。

今天我不打算跟你講那些硬核的數學公式,我想以一個實作者的角度,跟你分享我是如何從數據處理、特徵工程到模型評估,一步步榨出線性迴歸的最大潛力。

如果你發現你的模型準確度卡住了,這篇文章應該能幫你找到出口。


第一階段:數據處理——別讓垃圾進,垃圾出

在工程師的世界裡有一句話叫 “Garbage In, Garbage Out”。如果你的原始數據是一團亂,換什麼高端模型都沒用。

1. 處理缺失值:別急著按 Delete

很多人看到 NaNNull 的直覺就是「刪掉」。但如果你的數據量本來就不多,每刪掉一列都是在浪費資產。

我的做法:

我會先看缺失的比例。

如果少於 5%,直接刪除通常沒問題;但如果比例較高,我會優先考慮「中位數填補」(對抗離群值較穩健)或是用「隨機森林插補」(考慮到變量間的關係)。


核心邏輯:

填補的目的是為了維持數據的分布,而不是創造假數據。

2. 離群值(Outliers):它是驚喜還是雜訊?

離群值對線性迴歸的打擊是毀滅性的,因為它是基於「最小平方法」,會過度放大那些偏離太遠的誤差。

實戰經驗:

處理前我一定會先畫個散佈圖或箱形圖。

如果那個離群值是因為輸入錯誤(例如年齡寫 200 歲),就刪掉或修正;如果是極端的真實數據(例如雙 11 的銷量),我可能會考慮做 Log 轉換,把它的影響力「壓」下來。

3. 數據標準化:給不同單位一個公平競爭的機會

如果你的特徵一個是「身高(公分)」,另一個是「體重(公克)」,數值的差距會讓模型誤以為「體重」比較重要。


實務建議:

當你打算使用有「正則化」的模型(如 Ridge 或 LASSO)時,一定要做 Z-score 標準化

這能讓所有特徵都在同一個起跑線上,模型收斂的速度也會快很多。


第二階段:特徵工程——這才是拉開差距的地方

我常說,模型決定了上限,而特徵工程決定了你離上限有多近。

線性迴歸最怕的就是「餵錯東西」。

1. 選擇相關特徵:Less is More

不要覺得特徵越多越好。

當你塞進一堆無關的變量(比如用「當天天氣」去預測「伺服器負載」),只會增加模型的噪音。


我的工具箱:

我常用相關性矩陣(Heatmap)來做初步篩選,或是直接上 LASSO 迴歸

LASSO 有一個超能力,它會自動把沒用的特徵係數變成 0,直接幫你做特徵選擇。

這對懶人(像我)來說非常好用。

2. 創造新特徵:1 + 1 > 2

線性迴歸預設特徵之間是獨立的,但現實往往不是這樣。

舉個例子:

預測房價時,「房間數」和「衛浴數」分開看可能還好,但如果把它們相乘做成一個「空間密度」的交互項(Interaction Term),往往能捕捉到更深層的訊息。

多項式擴展(Polynomial Features)也是一個大招,能讓原本「直」的模型學會彎曲。

3. 降維處理(PCA):對付過度複雜的數據

如果你手上有幾百個特徵,模型很容易過擬合(Overfitting)。

這時候我會考慮用 PCA 把特徵壓縮成幾個「主成分」。

雖然這樣會讓模型變得難以解釋(你不知道主成分代表什麼),但在提升預測準確度上,這招通常很管用。


第三階段:模型選擇與訓練,別只會跑 .fit()

如果數據處理好了,特徵也選對了,接下來就是訓練的策略問題。

1. 別只盯著「普通線性迴歸」

當你的數據特徵很多,或者特徵之間有高度相關性(共線性)時,普通的 OLS(普通最小平方法)會變得很不穩定。

升級路徑:

  • 怕過擬合?改用 Ridge Regression
  • 特徵太多想自動篩選?改用 LASSO Regression
  • 兩個都想要?那就用 ElasticNet

2. 交叉驗證(K-fold Cross-Validation):拒絕自我感覺良好

我們最怕的就是模型在訓練集考 100 分,拿到實際環境只考 50 分。

我的習慣:

我一定會跑 5-fold 或 10-fold 的交叉驗證。

這就像是把考卷拆成五份,輪流當練習題和測驗題。

只有在五次測試中表現都穩定的模型,才是我敢上線的模型。

3. 自動化調參(Grid Search / Random Search)

模型裡面的那些 alpha(懲罰係數)要設多少?別用猜的。

實作建議:

我會丟給 GridSearchCV 讓它去跑。

雖然會花點時間,但找到最佳超參數組合的那一刻,準確度往往能再提升 2-5%。


第四階段:評估與診斷(高手看殘差)

很多人模型跑完看個 R2 = 0.8 就覺得自己已經很厲害了。

但我通常會先去看「殘差圖」(Residual Plot)。

1. 殘差分析:聽聽模型在說什麼

如果你的模型是完美的,那殘差應該是雜亂無章的隨機分佈。

  • 如果殘差有規律(例如像一個漏斗): 說明你的數據存在「異方差性」,你可能需要對目標變量做 Log 轉換。
  • 如果殘差像一條曲線: 說明你漏掉了非線性的特徵,該去加個平方項或交互項了。

2. 評估指標的取捨

  • R2 告訴你模型解釋了多少變異,但它會隨著特徵增加而虛高,所以我更看重「調整後 R2」。
  • MAE vs RMSE: 我自己比較偏好 RMSE,因為它對巨大的誤差特別敏感。在某些場景下(如預測庫存),猜錯很大比猜錯很多次更危險,這時候 RMSE 的參考價值更高。

3. 終極殺招:集成方法(Ensemble Regression)

如果你已經把線性迴歸優化到極致了,準確度還是差強人意,那試著「組隊」吧。


把線性迴歸、隨機森林、XGBoost 的結果取權重平均。

雖然這讓模型變得沉重,但在競賽或高要求的預測場景中,這往往是通往頂尖表現的最後一哩路。


麥特的實戰小撇步:接下來你可以怎麼做?

看完這麼多,你可能覺得有點頭暈。

別擔心,我不建議你一次把所有招式都用上。

我建議你現在就可以做的三個小行動:

  1. 畫一張殘差圖: 去看看你目前模型的殘差有沒有規律,這會告訴你下一步該改數據還是改特徵。
  2. 試試 LASSO: 如果你的特徵超過 10 個,改用 Lasso 跑跑看,觀察哪些特徵的係數變成了 0。
  3. 做一次 Log 轉換: 如果你的預測目標(y)分佈很不均勻(長尾),先對它取 Log 再跑模型,驚喜往往就在這裡。

線性迴歸不是過時的工具,它是一個結構清晰、可解釋性強的強大武器。只要你學會溫柔地對待數據,它能給你的回報絕對超出想像。


電子報

Subject: 為什麼你的線性迴歸總是不準?(附上我的私藏優化清單)

嘿,我是麥特。

你剛開始學機器學習時,第一個接觸的是不是也是「線性迴歸」(Linear Regression)?

老實說,我以前覺得這東西超無聊。不就是畫一條線穿過一堆點嗎?在 Scikit-learn 裡 model.fit(X, y) 一行程式碼就收工了,簡直是幼兒園等級。

但等到我真的把它拿到實戰場景——不管是預測公司的電商銷量,還是分析產品的轉化率——我才發現,現實世界的數據根本不聽話。你的 $R^2$ 可能慘不忍睹,或者在訓練集表現很好,一拿到新數據就翻車。

我後來才意識到:線性迴歸雖然簡單,但它其實是資料科學家的「基本功」測試儀。

如果你的模型跑不準,通常不是算法太弱,而是你對數據的理解還不夠深。今天我不談硬核公式,想跟你分享我現在做模型時的三個「實戰體悟」:

1. 別讓垃圾進,垃圾出

工程師常說 “Garbage In, Garbage Out”。
如果你的數據裡有 200 歲的人,或是把「身高(公分)」跟「體重(公克)」放在一起跑,模型會直接崩潰。我現在的做法是,不管多趕,一定會先做 Z-score 標準化。這不是為了美觀,而是為了給不同單位的特徵一個公平競爭的起跑線,尤其是當你要用 Ridge 或 LASSO 的時候。

2. 特徵工程才是拉開差距的地方

模型決定了上限,而特徵工程決定了你離上限有多近。
我以前總覺得特徵越多越好,後來發現這只會增加噪音。現在我更喜歡用 LASSO 迴歸,它有一種「自動斷捨離」的超能力,會直接把沒用的特徵係數變成 0。這對我們這種不想手動篩選特徵的懶人(笑)來說,非常有感。

3. 聽聽模型在說什麼:看殘差,別只看 R²

很多人模型跑完看到 $R^2 = 0.8$ 就覺得自己是神了。但我現在一定會先去看「殘差圖」。
如果殘差圖看起來像亂掉的雜訊,那很好;但如果它呈現一種「規律的曲線」,那就是模型在對你求救,告訴你:「嘿,你漏掉了一些重要的非線性關係(比如平方項)!」


【你可以立刻做的行動】

線性迴歸不是過時的工具,它是一個結構清晰、可解釋性極強的武器。

如果你手邊剛好有個模型準確度卡住了,我建議你現在就做一件事:花一分鐘畫一張「殘差圖(Residual Plot)」。它會告訴你下一步該改數據,還是該加新特徵。

我把這篇文章提到的優化步驟,整理成了一份「模型進化實戰 Checklist」,裡面包含了我常用的數據處理邏輯跟程式碼片段。

如果你最近也在煩惱模型準不準的問題,直接回覆這封信:「我要清單」,我會把這份 PDF 私訊寄給你!

一起在資料的海洋裡探險吧。

麥特

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *