Y 右偏且變異數隨 X 增大,怎麼做前處理?
某研究人員欲使用線性迴歸模型(Linear Regression Model)分析變數 Y 與 X 之間的關係,但發現 Y 的分佈明顯右偏,且其變異數隨 X 的增大而增加。為滿足模型假設並提升配適效果,下列哪一種前處理方法最為合適?
研究人員要用線性迴歸分析 Y 和 X 的關係,但 Y 的分佈右偏(不對稱),而且 Y 的變異數會隨著 X 增大而增加(異質變異數)。這兩個問題都違反了線性迴歸的假設。
問你:對 Y 做哪種前處理,可以同時解決右偏和變異數隨 X 增大的問題?
一句話總結
Y 右偏且有異質變異數(Heteroscedasticity),要用Box-Cox 轉換對 Y 做冪次變換,它能同時穩定變異數、改善偏態,讓 Y 更接近常態分佈,滿足線性迴歸假設。
先感受問題:房價資料的兩個毛病
資料科學家佳薇要用線性迴歸分析「房價(Y)和房齡(X)」的關係,拿到台北市 2,000 筆房屋資料。
她先畫圖看看資料,發現兩個問題:
問題 2:X 越大(房子越新),Y 的變異越大 — 新房子的價格差距更懸殊(可以是 300 萬到 3,000 萬),舊房子相對集中。
這兩個問題都讓線性迴歸的假設不成立,她要找一個方法同時修正。
各種「修一個問題」的方法,為什麼不夠
- 對 X 標準化,不解決 Y 的問題:X 的標準化((X-μ)/σ)只改變 X 的尺度,讓係數解釋更方便,但 Y 右偏和 Y 的變異數問題完全沒有被碰到。
- 只用 log(Y) 轉換:log 轉換是 Box-Cox 的特例(λ=0),對右偏有效,也能改善部分異質變異數,但不是所有右偏資料都適合 log,Box-Cox 更一般化,可以找到最佳的 λ 值。
- 一次差分是時間序列的工具:差分是為了讓時間序列平穩(Stationary),佳薇的資料是橫截面資料(房屋清單),不是時間序列,差分沒有意義。
- 移除高變異樣本是資料破壞:把 Y 變異大的資料點刪掉,等於系統性偏移樣本,模型不再代表整體母體,估計量有偏誤(Bias)。
- WLS(加權最小平方)只處理異質變異數:WLS 對每個觀測值給不同的權重來補償異質變異數,但不處理 Y 的偏態問題,兩個問題要分別處理。
Box-Cox 轉換:自動找最佳冪次修正偏態和異質變異數
佳薇對 Y(房價)做 Box-Cox 轉換,找到最佳 λ 值(例如 λ=0.3):
- 轉換後的 Y* 分佈明顯更對稱,右偏消失
- 轉換後 Y* 的變異數在不同 X 值下也趨於穩定,異質變異數改善
Box-Cox 轉換的核心優勢:它不是固定用 log 或 sqrt,而是用最大概似估計(MLE)自動找出讓 Y* 最接近常態的 λ 值,比手動嘗試更系統化。
這就是選項 B 講的:對 Y 進行 Box-Cox 轉換(Box-Cox Transformation)。
技術版:Box-Cox 轉換的概念位置
Box-Cox 轉換是 Box 和 Cox 在 1964 年提出的冪次變換族(Power Transformation Family),公式為:
- 當 λ ≠ 0 時:Y* = (Y^λ - 1) / λ
- 當 λ = 0 時:Y* = ln(Y)(即對數轉換)
不同 λ 值對應的轉換:
- λ = 1:不轉換(恆等變換)
- λ = 0.5:平方根轉換(Y* = √Y)
- λ = 0:對數轉換(Y* = ln(Y))
- λ = -1:倒數轉換(Y* = 1/Y)
最佳 λ 用最大概似估計(MLE)找,統計軟體(R 的 MASS 套件、Python 的 scipy.stats.boxcox)可以自動計算。
使用條件:Y 必須是正值(Y > 0),否則需要先做平移(Y + c,c 使最小值 > 0)。
線性迴歸的四個假設(CLRM):線性、獨立、同質變異數(Homoscedasticity)、常態殘差。Box-Cox 轉換主要修正「同質變異數」和「常態假設」的違反。
為什麼其他選項是錯的
A對 X 進行標準化(Standardization)
對自變數 X 做 Z-score 標準化,讓 X 的均值為 0、標準差為 1。
題目說的問題都是關於 Y 的:「Y 右偏」和「Y 的變異數隨 X 增大」。對 X 做標準化,X 的尺度改了,但 Y 的分佈完全沒有改變,兩個問題都沒解決。標準化是在特徵之間尺度差異大時用的,不是修正應變數分佈問題的工具。
把「標準化」當成萬用前處理步驟的人,沒注意到問題出在 Y,不是 X。
C對資料進行一次差分(First Differencing)
把每個觀測值減去前一個觀測值,消除趨勢。
一次差分是時間序列分析的技術,用來消除單位根(Unit Root)讓序列平穩。本題是橫截面資料(房價和房齡),沒有時間順序,差分沒有統計意義,也不解決偏態和異質變異數問題。
記住「差分可以改善資料結構」,但不清楚差分的適用場景(時間序列),誤套在橫截面資料上。
D將 Y 中變異較大的樣本移除
把 Y 值特別高或特別低的資料點刪掉,讓變異數縮小。
這是人為造成樣本偏誤(Sampling Bias)。系統性地刪除高變異樣本,讓樣本不再代表真實母體,建出來的模型對真實情況估計有偏,且極端值往往正是最有信息量的數據點(豪宅市場行為和普通住宅不同),刪掉後喪失重要資訊。
把「降低變異數」和「移除高變異資料」混淆,或認為「讓資料看起來更整齊」就等於「滿足模型假設」的人。
同個考點下次怎麼變形
什麼是異質變異數(Heteroscedasticity)?它怎麼影響線性迴歸?
常聽到「同質變異數假設」,違反了會怎樣?
異質變異數指殘差的變異數不恆定(隨某個變數變化)。OLS 估計係數仍然無偏,但標準誤(Standard Error)估計不正確,導致 t 檢定和 F 檢定的結論不可信,信賴區間也不準確。
Box-Cox 轉換和 log 轉換有什麼關係?什麼時候直接用 log 就夠?
通常直接取 log 就好,Box-Cox 是更進階的版本嗎?
log 轉換是 Box-Cox 的特例(λ=0)。當你確定資料的偏態可以用 log 修正,直接 log 更簡單直觀;當你不確定最佳轉換,Box-Cox 可以自動搜尋最佳 λ,比手動試 log/sqrt 更系統化。
線性迴歸的四個主要假設是什麼?
線性迴歸有很多假設,考試常考哪幾個?
線性(自變數和因變數線性關係)、獨立性(觀測值間無序列相關)、同質變異數(殘差變異數恆定,不隨 X 變化)、常態性(殘差近似常態分佈)。Box-Cox 轉換主要解決第三和第四個假設的違反。
如果只是 Y 右偏但沒有異質變異數,Box-Cox 和直接 log 轉換哪個更好?
兩個問題不一定同時出現,單獨出現時怎麼選?
只有偏態沒有異質變異數時,先試 log 轉換(直觀、可解釋);若 log 後殘差圖仍不理想,再用 Box-Cox 找最佳 λ。Box-Cox 彈性更高但結果的解釋性稍差(λ=0.3 的轉換解釋起來不如 log 直覺)。
Yeo-Johnson 轉換和 Box-Cox 有什麼不同?
有時聽到 Yeo-Johnson,它和 Box-Cox 是同類工具嗎?
Yeo-Johnson 是 Box-Cox 的改進版,主要差異是 Yeo-Johnson 可以處理「包含 0 和負值」的資料(Box-Cox 要求 Y > 0)。現代機器學習框架(sklearn 的 PowerTransformer)同時支援兩種,若資料有非正值,Yeo-Johnson 是首選。
想再往下看,這 5 個
- 線性迴歸(Linear Regression)Box-Cox 轉換是為了讓資料滿足線性迴歸的假設,是模型前處理的重要步驟。
- 資料前處理(Data Preprocessing)Box-Cox 轉換是資料前處理的一種,屬於特徵工程中對目標變數的變換。
- 正規化(Normalization)Box-Cox 轉換後通常需要再做正規化,確保轉換後的 Y* 符合後續模型的輸入要求。
- 特徵工程(Feature Engineering)對目標變數 Y 做 Box-Cox 轉換屬於廣義的特徵工程,改善 Y 的分佈特性以提升模型表現。
- 描述性統計(Descriptive Statistics)識別 Y 右偏和異質變異數需要先做描述性統計分析和殘差圖,才能判斷需要何種轉換。