Выявление факторов, влияющих на увольнение сотрудников.

Что такое увольнение сотрудников?

Увольнение сотрудников относится к постепенному сокращению числа сотрудников. Это говорит о том, что сотрудники увольняются быстрее, чем нанимаются. Увольнение сотрудников происходит, когда сотрудник уходит на пенсию, уходит в отставку или просто не заменяется.

Увольнение сотрудников может происходить по разным причинам. К ним относятся неудовлетворенность льготами или компенсационными структурами сотрудников, отсутствие возможностей для роста персонала и даже ужасная рабочая среда.

Увольнение сотрудников — это не всегда плохо, но может быть проблематично, поскольку оно часто уменьшает таланты в организации и в рабочей силе в целом.

Таким образом, становится очень важным прогнозировать увольнение сотрудников. Мы рассмотрим прогнозирование увольнения сотрудников, то есть прогноз того, что сотрудник покинет (или уволится) существующую фирму, и мы сделаем это, используя алгоритм логистической регрессии.





Описание

IBM — американская транснациональная корпорация, работающая примерно в 170 странах с основными направлениями бизнеса, такими как вычисления, программное обеспечение и оборудование. Увольнение представляет собой серьезный риск для организаций, предоставляющих услуги, где обученные и опытные люди являются активами компании. Организация хотела бы определить факторы, влияющие на выбытие сотрудников.

Статистические задачи

  1. Импортируйте набор данных об истощении и импортируйте библиотеки, такие как pandas, matplotlib.pyplot, numpy и seaborn.
  2. Исследовательский анализ данных
  3. Найдите распределение сотрудников по возрасту в IBM
  4. Исследуйте истощение по возрасту
  5. Исследуйте данные для левых сотрудников
  6. Узнать распределение сотрудников в сфере образования
  7. Нарисуйте столбчатую диаграмму количества женатых и неженатых сотрудников.
  8. Создайте модель логистической регрессии, чтобы предсказать, какие сотрудники могут уволиться.

1. Импорт библиотек

import numpy as np
import pandas as pd
import sklearn
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

2. Найдите распределение сотрудников по возрасту в IBM

В этом случае для определения возрастного распределения будет использоваться гистограмма. Затем измените размер изображения и нанесите на карту возрастное распределение с помощью морской библиотеки.

Вывод: больше всего сотрудников в возрасте от 34 до 35 лет.

plt.figure(figsize=(10,6), dpi=80)
sns.histplot(data=df, x='Age', bins=42, kde=True).set_title
('Age Distribution of Employee');

3. Изучите убыль по возрасту

Теперь, чтобы определить убыль по возрасту, мы сгруппируем его по возрасту, и убыль — «да». После этого мы будем использовать график подсчета, чтобы оценить, сколько сотрудников уволится из организации.

Вывод:сотрудники в возрасте 29 и 31 года больше всего увольняются из IBM.

print(df[(df['Attrition'] == 'Yes')].groupby('Age')['Age'].count().sort_values(ascending=False))

plt.figure(figsize=(14,6), dpi=80)
sns.countplot(data=df, x='Age', hue='Attrition', order = df['Age'].value_counts().index, palette='seismic_r').set_title
('Attrition by Age');

4. Исследуйте данные для левых сотрудников

Мы рассмотрим здесь несколько вещей.

print(df.groupby('Attrition')['Attrition'].count())

plt.figure(figsize=(5,4), dpi=80)
sns.countplot(data=df, x='Attrition', palette='seismic_r');

Истощение по отделам —

print(df[(df['Attrition'] == 'Yes')].groupby('Department')['Attrition'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5), dpi=80)
sns.countplot(data=df[(df['Attrition'] == 'Yes')], x='Department', palette='cubehelix', order = df['Department'].value_counts().index).set_title('Attrition by Department');

Убыль по возрастным группам —

agerange = []
for age in df["Age"]:
    if age >= 18 and age < 24:
        agerange.append("18-24")
    elif age >= 25 and age < 31:
        agerange.append("25-31")
    elif age >= 32 and age < 38:
        agerange.append("32-38")
    elif age >= 39 and age < 45:
        agerange.append("39-45")
    elif age >= 46 and age < 52:
        agerange.append("46-52")
    elif age >= 53 and age < 59:
        agerange.append("53-59")
    else:
        agerange.append("60-66")
       
df["AgeRange"] = agerange
print(df[(df['Attrition'] == 'Yes')].groupby('AgeRange')['AgeRange'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5), dpi=80)
sns.countplot(data=df[(df['Attrition'] == 'Yes')], x='AgeRange', palette='cubehelix').set_title('Attrition by Age Group');

Истощение по образованию —

print(df[(df['Attrition'] == 'Yes')].groupby('Education')['Attrition'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5),dpi=80)
sns.countplot(data=df[(df['Attrition'] == 'Yes')], x='Education', order=df['Education'].value_counts().index, palette='cubehelix').set_title('Attrition by Education');

Истощение удовлетворением окружающей среды —

print(df[(df['Attrition'] == 'Yes')].groupby('EnvironmentSatisfaction')['Attrition'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5),dpi=80)
sns.countplot(data=df[(df['Attrition'] == 'Yes')], x='EnvironmentSatisfaction', order=df['EnvironmentSatisfaction'].value_counts().index, palette='cubehelix').set_title('Attrition by Environment Satisfaction');

Истощение из-за удовлетворенности работой —

print(df[(df['Attrition'] == 'Yes')].groupby('JobSatisfaction')['Attrition'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5),dpi=80)
sns.countplot(data=df[(df['Attrition'] == 'Yes')], x='JobSatisfaction',order=df['JobSatisfaction'].value_counts().index, palette='cubehelix');

Информация:

  • 237 рабочих уволились с работы. (133 по исследованиям и разработкам, 92 по продажам и 12 по кадрам)
  • Наиболее вероятно, что ушли сотрудники в возрасте 25–31 лет (62 сотрудника).
  • У тех, кто получил степень бакалавра, больше шансов уйти. (99 сотрудников)
  • Те, кто недоволен своим окружением, чаще уходят. (72 сотрудника)
  • Те, кто очень доволен своей работой, с большей вероятностью уволятся (73 сотрудника).

5. Узнайте распределение сотрудников в сфере образования

Для того чтобы выявить распределение работников в сфере образования, сгруппируем его по сферам образования. После этого построим гистограмму.

plt.figure(figsize=(11,6), dpi=80)
sns.histplot(data=df, x='EducationField').set_title('Attrition by Education Field');

Информация: большинство сотрудников (606 сотрудников) работают в области наук о жизни (в сфере образования).

6. Изучите данные о семейном положении

print(df[(df['Attrition'] == 'Yes')].groupby('MaritalStatus')['Attrition'].count().sort_values(ascending=False))

plt.figure(figsize=(8,5),dpi=80)
sns.countplot(data=df, x='MaritalStatus', hue='Attrition', order=df['MaritalStatus'].value_counts().index, palette='seismic_r').set_title('Attrition by Marital Status');

Информация. Сотрудники (120 человек), не состоящие в браке, с большей вероятностью уйдут.

Мы выполнили статистические задачи. Есть также несколько переменных категорий. Итак, чтобы разработать модель логистической регрессии, мы должны перевести их в числовые значения. Мы просто заменили его числовыми значениями.

df['Attrition'].replace('Yes', 1, inplace=True)
df['Attrition'].replace('No', 0, inplace=True)
df['Department'].replace('Human Resources', 1, inplace=True)
df['Department'].replace('Research & Development', 2, inplace=True)
df['Department'].replace('Sales', 3, inplace=True)
df['EducationField'].replace('Human Resources', 1, inplace=True)
df['EducationField'].replace('Life Sciences', 2, inplace=True)
df['EducationField'].replace('Marketing', 3, inplace=True)
df['EducationField'].replace('Medical', 4, inplace=True)
df['EducationField'].replace('Other', 5, inplace=True)
df['EducationField'].replace('Technical Degree', 6, inplace=True)
df['MaritalStatus'].replace('Divorced', 1, inplace=True)
df['MaritalStatus'].replace('Married', 2, inplace=True)
df['MaritalStatus'].replace('Single', 3, inplace=True)

7. Создайте модель логистической регрессии, чтобы предсказать, какие сотрудники могут уволиться

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr = lr.fit(x_train, y_train)

# check the accuracy on the training set
print('Accuracy =', lr.score(x_train, y_train)*100,'%');
# predict dependent variable
lr_y_pred = lr.predict(x_test)
# find probability
prob = lr.predict_proba(x_test)
print(prob)
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# Accuracy score
print('Test Accuracy Score:', accuracy_score(y_test, lr_y_pred)*100, '%\n')
# Classification report
print('Classification Report', classification_report(y_test, lr_y_pred))
# Confusion matrix
print('Confusion Matrix\n', confusion_matrix(y_test, lr_y_pred))



Надеюсь, вам понравилась история. Подписывайтесь на меня, чтобы узнать больше подобных историй. Найди мой блокнот Kaggle здесь.