日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python sns绘制回归线_Python数分实战:员工流失情况预测

發布時間:2025/3/12 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

這里,我們使用的柱狀圖。

plt.bar就是使用matplotlib繪制直方圖;那其他圖我們按照這個思路就可以進行繪制了,以下列式不同圖例如何繪制:

代碼中的plt.title、 plt.xlabel、plt.ylabel、plt.xticks等是圖表繪制中的基本元素,見下:

plt

接下來,我們又運用了seaborn,設置了主題為‘darkgrid’,字體和顏色主題。其實我們也可以利用seaborn繪制直方圖:

sns

我們來看一下,seaborn的效果:

sns

seaborn的繪制效果更為美觀。

  • 不同薪酬段各個部門人數的分布情況:
sns

  • 比較平均滿意度、最后一次滿意度和月平均工時的分布情況:

如果我們要把這三個圖例一同比較,我們可以使用子圖:

f

圖太小了,看不清,我們運用figsize調整一下圖的大小:

f

  • 異常值分析的過程中,我們可以使用箱線圖,觀測數據整體的分布情況:
sns

在sns.boxplot的參數中,saturation表示上邊界,默認0.75(四分位數),whis表示k默認1.5;我們調整k在看一下:

sns

看到出來,異常值變了。

  • 隨著司齡變化,離職人數的變化情況,我們使用折線圖:
sub_df

我們發現:工作時間5年的時候離職率最高,五年左右離職率比較高;隨著時間越來越久,離職率就比較低,時間短離職率也不高;

  • 使用餅圖觀測各個部門的人數結構:
df

我們想要把銷售部門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,方差為1
last_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_clf

0為訓練集;1為驗證集;2為測試集。

整體來看,泛化能力還是不錯的;但是,對于測試集略還是略低于訓練集;存在微小的過擬合現象。

如果我們在特征預處理的時候,對數據進行的是歸一化,并不是這次的標準化,我們也可以去實驗一下看一下結果;同樣,可以對department和salary進行one-hot編碼,多次嘗試;尋找最合適的模型,大家可以自己練習一下。

2)分類-樸素貝葉斯

基本算法思想:

  • 假設特征間是相互獨立的;
  • 各種特征在X條件下的概率也是已知的;
  • 條件X的分布概率也是已知的;
  • 給定特征,判斷是X的哪個值。

常用的樸素貝葉斯算法有:高斯貝葉斯和伯努利樸素貝葉斯:

  • 樸素貝葉斯用到的特征必須是離散的;如果這些離散值都是二值(0,1),使用伯努利貝葉斯會更好;如果值是連續的,在伯努利樸素貝葉斯下,也會把 他們二值化;
  • 高斯貝葉斯,是假設特征都是高斯分布的;二者都對特征有比較嚴格的要求;同時,他們在離散屬性的情況下會有更好的表現;連續屬性不一定會非常好
from

我們先導入數據庫包~

接下來,為了方便,我們先建立一個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)回歸-嶺回歸

from

9)回歸-Lasso

from

我們可以通過控制嶺回歸和Lasso回歸的參數來控制擬合效果。

10)回歸-邏輯回歸

我們在之前的文章Python數分:回歸分析中對邏輯回歸和線性回歸,進行詳細的介紹,感興趣的童鞋可以回看哈~本次就直接上代碼了:

from

運行for循環:

泛化效果較差。


以上,我們構建10種模型,并對各個模型果進行評估。此次分享先到這里~

感謝觀看。

總結

以上是生活随笔為你收集整理的python sns绘制回归线_Python数分实战:员工流失情况预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。