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