?說明:這是一個機器學習實戰(zhàn)項目(附帶數(shù)據(jù)+代碼+文檔+代碼講解)钾军,如需數(shù)據(jù)+代碼+文檔+代碼講解可以直接到文章最后獲取鳄袍。
1.項目背景 ?
在全球化的今天,收入不平等已經(jīng)成為各國政府和社會關注的焦點問題之一吏恭。了解居民收入狀況拗小,特別是區(qū)分收入水平是否超過一定閾值(如5萬美元),對于政策制定者樱哼、社會學家和經(jīng)濟學家而言至關重要哀九。這不僅有助于揭示社會經(jīng)濟結(jié)構的現(xiàn)狀,而且對于制定針對性的社會保障政策搅幅、稅收政策以及經(jīng)濟發(fā)展戰(zhàn)略具有深遠影響阅束。
隨著大數(shù)據(jù)和機器學習技術的迅猛發(fā)展,我們擁有了前所未有的工具來分析和預測復雜的經(jīng)濟現(xiàn)象茄唐。利用居民的年齡息裸,工作類型,受教育程度等多維度數(shù)據(jù)沪编,構建預測模型呼盆,能夠幫助我們更準確地預測個體的收入水平。特別是在美國這樣的經(jīng)濟體中蚁廓,能否達到5萬美元的年收入往往被視為中產(chǎn)階級的門檻访圃,對個人的生活質(zhì)量、消費模式乃至社會流動性有著顯著影響纳令。
本項目致力于開發(fā)基于機器學習的居民收入預測模型挽荠,主要聚焦于預測個體年收入是否超過5萬美元。我們的目標是:
通過實施本項目平绩,我們期望能夠為理解和解決收入不平等問題提供有力的技術支撐圈匆。預測模型的建立不僅可以幫助政府和相關機構提前規(guī)劃,還能夠為個人的職業(yè)規(guī)劃和財務決策提供參考捏雌,促進社會的整體福祉跃赚。此外,項目成果還將豐富學術界對收入預測領域的研究,為后續(xù)的理論創(chuàng)新和應用開發(fā)奠定堅實的基礎纬傲。
本項目通過決策樹分類模型满败、隨機森林分類模型、KNN分類模型和GBDT分類模型完成收入預測叹括。?????? ? ?
2.數(shù)據(jù)獲取?
本次建模數(shù)據(jù)來源于網(wǎng)絡(本項目撰寫人整理而成)算墨,數(shù)據(jù)項統(tǒng)計如下:
數(shù)據(jù)詳情如下(部分展示): ? ?
3.數(shù)據(jù)預處理 ?
3.1 用Pandas工具查看數(shù)據(jù)?
使用Pandas工具的head()方法查看前五行數(shù)據(jù):
關鍵代碼:
3.2數(shù)據(jù)缺失查看?
使用Pandas工具的info()方法查看數(shù)據(jù)信息: ? ?
從上圖可以看到,總共有15個變量汁雷,數(shù)據(jù)中有缺失值净嘀,工作類型缺失值1836條、國籍缺失值583條侠讯,共有32561條數(shù)據(jù)挖藏。 ? ?
關鍵代碼:
3.3數(shù)據(jù)描述性統(tǒng)計 ?
通過Pandas工具的describe()方法來查看數(shù)據(jù)的平均值、標準差厢漩、最小值膜眠、分位數(shù)、最大值溜嗜。
關鍵代碼如下:?
4.探索性數(shù)據(jù)分析 ?
4.1 income變量柱狀圖 ?
用Matplotlib工具的plot()方法繪制柱狀圖: ? ?
4.2 特征密度分布圖?
通過上圖可以看出宵膨,在不同收入水平下,年齡的核密度分布圖炸宵,對于年收入超過5萬美元的居民來說柄驻,他們的年齡幾乎呈現(xiàn)正態(tài)分布,而收入低于5萬美元的居民焙压,年齡呈現(xiàn)右偏特征,即年齡偏大的居民人數(shù)要比年齡偏小的人數(shù)多抑钟。 ? ?
通過上圖可以看出涯曲,不同收入水平下,周工作小時數(shù)的核密度圖在塔,很明顯幻件,兩者的分布趨勢非常相似,并且出現(xiàn)局部峰值蛔溃。
通過上圖可以看出绰沥,不同收入水平下,教育時長的核密度圖贺待,很明顯徽曲,兩者的分布趨勢非常相似,并且也多次出現(xiàn)局部峰值麸塞。? ??
4.3 特征柱狀圖 ?
通過上圖可以看出秃臣,相同的種族下,居民年收入水平高低的人數(shù)差異。
通過上圖可以看出奥此,相同的家庭成員關系下弧哎,居民年收入水平高低的人數(shù)差異。但無論怎么比較稚虎,都發(fā)現(xiàn)一個規(guī)律撤嫩,即在某一個相同的水平下(如白種人或未結(jié)婚人群中),年收入低于5萬美元的人數(shù)都要比年收入高于5萬美元的人數(shù)多蠢终,這個應該是抽樣導致的差異(數(shù)據(jù)集中年收入低于5萬和高于5萬的居民比例大致在75%:25%)序攘。 ? ?
通過上圖可以看出,相同的性別下蜕径,居民收入水平高低人數(shù)的差異两踏;其中,女性收入低于5萬美元的人數(shù)比高于5萬美元人數(shù)的差異比男性更嚴重兜喻,比例大致為90%:10%梦染, 男性大致為70%:30%。
5.特征工程 ?
5.1離散變量重編碼 ?
如下是編碼后的結(jié)果展示: ? ?
5.2 啞特征處理?
關鍵代碼如下:
5.3 建立特征數(shù)據(jù)和標簽數(shù)據(jù)?
關鍵代碼如下:
5.4 數(shù)據(jù)均衡化?
采用過采樣工具進行數(shù)據(jù)均衡化朴皆,結(jié)果如下: ? ?
5.5 數(shù)據(jù)集拆分?
通過train_test_split()方法按照80%訓練集帕识、20%測試集進行劃分,關鍵代碼如下:
6.構建分類模型?
主要使用決策樹分類算法遂铡、隨機森林分類算法肮疗、KNN分類算法和GBDT分類算法,用于目標分類扒接。?
6.1 構建模型?
7.模型評估 ?
7.1評估指標及結(jié)果 ?
評估指標主要包括準確率伪货、查準率、查全率钾怔、F1分值等等碱呼。
從上表可以看出,4個模型的F1分值都在0.8以上宗侦,說明4個模型在月亮數(shù)據(jù)集上效果良好愚臀,其中隨機森林表現(xiàn)最好。????
7.2 分類報告?
決策樹分類模型:
從上圖可以看出矾利,分類為0的F1分值為0.87姑裂;分類為1的F1分值為0.87。
隨機森林分類模型:
從上圖可以看出男旗,分類為0的F1分值為0.89舶斧;分類為1的F1分值為0.89。
KNN分類模型:
從上圖可以看出察皇,分類為0的F1分值為0.84捧毛;分類為1的F1分值為0.87。
GBDT分類模型:
從上圖可以看出,分類為0的F1分值為0.86呀忧;分類為1的F1分值為0.87师痕。
7.3 混淆矩陣?
決策樹分類模型: ? ?
從上圖可以看出,實際為0預測不為0的 有727個樣本而账;實際為1預測不為1的 有578個樣本胰坟。??? ??
隨機森林分類模型: ? ?
從上圖可以看出,實際為0預測不為0的 有577個樣本泞辐;實際為1預測不為1的 有486個樣本笔横。
KNN分類模型: ? ?
從上圖可以看出,實際為0預測不為0的 有1191個樣本咐吼;實際為1預測不為1的 有248個樣本吹缔。
GBDT分類模型: ? ?
從上圖可以看出,實際為0預測不為0的 有846個樣本锯茄;實際為1預測不為1的 有497個樣本厢塘。
7.4 ROC曲線?
決策樹分類模型: ? ?
從上圖可以看出,決策樹分類模型的AUC值為0.88肌幽。
隨機森林分類模型: ? ?
從上圖可以看出晚碾,隨機森林分類模型的AUC值為0.96。
KNN分類模型: ? ?
從上圖可以看出喂急,KNN分類模型的AUC值為0.92格嘁。
GBDT分類模型: ? ?
從上圖可以看出,GBDT分類模型的AUC值為0.94廊移。? ? ??
8.結(jié)論與展望?
綜上所述糕簿,本文采用了決策樹、狡孔、隨機森林冶伞、KNN和GBDT算法來構建分類模型,最終證明了4種模型效果良好步氏。此模型可用于日常產(chǎn)品的預測。? ??
說明:進入作者個人主頁徒爹,可以查看更多文章內(nèi)容荚醒,點擊作者頭像,可進入作者個人主頁隆嗅。
項目代碼:
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題
# kind='bar' 繪制柱狀圖
df['income'].value_counts().plot(kind='bar') # 繪圖
plt.xlabel("income變量") # 設置x軸名稱
plt.ylabel("數(shù)量") # 設置y軸名稱
plt.title('income變量柱狀圖') # 設置標題名稱
# 項目資源如下:
#? ? https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
df.age[df.income == ' <=50K'].plot(kind='kde', label='<=50K', legend=True, linestyle='-') # 繪圖
df.age[df.income == ' >50K'].plot(kind='kde', label='>50K', legend=True, linestyle='--') # 繪圖
plt.xlabel("age") # 設置x軸名稱
df['hours-per-week'][df.income == ' <=50K'].plot(kind='kde', label='<=50K', legend=True, linestyle='-') # 繪圖
df['education-num'][df.income == ' <=50K'].plot(kind='kde', label='<=50K', legend=True, linestyle='-') # 繪圖