Близко ли живет кандидат? Или как мы помогали Сберу фильтровать резюме через ML)
Привет, я Ярослав технический директор www.r77.ai и расскажу, как помогали Сберу подбирать резюме через делали ml-метчинг, а еще прогнозировали карьерное развитие кандидатов.
О проекте
Название: Smart Recruitment
Система: SAP Success Factors
Заказчик: Сбер
Описание
- рассматривали процесс массового подбора персонала (=сотни однотипных позиций);
- огромный поток информации → более 100 откликов (иногда 500) на одну вакансию;
- у рекрутера нет времени просмотреть 500 резюме, берет 3-4 рандомно из них выбирает кандидата;
- не использовались онлайн тесты, только информация по откликам.
Отличия от точечного еще и в критериях отбора:
- по словам бизнеса - главный фактор это близость от метро 🙂
- жесткие критерии на пол / возраст / кол-во лет опыта
Идея
Сделать систему скоринга кандидатов для каждой вакансии и показать рекрутеру наиболее подходящих кандидатов.
Дополнительно хотим попробовать:
- прогнозировать lifetime сотрудника в компании (>1 года или меньше);
- прогнозировать до какой позиции вырастет кандидат (а-ка карьерное развитие / трек);
- прогнозировать вероятность того, что кандидат примет оффер.
Данные
3 сущности (таблички) в SAP SF:
- Вакансия: позиция, требования, адрес, отдел, сфера, …
- Кандидат (резюме): опыт, адрес, образование, …
- Заявка (связь = отклик кандидата на вакансию, статус: принят / не принят, источник подбора, номер вакансии).
Всего уникальных связок 43000.
➕ большинство данных - структурированных (не нужно парсить / классифицировать)
Вызовы
- Сложно дать относительный / отнормированный score от 0 до 100%
- решать как классификацию или как ранжирование?
- Как всегда imbalanced данные
Решение
❗Стандартный CV-Resume Matching от SAP не подошел (русский язык, нестандартные поля приводили к нулевому качеству). Плюс, он делал matching 2 текстовых документов.
- supervised задачка
feature generation - ключ к решению
- Строковое расстояние м\у адресом проживания кандидата и адресом из вакансии
- Внутренний кандидат или нет: 0 – внешний, 1 – внутренний
- Значение схожести м\у текущей позицией кандидата и должностью из вакансии
- Строковое расстояние м\у предыдущими позициями кандидата в Сбербанке (если внутренний) и должностью из вакансии
- Строковое расстояние м\у предыдущими позициями кандидата (вне) и должностью из вакансии
- Наличие наград у кандидата: 0 – нет, 1 – есть
- Уровень образования кандидата: среднее, высшее, PhD, …
- Строковое расстояние м\у отделением в пред. опыте кандидата в Сбербанке (если внутренний) и отделом из вакансии
- Строковое расстояние м\у отделением в пред. опыте кандидата (вне) и отделом из вакансии
- Подсчет количество общих слов между полем «Область бизнеса» в пред. опыте кандидата и полем «Доп. требования» из вакансии
- Наличие опыта руководства у кандидата: 0 – нет, 1 – есть
- Подсчет количество общих слов между полем «Область руководства» в пред. опыте кандидата и полем «Доп. требования» из вакансии
- Наличие функционального опыта у кандидата: 0 – нет, 1 – есть
- Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Доп. требования» из вакансии
- Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Функциональный блок» из вакансии
- Подсчет количество общих слов между полем «Язык» кандидата и полем «Доп. требования» из вакансии
- Количество иностранных язык, которыми владеет кандидат
- Является ли вакансия конфиденциальной: 0 – нет, 1 – да
- Причина возникновения вакансии: расширение численности, стажировка, …
- Разряд по должности вакансии
Архитектура решения
Результат
Метрики
- Accuracy (a-ka hit rate): 82% - очень плохая метрика для текущей задачи (баланс классов, задача ранжирования)
- Recall (полнота): 83% - показывает с какой вероятностью мы не пропустим релевантного кандидата, т.е. score будет высоким
Важные признаки
- Соответствие между позицией в вакансии и позицией в резюме кандидата
- Соответствие между позицией в вакансии и позицией предыдущего внешнего места работы кандидата (вне Сбербанка)
- Разряд по должности
- Соответствие между функциональной сферой позиции в вакансии и образованием кандидата
- Соответствие между городом вакансии и городом кандидата
- Конфиденциальная ли вакансия
- Соответствие между функциональной областью позиции в вакансии и образованием кандидата
- Соответствие между подразделением позиции в вакансии и отделом предыдущего внешнего места работы кандидата (вне Сбербанка)
- Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внешнего места работы (вне Сбербанка)
- Источник резюме - доска объявления
- Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внутреннего места работы (внутри Сбербанка)
- Соответствие между подразделением позиции в вакансии и отделом предыдущего внутреннего места работы кандидата (внутри Сбербанка)
- Соответствие между позицией в вакансии и позицией предыдущего внутреннего места работы кандидата (внутри Сбербанка)
Ещё аналитика
Что дальше
- сейчас SAP SF убрали
- сейчас благодарю LLM есть новый виток развития подобных HR продуктов
Я создал канал, где описываю, как мы делаем такие проекты
@r77_ai приходите, там мы пишем много о реальных кейсах внедрения AI в промышленность и корпорации)