大數(shù)據(jù)使企業(yè)能夠確定變量,預(yù)測自家公司的員工離職率,?!薄豆鹕虡I(yè)評論》2017年8月 “員工流失分析就是評估公司員工流動率的過程,,目的是預(yù)測未來的員工離職狀況,減少員工流失情況,?!薄陡2妓埂?016年3月 私信小編007即可獲取數(shù)十套PDF哦! import pandas as pd hr = pd.read_csv('HR.csv') col_names = hr.columns.tolist() print('Column names:') print(col_names) print('\nSample data:') hr.head() 我們的數(shù)據(jù)相當(dāng)干凈,,沒有缺失值: hr.isnull().any() 數(shù)據(jù)包含了14999名員工和10個特征: hr.shape (14999, 10) “l(fā)eft”列為結(jié)果變量,,值為1或0,,1代表員工離開了公司,0代表沒有離開,。 我們發(fā)現(xiàn)數(shù)據(jù)中有3571名員工離職,有11428名員工沒有離職,。 然后我們進(jìn)一步查看這兩個類別下的數(shù)字所蘊含的意義: hr.groupby('left').mean() 幾個觀察結(jié)果:
數(shù)據(jù)可視化 我們將數(shù)據(jù)進(jìn)行可視化,從而獲取數(shù)據(jù)及重要特征的更清晰的展現(xiàn)。 員工的工作部分和離職頻率的條形圖 %matplotlib inline import matplotlib.pyplot as plt pd.crosstab(hr.department,hr.left).plot(kind='bar') plt.title('Turnover Frequency for Department') plt.xlabel('Department') plt.ylabel('Frequency of Turnover') plt.savefig('department_bar_chart') 我們可以看到,,員工的薪資水平和離職頻率有很大關(guān)系,因此薪資水平也可以作為預(yù)測結(jié)果的一個很好指標(biāo),。 通常,,直方圖是我們在探索數(shù)據(jù)時用于分析數(shù)值變量的最有用的工具之一。 數(shù)值變量的直方圖 為分類變量創(chuàng)建虛變量 數(shù)據(jù)集中有兩個分類變量(department,salary),,在用它們進(jìn)行建模前需要將它們轉(zhuǎn)換為虛變量,。 cat_vars=['department','salary'] for var in cat_vars: cat_list='var' '_' var cat_list = pd.get_dummies(hr[var], prefix=var) hr1=hr.join(cat_list) hr=hr1 等創(chuàng)建完虛變量后,還需要移除實際的分類變量,。 為分類變量創(chuàng)建虛變量后的列名: hr.drop(hr.columns[[8, 9]], axis=1, inplace=True) hr.columns.values 我們使用特征選擇方法幫我們決定哪些變量非常重要,,能夠以很高的準(zhǔn)確率預(yù)測員工的流動狀況?,F(xiàn)在X中一共有18個列,那么選為10個呢,? from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression model = LogisticRegression() rfe = RFE(model, 10) rfe = rfe.fit(hr[X], hr[y]) print(rfe.support_) print(rfe.ranking_) [True True False False True True True True False True True False False False False True True False] [1 1 3 9 1 1 1 1 5 1 1 6 8 7 4 1 1 2] 邏輯回歸準(zhǔn)確率:0.771 隨機森林 from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier() rf.fit(X_train, y_train) RandomForestClassifier(bootstrap=True, class_weight=None, criterion=’gini’, max_depth=None, max_features=’auto’, max_leaf_nodes=None, min_impurity_split=1e-07, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1, oob_score=False, random_state=None, verbose=0, warm_start=False) print('Random Forest Accuracy: {:.3f}'.format(accuracy_score(y_test, rf.predict(X_test)))) 隨機森林準(zhǔn)確率:0.978 10折交叉驗證平均準(zhǔn)確率:0.977 平均準(zhǔn)確率仍然和隨機森林模型的準(zhǔn)確率非常接近,所以我們可以總結(jié)出模型的泛化能力很好,。 精確度和召回率 我們構(gòu)建混淆矩陣來可視化由分類器生成的預(yù)測值,,并評估分類的準(zhǔn)確率。 隨機森林 邏輯回歸 print(classification_report(y_test, logreg.predict(X_test))) svc_y_pred = svc.predict(X_test) svc_cm = metrics.confusion_matrix(svc_y_pred, y_test, [1,0]) sns.heatmap(svc_cm, annot=True, fmt='.2f',xticklabels = ['Left', 'Stayed'] , yticklabels = ['Left', 'Stayed'] ) plt.ylabel('True class') plt.xlabel('Predicted class') plt.title('Support Vector Machine') plt.savefig('support_vector_machine') 當(dāng)一名員工離職時,,我們的分類器能正確預(yù)測的概率是多少呢,?這種衡量方法被稱為“召回率”,快速看一下這些圖表可以發(fā)現(xiàn)隨機森林的效果最好,。在上面所有的離職情況中,,隨機森林從1038種離職情況中正確地檢索出998種情況。這表明離職“召回率”達(dá)到95%(991/1038),,遠(yuǎn)好于邏輯回歸(26%)和支持向量機(85%),。 ROC曲線是另一種用于衡量二元分類器的常用工具,。它是一條點狀線,,表示一個完全隨機分類器的受試者工作特征曲線;一個性能良好的分類器會盡可能的遠(yuǎn)離這條線(朝左上角),。 總結(jié) 文章到這里就結(jié)束了,,本文我們通過一個人力資源數(shù)據(jù)集,用Python搭建了幾個機器學(xué)習(xí)模型,,最終確定隨機森林模型的準(zhǔn)確率最高,,最適合預(yù)測員工離職。 不過我就不列出模型預(yù)測哪些員工會離職了,,畢竟這并非我們的主要目的,。記住一點,我們的算法不會人人適用,。雖然員工離職率分析能幫我們制定更合理的人力資源管理決策,,但不要過度依賴模型的預(yù)測結(jié)果。 |
|