Я работаю аналитиком в команде подбора преподавателей. Мы следим за воронкой подбора с того момента, как ученик оплатил занятия и до подбора преподавателя и проведения с ним урока. Также мы занимаемся и переподборами — кейсами, когда ученик, позанимавшись с преподавателем, решает его заменить. Наши основные метрики — это среднее время подбора, доля автоматизации подбора (т.е. доля подборов, в которых не пришлось привлекать оператора), а также метрики, которые характеризуют качество подбора, например, доля учеников, которые решили заменить преподавателя в течение первых нескольких уроков.

Поэтому основная задача, которая стоит перед отделом подбора — это сделать так, чтобы ученик выбрал себе наиболее подходящего преподавателя. Это напрямую влияет на наши основные метрики. Ведь, если ученик выбрал преподавателя, который ему не подходит, то он быстро поменяет его или вообще разочаруется и перестанет заниматься у нас, либо преподаватель сам откажется от ученика.  

Как подбор выглядит для ученика? После оплаты занятий или запроса на переподбор, ученик попадает на страницу со списком преподавателей, где он может выбрать желаемое количество занятий в неделю и познакомиться с доступными учителями.

Поскольку пользователи с большей вероятностью выбирают тех, кто ближе к началу списка, перед нами встает задача правильного ранжирования преподавателей с учетом особенностей ученика, преподавателя и предмета. 

Старый подход

Изначально мы рассчитывали для каждого преподавателя рейтинг, учитывавший с некоторыми весами характеристики преподавателя, которые мы считаем важными. Например, это возраст преподавателя и ученика, размер купленного пакета, различные метрики, по которым мы оцениваем качество преподавания и т.д. Этот рейтинг обновлялся каждый день и использовался для ранжирования списка преподавателей. Мы могли как-то изменять эти веса и смотреть, как это влияет на метрики подбора в A/B тестах, и, таким образом, постепенно улучшать модель. 

Но у такого подхода есть несколько недостатков:

  • Рейтинг не учитывает индивидуальные характеристики учеников. Мы делили учеников на несколько больших групп по ряду параметров, но все же большинство индивидуальных параметров типа географии или уровня языка никак не учитывались.

  • Рейтинг не универсален для разных предметов. Рейтинг преподавателей английского плохо подходил для преподавателей математики и с добавлением новых предметов требовалось разрабатывать новый рейтинг с учетом особенностей каждого продукта. С появлением большого количества новых продуктов в школе такой подход становился очень неудобным и ресурсозатратным.

Новый подход

Поскольку нам важно, чтобы ученик не бросил заниматься после нескольких уроков, мы можем попытаться предсказать количество уроков, которое он проведет с конкретным преподавателем (далее lifetime) с помощью машинного обучения, основываясь на массиве исторических данных, который у нас накопился за несколько лет. И использовать предсказанное значение для ранжирования.

Параметров, которые влияют на lifetime довольно много. Для примера посмотрим, как он коррелирует с опытом преподавателя для разных продуктовых линеек.

Для взрослого английского опыт не сильно коррелирует с lifetime. Для остальных преподаватели с большим опытом в среднем удерживают учеников дольше.


Для английского языка также интересно посмотреть, как lifetime коррелирует с уровнем английского преподавателя и ученика. 

Здесь уровень ученика измеряется по 10 бальной шкале, а уровень преподавателя по общепринятой европейской системе. Мы видим, что для учеников со слабым уровнем английского предпочтительны преподаватели с уровнем B1, B2. Однако, с увеличением уровня ученика увеличивается и предпочтительный уровень преподавателя. 

Давайте посмотрим, как выглядит feature importance для самой базовой модели, в которой мы собрали только основные параметры: опыт преподавателя, география, уровень языка, желаемое количество занятий в неделю, размер купленного пакета и т.д. 

Такая модель дает некоторое представление о параметрах, которые влияют на lifetime ученика, но все же имеет довольно слабую предсказательную силу. Чтобы ее улучшить, пришлось подключать дополнительную информацию, которую мы знаем о преподавателях, например: рабочий стаж, средний lifetime его учеников, среднее количество занятий в месяц, метрики качества преподавания и т.д.

Больше деталей о работе модели и будущих улучшениях сможете прочитать в моем телеграм-блоге Хороший, плохой, злой аналитик.

Развертывание

При поиске решения для реализации модели в продакшене мы исходили из следующих предпосылок:

  1. Поскольку расчеты должны делаться в реальном времени, система должна быть довольно быстрой и надежной.

  2. Модель должна быть изолирована от остального сервиса подбора для того, чтобы можно было быстро вносить изменения и тестировать новые версии модели, не привлекая команду разработки.

  3. Не должно быть больших затрат на инфраструктуру.

Изначально я рассматривал отдельный сервер с моделью, к которому сервис подбора обращался бы по API, либо Amazon SageMaker (облачный сервис для развертывания ML моделей), который мы иногда используем для ML-задач. Однако, поскольку наша модель довольно простая и не требует больших вычислительных мощностей, мы пришли к использованию инфраструктуры Skyeng для контейнеризированных приложений. У нас был готовый скелетон для приложения на Python + Django. На нем и было реализовано API для нашей модели.

Тестирование

С помощью нашей платформы для A/B тестирования мы разбиваем учеников, которым требуется подбор преподавателя на тестовую и контрольную группы и собираем данные о работе новой версии модели. Основные метрики, на которые мы смотрим –это количество уроков, которое провел ученик в каком-то фиксированном окне, и доля тех учеников, которые переподборали преподавателя в течение первых нескольких уроков. Также мы хотим не уронить конверсию в выбор преподавателя и не увеличить время подбора.

Итог

Новый подход позволяет учитывать индивидуальные фичи ученика и преподавателя, а также без особого труда учитывать новые продукты. А благодаря изолированной реализации модели мы сможем быстро изменять и тестировать новые версии модели, практически не привлекая ресурс разработчиков.

Комментарии (6)


  1. mostodont32
    08.04.2022 19:24
    +1

    Что-то мне кажется, что для такого небольшого набора фичей можно было бы и без ML обойтись:)

    По теме выбора фичей: если у вас есть знания о таких вещах, неплохо было бы докинуть еще пол, возраст ученика и пол, возраст учителя.


    1. VitalyManoshin Автор
      08.04.2022 21:41
      +1

      Пол и возраст мы можем использовать, только если преподаватель/ученик дал согласие на использование этих данных. Но вы правы, эти фичи довольно сильно влияют на целевую метрику.


  1. sunnybear
    08.04.2022 20:21

    Разумным видится добавить в атрибуты вопросы тестирования студентов, чтобы их психологический профиль получить, и на его основе делать матчинг. Иначе только на базе множественной смены преподавателей удастся улучшать модель для конкретного студента (а от этого хочется уйти, правда?)


    1. VitalyManoshin Автор
      08.04.2022 21:46
      +1

      Мы используем данные, которые у нас есть после тестирования на вводном уроке. Но это в основном касается уровня языка или знания предмета. По психологическому профилю данных у нас пока нет, к сожалению, но идея интересная :)


  1. fireSparrow
    09.04.2022 13:14

    ML — это, конечно, хорошо. Но про UX тоже не стоит забывать.

    Я на фоне событий-которые-нельзя-называть, решил подтянуть английский с помощью Skyeng. И записаться было каким-то адом. Как посмотреть и вдумчиво сравнить цены — непонятно. Надо оставлять свой номер и ждать обратного звонка. Вообще, интерфейс очень сумбурный и недружелюбный. Потом позвонил мне менеджер, быстро вывалил на меня кучу информации и отправил мне ссылку на оплату. Куда при оплате вводить промокод — найти очень трудно. Написано, что «в личном кабинете», но оказывается это полюшко всё-таки надёжно спрятано в форме на оплату.
    После оплаты вообще непонятно что делать. Начал подбирать график занятий — на интересующие меня временные промежутки учителей нет совсем, хотя указал их очень широкие.
    На следующий день позвонил робот, и заново спросил меня в какое время я хочу заниматься. Хотя я уже указал всю эту информацию на сайте.
    Теперь ещё, насколько я понял, надо ждать пару дней, чтобы понять подберётся ли подходящий преподаватель. Ну или я понял, неправильно. Потому что все эти несколько дней я большую часть времени вообще не понимаю, на какой стадии записи я нахожусь, на чьей стороне мяч, нужно ли мне просто ждать очередного звонка, или нужно самому связаться с менеджером, и что дальше. Если таков сервис для людей, которые оплатили премиум, то я боюсь представить, что происходит с людьми на базовой подписке.
    Почему всё должно решаться через звонки, которые мне могут приходить в не самое удобное для разговора время, и когда у меня нет перед глазами моего рабочего графика, и я не могу сходу сказать, в какие часы мне удобно заниматься? Почему нельзя сделать так, чтобы это всё решалось через удобные веб-интерфейсы?

    А ещё было очень странно, когда менеджер спросил меня, в какой области я работаю, и когда я ответил, что ИТ, он начал уточнять за мой стэк. Эта-то информация вам зачем? Вы меня хантите или всё-таки записываете на курсы английского?


    1. VitalyManoshin Автор
      09.04.2022 18:54
      +1

      спасибо за подборный фидбэк про интерфейс! передам нашим дизайнерам