Ваши сотрудники уйдут?
Исчезновение сотрудников - это постепенное сокращение численности персонала, которое происходит по мере того, как сотрудники выходят на пенсию или увольняются и не заменяются. Уход сотрудников может дорого обойтись предприятиям. Компания теряет продуктивность сотрудников и их знания.
Термины текучесть кадров / отток и убыль - это термины, связанные с человеческими ресурсами, которые часто путают. И текучесть кадров, и их выбытие происходят, когда сотрудник увольняется из компании. Переход, однако, происходит в результате нескольких различных действий, таких как увольнение, увольнение, отставка или отказ. Убыток происходит, когда сотрудник выходит на пенсию или когда работодатель сокращает должность. Большая разница между ними заключается в том, что при текучести кадров компания ищет кого-то, кто заменит сотрудника. Но в случае выбытия работодатель оставляет эту вакансию незаполненной или отменяет эту должность. - LinkedIn
Средняя стоимость текучести кадров составляет: 20% годовой заработной платы сотрудников на средних должностях (от 30 000 до 50 000 долларов в год). Например, стоимость замены оплачиваемого сотрудника в размере 30 000 долларов составит 6 000 долларов.
Исследование Центра американского прогресса показало, что текучесть кадров часто оценивается от 100% до 300% базовой зарплаты заменяемого сотрудника, в зависимости от заработной платы и роли сотрудника.
Большинство бизнес-целей, связанных с оттоком сотрудников, - это попытаться ответить на следующие вопросы:
- Как уменьшить отток сотрудников?
- Почему хорошие сотрудники уходят из компании?
- Можем ли мы предсказать, какие сотрудники с наибольшей вероятностью уйдут?
Итак, все это просто для того, чтобы показать, насколько ценным является сотрудник, независимо от того, будет ли эта должность сотрудника заполнена или нет. В этой статье я покажу вам, как предсказать, может ли сотрудник уволиться из компании.
Если вы предпочитаете не читать эту статью и хотите ее видеопрезентацию, вы можете проверить Видео YouTube. В нем подробно рассматривается все, что описано в этой статье, и он поможет вам легко начать программировать собственную модель машинного обучения, даже если на вашем компьютере не установлен язык программирования Python. Или вы можете использовать оба в качестве дополнительных материалов для изучения машинного обучения!
Программирование:
Первое, что мне нравится делать перед написанием единственной строчки кода, - это добавлять в комментарии описание того, что делает код. Таким образом, я могу оглянуться на свой код и точно знать, что он делает.
# Description: This program predicts employee attrition.
Затем импортируйте несколько библиотек, которые будут использоваться в этой программе.
#Import Libraries import numpy as np import pandas as pd import seaborn as sns
Загрузите данные.
#Load the data from google.colab import files # Use to load data on Google Colab uploaded = files.upload() # Use to load data on Google Colab
Сохраните данные во фрейме данных и распечатайте первые 7 строк данных.
#Store the data into the df variable df = pd.read_csv('WA_Fn-UseC_-HR-Employee-Attrition.csv') df.head(7) #Print the first 7 rows
Получите количество строк и столбцов в данных.
#Get the number of rows and number of columns in the data df.shape
Это 1470 строк данных или сотрудников в наборе данных и 35 столбцов или точек данных для каждого сотрудника. Получите типы данных каждого столбца.
#Get the column data types df.dtypes
Подсчитайте количество пустых значений в каждом столбце.
#Count the empty (NaN, NAN, na) values in each column df.isna().sum()
Похоже, у них нет отсутствующих данных, поскольку все столбцы возвращают значение 0. Давайте дважды проверим набор данных на наличие отсутствующих значений.
#Another check for any null / missing values df.isnull().values.any()
Просмотрите некоторую базовую статистику о данных, такую как процентиль, среднее, максимальное, минимальное и т. Д.
#View some basic statistical details like percentile, mean, standard deviation etc. df.describe()
Подсчитайте количество уволенных сотрудников, количество сотрудников, которые остались (нет) и количество сотрудников, которые покинули (да) компанию.
#Get a count of the number of employee attrition, the number of employees that stayed (no) and the number that left (yes) df['Attrition'].value_counts()
Теперь, когда у нас есть счетчик, давайте взглянем на него.
#Visualize this count sns.countplot(df['Attrition'])
Покажите количество сотрудников, которые ушли и остались в компании по возрасту.
#Show the number of employees that left and stayed by age import matplotlib.pyplot as plt fig_dims = (12, 4) fig, ax = plt.subplots(figsize=fig_dims) #ax = axis sns.countplot(x='Age', hue='Attrition', data = df, palette="colorblind", ax = ax, edgecolor=sns.color_palette("dark", n_colors = 1));
Интересно то, что вы можете увидеть возраст с наибольшим количеством увольнений сотрудников - это возраст 29 и 31 год. Возраст с наибольшим удержанием - это возраст 34 и 35 лет.
Распечатайте все типы данных объекта и распечатайте их уникальные значения.
#Print all of the object data types and their unique values for column in df.columns: if df[column].dtype == object: print(str(column) + ' : ' + str(df[column].unique())) print(df[column].value_counts()) print("_________________________________________________________________")
Я не думаю, что некоторые столбцы в наборе данных понадобятся для обучения модели машинного обучения, например, присвоение номера сотруднику (который представляет собой всего лишь идентификацию номера).
Столбцы StandardHours, Over18 и EmployeeCount содержат только одно значение в каждой строке, поэтому эти столбцы не будут добавлять в модель никакой дополнительной информации. Мы удалим эти столбцы из набора данных.
#Remove unneeded columns #Remove the column EmployeeNumber df = df.drop('EmployeeNumber', axis = 1) # A number assignment #Remove the column StandardHours df = df.drop('StandardHours', axis = 1) #Contains only value 80 #Remove the column EmployeeCount df = df.drop('EmployeeCount', axis = 1) #Contains only the value 1 #Remove the column EmployeeCount df = df.drop('Over18', axis = 1) #Contains only the value 'Yes'
Получите корреляцию столбцов.
#Get the correlation of the columns df.corr()
Давайте лучше визуализируем корреляцию с помощью тепловой карты.
#Visualize the correlation plt.figure(figsize=(14,14)) #14in by 14in sns.heatmap(df.corr(), annot=True, fmt='.0%')
Теперь подготовим данные для модели. Сначала мы преобразуем нечисловые столбцы в числовые столбцы.
#Transform non-numeric columns into numerical columns from sklearn.preprocessing import LabelEncoder for column in df.columns: if df[column].dtype == np.number: continue df[column] = LabelEncoder().fit_transform(df[column])
Затем я собираюсь создать новый столбец для хранения значений возраста. Это только для того, чтобы поместить значения возраста в конец набора данных. Затем я удалю возраст столбца из передней части набора данных, чтобы целевой столбец был первым.
И последнее, но не менее важное, я покажу новый набор данных.
#Create a new column at the end of the dataframe that contains the same value df['Age_Years'] = df['Age'] #Remove the first column called age df = df.drop('Age', axis = 1) #Show the dataframe df
Разделите данные на независимые «X» и зависимые «Y» наборы данных.
#Split the data into independent 'X' and dependent 'Y' variables X = df.iloc[:, 1:df.shape[1]].values Y = df.iloc[:, 0].values
Просто чтобы вы знали, что вы можете посмотреть код здесь и данные здесь.
Теперь я хочу разделить набор данных на 75% наборов данных для обучения и 25% для тестирования.
# Split the dataset into 75% Training set and 25% Testing set from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)
Теперь давайте воспользуемся классификатором случайного леса, чтобы извлечь уроки из обучающих данных и посмотреть, насколько они точны.
#Use Random Forest Classification algorithm from sklearn.ensemble import RandomForestClassifier forest = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0) forest.fit(X_train, Y_train)
Теперь получите точность модели.
#Get the accuracy on the training data forest.score(X_train, Y_train)
Покажите матрицу неточностей и точность модели.
#Show the confusion matrix and accuracy for the model on the test data #Classification accuracy is the ratio of correct predictions to total predictions made. from sklearn.metrics import confusion_matrix cm = confusion_matrix(Y_test, forest.predict(X_test)) TN = cm[0][0] TP = cm[1][1] FN = cm[1][0] FP = cm[0][1] print(cm) print('Model Testing Accuracy = "{}!"'.format( (TP + TN) / (TP + TN + FN + FP))) print()# Print a new line
Модель правильно определила 86,41% сотрудников, уволившихся из компании.
Давайте посмотрим, что модель считает важными функциями.
# Return the feature importances (the higher, the more important the feature). importances = pd.DataFrame({'feature':df.iloc[:, 1:df.shape[1]].columns,'importance':np.round(forest.feature_importances_,3)}) #Note: The target column is at position 0 importances = importances.sort_values('importance',ascending=False).set_index('feature') importances
У них много возможностей, на которые стоит обратить внимание, возможно, лучше всего увидеть визуализацию данных.
#Visualize the importance importances.plot.bar()
Месячный доход, по-видимому, является наиболее важной характеристикой, за которой следуют возраст человека, дневная ставка и ежемесячная ставка. Увидев этот результат, я хочу увидеть, не уйдут ли люди с более высоким доходом с меньшей вероятностью, чем люди с более низким доходом.
Я также мог бы провести дополнительный анализ возраста сотрудников, поскольку кажется, что это может быть определенный возрастной диапазон, из которого сотрудник, скорее всего, уволится.
Может быть, с помощью некоторого дополнительного анализа данных и настройки программы я смогу улучшить производительность и точность этой модели.
Если вам интересно узнать больше о машинном обучении, чтобы сразу приступить к работе с проблемами и примерами, я настоятельно рекомендую вам ознакомиться с Практическое машинное обучение с помощью Scikit-Learn и TensorFlow: концепции, инструменты и методы для создания интеллектуальных технологий. Системы ». Это отличная книга, которая поможет новичкам научиться писать программы машинного обучения и понять концепции машинного обучения.
Спасибо за прочтение этой статьи, надеюсь, она будет вам полезна! Если вам понравилась эта статья и вы нашли ее полезной, пожалуйста, оставьте несколько аплодисментов, чтобы выразить свою признательность. Продолжайте обучение, и если вам нравится машинное обучение, математика, информатика, программирование или анализ алгоритмов, посетите и подпишитесь на мои каналы YouTube (randerson112358 и compsci112358).