Описание
- Рассматривали процесс массового подбора персонала (= сотни однотипных позиций).
- Огромный поток информации → более 100 откликов (иногда 500) на одну вакансию.
- У рекрутера нет времени просмотреть 500 резюме, берет 3-4 рандомно из них выбирает кандидата.
- Отличия от точечного еще и в критериях отбора:
— Жесткие критерии на пол / возраст / количество лет опыта.
- Не использовались онлайн тесты, только информация по откликам.
Идея
Давайте сделаем систему скоринга кандидатов для каждой вакансии и покажем рекрутеру наиболее подходящих кандидатов.
Дополнительно хотим попробовать:
- Прогнозировать lifetime сотрудника в компании (>1 года или меньше).
- Прогнозировать до какой позиции вырастет кандидат (а-ка карьерное развитие / трек).
- Прогнозировать вероятность того, что кандидат примет оффер.
Данные
3 сущности (таблички) в SAP SF:
Всего уникальных связок 43 000.
- Вакансия: позиция, требования, адрес, отдел, сфера, …
- Кандидат (резюме): опыт, адрес, образование, …
- Заявка (связь = отклик кандидата на вакансию, статус: принят / не принят, источник подбора, номер вакансии)
Всего уникальных связок 43 000.
➕ Большинство данных — структурированных (не нужно парсить / классифицировать)
Вызовы
- Сложно дать относительный / отнормированный score от 0 до 100%.
- Решать как классификацию или как ранжирование?
- Как всегда imbalanced данные.
Решение
❗ Стандартный CV-Resume Matching от SAP не подошел (русский язык, нестандартные поля приводили к нулевому качеству). Плюс, он делал matching 2 текстовых документов.
- Supervised задачка
- Feature generation — ключ к решению
— Строковое расстояние м\у адресом проживания кандидата и адресом из вакансии.
— Внутренний кандидат или нет: 0 – внешний, 1 – внутренний.
— Значение схожести м\у текущей позицией кандидата и должностью из вакансии.
— Строковое расстояние м\у предыдущими позициями кандидата в Сбербанке (если внутренний) и должностью из вакансии.
— Строковое расстояние м\у предыдущими позициями кандидата (вне) и должностью из вакансии.
— Наличие наград у кандидата: 0 – нет, 1 – есть.
— Уровень образования кандидата: среднее, высшее, PhD, …
— Строковое расстояние м\у отделением в пред. опыте кандидата в Сбербанке (если внутренний) и отделом из вакансии.
— Строковое расстояние м\у отделением в пред. опыте кандидата (вне) и отделом из вакансии.
— Подсчет количество общих слов между полем «Область бизнеса» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Наличие опыта руководства у кандидата: 0 – нет, 1 – есть.
— Подсчет количество общих слов между полем «Область руководства» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Наличие функционального опыта у кандидата: 0 – нет, 1 – есть.
— Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Функциональный блок» из вакансии.
— Подсчет количество общих слов между полем «Язык» кандидата и полем «Доп. требования» из вакансии.
— Количество иностранных язык, которыми владеет кандидат.
— Является ли вакансия конфиденциальной: 0 – нет, 1 – да.
— Причина возникновения вакансии: расширение численности, стажировка, …
— Разряд по должности вакансии.
— Внутренний кандидат или нет: 0 – внешний, 1 – внутренний.
— Значение схожести м\у текущей позицией кандидата и должностью из вакансии.
— Строковое расстояние м\у предыдущими позициями кандидата в Сбербанке (если внутренний) и должностью из вакансии.
— Строковое расстояние м\у предыдущими позициями кандидата (вне) и должностью из вакансии.
— Наличие наград у кандидата: 0 – нет, 1 – есть.
— Уровень образования кандидата: среднее, высшее, PhD, …
— Строковое расстояние м\у отделением в пред. опыте кандидата в Сбербанке (если внутренний) и отделом из вакансии.
— Строковое расстояние м\у отделением в пред. опыте кандидата (вне) и отделом из вакансии.
— Подсчет количество общих слов между полем «Область бизнеса» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Наличие опыта руководства у кандидата: 0 – нет, 1 – есть.
— Подсчет количество общих слов между полем «Область руководства» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Наличие функционального опыта у кандидата: 0 – нет, 1 – есть.
— Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Доп. требования» из вакансии.
— Подсчет количество общих слов между полем «Функциональный опыт» в пред. опыте кандидата и полем «Функциональный блок» из вакансии.
— Подсчет количество общих слов между полем «Язык» кандидата и полем «Доп. требования» из вакансии.
— Количество иностранных язык, которыми владеет кандидат.
— Является ли вакансия конфиденциальной: 0 – нет, 1 – да.
— Причина возникновения вакансии: расширение численности, стажировка, …
— Разряд по должности вакансии.
Архитектура решения:
Результат
- Метрики
— Accuracy (a-ka hit rate): 82% — очень плохая метрика для текущей задачи (баланс классов, задача ранжирования).
— Recall (полнота): 83% — показывает с какой вероятностью мы не пропустим релевантного кандидата, т.е. score будет высоким.
— Recall (полнота): 83% — показывает с какой вероятностью мы не пропустим релевантного кандидата, т.е. score будет высоким.
- Важные признаки
— Соответствие между позицией в вакансии и позицией в резюме кандидата.
— Соответствие между позицией в вакансии и позицией предыдущего внешнего места работы кандидата (вне Сбербанка).
— Разряд по должности.
— Соответствие между функциональной сферой позиции в вакансии и образованием кандидата.
— Соответствие между городом вакансии и городом кандидата.
— Конфиденциальная ли вакансия.
— Соответствие между функциональной областью позиции в вакансии и образованием кандидата.
— Соответствие между подразделением позиции в вакансии и отделом предыдущего внешнего места работы кандидата (вне Сбербанка).
— Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внешнего места работы (вне Сбербанка).
— Источник резюме — доска объявления.
— Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внутреннего места работы (внутри Сбербанка).
— Соответствие между подразделением позиции в вакансии и отделом предыдущего внутреннего места работы кандидата (внутри Сбербанка).
— Соответствие между позицией в вакансии и позицией предыдущего внутреннего места работы кандидата (внутри Сбербанка).
— Соответствие между позицией в вакансии и позицией предыдущего внешнего места работы кандидата (вне Сбербанка).
— Разряд по должности.
— Соответствие между функциональной сферой позиции в вакансии и образованием кандидата.
— Соответствие между городом вакансии и городом кандидата.
— Конфиденциальная ли вакансия.
— Соответствие между функциональной областью позиции в вакансии и образованием кандидата.
— Соответствие между подразделением позиции в вакансии и отделом предыдущего внешнего места работы кандидата (вне Сбербанка).
— Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внешнего места работы (вне Сбербанка).
— Источник резюме — доска объявления.
— Соответствие между дополнительными требованиями вакансии и функциональной областью позиции кандидата с предыдущего внутреннего места работы (внутри Сбербанка).
— Соответствие между подразделением позиции в вакансии и отделом предыдущего внутреннего места работы кандидата (внутри Сбербанка).
— Соответствие между позицией в вакансии и позицией предыдущего внутреннего места работы кандидата (внутри Сбербанка).
- Аналитика
Модели для некоторых функциональных сфер:
Demo
Что дальше
- сейчас SAP SF убрали.
- сейчас благодарю LLM есть новый виток развития подобных HR продуктов.