初心者向けHRデータセットの分析と予測

9896 ワード

それがデータ分析とデータモデリングに来るとき、あなたは初心者ですか?はいならば、あなたは適切な場所にいます.
このブログでは、Kaggleで利用可能なHRデータセットに関するいくつかの探索的データ解析を行います.また、誰が彼らの会社を去ったか予測するために、ランダムフォレストを使用しています.これは初心者フレンドリーなデータセットです、そして、それは働くのが簡単です.箱から出して、ジューシーなものに入りましょう.

輸入
我々が我々の仕事から始めるとき、我々が常にする最初のことは、ライブラリを輸入することです.すべての単一のライブラリをインポートする必要はありませんが、最初のノートで右側で使用されます.最低限から始めることができます.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
ちょうど上記の問題に取り組むときに十分です.その時から、あなただけの開始時にそれらを追加することができますか、あなたは今までノートでは、それらをインポートすることができます.
これでデータを読み込みましょう.
df = pd.read_csv("../input/hr-analytics/HR_comma_sep.csv")
df.head()


データの正しさのチェック
これでデータがロードされます.データの種類、すなわちデータ型、NaN値のNOなどを見てみましょう.info ()メソッド
df.info()

上記のように、すべてのcolはNaN値で満たされます.float,int,objectは列のデータ型です.
for col in df.columns:
    print(f"{col} - ", df[col].unique())
    print()


データには奇妙な値がないようです.メトリックを見ましょう.
df.describe()

私たちがデータを見た今、私のお気に入りの部分に入りましょう.

探索的データ解析
ここでは、データを視覚化します.これを行うことによって、我々はさらにデータがどのようにあるかを理解することができます.
sns.set()#sets the style of the plot.
fig = plt.figure(figsize=(12,6))#Used to display the plot
sns.barplot(x='Department', y='satisfaction_level', hue='salary', data=df, ci=None)
plt.title("Satisfaction_level Vs Department", size=15)
plt.show()

給料が高い人はもっと満足している.しかし、McNGは私のカップを持つと言いました.給料が安い人は給料が高い人より満足しているようです.土地は同じです.
fig = plt.figure(figsize=(12,6))
g = sns.barplot(x='Department', y='last_evaluation', data=df, ci=None)
g.bar_label(g.containers[0])
plt.title("Last Evaluation Vs Department", size=15)
plt.show()

誰もが同じような評価を行っている.
fig = plt.figure(figsize=(12,6))
sns.barplot(x='Department', y='number_project', data=df, ci=None)
plt.title("Number Project Vs Department", size=15)
plt.show()

fig = plt.figure(figsize=(12,6))
g = sns.barplot(x='Department', y='Work_accident', data=df, ci=None)
g.bar_label(g.containers[0])
plt.title("Work Accident Vs Department", size=15)
plt.show()

fig = plt.figure(figsize=(12,6))
g = sns.barplot(x='Department', y='satisfaction_level', hue='left', data=df, ci=None)
g.bar_label(g.containers[0])
g.bar_label(g.containers[1], rotation=90)
plt.title("Left Vs Department with satisfaction level", size=15)
plt.show()

fig = plt.figure(figsize=(12,6))
sns.lineplot(x='Department', y='time_spend_company', data=df, ci=None, color='r', marker='o')
plt.title("Time spent per each Department", size=15)
plt.show()

fig = plt.figure(figsize=(12,6))
sns.lineplot(x='Department', y='average_montly_hours', data=df, ci=None, color='g', marker='o')
plt.title("Avg Hours spent in the company per Department", size=15)
plt.show()

チャートは陽気なlolに見えます🤣 どうしてか分からない🤷‍♂️
fig = plt.figure(figsize=(12,6))
sns.lineplot(x='Department', y='promotion_last_5years', data=df, ci=None, color='black', marker='o')
plt.title("Promotions of Last 5 years in the company per Department", size=15)
plt.show()


他の人と比べると、経営やマーケティング部門にはもっとプロモーションがある.
fig = plt.figure(figsize=(12,6))
salary = df['salary'].value_counts()
sns.lineplot(x=salary.values, y=salary.index, ci=None, color='orange', marker='o')
plt.title("Salary (Counts) in the company", size=15)
plt.show()

現在、我々はデータがどのようにモデリングに入るかを見ました.
入る前に相関を見てみましょう.
sns.heatmap(df.corr(), center=0, linewidth=1, annot=True, fmt='.2f')
plt.show()

我々が観察するならば、我々は満足できるレベルと左コラムが非常に否定的に相関しているのを見ることができます.

モデリング
我々は、モデルが心臓でデータを覚えていないように、我々のデータをトレーニングセットとテストセットに分割する必要があります.それを行う前に、私たちは、分類的な列の開発'と'給与'をドロップしましょう.
df = df.drop(['Department', 'salary'], axis=1)
ここでは、ドロップしたいcolのリストを渡します.axis = 1を指定することで、カラムを削除するよう指示しています.
閉じるこの動画はお気に入りから削除されています
df.drop(['Department', 'salary'], axis=1, inplace=True)
これを行うことによって、特にDFを指定する必要はありません.
我々が彼らを取り除く今、我々のデータを分けましょう.
最初に、ターゲットvar(我々が予測したいもの)と残りのデータを分離します.
X = df.drop('left', axis=1) # we will predict who left
y = df['left']
X、Yを以下の関数に渡します.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
機能の名前から、我々はそれがトレーニングとテストセットに我々のデータを分割するつもりであると言うことができます.
今、我々はちょうど我々の選択のモデルにトレーニングデータに合う必要があります.我々は予測しようとしているので、我々はランダムフォレストと行くことができます.
ランダムフォレストは、予測と回帰を行うことができます.
我々はまた、モデルのための最良のparamsを見つけるためにGridSearchCVを使用するつもりです.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
param = [
    {'n_estimators': [100, 200, 300, 400, 450, 500], 
     'max_depth': [3, 4, 6, 8, 10, 12], 
     'max_leaf_nodes': [15, 20, 25]}, 
]
rf = RandomForestClassifier()
gs_rf = GridSearchCV(rf, param, cv = 5, n_jobs = -1, verbose = 1)
gs_rf.fit(X_train, y_train)
rf_best = gs_rf.best_estimator_
pred = gs_rf.predict(X_test)
gs_rf.best_estimator_

最後にモデリングを終えました.ランダムフォレストは98 %の精度を与えた.本当に良い.閉じるこの動画はお気に入りから削除されています.

結論
ブログ一覧にもどる
  • の基本的なワークフロー
  • 無作為森林
  • を実装する方法
  • GridSearchCV
  • を実装する方法
    あなたは私のKaggleノート242479152
    私は本当に、この分析を参考に興味深いと思いました.あなたが私の仕事が好きであるならば、hereで私に続くのを忘れないでください、そして、生産性、自己改善、コーディングと技術のより多くの内容のために、また、Mediumで私の作品をチェックして、私の後を追ってください.私もKaggleで書きます、あなたは同様にそれをチェックすることができます.