РИТ++ 2017, секция ML + IoT + ИБ
Зал Белу-Оризонти, 5 июня, 17:00
Тезисы:
http://ritfest.ru/2017/abstracts/2766.html
Мы расскажем о том, как помогаем нашим клиентам тратить меньше сил на отсеивание нерелевантных резюме, которые часто поступают на их вакансии.
В докладе прозвучат ответы на следующие вопросы:
— Какие бизнес-требования перед нами стояли, и какие решения мы выбрали.
— Какие особенности внедрения в production сопровождали эту задачу (как быстро отранжировать 1М резюме).
— Как мы выбирали алгоритм классификации (LogisticRegression, GradientBoosting, RankSVM, XGBoost).
— Какие результаты мы получили и как их измеряли.
— Какие типы поведения рекрутеров мы обнаружили.
4. ● многие из них вообще
не соответствуют вакансии
● рекрутеру приходится самостоятельно
фильтровать нерелевантные отклики
● это осложняет и замедляет подбор
кандидатов
На 15% вакансий приходится
более 100 откликов за сутки
8. С этим надо что-то делать
● определяем нерелевантные отклики
и пессимизируем их в списке;
● получаем задачу классификации на два
класса:
+ подходящий отклик
− неподходящий отклик
● даём возможность рекрутеру фильтровать
отклики по данному признаку
9. Этот доклад про:
● подготовку данных и обучение модели
● внедрение модели в production
и мониторинг метрик качества
● тестирование на пользователях
10. Подготавливаем данные для обучения
● обучаемся на событиях отклонения резюме
и приглашения на собеседование
● для каждой вакансии проверяем
распределение приглашений и отклонений
● очищаем данные от выбросов
13. Формируем черный список рекрутеров
● встречаются рекрутеры, которые приглашают
на собеседование всех подряд
● в основном это клиенты с безлимитным
тарифом
● берут количеством, не качеством
Не обучаемся на событиях данных рекрутеров
16. Генерация признаков
свойства резюме, вакансии и их сочетания;
итого 170 признаков;
к категориальным признакам применяем бинарное
кодирование (One-Hot Encoding)
17. Работа с текстовыми признаками
● текст очищаем от стоп-слов, пунктуации, лемматизируем;
● из текстовых признаков формируем тематические группы:
- признаки профессии
- требований вакансии и ключевых навыков
- обязанностей вакансии и обязанностей с предыдущих мест работы
● для каждой группы обучаем TF-IDF Vectorizer
● для фразы получаем TF-IDF вектор и вычисляем cosine similarity
с TF-IDF вектором другой фразы
Получаем меру сходства двух фраз
18. Примеры признаков
● средняя продолжительность работы на одном месте, в месяцах
● кол-во месяцев работы на последнем месте
● разница между требуемым опытом вакансии и опытом из резюме
● попадание желаемой зарплаты резюме в зарплатную вилку вакансии
● мера сходства между желаемой должностью и предыдущими местами
работы
● мера сходства между специальностью образования и требованиями
вакансии
● рейтинг (заполненность) резюме
19. When in doubt, use xgboost
Оптимизация гиперпараметров модели
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tunin
g-xgboost-with-codes-python/
https://www.kaggle.com/yassinealouini/hyperopt-the-xgboost-model
Остановились на:
n_estimators = 5000
max_depth = 5
min_child_weight = 6
20. Значимые признаки
● опыт работы соискателя;
● «зарплатные» фичи (разница между зарплатой в резюме
и верхней и нижней границами зарплаты в вакансии);
● cosine similarity между TF-IDF-векторами профессии
и в вакансии и профессий из опыта работы резюме;
● возраст соискателя;
● убираем возраст — в топ выходит фича «количество лет
с момента получения образования», возвращаем возраст
и компенсируем очки скоринга соискателям в возрасте
23. Снижаем количество ошибок
второго рода
● необходимо, чтобы как можно меньше подходящих
резюме оказалось в нерелевантных
● снижаем threshold вероятности принадлежности
к релевантному классу
● уменьшается кол-во FN ошибок,
но увеличивается FP
25. Production, цифры
1 сервер
24 ядра
1000req/s
в пике (подписки
на резюме)
0.04c
на скоринг пары
«резюме-вакансия»
18часов
на скоринг
всех активных
откликов
26. Production, мониторинг
● непрерывно оцениваем метрики
качества модели
● задание в Jenkins, которое собирает
метрики и отсылает в Graphite
● параллельно сравниваем метрики
нескольких разрабатываемых
моделей на одних данных
31. AB тестирование
● Конверсия присланных резюме в приглашенные — Impact 8.3%
● Число приглашенных резюме — Impact 6.7%
● Конверсия открытых вакансий в закрытые — Impact 6%
● Число закрытых вакансий — Impact 5.4%
● Количество дней до закрытия вакансии — Impact 7.7%
● Уровень значимости — 5%
32. В качестве заключения
Самое главное — обучающая выборка!
Фиксируем random_state
Мониторим метрики качества модели
33. Спасибо за помощь!
Компании Datastars
http://datastars.co/
6 июня 17:00
Никита Спирин
Применение машинного обучения
для генерации структурированных
сниппетов в поисковых системах
по трудоустройству
34. Спасибо за внимание!
Приходите к нам работать
https://www.superjob.ru/team
Доступ к Superjob в подарок
Укажите код RIT2017
в разделе «Обратная связь»
на superjob.ru
Промокод действует
до 1 сентября 2017 года
Сайгушкин Сергей,
ведущий разработчик
команды поиска Superjob.ru,
s.saygushkin@superjob.ru