完整定義
對數轉換是資料前處理中常用的數值轉換方法,透過對特徵值套用對數函數(如 log₁₀、ln 或 log₂),將右偏態(正偏態)分布轉換為接近常態分布的形狀,同時壓縮數量級之間的差距。此技術特別適合收入、人口、銷售量等跨越多個數量級的變數,能有效降低極端值(Outlier)的影響,提升線性模型與距離型演算法的表現。
對數轉換(Log Transformation)是資料科學與統計分析中歷史悠久且效果顯著的前處理技術,其數學基礎簡單,但對後續建模的影響往往深遠。
為什麼需要對數轉換
許多真實世界的數值數據呈現右偏態(Right-skewed)分布,即大部分值集中在低端,少數極端大值拉長右尾。常見例子:
- 房屋價格:大多數房子價格適中,少數豪宅價格極高
- 個人收入:多數人收入有限,極少數高收入者拉高均值
- 網路流量、社群媒體互動:絕大多數貼文互動量低,少數病毒式傳播貼文互動量極高
- 生物學測量:細胞計數、RNA 表達量等
右偏態數據對許多演算法造成問題:
- 線性模型:假設特徵的線性關係,極端值可能主導回歸係數
- 距離型演算法(KNN、K-means):量級差距大的特徵會主導距離計算
- 統計假設:t 檢定、ANOVA 等假設常態性,偏態數據違反此假設
數學原理
對數函數的核心性質:
- log(x × y) = log(x) + log(y):乘法關係轉換為加法關係
- 對於等比例增長(x × c),轉換後的差距恆定(log(x) + log(c))
這意味著,原始數據中「從 1 到 10」和「從 100 到 1000」的增長幅度(都是 10 倍),在對數轉換後的距離相同(都是 log(10)),達到壓縮量級差距的效果。
常見對數函數選擇
- 自然對數 ln(底數 e ≈ 2.718):數學推導最常用,特別在統計建模與微積分相關推導中。
- 以 10 為底的對數 log₁₀:直觀易解釋(log₁₀(1000) = 3 表示 3 個數量級),適合展示數量級。
- log(x + 1) 或 log1p:當數據中包含 0 值時(log(0) = -∞),使用 log(x + 1) 避免無限值問題。Python 的
numpy.log1p()提供數值穩定的計算。
應用前提條件
- 數據必須全部為正數(對數函數定義域為正實數)
- 若含 0 值:使用 log(x + 1)
- 若含負值:可能需要先整體平移(加最小值絕對值 + 1),或考慮其他轉換方法(Box-Cox、Yeo-Johnson)
Box-Cox 與 Yeo-Johnson 轉換
對數轉換是廣義 Box-Cox 轉換(λ=0 時的特例)。Box-Cox 轉換透過最大似然估計自動選擇最佳的 λ 值,使轉換後的分布最接近常態。Yeo-Johnson 是 Box-Cox 的擴展,支援含零與負值的數據。在 scikit-learn 中,PowerTransformer 提供這兩種轉換。
實務操作步驟
- 分析分布:用直方圖或 Q-Q Plot 確認數據是否偏態
- 選擇轉換:純正數用 log;含 0 用 log1p;需要自動最佳化用 Box-Cox/Yeo-Johnson
- 轉換特徵:
np.log1p(X['feature'])或使用 sklearn 的PowerTransformer - 驗證效果:轉換後再次繪製分布圖,確認偏態改善
- 套用於預測時:測試集與線上推論時必須使用相同的轉換參數(不能重新擬合)
結果解釋的注意事項
若對目標變數(Y)也進行對數轉換,模型輸出的是 log(Y),使用時必須反轉換(取指數 exp)得回原始量級。在線性回歸中,對目標取對數後,係數的解釋變為「X 增加 1 單位,Y 的預測值乘以 exp(係數)」,而非直接加減。
適用與不適用情境
適用:右偏態連續正值特徵、金融數據(價格、交易量)、生物統計(濃度、計數)。
不適用:已近似常態分布的特徵(轉換後反而惡化)、有業務意義需要保留原始量級的場景、分類特徵或二元變數。
常見問題
兩者都是特徵前處理方法,但目的不同。標準化(如 Z-score Normalization)將特徵轉換為均值為 0、標準差為 1 的分布,主要解決不同特徵之間的量級差異(讓距離型演算法不被大量級特徵主導),但不改變分布形狀。對數轉換則改變分布形狀,將偏態分布拉向常態分布,同時也壓縮量級。在實務中,兩者常配合使用:先對數轉換解決偏態,再標準化處理量級差異。選擇哪種方法(或兩者都用)取決於數據的分布特性與下游演算法的假設。
不是。對數轉換應在數據分布呈右偏態(正偏態)時才有意義。若特徵已近似常態分布或呈左偏態,對數轉換可能使分布更差。建議的做法是先繪製每個特徵的直方圖或計算偏度(Skewness)統計量,偏度顯著大於 1 的特徵再考慮對數轉換。此外,對於有業務解釋意義的特徵(如年齡、評分),不必要的轉換會使結果難以解釋,應在解釋性與轉換效益之間取捨。
是的。若對目標變數 Y 進行了 log 轉換,模型學習的目標是 log(Y),預測輸出也是 log(Y) 的預測值。在輸出最終預測時,必須進行反轉換:若使用 ln,則 exp(預測值) 還原為原始量級;若使用 log1p,則 np.expm1(預測值) 進行反轉換。需要注意的是,在評估模型效能時,應在原始量級(還原後)計算業務相關的指標(如 MAE、RMSE),而非在對數量級上計算,否則指標數字無法對應到實際業務意義。
對數只定義在正數,資料有 0 時常改用 log(x + 1),NumPy 的 np.log1p 就是計算 ln(1 + x)。有負數時不能直接取對數,可以先平移成正數,或改用能處理負值的 Yeo-Johnson 轉換。Box-Cox 轉換則只能用在嚴格正值的資料。
只對 y 取自然對數時,係數 β 約代表 x 增加 1 單位,y 變動約 100β%(β 小時才準,精確值是 e^β − 1)。只對 x 取對數時,x 增加 1% 約讓 y 變動 β/100。兩邊都取對數時 β 是彈性,代表 x 變動 1%,y 約變動 β%。
相關術語
來源
這個術語目前沒有標註外部來源。
其他格式:Markdown 版本