對數轉換
長尾分佈(Heavy-tailed Distribution)是指資料分布呈現明顯的偏態,其中少數極端值與大多數常見值之間存在巨大差異。這種分布在真實世界資料中極為常見,如收入分配、交易金額、網站流量等。長尾分佈會對合成資料的品質造成顯著影響,因為合成器難以同時捕捉常見值的密集分布和極端值的稀疏特性。
對數轉換是處理長尾分佈最常用且有效的方法之一。透過將原始數值取對數,可以將偏態分布轉換為較為對稱的分布。對數轉換的核心價值在於壓縮值域範圍,使大數值被壓縮得更多而小數值壓縮較少,從而減少極端值對整體分布的主導影響。這種轉換不僅改善了合成器的學習效果,更重要的是保留了數值間的相對大小關係,使得轉換後的資料仍然維持原有的排序結構。
對數轉換的類型與效果
對數轉換主要分為兩種形式。標準對數轉換定義為 $y = \log(x)$,適用於所有值都大於零的數值變數,將乘法關係轉換為加法關係,常用於嚴格正值的變數如價格或面積。另一種是對數加一轉換,定義為 $y = \log(x + 1)$,適用於包含零值的數值變數,解決了 $\log(0)$ 未定義的問題,常用於計數資料如購買次數或瀏覽次數。
在實際應用中,對數轉換的效果相當顯著。轉換前的長尾分佈通常表現為大多數值集中在低值區域,而少數極端值分散在高值區域,使得合成器難以平衡兩端的學習。經過對數轉換後,數值分布變得更加對稱,極端值被有效壓縮,合成器得以更容易學習整體模式,從而產生更高品質的合成資料。
判斷是否需要對數轉換
當資料符合以下特徵時,應考慮使用對數轉換。若資料呈現明顯的偏態分布,例如偏度(Skewness)絕對值大於 1 或直方圖呈現明顯的左偏,即為適合轉換的訊號。若資料中存在極端值,如最大值與最小值相差數個數量級,或存在遠離主要分布的離群值,對數轉換能有效壓縮這些極端值。從領域知識判斷,若變數間呈現乘法關係而非加法關係(如複利增長、比例變化),對數轉換特別有效。此外,若合成資料無法產生極端值或過度產生不合理的極端值時,也表示原始資料可能需要對數轉換。
判斷分布偏態可透過統計指標和視覺化檢查進行。在統計指標方面,計算偏度值後,若絕對值大於 1 表示強烈偏態應使用對數轉換;若介於 0.5 到 1 之間為中度偏態可考慮轉換;若接近 0 則表示分布對稱可能不需要轉換。視覺化檢查則包括繪製直方圖觀察分布形狀、使用 Q-Q 圖檢查常態性、比較中位數與平均數的差異來評估偏態程度。
選擇使用標準對數轉換 $\log(x)$ 或對數加一轉換 $\log(x+1)$ 取決於資料特性。若所有值大於 0,使用標準對數轉換 $\log(x)$ 提供較好的解釋性,適合嚴格正值變數如價格或面積。若資料包含 0 值,則使用對數加一轉換 $\log(x+1)$ 避免 $\log(0)$ 未定義的問題,特別適合計數資料如購買次數、瀏覽次數。若資料包含負值,則需要先進行其他處理才能應用對數轉換。
某些情況下不適合使用對數轉換。若分布已經對稱,偏度接近 0 時再對數轉換反而造成訓練資料精度上升。若資料包含負值,對數無法直接處理,應考慮其他轉換方法。若業務解釋很重要,例如零值或負值代表特定業務狀態時,可考慮將其視為類別處理而非進行數值轉換。
實際應用範例
以下範例展示如何結合不同的轉換方法處理金融資料:
Preprocessor:
financial_data:
method: 'default'
config:
sequence:
- 'encoder'
- 'scaler'
scaler:
# 對數轉換:嚴格正值
transaction_amount: 'scaler_log'
account_balance: 'scaler_log'
# 對數加一轉換:可能為零
transaction_count: 'scaler_log1p'
failed_attempts: 'scaler_log1p'
# 標準化:已經對稱的變數
credit_score: 'scaler_standard'
interest_rate: 'scaler_standard'此設定針對不同特性的欄位採用適當的轉換策略。交易金額(transaction_amount)和帳戶餘額(account_balance)為嚴格正值,使用標準對數轉換能有效壓縮其長尾分佈。交易次數(transaction_count)和失敗嘗試次數(failed_attempts)可能包含零值,因此使用對數加一轉換。信用評分(credit_score)和利率(interest_rate)已經呈現對稱分布,只需標準化處理即可。
注意事項與常見問題
如何處理包含負值的資料?
對數無法直接處理負值,需要根據業務情境選擇策略。可能的方式包括將所有數值加上一個常數使其全部為正,但這可能降低潛在的異質性關係、改變資料的內在結構。另一種方式是將正負值分離處理,建立一個類別變數標記正負號,再對絕對值進行對數轉換。若資料同時包含正負值且無法分離,可考慮使用 Yeo-Johnson 轉換或分位數轉換等其他方法。
最重要的是理解負值在業務上的意義。例如負值若代表虧損或退款等特殊狀態,可以考慮作為獨立的類別單獨處理而非僅視為數值。這些替代方法目前都不包含在 PETsARD 中,需要在前處理階段自行實作。
對數轉換對合成資料品質有什麼影響?
根據本團隊實務經驗,適當使用對數轉換可顯著提升合成資料品質。在分布相似度方面,欄位形狀分數通常可提升 10-30%,極端值的處理也更加合理,減少不切實際的極端合成值。此外,對數轉換有助於更好地捕捉變數間的相關性,同時使合成器的訓練過程更穩定快速。
然而需注意過度轉換可能產生反效果。例如對原本就對稱的分布進行對數轉換反而會引入偏態。因此在應用轉換後,務必檢查還原的合成資料是否符合業務邏輯與統計特性。
需要在對數轉換前或後處理離群值嗎?
PETsARD 預設前處理是先處理離群值(outlier)才做對數轉換所屬的縮放(scaler),且順序無法轉換。如果沒有用正面表列方式關閉離群值執行的話,很容易因為長尾的離群都被移除了,導致對數轉換成效不彰。
處理順序的選擇取決於離群值的性質。若離群值是資料錯誤或異常記錄,或者極端值嚴重扭曲了整體分布,應該先進行離群值處理再執行對數轉換。相反地,若極端值是真實且重要的資料點,直接進行對數轉換通常就足夠了,因為對數轉換本身就具有壓縮極端值的效果。
實務上建議先透過視覺化檢查資料分布,評估極端值的業務合理性,再嘗試不同策略並比較最終的合成品質來做出決策。
需要在對數轉換前或後做標準化縮放嗎?
不建議對已標準化的資料再進行對數轉換。標準化會將資料轉換為平均值為零、標準差為一的分布,產生負值,而對數無法處理負值。
經過本團隊實務經驗,即使做完對數轉換再標準化,與只做對數轉換的效果幾乎沒差異。這可能由於絕大部分的分佈偏離都已經在對數轉換處理了。
故本團隊建議使用者專注在判斷欄位是否需要做對數轉換即可,無須其他的縮放處理。