DC離職率預(yù)測案例分析

1.需求描述

本文分析利用DC員工數(shù)據(jù)進行分析苛吱。在對離職率的影響因素進行觀察的基礎(chǔ)至上,建立模型并預(yù)測哪些員工更易離職。

2.數(shù)據(jù)集描述

DC員工數(shù)據(jù)集共有31個變量,1100個觀測量。部分重點關(guān)注變量描述如下:

重點字段描述

員工特征可以分為以下幾類

  • 基本的身份信息變量:性別抡驼、年齡鬼廓、學(xué)歷、婚姻狀況致盟、教育程度碎税、就讀專業(yè);
  • 員工公司身份變量:工齡馏锡、司齡(在公司工作的時間)雷蹂、職位、職級杯道、任職過的企業(yè)數(shù)量匪煌、所在部門、商務(wù)差旅情況党巾、和目前管理者共事年數(shù)
  • 薪酬與福利變量:月薪萎庭、工作投入、是否加班齿拂、績效評分驳规、認(rèn)購優(yōu)先股的級別、漲薪比列署海、上年度培訓(xùn)次數(shù)吗购、距離上次升職的時間間隔
  • 生活質(zhì)量相關(guān)變量:工作環(huán)境滿意度、工作滿意度砸狞、關(guān)系滿意度捻勉、工作與生活平衡情況、上班距離

3.特征分析

3.1 統(tǒng)計分析

基礎(chǔ)信息描述
  • 員工基礎(chǔ)信息描述
    • 員工員工平均年齡約37歲刀森,最大的60歲贯底,最小的18歲;
    • 全部1100名員工中撒强,離職178人禽捆,離職率16.2%;
    • 員工平均收入6483.6飘哨,中位收入4857.0胚想,最小1009,最大19999;
    • 員工中男性為653人芽隆、女性為447人浊服;男性離職率為61.2%统屈、女性離職率為38.8%

3.2 分布分析

通過對部分變量觀察分析,發(fā)現(xiàn)以下問題:

  • 18歲-23歲員工離職率超過40%牙躺,符合當(dāng)前市場對95后司齡的判斷愁憔,25歲以后員工穩(wěn)定性趨于穩(wěn)定,維持在20%-40%之間

  • 研發(fā)部門離職人數(shù)最多孽拷,這主要是因為該公司研發(fā)部門人數(shù)最多的原因吨掌,雖然人數(shù)多,但是研發(fā)部門離職率最低脓恕,離職率最高的部門是HR膜宋,該部門也是公司人數(shù)最少的部門(基數(shù)比較小)


    -員工離職率和薪資漲幅比呈現(xiàn)負(fù)相關(guān)炼幔,當(dāng)漲幅比最大時員工離職率超過40%秋茫,有點奇怪,如果分析沒有錯誤那就說明該部分員工薪資基數(shù)較小故而導(dǎo)致離職率很高

    PercentSalaryHike&MonthlyIncome.png

  • 工作投入度等級為1的員工離職率有近40%乃秀,達(dá)到了38%8刂!跺讯!一分耕耘一份收獲策泣,若未付出何談喜歡?

    JobInvolvement.png

  • 員工加班的離職率是不加班離職率的3倍Lб鳌H尽!彈性工作和不加班為什么會成為一種福利待遇

  • 員工在公司供職時間越長穩(wěn)定性越好火本,員工司齡在0年-2年內(nèi)離職率最高為35.8%危队,20年-25年會有小幅增長(有可能會創(chuàng)業(yè)或者升職無望),31年-32年離職率會上升達(dá)到33%根據(jù)一般就職年限計算員工在未被企業(yè)返聘的情況下應(yīng)該已退休

  • 工作環(huán)境和工作滿意度體現(xiàn):工作滿意度比較低钙畔、環(huán)境滿意度低都會導(dǎo)致員工流失率增加

4.特征選擇

4.1數(shù)據(jù)預(yù)處理

  • 對特征類別進行分類:數(shù)值類和非數(shù)值類
      def  obtain_x(train_df,xtype):
          dtype_df  = train_df.dtypes.reset_index()
          dtype_df.columns = ['col','type']
          return dtype_df[dtype_df.type != xtype].col.values
      float64_col = obtain_x(train_local,'object') #float64 
    
  • 加載數(shù)據(jù)進行歸一化處理
      min_max_scaler = preprocessing.MinMaxScaler()
      X = min_max_scaler.fit_transform(X)
    
  • 加載數(shù)據(jù)對類別數(shù)據(jù)進行編碼處理
      le = preprocessing.LabelEncoder()
      ohe = preprocessing.OneHotEncoder()  
      train = pd.DataFrame()
      local_all = pd.concat([train_local,test_local],axis=0)
      for col in object_col:
          le.fit(local_all[col])
          local_all[col] = le.transform(local_all[col])
          ohe.fit(local_all[col].reshape(-1, 1))
          ohecol = ohe.transform(local_all[col].reshape(-1, 1)).toarray()
          ohecol = pd.DataFrame(ohecol[:,1:],index=None)#columns=col+le.classes_
          ohecol.columns = ohecol.columns.map(lambda x:str(x)+col)
          train = pd.concat([train2, ohecol],axis=1, ignore_index=False)
    

4.2 計算相關(guān)系數(shù)

  • 計算各變量對離職率的影響程度
    print(train.corr()['Attrition'])
    x = train.corr()['Attrition'].index
    y = train.corr()['Attrition'].values
    plt.figure(figsize=(12,5))
    plt.plot(x,y, 'b.-',label="皮爾遜相關(guān)系數(shù)")
    plt.legend()
    plt.ylabel("皮爾遜相關(guān)系數(shù)")
    plt.xlabel("變量名稱")
    plt.xticks(rotation=45)
    plt.grid()
    for i,j in zip(x,y):
      plt.text(i,j+0.005,'%.2f' %(j),ha='center',va='bottom')
     ` ``
    

4.3 利用特征的統(tǒng)計信息進行特征選擇

  • 移除低方差特征
    from sklearn.feature_selection import VarianceThreshold
    sel = VarianceThreshold()
    train_all_sel = sel.fit_transform(train_all)
    train_local4 = train_all.iloc[0:len(train_local)]
    test_local4 = train_all.iloc[len(train_local):]
    # 定義特征統(tǒng)計函數(shù)
    def col_Sta(train_df):
        col_sta = pd.DataFrame(columns = ['_columns','_min','_max','_median','_mean','_ptp','_std','_var'])
        for col in train_df.columns:
            col_sta = col_sta.append({'_columns':col,'_min':np.min(train_df[col]),'_max':np.max(train_df[col]),\
                '_median':np.median(train_df[col]),'_mean':np.mean(train_df[col]),\
                '_ptp':np.ptp(train_df[col]),'_std':np.std(train_df[col]),'_var':np.var(train_df[col])},ignore_index=True)
        return col_sta
    train_col_sta = col_Sta(train_local4)
    test_col_sta = col_Sta(test_local4)
    train_col_sta
    
  • 計算卡方信息量
    from sklearn.feature_selection import chi2#調(diào)用卡方信息量
    chi2_col,pval_col = chi2(train_local4[feature_end].values,train_y)
    
  • 計算F信息量
    from sklearn.feature_selection import f_classif#調(diào)用f信息量
    f_col,pval_col = f_classif(train_local4[feature_end].values,train_y)
    
  • 計算互信息量
    from sklearn.feature_selection import mutual_info_classif#調(diào)用互信息
    mic_col = mutual_info_classif(train_local4[feature_end].values,train_y)
    

5 建模

5.1 邏輯回歸預(yù)測

 from sklearn.linear_model import LogisticRegression
 from sklearn.model_selection import cross_val_score
 train_x_0 = train_local[['EnvironmentSatisfaction','JobInvolvement','JobSatisfaction','YearsSinceLastPromotion']]#RelationshipSatisfaction
 train_y_0 = train_local[y_col]
 clf = LogisticRegression(C=10)
 clf.fit(train_x_0, train_y_0)
 scores = cross_val_score(clf, train_x_0, train_y_0)
 print(scores.mean()) #0.8370006974003799
 x_col = [x for x in float64_col if x not in ['Attrition']]
 len(x_col)
 y_col = 'Attrition'
 train_x = train_local[x_col]
 train_y = train_local[y_col]
 clf = LogisticRegression(C=10)
 clf.fit(train_x, train_y)
 scores = cross_val_score(clf, train_x, train_y)
 print(scores.mean()) #0.8469807373205397

5.2 隨機森林預(yù)測

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=100, max_depth=5,min_samples_split=2, random_state=0)
clf = clf.fit(train_local4[feature_end], train_y)
scores = cross_val_score(clf, train_local4[feature_end], train_y)
print(scores.mean()) # 0.8470288338984681

5.3 組合篩選創(chuàng)建模型

feature_a = feature_sel[(feature_sel['importance']>=0.005)].feature.values
clf = LogisticRegression(C=10)
clf.fit(train_x3[feature_a], train_y)
scores = cross_val_score(clf, train_x3[feature_a], train_y)
print(scores.mean()) #0.8729528894019191

5.4混淆矩陣評估模型

TP(真實為1): 7
FP(真實為0): 3
TN(真實為0): 83
FN(真實為1): 7
P: 0.7
R: 0.5
ACC: 0.9
發(fā)現(xiàn)準(zhǔn)確率和召回率都是很很滿意茫陆,模型預(yù)測準(zhǔn)確度也很不錯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市擎析,隨后出現(xiàn)的幾起案子簿盅,更是在濱河造成了極大的恐慌,老刑警劉巖揍魂,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桨醋,死亡現(xiàn)場離奇詭異,居然都是意外死亡现斋,警方通過查閱死者的電腦和手機喜最,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庄蹋,“玉大人瞬内,你說我怎么就攤上這事迷雪。” “怎么了虫蝶?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵章咧,是天一觀的道長。 經(jīng)常有香客問我能真,道長赁严,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任舟陆,我火速辦了婚禮误澳,結(jié)果婚禮上耻矮,老公的妹妹穿的比我還像新娘秦躯。我一直安慰自己,他們只是感情好裆装,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布踱承。 她就那樣靜靜地躺著,像睡著了一般哨免。 火紅的嫁衣襯著肌膚如雪茎活。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天琢唾,我揣著相機與錄音载荔,去河邊找鬼。 笑死采桃,一個胖子當(dāng)著我的面吹牛懒熙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播普办,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼工扎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衔蹲?” 一聲冷哼從身側(cè)響起肢娘,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舆驶,沒想到半個月后橱健,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡沙廉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年畴博,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓝仲。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡俱病,死狀恐怖官疲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亮隙,我是刑警寧澤途凫,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站溢吻,受9級特大地震影響维费,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜促王,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一犀盟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝇狼,春花似錦阅畴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颤专,卻和暖如春纽哥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栖秕。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工春塌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人簇捍。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓只壳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垦写。 傳聞我的和親對象是個殘疾皇子吕世,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353