引子
作爲一個小白數據挖掘工程師,如何處理分佈不均勻的數據是我們遇到的第一個難題,也是工作中最常見的問題之一。
何謂數據分佈不均勻?比如用戶做一道題的做題時間長度(簡稱做題時長),在理想狀態下應該是正態分佈的,即大部分人做題時長在一個合理位置(如3~5分鐘),做題時間很長or很短的人應該很少。但實際情況總是這樣的嗎?非也。由於不論是做題時長、房價還是人的收入,這些變量總有一個下限,卻沒有上限。這就導致有些做題時長超級長、收入超級高的人,將概率分佈從正態的拉成了右偏的,即長尾分佈。這樣數據顯然是不夠完美的,因爲這樣的數據不論是採取均勻的數據分箱,還是直接建模,都會導致大量數據的差別較小。那我們直接將之切除長尾?大多時間也不合適——這時候,數據變換就要粉墨登場了。
本文記錄我在實際工作中碰到的有效的數據變換實例,並稍加解釋:
數據變換實例
- 長尾分佈(右偏)【注意,右偏的“右”指的是長尾的位置,不是峯的位置!】:
- 代表例子:房價分佈、收入分佈、做題時長分佈
- 行之有效的處理方式:對數變換【ln(y)】、平方根變換
- 若數據中存在負數、無法進行對數or平方根變換怎麼辦?——加上一個常數後化爲正數、再進行變換。
- 左偏分佈:
- 代表例子:普通人壽命分佈:
- 行之有效的處理方式:平方函數【y^2】、指數函數【e^y】
- 對偏態分佈的懶人方案:Box-cox轉換
- 對週期性特徵進行sin、cos函數變換:
- 原因:有些特徵具有周期性質。如一整天內醫院客流量、如一年四季的風向、一週七天的超市人流量等等,原本0時和23時的數據應該較爲接近,但若你直接採用時間數據,就相當於打破了這個時間循環。因此可以將時間週期(如24時)變換到0~π之間,然後0:00和23:00對應的數據就會在空間中較爲接近了