Анализ оттока персонала
Посмотрим на структуру базы данных, содержание ее таблиц
## [1] "cities" "departments" "info"
## # Source: table<cities> [?? x 2]
## # Database: sqlite 3.33.0 [/cloud/project/EmployeeChurn.db]
## cityID city
## <int> <chr>
## 1 1 Abbotsford
## 2 2 Aldergrove
## 3 3 Bella Bella
## 4 4 Blue River
## 5 5 Burnaby
## 6 6 Chilliwack
## 7 7 Cortes Island
## 8 8 Cranbrook
## 9 9 Dawson Creek
## 10 10 Dease Lake
## # … with more rows
## # Source: table<departments> [?? x 2]
## # Database: sqlite 3.33.0 [/cloud/project/EmployeeChurn.db]
## departmentID department
## <int> <chr>
## 1 1 Accounting
## 2 2 Accounts Payable
## 3 3 Accounts Receiveable
## 4 4 Audit
## 5 5 Bakery
## 6 6 Compensation
## 7 7 Customer Service
## 8 8 Dairy
## 9 9 Employee Records
## 10 10 Executive
## # … with more rows
## # Source: table<info> [?? x 16]
## # Database: sqlite 3.33.0 [/cloud/project/EmployeeChurn.db]
## employeeID birthdate_key orighiredate_key terminationdate… age
## <int> <chr> <chr> <chr> <int>
## 1 1318 1/3/1954 8/28/1989 1/1/1900 61
## 2 1319 1/3/1957 8/28/1989 1/1/1900 58
## 3 1320 1/2/1955 8/28/1989 1/1/1900 60
## 4 1321 1/2/1959 8/28/1989 1/1/1900 56
## 5 1322 1/9/1958 8/31/1989 1/1/1900 57
## 6 1323 1/9/1962 8/31/1989 1/1/1900 53
## 7 1325 1/13/1964 9/2/1989 1/1/1900 51
## 8 1328 1/17/1956 9/5/1989 1/1/1900 59
## 9 1329 1/23/1967 9/8/1989 1/1/1900 48
## 10 1330 1/25/1967 9/9/1989 1/1/1900 48
## # … with more rows, and 11 more variables: length_of_service <int>,
## # cityID <chr>, departmentID <chr>, job_title <chr>, store_name <int>,
## # gender <chr>, termreason_desc <chr>, termtype_desc <chr>,
## # status_year <int>, status <chr>, business_unit <chr>
Подготовим базу данных для дальнейшей работы с ней
Соединим таблицы, чтобы получить доступ к департаментам и городам.
Переведем соединенную таблицу в формат дата-фрейма для более глубокого анализа и построения графиков.
Переведем character-переменные в factor-переменные для дальнейшего анализа.
Удалим колонки с ID и исправим опечатки.
## 'data.frame': 6272 obs. of 16 variables:
## $ employeeID : int 1318 1319 1320 1321 1322 1323 1325 1328 1329 1330 ...
## $ birthdate_key : Factor w/ 5335 levels "1/1/1946","1/1/1948",..: 326 328 182 184 441 442 72 129 245 263 ...
## $ orighiredate_key : Factor w/ 4413 levels "1/1/1990","1/1/1991",..: 3928 3928 3928 3928 3981 3981 4202 4359 4391 4402 ...
## $ terminationdate_key: Factor w/ 1046 levels "1/1/1900","1/1/2006",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ age : int 61 58 60 56 57 53 51 59 48 48 ...
## $ length_of_service : int 26 26 26 26 26 26 26 26 26 26 ...
## $ job_title : Factor w/ 47 levels "Accounting Clerk",..: 9 47 34 46 45 30 29 10 42 36 ...
## $ store_name : int 35 35 35 35 35 35 35 35 32 32 ...
## $ gender : Factor w/ 2 levels "Female","Male": 2 1 1 2 2 2 1 1 1 1 ...
## $ termreason_desc : Factor w/ 4 levels "Layoff","Not Applicable",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ termtype_desc : Factor w/ 3 levels "Involuntary",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ status_year : int 2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
## $ status : Factor w/ 2 levels "active","terminated": 1 1 1 1 1 1 1 1 1 1 ...
## $ business_unit : Factor w/ 2 levels "headoffice","stores": 1 1 1 1 1 1 1 1 2 2 ...
## $ department : Factor w/ 21 levels "Accounting","Accounts Payable",..: 10 10 10 10 10 10 10 10 20 16 ...
## $ city : Factor w/ 40 levels "Abbotsford","Aldergrove",..: 35 35 35 35 35 35 35 35 32 32 ...
## employeeID birthdate_key orighiredate_key terminationdate_key
## Min. :1318 2/16/1991: 4 1/23/2000 : 5 1/1/1900 :4799
## 1st Qu.:3478 3/19/1989: 4 10/16/2005: 5 12/30/2014: 144
## Median :5174 3/23/1973: 4 11/25/2011: 5 12/30/2015: 76
## Mean :5084 4/27/1956: 4 11/8/1997 : 5 12/30/2010: 5
## 3rd Qu.:6756 7/26/1988: 4 12/4/2004 : 5 4/8/2008 : 4
## Max. :8336 8/4/1954 : 4 2/22/1995 : 5 10/31/2007: 3
## (Other) :6248 (Other) :6242 (Other) :1241
## age length_of_service job_title store_name
## Min. :19.00 Min. : 0.00 Meat Cutter :1218 Min. : 1.0
## 1st Qu.:32.00 1st Qu.: 7.00 Cashier :1149 1st Qu.:16.0
## Median :45.00 Median :13.00 Dairy Person :1031 Median :28.0
## Mean :44.75 Mean :12.83 Produce Clerk:1027 Mean :27.1
## 3rd Qu.:58.00 3rd Qu.:19.00 Baker : 865 3rd Qu.:41.0
## Max. :65.00 Max. :26.00 Shelf Stocker: 702 Max. :46.0
## (Other) : 280
## gender termreason_desc termtype_desc status_year
## Female:3272 Layoff : 141 Involuntary : 141 Min. :2006
## Male :3000 Not Applicable:5094 Not Applicable:5094 1st Qu.:2015
## Resignation : 154 Voluntary :1037 Median :2015
## Retirement : 883 Mean :2014
## 3rd Qu.:2015
## Max. :2015
##
## status business_unit department
## active :5094 headoffice: 80 Meats :1252
## terminated:1178 stores :6192 Customer Service:1181
## Produce :1060
## Dairy :1032
## Bakery : 898
## Processed Foods : 734
## (Other) : 115
## city
## Vancouver :1390
## Victoria : 623
## Nanaimo : 480
## New Westminster: 403
## Kelowna : 304
## Kamloops : 267
## (Other) :2805
Проведем разведочный анализ данных
Беглый анализ суммарных статистик показывает, что данная компания является продуктовым ритейлером. Около 99% сотрудников из датасета трудятся непосредственно на точках продаж (stores) в качестве рядовых работников. На сотрудников головного офиса (headoffice) в данной базе приходится только 1 процент наблюдений.
Примерно 8/10 от ушедших сотрудников покинули данную компанию по причине выхода на пенсию (retirement), 1/10 попали под сокращение (layoff) и 1/10 уволились самостоятельно (resignation)
Попробуем ответить на другие вопросы с помощью группировки данных и графиков.
Каков показатель текучести персонала?
## active terminated Total PercentTerminated
## 2006 0 134 134 100.000000
## 2007 4 161 165 97.575758
## 2008 7 158 165 95.757576
## 2009 10 135 145 93.103448
## 2010 39 112 151 74.172185
## 2011 44 68 112 60.714286
## 2012 35 85 120 70.833333
## 2013 106 65 171 38.011696
## 2014 50 147 197 74.619289
## 2015 4799 113 4912 2.300489
Видим, что в 2015 году компанию покинуло 2.3 % сотрудников. К сожалению, с 2006 по 2014 у нас нет данных по количеству активных сотрудников (т.е. работающих в компании), но есть данные по количеству покинувших (terminated) компанию сотрудников каждый год на протяжении данного периода.
Посмотрим на увольнения в динамике с 2006 по 2015. Были ли они преимущественно добровольными или недобровольными?
Видно, что вплоть до 2014 года увольнения носили исключительно добровольный характер, однако в 2014 году около 2/3 всех увольнений были недобровольными. В 2015 году доля недобровольных увольнений составила приблизительно 1/2 от всех увольнений. Не было ли там массовых сокращений? В принципе, уже можно точно сказать, что это были сокращения, так как в таблице только у сокращений (layoff) стоит недобровольный статус (involuntary) ухода. Однако это лучше визуализировать.
Да, действительно, мы можем видеть что в 2014 и 2015 году имели место массовые сокращения сотрудников. В 2014 две трети всех уволенных попали под сокращение. Оставшаяся треть ушла на пенсию. В 2015 году половина уволившихся была сокращена, другая половина - вышла на пенсию.
Перед тем как визуализировать увольнения в разрезе департаментов посмотрим на самые большие департаменты по количеству работающих в них сотрудников
Видим, что крупнейшими департаментами являются Customer Service, Meats, Dairy, Bakery, Produce, Processed Foods.
Теперь посмотрим на количество увольнений в департаментах в разрезе причин ухода
Принимая во внимание распределение персонала по департаментам мы можем прийти к следующим интересным инсайтам из построенного графика:
Мы видим странно большое количество людей уходящих на пенсию в отделах Meats и Produce. Не связано ли это со старением персонала в данных департаментах? Будет ли разница в среднем возрасте активных сотрудников между департаментами?
В Customer Service и в Processed Foods относительно высокая доля увольняющихся по собственному желанию вместе с низкой долей выходящих на пенсию. Оба данных факта могут свидетельствовать о высокой текучести персонала в данных департаментах, о том что люди там не склонны работать в течение долгих лет.
Проверим средний возраст активных сотрудников по департаментам
И, действительно, мы видим, что средний возраст активных работников отдела Meats составляет (!) 58 лет, а в Produce 52 года. Неудивительно, почему столько людей уходят на пенсию в данных департаментах.
Что касается Customer Service и Processed Foods, то здесь мы видим обратную ситуацию: средний возраст сотрудников в данных отделах равен 25 и 33 годам соотвественно.
Теперь отдельно посмотрим только на сегмент уволившихся по собственному желанию (resignation)
Выделим каждый департамент и посмотрим на распределение возраста увольняющихся оттуда
Еще раз подтверждается, что в Customer Service и Processed Foods увольнения по собственному желанию совершаются преимущественно людьми в возрасте до 40 лет. Аналогичная ситуация характерна для отделов Bakery и Dairy.
Инсайты разведочного анализа
Мы убедились, что средний возраст работников в разных отделах распределен неравномерно. Высокий средний возраст в отделах Meats и Processed Foods приводит к высокому оттоку сотрудников в связи с выходом на пенсию. Необходимо отметить, что высокий средний возраст (около 60 лет) характерен также и для нескольких других отделов.
Высокая текучесть персонала отмечается в департаментах Customer Service и в Processed Foods, но сотрудники увольняются оттуда по собственному желанию, а не выходят на пенсию.
Построим предсказательную модель
Поскольку компания сама решает какую группу сотрудников и на основании каких критериев ей сократить (layoff), а выход на пенсию (retirement) будет связан главным образом с возрастом, то никаких принципиально новых инсайтов в этих сегментах компания для себя открыть не сможет.
А если мы построим модель в сегменте resignation + active, то это позволит нам понять кто из сотрудников и на основании каких признаков потенциально может самостоятельно уйти из компании. Идентификация проблемных точек станет основой для разработки программы изменений, направленных на уменьшение текучести персонала (как увольнений по собственному желанию).
Наше предложение следующее: исключить из датасета уволенных по сокращению (layoff) и ушедших на пенсию (retirement), оставив только активных сотрудников и уволившихся по собственному желанию (resignation) и построить модель по целевой переменной status.
Таким образом, наша модель будет предсказывать останется ли сотрудник в компании или уволится из нее по собственному желанию.
В качестве предсказывающей модели выберем Random Forest, хорошо справляющийся с несбалансированными данными. У нас соотношение классов составляет примерно 32:1.
Оценим качество модели и выделим существенные признаки
## active terminated
## 1534 40
## Confusion Matrix and Statistics
##
## Reference
## Prediction active terminated
## active 1524 10
## terminated 4 36
##
## Accuracy : 0.9911
## 95% CI : (0.9851, 0.9951)
## No Information Rate : 0.9708
## P-Value [Acc > NIR] : 2.325e-08
##
## Kappa : 0.8327
##
## Mcnemar's Test P-Value : 0.1814
##
## Sensitivity : 0.9974
## Specificity : 0.7826
## Pos Pred Value : 0.9935
## Neg Pred Value : 0.9000
## Prevalence : 0.9708
## Detection Rate : 0.9682
## Detection Prevalence : 0.9746
## Balanced Accuracy : 0.8900
##
## 'Positive' Class : active
##
## Area under the curve: 0.89
Значение ROC AUC равно 0.89, что подтверждает высокую аккуратность модели.
Видим, что, как и предполагалось, самыми существенными признаками, влияющими на увольнение по собственному желанию являются возраст и общий срок пребывания сотрудника на рабочем месте.
Проверим наши гипотезы, меняя исходные данные
Проверим гипотезу с увеличением выслуги лет
## active terminated
## 1534 40
## active terminated
## 1549 25
Добавив каждому сотруднику прослужившему менее 5 лет по 3 лет дополнительной выслуги мы добились сокращения увольняющихся по собственному желанию на 40 %. Т.е. сам факт того, что сотрудник прослужит хотя бы еще 3 года в организации значительно уменьшает вероятность того, что он уволится по собственному желанию.
Проверим гипотезу с омоложением кадрового состава
## active terminated
## 1534 40
## active terminated
## 1548 26
На 40 % удается сократить добровольные уходы, если мы уменьшаем средний возраст сотрудников на 15 лет.
Финальные рекомендации
Разведочный анализ показал, что в ряде отделов (особенно это характерно для Meats и Processed Foods) наблюдается значительный отток сотрудников по причине выхода на пенсию, который, в свою очередь, обусловлен высоким средним возрастом работающих там сотрудников.
На основании этих данных мы можем констатировать острую необходимость в разработке и реализации мероприятий по привлечению новых молодых кадров в данные отделы.
Эксперимент на построенной модели показал, что в случае общего омоложения кадрового состава мы можем прийти к существенному сокращению (почти в 2 раза) оттока сотрудников в связи с увольнением по собственному желанию. Естественно, что общее омоложение кадрового состава в данных отделах также может позитивно сказаться на снижении оттока сотрудников, уходящих на пенсию.
Несмотря на относительно низкий средний возраст сотрудников в отделах Customer Service и Processed Foods там наблюдается сильная текучесть кадров. Сотрудники не задерживаются там подолгу. Тотальное большинство уволившихся по собственному желанию в данных отделах составляют люди в возрасте до 40 лет. Та же ситуация, но в меньшей степени характера и для отделов Dairy и Bakery.
На основании этих данных мы можем констатировать необходимость в разработке и реализации мероприятий по удержанию кадров на рабочем месте.
Эксперимент на построенной модели показал, что в случае добавления нескольких лет выслуги всем новым сотрудникам мы можем прийти к существенному сокращению (почти в 2 раза) оттока сотрудников в связи с увольнением по собственному желанию.