python sns绘制回归线_Python数分实战:员工流失情况预测
在很久之前,我有寫一個Excel數(shù)據(jù)分析的實戰(zhàn)項目,不曉得大家還記不記得,感興趣的童鞋可以回看:
A九姑娘:Excel數(shù)分實戰(zhàn):員工流失率分析?zhuanlan.zhihu.com本次的項目數(shù)據(jù)依舊是這個,但是我們這次不再是對流失率分析,此次是利用Python知識對某公司的員工流失進行預(yù)測。
本次實戰(zhàn)涉及Python的數(shù)據(jù)可視化、和數(shù)據(jù)建模及模型評估。
干貨內(nèi)容:
- 數(shù)據(jù)可視化:運用matplotlib和seaborn,繪制柱狀圖、直方圖、箱線圖、折線圖、餅圖,以及運用子圖;
- 數(shù)據(jù)建模及模型評估:數(shù)據(jù)清洗、特征選擇、特征處理、特征降維(PCA降維)、建模(分類:KNN、樸素貝葉斯、隨機森林、Adaboost;回歸:線性回歸、嶺回歸、Lasso、邏輯回歸)、以及各個模型的評估(準(zhǔn)確率、召回率、F值)
感興趣的童鞋可以接著看咯~
目錄
- 提出問題
- 數(shù)據(jù)理解
- 數(shù)據(jù)清洗
- 數(shù)據(jù)可視化
- 特征選擇
- 特征處理
- 特征降維
- 構(gòu)建模型、模型評估
導(dǎo)入數(shù)據(jù),我們先看一下整體情況:
df這里,我們先導(dǎo)入了很多庫,有數(shù)據(jù)分析的numpy、pandas;數(shù)據(jù)可視化的matplotlib和seaborn;以及數(shù)據(jù)預(yù)處理(歸一化、標(biāo)準(zhǔn)化、數(shù)值化、正規(guī)化、LDA降維)需要的包,接下來會一一介紹。
提出問題
根據(jù)公司離職員工特征,預(yù)測流失情況。
數(shù)據(jù)理解
前次的項目A九姑娘:Excel數(shù)分實戰(zhàn):員工流失率分析中我們已經(jīng)對數(shù)據(jù)集進行理解,本次不再贅述。
數(shù)據(jù)清洗
本次抽樣為全抽,不再進行選擇子集;不涉及列重命名;不涉及數(shù)據(jù)類型轉(zhuǎn)換;不涉及數(shù)據(jù)排序。
本次只涉及缺失值處理和異常值處理:
df數(shù)據(jù)可視化
- 我們需要看一下員工不同階薪酬的人數(shù)分布情況:
這里,我們使用的柱狀圖。
plt.bar就是使用matplotlib繪制直方圖;那其他圖我們按照這個思路就可以進行繪制了,以下列式不同圖例如何繪制:
代碼中的plt.title、 plt.xlabel、plt.ylabel、plt.xticks等是圖表繪制中的基本元素,見下:
plt接下來,我們又運用了seaborn,設(shè)置了主題為‘darkgrid’,字體和顏色主題。其實我們也可以利用seaborn繪制直方圖:
sns我們來看一下,seaborn的效果:
snsseaborn的繪制效果更為美觀。
- 不同薪酬段各個部門人數(shù)的分布情況:
- 比較平均滿意度、最后一次滿意度和月平均工時的分布情況:
如果我們要把這三個圖例一同比較,我們可以使用子圖:
f圖太小了,看不清,我們運用figsize調(diào)整一下圖的大小:
f- 異常值分析的過程中,我們可以使用箱線圖,觀測數(shù)據(jù)整體的分布情況:
在sns.boxplot的參數(shù)中,saturation表示上邊界,默認(rèn)0.75(四分位數(shù)),whis表示k默認(rèn)1.5;我們調(diào)整k在看一下:
sns看到出來,異常值變了。
- 隨著司齡變化,離職人數(shù)的變化情況,我們使用折線圖:
我們發(fā)現(xiàn):工作時間5年的時候離職率最高,五年左右離職率比較高;隨著時間越來越久,離職率就比較低,時間短離職率也不高;
- 使用餅圖觀測各個部門的人數(shù)結(jié)構(gòu):
我們想要把銷售部門sales著重突出:
explodes以上,我們使用了柱狀圖、直方圖、餅圖、折線圖、箱型圖對數(shù)據(jù)集進行了簡單的理解;不再贅述,如果感興趣,可以看文章開頭推薦的另一篇,有對數(shù)據(jù)進行理解。
接下來,也是本文重點。
特征選擇
我們在數(shù)據(jù)清理結(jié)束后,得到標(biāo)注‘left’:
label接下來,對數(shù)據(jù)集進行相關(guān)性分析:
df可以用熱力圖來更加直觀的觀察:
sns以上是皮爾遜相關(guān)系數(shù),藍色正相關(guān),紅色負(fù)相關(guān)。last_evaluation不屬于特征值,又因它和number_project和 average_monthly_hours正相關(guān),此三個不屬于特征值可去掉;因為特征不多,項目中我們可以暫時保留。
我們先去除我們的標(biāo)注left:
df注意:axis = 1,表示列;axis = 0 表示行。
特征處理
特征變換的方法有:對指化(對數(shù)化、指數(shù)化)、離散化(等頻分箱、等距分箱)、歸一化、標(biāo)準(zhǔn)化、數(shù)值化、正規(guī)化。
我們對特征進行以下處理:
satisfacation_level 介于[0,1],可以不處理;或者 ,可采用MinMaxScaler歸一化強行拉伸;或者標(biāo)準(zhǔn)化StandardScaler均值為0,方差為1last_evaluation同上
number_project不大于10,也可同上
time_spend_company 與 number_project相似,同上
Work_accident promotion_last_5years 同上sl
此處注意:
sl為True我們對數(shù)值類特征此處均使用標(biāo)準(zhǔn)化。
department 和salary 都是離散值,需要數(shù)值化,考慮Label Encoder和OneHot Encoder(標(biāo)簽化、和獨熱編碼)dpt此處注意:
department此處我們均使用了標(biāo)簽化LabelEncoding,然后進行歸一化處理。
我們看一下結(jié)果:
特征降維
常用特征降維方式,有主成分分析PCA降維、LDA降維、奇異值分解SVD。此處我們使用用PCA降維,因為LDA降維后是1維。
features構(gòu)建模型及評估
我們對數(shù)據(jù)集進行拆分,訓(xùn)練集60%,測試集20%,驗證集20%:
from接下來就是建模了。
1)分類-KNN
先以KNN為例:
先說一下KNN的算法思想:一個數(shù)據(jù)集都會有他的標(biāo)注,如果說找到了一個點,有K個鄰居中一種標(biāo)注大于另外一種標(biāo)注,那我們就說這個點更傾向于與多數(shù)點是一致的,這個K可以由我們來定:
那 這個點到他鄰居的距離是什么?我們可以理解,把屬性轉(zhuǎn)化為數(shù)值后,每個屬性都是一個維度,每個對象,都是一個空間中的坐標(biāo);對象和對象之間就會有距離。有以下幾種:
- 歐式距離:理解為兩個點的直線距離
- 曼哈頓距離:理解為各個維度的長度相加
- 閔可夫斯基距離:閔可夫斯基有一個參數(shù)p,可以取任一志,p取1時候,就是歐氏距離,p取2時候,就是曼哈頓距離;p可以無窮大。
接下來,直接上代碼:
from我們衡量指標(biāo)使用的準(zhǔn)確率ACC、召回率REC和F值。
看一看到,驗證集驗證結(jié)果的準(zhǔn)確率0.96、召回率0.91、F值0.92;
我們調(diào)整K,看一下如果只要3個鄰居的話,結(jié)果又如何:
看的出來,n_neighbore=3時,泛化能力更好;
根據(jù)驗證集進行對預(yù)測值驗證后,我們還想根據(jù)測試集、訓(xùn)練集同樣進行驗證,我們可以建立一個函數(shù)來完成,進而比較:
knn_clf0為訓(xùn)練集;1為驗證集;2為測試集。
整體來看,泛化能力還是不錯的;但是,對于測試集略還是略低于訓(xùn)練集;存在微小的過擬合現(xiàn)象。
如果我們在特征預(yù)處理的時候,對數(shù)據(jù)進行的是歸一化,并不是這次的標(biāo)準(zhǔn)化,我們也可以去實驗一下看一下結(jié)果;同樣,可以對department和salary進行one-hot編碼,多次嘗試;尋找最合適的模型,大家可以自己練習(xí)一下。
2)分類-樸素貝葉斯
基本算法思想:
- 假設(shè)特征間是相互獨立的;
- 各種特征在X條件下的概率也是已知的;
- 條件X的分布概率也是已知的;
- 給定特征,判斷是X的哪個值。
常用的樸素貝葉斯算法有:高斯貝葉斯和伯努利樸素貝葉斯:
- 樸素貝葉斯用到的特征必須是離散的;如果這些離散值都是二值(0,1),使用伯努利貝葉斯會更好;如果值是連續(xù)的,在伯努利樸素貝葉斯下,也會把 他們二值化;
- 高斯貝葉斯,是假設(shè)特征都是高斯分布的;二者都對特征有比較嚴(yán)格的要求;同時,他們在離散屬性的情況下會有更好的表現(xiàn);連續(xù)屬性不一定會非常好
我們先導(dǎo)入數(shù)據(jù)庫包~
接下來,為了方便,我們先建立一個model,存放我們的各個模型,然后統(tǒng)一運行比較:
models然后呢,我們把按照剛才的for循環(huán)思路,稍作修改:
for運行,我們看一下結(jié)果:
看的出來,樸素貝葉斯在此次的特征大部分非離散的情況下,泛化結(jié)果較差。
3)分類-決策樹
決策樹,是模仿人類做決策的過程,一步步的做出決策。
from我們按照剛才的思路,在models中增加決策樹:
models運行for循環(huán),看一下結(jié)果,我們這里只看決策樹部分的吧:
很明顯,決策樹的泛化效果更佳。
4)分類-支持向量機SVM
算法思想:擴維,把一組特征變?yōu)榫€性可分;所以,可以先在低維空間進行計算,利用核函數(shù)擴維。
from我們可以用參數(shù)C來控制SVM的精度,C越大,SVM準(zhǔn)確率越高。這里我們先試試C = 1:
我們可以嘗試把C調(diào)整到10000:
看得到,泛化效果有了明顯提升。
5)分類-隨機森林
隨機森林是一種集成方法。
集成方法是什么?
同一個問題,我們可以用不同的分類器來判別,針對某一條數(shù)據(jù)不同的分類器結(jié)果會有不同,如果充分考慮分類器判對或者盤錯的可能,就很有可能發(fā)現(xiàn)進一步提升分類質(zhì)量的方法;機器學(xué)習(xí)問題中,將很多機器學(xué)習(xí)算法組合在一起,得到可能會比單一算法的結(jié)果更好的性能結(jié)果;這樣的思路就是集成學(xué)習(xí)的方法。
集成方法分為袋裝法和提升法:
- 袋裝法:對訓(xùn)練集用不同的模型判斷后,對不同模型投票(均值),比如隨機森林;
- 提升法:模型串聯(lián)起來,加權(quán)疊加,比如Adaboost;
隨機森林,有N個決策樹,但是我們需要注意樹的個數(shù),過多容易造成過擬合。
from我們運行for循環(huán),看一下結(jié)果:
訓(xùn)練家的準(zhǔn)確率達到0.996,召回率達到0.986,F值同樣也是0.99;相對驗證集和測試集基本差不多。整體來看,泛化能力較好。
6)分類-Adaboost
from運行for循環(huán),看一下結(jié)果:
7)回歸-線性回歸
在上文,我們可以知道,last_evaluation number_project average_monthly_hours 相關(guān)性比較大,我們對這三列進行分析:
from我們看一運行結(jié)果:
8)回歸-嶺回歸
from9)回歸-Lasso
from我們可以通過控制嶺回歸和Lasso回歸的參數(shù)來控制擬合效果。
10)回歸-邏輯回歸
我們在之前的文章Python數(shù)分:回歸分析中對邏輯回歸和線性回歸,進行詳細(xì)的介紹,感興趣的童鞋可以回看哈~本次就直接上代碼了:
from運行for循環(huán):
泛化效果較差。
以上,我們構(gòu)建10種模型,并對各個模型果進行評估。此次分享先到這里~
感謝觀看。
總結(jié)
以上是生活随笔為你收集整理的python sns绘制回归线_Python数分实战:员工流失情况预测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springbean的生命周期_spri
- 下一篇: 计算机科学与python编程导论_计算机