training_projects
Оптимизация бизнес-решений при управлении персоналом компании "Работа с заботой"
HR-аналитики компании «Работа с заботой» помогают бизнесу оптимизировать управление персоналом: бизнес предоставляет данные, а аналитики предлагают, как избежать финансовых потерь и оттока сотрудников. Процесс принятия бизнес-решений следует оптимизировать при помощи машинного обучения: получится быстрее и точнее отвечать на вопросы бизнеса.
Контекст исследования: Компания предоставила данные с характеристиками сотрудников компании. Среди них — уровень удовлетворённости сотрудника работой в компании. Эту информацию получили из форм обратной связи: сотрудники заполняют тест-опросник, и по его результатам рассчитывается доля их удовлетворённости от 0 до 1, где 0 — совершенно неудовлетворён, 1 — полностью удовлетворён. Удовлетворённость работой напрямую влияет на отток сотрудников. А предсказание оттока — одна из важнейших задач HR-аналитиков. Внезапные увольнения несут в себе риски для компании, особенно если уходит важный сотрудник.
ЦЕЛЬ ПЕРВОГО ИССЛЕДОВАНИЯ:
1. Построить модель, которая сможет предсказать уровень удовлетворённости сотрудника на основе данных заказчика.
Описание данных для первого исследования:
-
Тренировочная выборка:
train_job_satisfaction_rate.csv
-
Входные признаки тестовой выборки:
test_features.csv
-
Целевой признак тестовой выборки:
test_target_job_satisfaction_rate.csv
-
id
— уникальный идентификатор сотрудника; -
dept
— отдел, в котором работает сотрудник; -
level
— уровень занимаемой должности; -
workload
— уровень загруженности сотрудника; -
employment_years
— длительность работы в компании (в годах); -
last_year_promo
— показывает, было ли повышение за последний год; -
last_year_violations
— показывает, нарушал ли сотрудник трудовой договор за последний год; -
supervisor_evaluation
— оценка качества работы сотрудника, которую дал руководитель; -
salary
— ежемесячная зарплата сотрудника; -
job_satisfaction_rate
— уровень удовлетворённости сотрудника работой в компании, целевой признак.
ЦЕЛЬ ВТОРОГО ИССЛЕДОВАНИЯ:
2. Построить модель, которая сможет на основе данных заказчика предсказать то, что сотрудник уволится из компании.
Описание данных для второго исследования:
-
Тренировочная выборка:
train_quit.csv
-
Входные признаки тестовой выборки:
test_features.csv
-
Целевой признак тестовой выборки:
test_target_quit.csv
-
id
— уникальный идентификатор сотрудника; -
dept
— отдел, в котором работает сотрудник; -
level
— уровень занимаемой должности; -
workload
— уровень загруженности сотрудника; -
employment_years
— длительность работы в компании (в годах); -
last_year_promo
— показывает, было ли повышение за последний год; -
last_year_violations
— показывает, нарушал ли сотрудник трудовой договор за последний год; -
supervisor_evaluation
— оценка качества работы сотрудника, которую дал руководитель; -
salary
— ежемесячная зарплата сотрудника; -
quit
— факт увольнения сотрудника из компании
Вывод
В ходе работы над проектом были решены две ключевые задачи: регрессии и классификации. Были созданы , протестированы и выбраны 2 лучшие модели, которые успешно прошли порог оценки качества
--ПРЕДСКАЗАНИЕ УРОВНЯ УДОВЛЕТВОРЕННОСТИ СОТРУДНИКА--
Исследование было разделено на несколько этапов:
1. Загрузка и подготовка данных
-
job_X_train
- Всего в датасете 4000 записей
- Обнаружили пропущенные значения в столбцах
dept
(6) иlevel
(4) - Явные дубликаты не были обнаружены
- С типами данных все в порядке
-
job_X_test
- Всего в датасете 2000 записей
- Нашли пропущенные значения в столбцах
dept
(2) иlevel
(1) - Явные дубликаты не были обнаружены
- С типами данных все в порядке
-
job_y_test
- Всего в датасете 2000 записей
- Пропущенных значений не обнаружено
- Явные дубликаты не обнаружены
- С типами данных все в порядке
2. Предобработка данных
-
job_X_train
:- Исправили орфографическую ошибку sinior -> senior в столбце
level
- Заменили пропущенные значения при помощи пайплайна (
SimpleImputer
)
- Исправили орфографическую ошибку sinior -> senior в столбце
-
job_X_test
:- Исправили орфографическую ошибку sinior -> senior в столбце
level
- Заменили пустые строки (" ") из данных на пропущенные значения
- Заменили пропущенные значения при помощи пайплайна (
SimpleImputer
)
- Исправили орфографическую ошибку sinior -> senior в столбце
-
job_y_test
:- С датасетом все в порядке
3. Исследовательский анализ данных
-
В компании практически в 2 раза больше сотрудников, которые работают в ней до 3х лет: опытных сотрудников гораздо меньше. Стоит учесть это при переборе параметров для модели в дальнейшем
-
Самая частая оценка качества работы сотрудника, которую давал руководитель - 4.
-
Медианная зарплата в компании - 30 000.
-
Больше всего сотрудников (38%) заняты в отделе "продаж", однако более всего удовлетворены своим рабочим местом в среднем сотрудники отдела "закупок"
-
47.5% сотрудников занимают должность
junior
, примерно столько же в компании и специалистовmiddle
(43.6%). Более всего удовлетворены рабочим местом сотрудникиmiddle
. -
Большая часть сотрудников (51,6%) имеют среднюю загруженность.
-
Очевидным фактором удовлетворения рабочим местом является повышение в прошлом году или наличие нарушений.
-
Сотрудники, которых повысили в прошлом году / которые не получили замечаний за нарушения - гораздо более удовлетворены рабочим местом.
-
Уровень зарплаты достаточно сильно зависит от загруженности работник и его отдела.
-
Был проведен корреляционный анализ:
- Целевой признак коррелирует умеренно-положительно (0.5 < y < 0.8) с несколькими признаками:
last_year_violations
- 0.56. Достаточно очевидно, что полученные замечания за нарушения трудового договора негативно влияют на удовлетворенность сотрудником своим рабочим местом.supervisor_evaluation
- 0.76. Самая высокая корреляция таргета именно с этим признаком.- От признаков со слабой корреляцией решили не избавляться, так как они могут быть важны при принятии решения модели
- Целевой признак коррелирует умеренно-положительно (0.5 < y < 0.8) с несколькими признаками:
-
Построили дополнительные графики и обнаружили нелинейную связь
job_satisfaction_rate
с коррелирующими признакамиemployment_years
иsupervisor_evaluation
. Особенно интересен вид связи целевого признака и зарплаты сотрудников. Учли данный факт при моделировании
4. Подготовка признаков
- Проиндексировали выборки и почистили их для дальнейшей работы
- Создали полный пайплайн с предобработкой, где применили кодирование и масштабирование при помощи
OneHotEncoder
,OrdinalEncoder
,StandardScaler
/MinMaxScaler
5. Обучение моделей
-
Создали собственную метрику - SMAPE (симметричное среднее абсолютное процентное отклонение)
-
После перебрали гиперпараметры 5-ти моделей в цикле через пайплайн при помощи
RandomizedSearchCV
:-
LinearRegression
-
DecisionTreeRegressor
-
LGBMRegressor
-
RandomForestRegressor
-
KNeighborsRegressor
-
-
По итогу перебора в цикле, лучше всего себя показала модель
LGBMRegressor(max_depth=20, n_estimators=96,random_state=42)
.- SMAPE лучшей модели на тестовой выборке -
11.072211264327137
- SMAPE лучшей модели на тестовой выборке -
-
На втором месте -
RandomForestRegressor
, а хуже всего справиласьLinearRegression
со значением SMAPE23.547602
на тестовой выборке -
Углубленно подобрали гиперпараметры модели
LGBMRegressor
:-
Лучшая модель -
LGBMRegressor(max_depth=13, n_estimators=145, random_state=42)
-
Финальное значение SMAPE на тестовой выборке -
10.915527122848754
-
-
Проанализировали важность признаков при помощи
SHAP
:-
Сильнее других на предсказания модели влияет признак
supervisor_evaluation
. Собственно, это доказывает наше предсказание важности данного признака еще на этапе корреляционного анализа. -
На втором месте -
employment_years
. Судя по всему, предсказание уровня удовлетворенности сотрудником своего рабочего места зависит и от этой фичи (примерно на таком же уровне, как и от занимаемой должности и уровня ЗП)
-
--ПРЕДСКАЗАНИЕ УВОЛЬНЕНИЯ СОТРУДНИКА ИЗ КОМПАНИИ--
Исследование было разделено на несколько этапов:
1. Загрузка и подготовка данных
-
quit_X_train
- С датасетом все в порядке
-
quit_y_test
- С датасетом все в порядке
-
Датасет
quit_X_test
- копия обработанного датасета с входными признаками предыдущей задачи (job_X_test_ml
)
2. Предобработка данных
- Закодировали вручную строки "no" и "yes" в столбцах
['last_year_promo', 'last_year_violations', 'quit']
- Исправили орфографическую ошибку
sinior
в датасетеquit_X_train
- Проиндексировали выборки
3. Исследовательский анализ данных
- Общий анализ данных:
- Сильный дисбаланс по повышению сотрудников:
97.2%
сотрудников НЕ были повышены - Только
13.6%
сотрудников получили выговоры за нарушения ТК в прошлом году 71.8%
НЕ были уволены из компании по существующим данным- Целевой признак коррелирует умеренно-положительно (0.5 < y < 0.8) с несколькими признаками:
-
employment_years
- 0.66. Более всего сотрудников увольняются до 2-х лет работы в компании. Это связано с классической текучкой и описывается нормальным явлением. -
salary
- 0.51. Подобная корреляция связана с уровнем ЗП сотрудников: чем она ниже (и, вероятно, не соответствует ожиданиям сотрудников) - тем охотнее увольняются работники.
-
- Сильный дисбаланс по повышению сотрудников:
- Портрет "уволившегося" сотрудника:
-
Скорее всего работает в отделе продаж (sales)
-
Имеет низшую должность (junior)
-
Имеет низкую / среднюю загруженность
-
В среднем проработал 1-2 года в компании
-
В среднем зарабатывает 22 800 (что на 12 000 меньше среднего уровня ЗП остальных сотрудников)
-
- Подтвердили, что уровень удовлетворённости сотрудника работой в компании влияет на то, уволится ли сотрудник или нет. JSR уволившихся сотрудников практически в 2 раза ниже оставшихся (в среднем -
0.39
по отношению к0.61
)
4. Добавление нового входного признака
- Добавили новый входной признак - "удовлетворенность сотрудника работой".
- Данный признак был добавлен в виде предсказаний модели из задачи номер 1:
- Проверили грамотность добавления нового признака
- Получили предсказания модели для новых данных
- Вставили предсказания в качестве нового признака
5. Подготовка признаков
- Скорректировали выборки
- Добавили новый признак
job_satisfaction_rate
вnum_columns
для пайплайнаdata_preprocessor
6. Обучение моделей
-
Сначала перебрали гиперпараметры 6-ти моделей в пайплайне при помощи
RandomizedSearchCV
:- LogisticRegression
- DecisionTreeClassifier
- LGBMClassifier
- RandomForestClassifier
- KNeighborsClassifier
- SVC
-
Лучшая модель по версии
RandomizedSearchCV
-LGBMClassifier(max_depth=2, n_estimators=112, random_state=42))
-
ROC-AUC на тестовой выборке -
0.9307047501926154
-
Проанализировали важность признаков при помощи
SHAP
: -
Признак
employment_years
оказывает значительное влияние на решения модели. Примерно такой же вес имеет признакlevel
. Получается, что два этих показателя являются ключевыми при решении сотрудника "уволиться"
--РЕКОМЕНДАЦИИ ДЛЯ КЛИЕНТА--
- Стоит обращать внимание на то, как оценивается труд сотрудников. Они принимают это достаточно близко к сердцу, что точно сказывается на их удовлетворенности рабочим местом
- Текучка - неизбежное явление для бизнеса. Вероятно, стоит придумать какие-то дополнительные интересные фичи на ранних этапах работы (1-2 года). Корпоративы, соц.гарантии, премии и прочие активности
- Стоит внимательно посмотреть на отдел продаж и зарплаты сотрудников. Вероятно, нужно обратить внимание на "фиксацию" сотрудников в отделе продаж на какой-то более длительный период. Может быть, стоит нормировать график, добавив дистанционные часы
- Удовлетворенность работой - ключевой параметр при увольнении сотрудников, поэтому нужно максимизировать "наслаждение" сотрудников от их деятельности. В таком случае, отток действительно может снизиться