Итак, вы, наконец, победили лень и решили записаться на урок культа / разума, возможно, ваш самый первый, но вы видите, что класс переполнен. Какой облом, правда? Что ж, на самом деле в итоге класс не заполнен. Как спросите вы? Потому что жизнь случается… и некоторые участники не могут попасть на занятия. Иногда отмена запланирована, но чаще всего это из-за икоты в последнюю минуту.

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

Это вызывает 2 проблемы

  1. Это влияет на ваш опыт, потому что вы не пришли на тренировку в предпочтительное время.
  2. Это влияет на нашу выручку - мы не можем оптимизировать имеющееся у нас пространство

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

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

Терминология - давайте сделаем это проще

Каждый класс культа / разума обладает определенной способностью, т. Е. максимальное количество участников, которое он может разместить без ущерба для обслуживания клиентов. Класс проводится для определенного формата тренировки (танцевальный фитнес, йога, HRX и т. Д.). Участник выражает намерение тренироваться, бронируя занятие. Позже участник может отменить бронирование, если он больше не хочет посещать занятия. Эта отмена должна произойти до закрытия Окна отмены (не позднее, чем за 1 час до начала занятия). Если участник не приходит на записанный курс, он получает неявку. Если класс по какой-либо причине посещает больше участников, чем его вместимость, это называется переполнено.

Постановка проблемы

Проблема была ясна -

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

Единственный способ решить эту проблему - иметь возможность точно предсказать, приведет ли каждое бронирование к явке, отмене или незаезду.

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

Наша терпимость к ошибкам в предсказании также неодинакова в обоих направлениях. Недооценка отмен и незаездов приведет к недоиспользованию класса. то есть не появляется больше участников, чем мы ожидали. Это означает, что больше участников не посещают занятия, они остаются недовольными, а места остаются неиспользованными.

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

Из обоих зол переполненность - гораздо менее предпочтительное. Следовательно, мы предпочитаем ошибаться в сторону недооценки отмен / непоявлений, чем переоценивать.

Все это приводит нас к следующей постановке задачи.

Максимальное использование классов за счет прогнозирования отмены участников / неявки с ограничением процента ошибок небольшим числом

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

  • Авиакомпании часто штрафуют за каждую отмену, они уравновешивают эту стоимость со стоимостью организации альтернативных рейсов или повышения класса обслуживания до другого класса / уровня в том маловероятном случае, если появится дополнительный клиент. Однако мы не взимаем с клиента плату за отмену класса и не имеем нескольких уровней бронирования (бизнес / первый класс).
  • Для cult / mind.fit частота бронирований намного выше. Человек может бронировать одну авиакомпанию в месяц. В то время как постоянный участник cult / mind.fit делает не менее 10 бронирований в месяц. У нас есть намного больше данных для моделирования поведения пользователей.

Эти и еще несколько причин привели нас к решению создать собственное индивидуальное решение.

Подход к решению

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

Мы решили пойти по этому пути - прогнозировать процент отмены и неявки для группы участников.

Для этого нам нужно было идентифицировать набор сигналов, атрибутов или функций (как они называются в области машинного обучения). Затем нам нужно было выбрать алгоритм, который использует эти функции для прогнозирования отмен / неявки.

Решение 1. Эвристическое решение

Один из первых реализованных нами подходов был основан на простой эвристике.

Возможности

Были использованы четыре функции класса

  • Центр
  • Тренировка
  • Начальное время
  • День недели

Алгоритм

Для каждого класса мы нашли в прошлом классы, которые имели точно такие же значения характеристик, то есть классы из одного центра, классы с одинаковой тренировкой, одинаковое время начала и один и тот же день недели. Затем мы прогнозируем% отмены по следующей формуле

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

Этот подход проиллюстрирован на следующем рисунке.

Ограничения

  1. Из-за частого изменения расписания не было никаких гарантий, что подобный класс обязательно существовал в последние недели.
  2. Этот подход был слишком жестким для определения подобного класса. Учитывался только класс в прошлом, у которого был тот же центр, тренировка, время и день недели. Хотя эти классы действительно отражали доминирующую тенденцию, игнорирование всех других классов, которые имели одни особенности, но отличались другими, привело к огромной потере информации.
  3. Функции, которые мы использовали, также были довольно ограничены. Никакие особенности пользователей или контекст бронирования не учитывались.
  4. Точность этого алгоритма также была невысокой.

Из-за этих ограничений мы перешли к более научному подходу.

Решение 2. Решение для машинного обучения

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

Возможности

  • Центр, тренировка, время начала и день недели: это были самые сильные сигналы. Например, вечерние пятничные классы обычно имеют очень высокий процент отмен / неявок. Также у очень популярных тренировок, таких как Dance Fitness, было гораздо меньше случаев отмены / неявки.
  • % аннулирования и неявки участника: предыдущее аннулирование и неявка участника также были еще одним важным сигналом для прогнозирования этого для будущего класса.
  • Привязанность участников к классу. Интересная особенность, которую мы обнаружили во время работы над рекомендациями классов для участников (другой проект), заключается в том, что чем больше привязанность участника к классу, тем меньше вероятность того, что они отменит / неявка
  • Время, когда занятие было забронировано. Чем раньше участник записался на занятие, тем больше вероятность его отмены / незаезда. Это интуитивно понятно, поскольку чем ближе вы бронируете время к началу занятий, тем меньше вероятность каких-либо конфликтов в личном расписании.

Кроме того, мы также рассмотрели другие функции, такие как

  • Is Trial Booking (True / False) - проверьте, было ли выполнено бронирование для пробного класса
  • Количество бронирований пользователей - сколько занятий они забронировали и посетили до этого.

Алгоритм

Чтобы определиться с алгоритмом, мы рассмотрели следующие аспекты

  1. Алгоритм машинного обучения должен был быть алгоритмом регрессии, поскольку% отмены и неявки были действительными числами.
  2. Отмены и% неявки были очень тесно связаны друг с другом - отсутствие окна отмены приводит к неявке. Прогноз отмены и% неявки должен согласовываться друг с другом. Следовательно, нам понадобился алгоритм многомерного прогнозирования по двум независимым моделям.
  3. Мы хотели выбрать алгоритм, точность которого возрастает по мере увеличения масштаба данных.

Построив и оценив результаты нескольких алгоритмов, мы, наконец, сошлись на нейронных сетях.

Немного деталей реализации

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

Дальнейшая работа

  • Как обсуждалось выше, у нас нет такого же уровня терпимости к недооценке и переоценке отмены и незаезда. Кроме того, у нас есть разные уровни толерантности к риску для разных классов из-за нюансов пространств и тренировок. С этим можно справиться либо путем разработки асимметричной функции потерь, либо путем создания ограждений вокруг прогнозирования этой сети.
  • Центры и тренировки закодированы одним горячим способом. Это привело к линейному росту входных данных в зависимости от количества центров и тренировок. Возможное направление - заменить их вектором меньшей размерности, который фиксирует ключевые аспекты центров / тренировок.

Результаты

Этот проект значительно повысил доступность занятий для участников. Это позволяет нескольким тысячам дополнительных участников тренироваться каждый день в ближайшем к ним центре cult.fit/mind.fit.

Автор Сатвик Гокина

Отредактировал Эша Савла