Ранжирование откликов
соискателей с помощью
машинного обучения
Сайгушкин Сергей,
ведущий разработчик
команды поиска Superjob.ru
Суперджоб — это:
1 млн
приглашений
в месяц
1 млн
пользователей
в сутки
более
20 млн
резюме
superjob.ru
> 50разработчиков
● многие из них вообще
не соответствуют вакансии
● рекрутеру приходится самостоятельно
фильтровать нерелевантные отклики
● это осложняет и замедляет подбор
кандидатов
На 15% вакансий приходится
более 100 откликов за сутки
Вакансия — ведущий PHP-разработчик
Вакансия — ведущий PHP-разработчик
Вакансия — ведущий PHP-разработчик
С этим надо что-то делать
● определяем нерелевантные отклики
и пессимизируем их в списке;
● получаем задачу классификации на два
класса:
+ подходящий отклик
− неподходящий отклик
● даём возможность рекрутеру фильтровать
отклики по данному признаку
Этот доклад про:
● подготовку данных и обучение модели
● внедрение модели в production
и мониторинг метрик качества
● тестирование на пользователях
Подготавливаем данные для обучения
● обучаемся на событиях отклонения резюме
и приглашения на собеседование
● для каждой вакансии проверяем
распределение приглашений и отклонений
● очищаем данные от выбросов
Распределение приглашений
Распределение отклонений резюме
Формируем черный список рекрутеров
● встречаются рекрутеры, которые приглашают
на собеседование всех подряд
● в основном это клиенты с безлимитным
тарифом
● берут количеством, не качеством
Не обучаемся на событиях данных рекрутеров
Вакансия — полицейский
Вакансия — полицейский
Генерация признаков
свойства резюме, вакансии и их сочетания;
итого 170 признаков;
к категориальным признакам применяем бинарное
кодирование (One-Hot Encoding)
Работа с текстовыми признаками
● текст очищаем от стоп-слов, пунктуации, лемматизируем;
● из текстовых признаков формируем тематические группы:
- признаки профессии
- требований вакансии и ключевых навыков
- обязанностей вакансии и обязанностей с предыдущих мест работы
● для каждой группы обучаем TF-IDF Vectorizer
● для фразы получаем TF-IDF вектор и вычисляем cosine similarity
с TF-IDF вектором другой фразы
Получаем меру сходства двух фраз
Примеры признаков
● средняя продолжительность работы на одном месте, в месяцах
● кол-во месяцев работы на последнем месте
● разница между требуемым опытом вакансии и опытом из резюме
● попадание желаемой зарплаты резюме в зарплатную вилку вакансии
● мера сходства между желаемой должностью и предыдущими местами
работы
● мера сходства между специальностью образования и требованиями
вакансии
● рейтинг (заполненность) резюме
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
Значимые признаки
● опыт работы соискателя;
● «зарплатные» фичи (разница между зарплатой в резюме
и верхней и нижней границами зарплаты в вакансии);
● cosine similarity между TF-IDF-векторами профессии
и в вакансии и профессий из опыта работы резюме;
● возраст соискателя;
● убираем возраст — в топ выходит фича «количество лет
с момента получения образования», возвращаем возраст
и компенсируем очки скоринга соискателям в возрасте
Метрики качества модели
Accuracy: 0.76
ROC-AUC: 0.79
Precision: 0.73
Recall: 0.84
Проводим новые эксперименты
● наполнение списка синонимов профессий, doc2vec;
● тематическое моделирование, BigARTM
Снижаем количество ошибок
второго рода
● необходимо, чтобы как можно меньше подходящих
резюме оказалось в нерелевантных
● снижаем threshold вероятности принадлежности
к релевантному классу
● уменьшается кол-во FN ошибок,
но увеличивается FP
Production, реализация
Production, цифры
1 сервер
24 ядра
1000req/s
в пике (подписки
на резюме)
0.04c
на скоринг пары
«резюме-вакансия»
18часов
на скоринг
всех активных
откликов
Production, мониторинг
● непрерывно оцениваем метрики
качества модели
● задание в Jenkins, которое собирает
метрики и отсылает в Graphite
● параллельно сравниваем метрики
нескольких разрабатываемых
моделей на одних данных
Production, мониторинг, ROC-AUC
Production, мониторинг, precision
AB тестирование
● Конверсия присланных резюме в приглашенные — Impact 8.3%
● Число приглашенных резюме — Impact 6.7%
● Конверсия открытых вакансий в закрытые — Impact 6%
● Число закрытых вакансий — Impact 5.4%
● Количество дней до закрытия вакансии — Impact 7.7%
● Уровень значимости — 5%
В качестве заключения
Самое главное — обучающая выборка!
Фиксируем random_state
Мониторим метрики качества модели
Спасибо за помощь!
Компании Datastars
http://datastars.co/
6 июня 17:00
Никита Спирин
Применение машинного обучения
для генерации структурированных
сниппетов в поисковых системах
по трудоустройству
Спасибо за внимание!
Приходите к нам работать
https://www.superjob.ru/team
Доступ к Superjob в подарок
Укажите код RIT2017
в разделе «Обратная связь»
на superjob.ru
Промокод действует
до 1 сентября 2017 года
Сайгушкин Сергей,
ведущий разработчик
команды поиска Superjob.ru,
s.saygushkin@superjob.ru

Ранжирование откликов соискателей с помощью машинного обучения / Сергей Сайгушкин (Superjob)

  • 1.
    Ранжирование откликов соискателей спомощью машинного обучения Сайгушкин Сергей, ведущий разработчик команды поиска Superjob.ru
  • 2.
    Суперджоб — это: 1млн приглашений в месяц 1 млн пользователей в сутки более 20 млн резюме
  • 3.
  • 4.
    ● многие изних вообще не соответствуют вакансии ● рекрутеру приходится самостоятельно фильтровать нерелевантные отклики ● это осложняет и замедляет подбор кандидатов На 15% вакансий приходится более 100 откликов за сутки
  • 5.
    Вакансия — ведущийPHP-разработчик
  • 6.
    Вакансия — ведущийPHP-разработчик
  • 7.
    Вакансия — ведущийPHP-разработчик
  • 8.
    С этим надочто-то делать ● определяем нерелевантные отклики и пессимизируем их в списке; ● получаем задачу классификации на два класса: + подходящий отклик − неподходящий отклик ● даём возможность рекрутеру фильтровать отклики по данному признаку
  • 9.
    Этот доклад про: ●подготовку данных и обучение модели ● внедрение модели в production и мониторинг метрик качества ● тестирование на пользователях
  • 10.
    Подготавливаем данные дляобучения ● обучаемся на событиях отклонения резюме и приглашения на собеседование ● для каждой вакансии проверяем распределение приглашений и отклонений ● очищаем данные от выбросов
  • 11.
  • 12.
  • 13.
    Формируем черный списокрекрутеров ● встречаются рекрутеры, которые приглашают на собеседование всех подряд ● в основном это клиенты с безлимитным тарифом ● берут количеством, не качеством Не обучаемся на событиях данных рекрутеров
  • 14.
  • 15.
  • 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-векторами профессии и в вакансии и профессий из опыта работы резюме; ● возраст соискателя; ● убираем возраст — в топ выходит фича «количество лет с момента получения образования», возвращаем возраст и компенсируем очки скоринга соискателям в возрасте
  • 21.
    Метрики качества модели Accuracy:0.76 ROC-AUC: 0.79 Precision: 0.73 Recall: 0.84
  • 22.
    Проводим новые эксперименты ●наполнение списка синонимов профессий, doc2vec; ● тематическое моделирование, BigARTM
  • 23.
    Снижаем количество ошибок второгорода ● необходимо, чтобы как можно меньше подходящих резюме оказалось в нерелевантных ● снижаем threshold вероятности принадлежности к релевантному классу ● уменьшается кол-во FN ошибок, но увеличивается FP
  • 24.
  • 25.
    Production, цифры 1 сервер 24ядра 1000req/s в пике (подписки на резюме) 0.04c на скоринг пары «резюме-вакансия» 18часов на скоринг всех активных откликов
  • 26.
    Production, мониторинг ● непрерывнооцениваем метрики качества модели ● задание в Jenkins, которое собирает метрики и отсылает в Graphite ● параллельно сравниваем метрики нескольких разрабатываемых моделей на одних данных
  • 27.
  • 28.
  • 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