Поступила реальная задача - мои коллеги из подбора попросили меня построить модель, предсказывающую время, необходимое для закрытия вакансии. Они перекраивают свои процессы, и одним из изменений должно стать информирование заказчика об ожидаемом сроке подбора еще на этапе подачи заявки на этот самый подбор. Хорошее желание - формирование адекватных ожиданий у руководителей. Помимо прогноза, хотим показывать историю закрытия вакансий в его городе - куда же без описательной статистики... Но возможно, некоторым людям прошлое позволит легче принять будущее) Хотя не факт...
В итоге у нас родился такой прообраз дашборда. Потребитель - линейный руководитель, подавший заявку на подбор. Предполагается, что этот отчет будет формироваться для него индивидуально, сразу после подачи заявки на поиск сотрудника. Ниже первый лист этого отчета.
Мы хотим показать в одном месте прошлое и будущее. Потому что это удобно. А еще мы хотим объяснить, как получилась наша прогнозная цифра (2-й блок дашборда). И там где это возможно, дать руководителю шанс самому "поиграться" факторами, чтобы принять свое решение. И родить кучу новых задач (видимо из блока 3).
Осталось сделать немного - построить модель, предсказывающую нужную метрику; начать собирать оценки по рекрутерам (совсем скоро в нашем кино); ну и запилить дашборд в систему отчетности для быстрого формирования (это отдельная песня).
У меня есть около 15 тыс. записей с реальным сроком закрытия - история с начала 2016 года и по текущий момент. 2015 год не стала брать сознательно - "мутное" время после очередной встряски. Оставила только вакансии массового подбора, убрала проблемные записи. В итоге выборка похудела до ~ 10 тысяч.
Модель решила построить в R: после семинара
"HR - аналитика в R" стараюсь закрепить полученные знания.
Первое, что проверила - а есть ли различия в сроке закрытия в разрезе городов. А то может одним универсальным отчетом обойдемся? :-) Да, различия между городами есть - Kruskal-Wallis chi-squared = 1081.2, df = 108, p-value = 2.2e-16 - отличия статистически значимы.
Одних городов для модели мало, что еще взять? Первое, что сразу пришло в голову - это характеристики самих городов - общая численность, уровень безработицы, количество ВУЗов в городе, количество экономически активного населения. Правда тут есть нюансище - корреляции между признаками, что логично. Надо брать или сам город как фактор, или все его характеристики.
Сейчас использовала две модели - обычную линейную регрессию и дерево решений. Первая мне была интересна потому, что там легко интерпретировать результаты - увидеть какие факторы влияют и насколько сильна их взаимосвязь с целевой переменной. От второй модели я ожидала более точный прогноз, но к моему удивлению, линейная регрессия показала лучший результат.
В этом посте я покажу линейную модель, обученную на выборке с перечисленными ниже факторами. В этой модели использовала только характеристики городов.
- Численность населения в городе
- Уровень безработицы
- Количество ВУЗов
- Количество экономически активного населения
- Количество вакансий в работе у рекрутера
- Подбор был удаленный (рекрутер и соискатели находятся в разных городах) или нет
- Месяц подачи заявки в подбор (почему бы и не посмотреть?)
- "Укрупненный функционал"
- Уровень позиции
- Доля отказов СЭБ за последний календарный год по каждому городу (Мои коллеги из подбора жаловались на количество отказов после проверки СЭБ, что им приходиться иногда начинать поиск заново - добавила долю отказов СЭБ в разрезе городов. Но наверное для многих компаний этот пункт не имеет критичного значения. )
- Причина появления вакансии
Одна печаль при использовании многих факторов из перечисленных - мы, как HR, врядли сможем повлиять на них, чтобы ускорить сроки. А вот эти факторы на нас влияют и хочется оценить масштаб этого влияния.
Использовала lm из caret, разделение на обучающую и тестовую выборку 0.75/0.25. Что получилось. R-squared: 0.336, standard error: 16 дней при среднем сроке 28 дней. Далеко не идеальный результат, но для начала, да еще с учетом качества данных, пойдет. Первые выводы все равно уже можно сделать.
Ниже 20 самых значимых факторов + (Intercept). (Intercept) оказался не значим (p-value 0,707), поэтому в модели использовать его нельзя.
Фактор
|
Уровень фактора (где есть)
|
Коэффициент в модели
|
p-value
|
Важность фактора
|
(Intercept)
|
|
6,251
|
0,707
|
|
Количество вакансий в работе у рекрутера
|
|
0,413
|
6,052E-310
|
100.00
|
Уровень позиции
|
|
1,755
|
5,183E-57
|
39.97
|
Причина появления вакансии
|
Конфиденциальная замена
|
14,172
|
1,320E-05
|
10.81
|
Уровень безработицы
|
|
-0,745
|
1,785E-04
|
9.29
|
Причина появления вакансии
|
Декретная позиция
|
2,233
|
0,003
|
7.34
|
Дата подачи заявки в подбор
|
Фев
|
2,945
|
0,004
|
7.05
|
Дата подачи заявки в подбор
|
Ноя
|
4,002
|
0,005
|
6.89
|
Доля отказов СЭБ в городе
|
|
10,803
|
0,007
|
6.66
|
Дата подачи заявки в подбор
|
Май
|
2,263
|
0,017
|
5.91
|
Дата подачи заявки в подбор
|
Апр
|
2,265
|
0,020
|
5.76
|
Численность населения
|
|
-1,67E-06
|
0,039
|
5.12
|
Дата подачи заявки в подбор
|
Март
|
1,973
|
0,041
|
5.07
|
Удаленный поиск
|
Да
|
1,202
|
0,048
|
4.90
|
Причина появления вакансии
|
Увольнение сотрудника
|
1,061
|
0,050
|
4.59
|
Дата подачи заявки в подбор
|
Дек
|
2,183
|
0,129
|
3.75
|
Количество ВУЗов
|
|
0,029
|
0,280
|
2.67
|
Дата подачи заявки в подбор
|
Окт
|
1,421
|
0,309
|
2.51
|
Дата подачи заявки в подбор
|
Сен
|
-1,176
|
0,316
|
2.47
|
Дата подачи заявки в подбор
|
Янв
|
0,853
|
0,438
|
1.91
|
Укрупненный функционал
|
Перевод
|
-12,763
|
0,441
|
1.90
|
На первом месте бесспорный лидер -
количество вакансий в работе у рекрутера. Коэффициент 0,411, p-value практически равен нулю. Это означает, что с увеличением на единицу количества вакансий, которое рекрутер ведет одновременно, срок закрытия всех вакансий у него увеличивается в среднем на 0,4 дня. Учитывая, что обычно в работе может находиться несколько десятков вакансий, то получается весьма ощутимо. Картинка слева.
На втором месте оказался уровень позиции, что в принципе было ожидаемо. Чем выше уровень, тем больше срок закрытия. Уровень был перекодирован как метрическая переменная - 1, 2,3 и т.д. То есть, с переходом на 1 уровень выше, срок закрытия увеличивается на 1,755 дня. С p-value не поспоришь.
Третье место - одна из причин появления вакансии "конфиденциальная замена". Причины появления вакансии далее еще встретятся, но тут скажу, что если причина появления была в подобной замене, то срок закрытия увеличивается в среднем на 14 дней по сравнению с базовым уровнем. Хотя если смотреть на картинку, то срок кажется бОльшим. Но картинкам верить нельзя))) За базу в модели была принята причина "ввод новой ШЕ" (покрашена оранжевым). Все сравнения ведутся именно с ней. Никакого скрытого смысла в таком выборе не было, базовый уровень определялся исходя из названий, программа просто выбрала тот уровень, который по алфавиту был первым.
Следующее место - уровень безработицы. Тут вроде тоже противоречий не возникает. Чем выше безработица, тем легче закрыть вакансию. С увеличением безработицы в городе на 1%, скорость закрытия уменьшается на 0,7 дня.
Пятое место - следующая причина увольнения "декретная позиция". Срок закрытия такой позиции увеличивается на 2,2 дня по сравнению с базовой. Что в очередной раз подтверждает, что люди не так охотно соглашаются идти в компанию на срочные трудовые договора.
На следующих нескольких местах оказалось время подачи заявки в подбор. Картинка где-то слева. За базу принят август (первый по алфавиту, ничего более). По картинке можно сказать, что наиболее быстро закрываются позиции, открытые в период июль-сентябрь. Не знаю, что точно является причиной этого, но моя гипотеза простая - народ отдохнул в отпусках и активнее откликается на вакансии. А декабрьские вакансии закрываются медленнее, так как мало кто хочет лишаться годового бонуса, выплата которого происходит как правило весной. Но что мне странно, что значимыми в модели оказались далеко не все месяца, и тот же декабрь просто "вылетел".
На восьмом месте появилась доля отказов после проверки СБ в разрезе городов. Логично, что чем яростнее СБ, тем срок закрытия больше, вот только не очень понятно как с этим бороться))) Зависимость нелинейная. poly(Доля.отказов.СБ.город, degree=4) привело к увеличению R-squared ~ на 0.01, но тут я это не показываю.
Следующее место - численность населения в городе. Тоже ничего нового. Чем крупнее город, тем быстрее закрывается вакансия.
Был ли подбор удаленным. Если да, то срок будет больше в среднем на 1,2 дня.
И последний значимый фактор - причина появления вакансии "увольнение сотрудника". Но значим он уже с натяжкой - p-value прям на грани.
Все остальное в таблице, что выделено серой заливкой, уже не имеет значения, так как p-value у этих факторов оказался больше 0,05.
Работа над этой моделью только начинается, и по мере появления новых данных буду включать их в модель. И следующее, что я сделаю - добавлю характеристики руководителя и рекрутера (например стаж в должности, тесты и т.д. и т.п.). И очень хочется поймать взаимодействие между двумя этими персонами.
__________________________________________________________