Ежегодно многие компании нанимают определенное количество сотрудников. Компании вкладывают время и деньги в обучение этих сотрудников, не только это, но и программы обучения внутри компаний для существующих сотрудников. Целью этих программ является повышение эффективности своих сотрудников. Но какое место в этом занимает HR Analytics? и речь идет только об улучшении работы сотрудников?

Кадровая аналитика

Аналитика человеческих ресурсов (HR-аналитика) - это область в области аналитики, которая относится к применению аналитических процессов к отделу кадров организации в надежде улучшить производительность сотрудников и, следовательно, получить лучшую окупаемость инвестиций. HR-аналитика занимается не только сбором данных об эффективности сотрудников. Вместо этого он направлен на то, чтобы получить представление о каждом процессе путем сбора данных, а затем их использования для принятия соответствующих решений о том, как улучшить эти процессы.

Истощение кадров

Истощение человеческих ресурсов означает постепенную потерю сотрудников с течением времени. В целом, относительно высокая текучесть кадров проблематична для компаний. Специалисты по персоналу часто берут на себя руководящую роль в разработке программ компенсации компании, культуры труда и систем мотивации, которые помогают организации удерживать лучших сотрудников.

Как истощение влияет на компании? и как HR Analytics помогает анализировать истощение? Здесь мы обсудим первый вопрос, а для второго вопроса мы напишем код и попытаемся понять процесс шаг за шагом.

Убыток, влияющий на компании

Серьезной проблемой при высокой текучести кадров является стоимость этого для организации. Объявления о вакансиях, процессы приема на работу, оформление документов и обучение новых сотрудников - вот некоторые из распространенных расходов, связанных с потерей сотрудников и их заменой. Кроме того, регулярная текучесть кадров не позволяет вашей организации со временем увеличивать свою коллективную базу знаний и опыта. Это особенно важно, если ваш бизнес ориентирован на клиентов, поскольку клиенты часто предпочитают общаться со знакомыми людьми. Ошибки и проблемы более вероятны, если у вас постоянно появляются новые работники.

Надеюсь, что основы имели смысл. Давайте перейдем к кодированию и попробуем выяснить, как HR-аналитика помогает понять истощение.

Вступление

Чтобы начать упражнение, я использовал IBM HR Analytics Employee Attrition & Performance Dataset, который был загружен с Kaggle. Набор данных включает такие характеристики, как возраст, роль сотрудника, дневная ставка, удовлетворенность работой, годы в компании, годы в текущей должности и т. Д. Для этого упражнения мы попытаемся изучить факторы, которые приводят к выбытию сотрудников. Это вымышленный набор данных, созданный специалистами по данным IBM.

Приступим к работе.

Подготовка данных: загрузка, очистка и форматирование

#Load the data
hr_data = pd.read_csv("HR-Employee-Attrition.csv")
hr_data.head()

#Missing values check
hr_data.isnull().sum()

К счастью, у нас нет пропущенных значений, и из приведенного выше снимка данных HR также похоже, что нам не нужно форматировать данные.

Анализ данных

Давайте посмотрим на данные и посмотрим, как функции влияют на данные и на сокращение числа сотрудников. Нам нужно сначала проверить тип данных функций, почему? Потому что мы можем видеть только распределение числовых / непрерывных значений в наборе данных. Чтобы получить максимум значений категориальных / объектных значений, мы должны связать их с числовой переменной, и тогда вы сможете увидеть их соответствие набору данных или вы можете заменить категориальную переменную фиктивными.

#Check the structure of dataset
hr_data.dtypes

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

Существует много непрерывных переменных, мы можем взглянуть на их распределение и создать сетку парных графиков, но это было бы слишком много кода, чтобы увидеть корреляцию, поскольку существует много переменных. Скорее, мы можем создать тепловую карту числовых переменных и увидеть корреляцию. Переменные, которые не плохо коррелированы (т. Е. Значение корреляции стремится к 0), мы выберем эти переменные и продвинемся с ними, оставив те, которые сильно коррелированы (т.е. значение корреляции стремится к 1).

Из приведенной выше тепловой карты мы теперь можем видеть, какие переменные плохо коррелированы, а какие сильно коррелированы.

#Let's remove the strongly correlated variables
hr_data_uc = hr_data_num[['Age','DailyRate','DistanceFromHome', 
                       'EnvironmentSatisfaction', 'HourlyRate',                     
                       'JobInvolvement', 'JobLevel',
                       'JobSatisfaction', 
                       'RelationshipSatisfaction', 
                       'StockOptionLevel',
                        'TrainingTimesLastYear']].copy()
hr_data_uc.head()

Остановитесь на секунду и подумайте, чего у нас здесь нет - двух вещей, одного, категориальной переменной и любой информации об истощении. Давайте объединим их с указанным выше фреймом данных.

#Copy categorical data
hr_data_cat = hr_data[['Attrition', 'BusinessTravel','Department',
                       'EducationField','Gender','JobRole',
                       'MaritalStatus',
                       'Over18', 'OverTime']].copy()
hr_data_cat.head()

Давайте сначала заменим Да и Нет в Истощении на 1 и 0.

Num_val = {'Yes':1, 'No':0}
hr_data_cat['Attrition'] = hr_data_cat["Attrition"].apply(lambda x: Num_val[x])
hr_data_cat.head()

Теперь замените другие категориальные переменные фиктивными значениями.

hr_data_cat = pd.get_dummies(hr_data_cat)
hr_data_cat.head()

Теперь, когда у нас есть все данные в числовом формате, мы можем объединить hr_data_num и hr_data_cat.

hr_data_final = pd.concat([hr_data_num, hr_data_cat], axis=1)
hr_data_final.head()

Моделирование данных

У нас есть последний набор данных. Теперь нам нужно приступить к моделированию - прогнозированию истощения. Ждать? Вы тоже запутались, как я? У нас уже есть данные об истощении, тогда что же их здесь предсказывать? В большинстве случаев в задаче регрессии и классификации вы запускаете свою модель с доступными значениями и проверяете такие метрики, как точность модели, сравнивая наблюдаемые значения с истинными значениями. Если у вас нет истинных значений, как вы узнаете, что прогнозы верны. Теперь вы поймете, насколько важна фаза обучающих данных. Мы обучаем модель таким образом, чтобы она могла предсказывать (почти) правильные результаты.

В этом наборе данных у нас нет пропущенных значений для истощения, мы разделим данные на обучающие и тестовые. Мы обучим модель на обучающих данных и спрогнозируем результаты на тестовых данных.

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

Классификатор случайного леса

Количество слабых оценок при объединении образует сильную оценку.

Случайный лес работает по принципу бэггинга. Это ансамбль деревьев решений. Метод мешков используется для увеличения общих результатов за счет комбинирования слабых моделей. Как он сочетает результаты? В случае задачи классификации он принимает режим классов, предсказанный в процессе упаковки.

Бьюсь об заклад, многие из вас, должно быть, думают, почему мы выбрали случайный лес для этой конкретной задачи? Что ж, чтобы ответить на этот вопрос, давайте сначала напишем код.

Построение модели

from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
target = hr_data_final['Attrition']
features = hr_data_final.drop('Attrition', axis = 1)
#create the train/test split
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.4, random_state=10)
#Create the model and train
model = RandomForestClassifier()
model.fit(X_train,y_train)
#predict the results for test
test_pred = model.predict(X_test)
#test the accuracy
accuracy_score(y_test, test_pred)

Модель дала оценку точности 0,84, что неплохо. Случайный лес неплохо работает даже с параметрами по умолчанию. Это одна из причин, по которой мы использовали RF для этой проблемы. Хотя это можно улучшить, настроив гиперпараметры классификатора Random Forest. Случайный лес также нелегко подобрать из-за его функции случайности.

Одна из лучших особенностей модели случайного леса - она ​​показывает важность переменных / характеристик в данных / модели. Для этой проблемы HR-аналитики нам интересно знать, какая функция / фактор больше всего влияет на истощение, и одна функция RF может предоставить нам эту информацию. Это еще одна причина, по которой мы использовали RF.

feat_importances = pd.Series(model.feature_importances_, index=features.columns)
feat_importances = feat_importances.nlargest(20)
feat_importances.plot(kind='barh')

Похоже, что ежемесячный доход больше всего влияет на отток сотрудников.

Резюме

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

использованная литература

  1. Репозиторий GitHub
  2. Набор данных Kaggle
  3. HR истощение
  4. HR Аналитика