所謂不均衡指的是不同類別的樣本量差異非常大。從數據規模上分為大數據分布不均衡和小數據分布不均衡兩種。
大數據分布不均衡:數據規模大,其中的小樣本類的占比較少。但從每個特征的分布來看,小樣本也覆蓋了大部分或全部特征。
例如:1000萬條數據,其中占比50萬條的少數分類樣本屬於這種情況。
小數據分布不均衡:數據規模小,其中小樣本的占比也較少,這會導致特征分布的嚴重不平衡。
例如:1000條數據,其中占有10條樣本的分類,其特征無論如何擬合也無法實現完整特征值的覆蓋,此時屬於嚴重的數據樣本分布不均衡。
2. 哪些運營場景中容易出現樣本不均衡
1. 異常檢測場景
大多數企業中的異常個案都是少量的,比如惡意刷單、黃牛訂單、信用卡欺、電力竊電、設備故障等。這些數據樣本所占比例通常是整體樣本中很少一部分。以信用卡欺詐為例,刷實體信用卡的欺詐比例一般在0.1%以內。
2. 客戶流失場景
大型企業流失客戶相對於整體客戶而言,尤其具有壟斷地位的行業。例如:電信、石油、網絡運營商等。
3. 罕見事件的分析
罕見事件與異常檢測類似,不同在於異常檢測通常有預定好的規則和邏輯,大多會對企業造成負面影響。
罕見事件無法預判,沒有顯著的消極或積極影響。
例如:某網絡大V無意轉發企業的一條廣告導致用戶流量明顯提升。
4. 發生頻率低的事件
例如:每年的雙11會產生較高的銷售額,但放到全年看,這個銷售額占比可能只有1%不到。
3. 通過過抽樣和欠抽樣解決樣本不均衡
過抽樣:又稱上采樣,其通過增加少數類樣本的數量來實現樣本均衡,最直接的方法是簡單復制少數類樣本形成多條記錄。這種方法的缺點是當樣本特征少,會導致過擬合問題。經過改進的過抽樣方法通過在少數類中加入隨機噪聲、干擾數據、通過一定規則產生新的樣本。例如:SMOTE算法。
欠抽樣:又稱下采樣,其通過減少多數類樣本的數量來實現樣本均衡,最直接的方法是隨機去掉一些多數類樣本來減少多數類的規模,缺點是會丟失多數類樣本中的一些重要信息。
總體上,過抽樣和欠抽樣適合大數據分布不均衡。
4. 通過正負樣本的懲罰權重解決樣本不均衡
通過正負樣本的懲罰權重解決樣本不均衡問題的思想:對分類中不同樣本數量的類別分別賦予不同的權重(一般小樣本量類別權重高,大樣本量類別權重低),然后建模計算。
使用這種方法需要對樣本本身額外處理。以 scikit-learn 中 SVM 為例,通過在 class_weight : {dict, 'balanced'} 中針對不同類別來手動指定權重。如果用其默認的方法 balanced,SVM 會將權重設置為與不同類別樣本數量呈反比的權重來進行均衡處理,計算公式:
n_samples / (n_class * np.bincount(y))
5. 通過組合 / 集成方法解決樣本不均衡
該方法是在生成訓練集時,使用所有分類中的小樣本量,同是從分類中的大樣本量隨機抽取數據來與小樣本量合並構成訓練集,這樣反復多次得到很多訓練集和訓練模型。最后在應用時,使用組合方法(例如股票、加權股票等)產生分類預測結果。
例如:數據中正、負樣本分別為100和10000條,比例 1:100,此時將負樣本隨機分為100份(也可以分更多),每份100條,然后每次形成訓練集時使用所有的正樣本和隨機抽取的負樣本形成新的數據集。如此反復得到100個訓練集和對應的訓練模型。
這種思路類似於隨機森林。在隨機森林中,每個小決策樹的分類能力很弱,通過大量的“小樹”組合成的“森林”有良好的模型預測能力。
6. 通過特征選擇解決樣本不均衡
上述方法都是基於數據行的操作,通過多種途徑使不同類別的樣本數據行記錄均衡,還可以考慮使用或輔助基於列的特征選擇方法。
一般情況樣本不均衡導致特征分布不均衡,但如果小類別樣本量具有一定的規模,那么意味着其特征的分布較均衡,可通過選擇具有顯著型的特征配合參與解決樣本不均衡問題,也能在一定程度上提高模型效果。
來自:《Python數據分析與數據化運營》