
來源:數據STUDIO
作者:云朵君
導讀:大家好,我是云朵君!自從分享了一篇能夠寫在簡歷里的企業級數據挖掘實戰項目,深受讀者朋友們青睞,許多讀者私信云朵君,希望多一些類似的數據挖掘實際案例。這就來了。
本項目旨在探討影響學生學業表現的人口統計學和家庭特征。本項目中,使用多種不平衡數據處理方法以及各種分類器,如決策樹,邏輯回歸,k近鄰,隨機森林和多層感知器的分類機器。
本案例數據集來自Balochistan的6000名學生。其基本情況:一共13個字段,其中RESULT為結果標簽;語言字段是經過獨熱編碼后的四個字段,分別為Lang1, Lang2, Lang3, Lang4;
另外性別、學校、是否殘疾、宗教信仰四個字段為二分類離散字段;
其余如兄弟姐妹、在校兄弟姐妹數量為連續性變量。
本次數據為清洗過后"干凈"數據,可以直接輸入到機器學習模型中直接建模使用。
探索性數據分析有多種方法,這里直接通過繪制柱狀圖查看每個字段的分布狀況。
從數據集特點來看,13個字段可以分為四大類。
考試結果為PASS的共有4562名學生,而結果為FAIL的共有1047名學生,從下圖中也可以明顯看出,該樣本為不平衡數據集,因此本次案例重點在于不平衡數據分類方法。
性別有男女,學校有學校1和學校2,身體健康狀況有是否殘疾,宗教信仰分是否是穆斯林。
本次數據集中兄弟姐妹數量及在校兄弟姐妹數量分布情況可以由下面四張分布圖很好地展示出來。
啞變量
本次數據集共有四種語言,其數量分布由下圖所示。接近一半的學生都是說的一種語言(Lang1)。
從上一步的探索性數據分析結果,本次學生成績數據集為不平衡數據集,那么處理不平衡數據集處理方法都有哪些呢。
在本文云朵君從三個方面總結了多種處理方法,見下面思維導圖。
這里主要介紹下數據預處理層面的數據重采樣方法。數據重采樣主要分為上采樣和下采樣。
下采樣,也稱為欠采樣(Under-Sampling),是一個為平衡數據類分布的移除大類數據的非啟發式的方法。此方法的底層邏輯是平衡數據集進而克服算法的特異性。
常用的方法有隨機欠采樣(Random Under-Sampling, RUS),即隨機排除大類的觀察值,和聚焦欠采樣(Focused Under-Sampling, FUS), 即移除兩類邊界處的大類數據。
上采樣,也稱為過采樣(Over-Samplig),是通過復制小類觀察值,從而增加小類比例的一個方法。類似的,過采樣也有隨機過采樣和聚焦過采樣兩種方法。
來源:kaggle
過采樣代表SMOTE方法,其主要概念也就是在少數樣本位置近的地方,人工合成一些樣本,整個算法的流程如下:
相對于過采樣,欠采樣是將多數樣本按比例減少,使得模型的加權權重改變,少考慮一些多數樣本,上圖很好地展示了兩種方法的差異 。
Tomek Link 算法
會針對所有樣本去遍歷一次,如有兩個樣本點x, y分屬不同的class,即一個為多數樣本而另一個為少數樣本,則可以去計算它們之間的距離d(x , y) 。
此時如果找不到第三個樣本點z,使得任一樣本點到z 的距離比樣本點之間的距離還小,則稱為Tomek Link,一張圖幫助理解 :
來源:Kaggle
Tomek Link 的關鍵思路在于,找出邊界那些鑒別度不高的樣本,認為這些樣本點屬于雜訊,應該剔除,因此可以見上圖最右邊,剔除以后兩種類別的樣本點可以更好地區分開來。
ENN算法(Edited Nearest Neighbor)
與上面Tomek Links的觀念相同,ENN算法也是透過某種方式來剔除鑒別度低的樣本,只是這邊的方式改成了對多數類的樣本尋找K個近鄰點,如果有一半以上(當然,門檻可以自己設定)都不屬于多數樣本,就將該樣本剔除,通常這些樣本也會出現在少數樣本之中。
SMOTE + ENN、SMOTE + Tomek Links算法都是結合過采樣與欠采樣算法SMOTEENN使用 SMOTE 進行過采樣,然后使用 Edited Nearest Neighbours 進行欠采樣。
SMOTETomek使用 SMOTE 進行過采樣,然后使用 Tomek Links 進行欠采樣。
控制變量法選擇合適的處理方法。選用決策樹為基分類器,并分別選擇不使用數據重采樣,使用SMOTE、SMOTEENN和SMOTETomek共三種數據重采樣方法,比較這四種情況下的模型評價指標AUC得分情況。
最后分別選用五種不同分類器,且分別采用不同的數據重采樣方法,繪制ROC曲線及得到的AUC得分情況。
ROC曲線繪制采用不同分類閾值的TPR和FPR,降低分類閾值會將更多的樣本判為正類別,從而增加FP和TP的個數。為了繪制ROC曲線,需要使用不同的分類閾值多次評估回歸模型,很麻煩。有一種基于排序的高效算法可以為我們提供此類信息,這種算法稱為曲線下的面積(AUV,area under roc curve)。
ROC曲線的橫軸為FPR,越低越好,縱軸為TPR,越高越好,故如果有兩個不同的模型,曲線位于左上方的模型優于曲線位于右下方的模型,這一點可以拿曲線的面積(AUV)來量化。
完美的分類為TPR=1,FPR=0;ROC曲線過(0,0)和(1,1)點
AUC計算的物理意義為:任取一對(正、負)樣本,正樣本的score大于負樣本的score的概率,也即是隨機正類別樣本位于隨機負類別樣本右側的概率。
將所有主要方法定義為函數,包括數據重采樣、劃分測試集和訓練集、模型訓練、模型評價和結果可視化。
此外,由于是比較不平衡數據集處理方法選擇的優劣,這里所有的機器學習模型都采用默認參數。
def reSampler(X, y, samp):"""不同的數據重采樣策略"""if(samp == 'None'):return splitter(X, y, 0.1)if(samp == 'SMOTE'):sm = SMOTE('auto', 42)X_resampled , y_resampled = sm.fit_resample(X, Y)return splitter(X_resampled , y_resampled, 0.1)if(samp == 'SMOTEENN'):sm = SMOTEENN()X_resampled , y_resampled = sm.fit_resample(X, Y)return splitter(X_resampled , y_resampled, 0.1)if(samp == 'SMOTETomek'):sm = SMOTEENN()X_resampled , y_resampled = sm.fit_resample(X, Y)return splitter(X_resampled , y_resampled, 0.1)def splitter(X, y, test_Size):"""劃分測試集和訓練集"""xtrain, xtest, ytrain, ytest = train_test_split(X, y, test_size = test_Size, random_state=12)return xtrain, xtest, ytrain, ytestdef rocPlotter(actu, pred, clf, samp):"""AUC曲線繪圖函數"""false_positive_rate, true_positive_rate, thresholds = roc_curve(actu, pred)roc_auc = auc(false_positive_rate, true_positive_rate)Title = str('ROC: ' + str(clf) + ' using ' + str(samp))plt.title(Title)plt.plot(false_positive_rate, true_positive_rate, 'b',label='AUC = %0.2f'% roc_auc)plt.legend(loc='lower right')plt.plot([0,1],[0,1],'r--')plt.xlim([-0.1,1.2])plt.ylim([-0.1,1.2])plt.ylabel('True Positive Rate')plt.xlabel('False Positive Rate')plt.show()return roc_aucdef applyModel(clfr, X_, y_, xt, yt):"""使用模型"""a = globals()[clfr]()a.fit(X_, y_)scor = a.score(xt, yt)*100pred = a.predict(xt)actu = ytreturn pred, actu, scordef tryAll(clfList, sampList, Inputs, Outputs):"""主函數"""rep = np.zeros( (len(clfList), len(sampList)), dtype=float)for clf, clfIndex in zip(clfList, range(len(clfList))):# 不同的分類器for samp, sampIndex in zip(sampList, range(len(sampList))):# 不同的重采樣策略X_train, X_test, Y_train, Y_test = reSampler(Inputs, Outputs, samp)prediction , actual, score =applyModel(clf, X_train, Y_train, X_test, Y_test)currentAUC = rocPlotter(prediction, actual, clf, samp)print(clf, ' with ', samp, ' scored = ', score,' on test set with AUC = ', currentAUC)rep[clfIndex, sampIndex] = currentAUCreturn rep
Classifiers = ['DecisionTreeClassifier', 'KNeighborsClassifier','LogisticRegression', 'MLPClassifier','RandomForestClassifier']Samplers = ['None', 'SMOTE', 'SMOTETomek', 'SMOTEENN']report = tryAll(Classifiers, Samplers, X, Y)
下面以單個模型四種不同重采樣策略,和五種模型單個重采樣策略為例展示可視化結果。大家可以運行上述代碼以得到完整的結果展示。
決策樹模型在四種不同重采樣策略下,得到的四種不同的結果。很明顯地看到沒有使用數據重采樣的模型得分最差只有0.54,而使用混合采樣算法的兩個結果的得分都比較理想,分別是0.973275和0.979196分。
接下來以上述結果中得分最高的混合采樣算法SMOTETomek為例,將不平衡數據集經過SMOTETomek算法處理后,分別用
DecisionTreeClassifier決策樹分類器,KNeighborsClassifierK近鄰分類器,LogisticRegression邏輯回歸,MLPClassifier多層感知機,RandomForestClassifier隨機森林分類器五種機器學習模型訓練和測試數據,并得到如下結果。
從結果可知道,并不是所有模型在使用混合采樣算法SMOTETomek后都能達到令人滿意的效果。
為方便查看所有結果,將所模型、所有重采樣方法匯總到如下圖所示的DataFrame中。從AUC結果看,使用混合采樣算法SMOTEENN對數據集處理,并使用決策樹模型對結果進行預測,將會得到最佳預測效果。其AUC=0.979。
pd.DataFrame(report, columns = Samplers, index = Classifiers)
上節中選用五種不同分類器,三種不同的數據重采樣方法,結合ROC曲線及AUC得分情況來確定重采樣方法對選擇。
本節可以理解為是上節的拓展。
# 實例化五種分類器模型dTree = DecisionTreeClassifier()logReg = LogisticRegression()knn = KNeighborsClassifier(n_neighbors=5)rF = RandomForestClassifier()MLP = MLPClassifier()# 實例化十種數據重采樣模型rmun = RandomUnderSampler()cnn = CondensedNearestNeighbour()nm = NearMiss()enn = EditedNearestNeighbours()renn =
RepeatedEditedNearestNeighbours()tkLink = TomekLinks()rmov = RandomOverSampler()sm = SMOTE()sm_en = SMOTEENN()sm_tk = SMOTETomek()# 以SMOTEENN采樣方法為例sm_en = SMOTEENN()X_resampled, Y_resampled = sm_en.fit_resample(X, Y)# 分別使用10折交叉驗證的方法得到平均得分scores_dTree = cross_val_score(dTree, X_resampled, Y_resampled, cv = 10, scoring='roc_auc')scores_dTree = scores_dTree.mean()# 打印出每次的結果print('After appling SMOTENN: ')print(' dTree, logReg , KNN , rF , MLP')print(scores_dTree, scores_logReg, scores_knn, scores_rF, scores_MLP)
將所有結果存儲在一個DataFrame里
Classifiers = ['DecisionTreeClassifier', 'LogisticRegression','KNeighborsClassifier', 'RandomForestClassifier','MLPClassifier']Samplers = ['None','Random Undersampling', 'CNN', 'NearMiss','ENN', 'RENN','Tomek Links','SMOTE','Random Oversampling', 'SMOTEENN','SMOTETomek']pd.DataFrame(report, columns = Samplers, index = Classifiers)
并用熱圖可視化更加直觀地展示出結果來
import seaborn as snsplt.figure()ax = sns.heatmap(report,xticklabels=Samplers,yticklabels=Classifiers,annot = True, vmin=0,vmax=1, linewidth=0.1,cmap="YlGnBu",)
從熱圖的特性可以看出,藍色越深,模型效果越好。本案例中可以得到如下幾個結論
本例采用的來自Balochistan的6000名學生不平衡數據集。本項目旨在探討影響學生學業表現的人口統計學和家庭特征。
本例使用清洗后的數據集,以探索數據變量的分布特征開篇,重點介紹了數據不平衡處理的各種方法,以及演示如何通過交叉驗證方法選擇合適的數據不平衡處理以及選擇合適的機器學習分類模型。
本文后續工作可以是通過正文中得到的結果,選擇幾個合適的模型,通過適當的模型調參方法選擇恰當的參數,以確定本次數據挖掘的最終模型。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24