Итак, вы, наконец, победили лень и решили записаться на урок культа / разума, возможно, ваш самый первый, но вы видите, что класс переполнен. Какой облом, правда? Что ж, на самом деле в итоге класс не заполнен. Как спросите вы? Потому что жизнь случается… и некоторые участники не могут попасть на занятия. Иногда отмена запланирована, но чаще всего это из-за икоты в последнюю минуту.
Проще говоря, даже если ваше приложение предполагало, что класс заполнен, на самом деле, когда приходит время, некоторые участники не появляются, и в классе все еще есть место для размещения других.
Это вызывает 2 проблемы
- Это влияет на ваш опыт, потому что вы не пришли на тренировку в предпочтительное время.
- Это влияет на нашу выручку - мы не можем оптимизировать имеющееся у нас пространство
Несмотря на то, что мы представили такие функции, как список ожидания и совсем недавно прекратили обучение, чтобы лучше справиться с этой ситуацией, есть еще одно решение, которое работает за кулисами и помогает предсказать возможную численность класса. Это то, что вы физически не можете рассматривать как функцию, но определенно можете ощутить преимущества.
Давайте упростим некоторые термины, которые мы можем использовать в оставшейся части статьи, чтобы вы могли полностью понять проблему и решение. (можете пропустить следующую часть, если знаете, как работает культ)
Терминология - давайте сделаем это проще
Каждый класс культа / разума обладает определенной способностью, т. Е. максимальное количество участников, которое он может разместить без ущерба для обслуживания клиентов. Класс проводится для определенного формата тренировки (танцевальный фитнес, йога, HRX и т. Д.). Участник выражает намерение тренироваться, бронируя занятие. Позже участник может отменить бронирование, если он больше не хочет посещать занятия. Эта отмена должна произойти до закрытия Окна отмены (не позднее, чем за 1 час до начала занятия). Если участник не приходит на записанный курс, он получает неявку. Если класс по какой-либо причине посещает больше участников, чем его вместимость, это называется переполнено.
Постановка проблемы
Проблема была ясна -
Мы не могли успешно оптимизировать использование пропускной способности класса, потому что мы никогда не могли сказать, сколько человек в конечном итоге пропустят урок.
Единственный способ решить эту проблему - иметь возможность точно предсказать, приведет ли каждое бронирование к явке, отмене или незаезду.
Как и в любой системе прогнозирования, стопроцентная точность практически невозможна. В то время даже пользователь, бронирующий курс, не знал бы о предстоящих неизбежных обстоятельствах. Следовательно, лучшей целью было бы максимизировать точность с некоторым допуском ошибки в прогнозировании.
Наша терпимость к ошибкам в предсказании также неодинакова в обоих направлениях. Недооценка отмен и незаездов приведет к недоиспользованию класса. то есть не появляется больше участников, чем мы ожидали. Это означает, что больше участников не посещают занятия, они остаются недовольными, а места остаются неиспользованными.
С другой стороны, переоценка отмен приведет к переполнению класса. То есть мы ожидали, что больше людей пропустят занятия, но только некоторые из них пропустили, в результате класс становится переполненным. Это тоже оставит участников недовольными.
Из обоих зол переполненность - гораздо менее предпочтительное. Следовательно, мы предпочитаем ошибаться в сторону недооценки отмен / непоявлений, чем переоценивать.
Все это приводит нас к следующей постановке задачи.
Максимальное использование классов за счет прогнозирования отмены участников / неявки с ограничением процента ошибок небольшим числом
Некоторым из вас эта проблема может показаться знакомой. Что ж, авиакомпании сталкиваются с очень похожей проблемой, пытаясь оптимально использовать свои изменчивые запасы. Неустойчивый, потому что после взлета каждое свободное место - это просто потеря дохода. Существует множество исследований по решению этой проблемы. Однако мы не смогли адаптировать эти подходы к нашей проблеме из-за некоторых ключевых различий.
- Авиакомпании часто штрафуют за каждую отмену, они уравновешивают эту стоимость со стоимостью организации альтернативных рейсов или повышения класса обслуживания до другого класса / уровня в том маловероятном случае, если появится дополнительный клиент. Однако мы не взимаем с клиента плату за отмену класса и не имеем нескольких уровней бронирования (бизнес / первый класс).
- Для cult / mind.fit частота бронирований намного выше. Человек может бронировать одну авиакомпанию в месяц. В то время как постоянный участник cult / mind.fit делает не менее 10 бронирований в месяц. У нас есть намного больше данных для моделирования поведения пользователей.
Эти и еще несколько причин привели нас к решению создать собственное индивидуальное решение.
Подход к решению
Прогнозирование отмены / неявки отдельного участника очень чревато ошибками. Статистика говорит нам, что попытка предсказать совокупный процент отмен / неявок по группе участников более точна.
Мы решили пойти по этому пути - прогнозировать процент отмены и неявки для группы участников.
Для этого нам нужно было идентифицировать набор сигналов, атрибутов или функций (как они называются в области машинного обучения). Затем нам нужно было выбрать алгоритм, который использует эти функции для прогнозирования отмен / неявки.
Решение 1. Эвристическое решение
Один из первых реализованных нами подходов был основан на простой эвристике.
Возможности
Были использованы четыре функции класса
- Центр
- Тренировка
- Начальное время
- День недели
Алгоритм
Для каждого класса мы нашли в прошлом классы, которые имели точно такие же значения характеристик, то есть классы из одного центра, классы с одинаковой тренировкой, одинаковое время начала и один и тот же день недели. Затем мы прогнозируем% отмены по следующей формуле
Здесь коэффициент новизны определяет относительный вес класса в прогнозировании. Чем ближе по времени этот класс к тому, что мы пытаемся предсказать, тем больше его вес.
Этот подход проиллюстрирован на следующем рисунке.
Ограничения
- Из-за частого изменения расписания не было никаких гарантий, что подобный класс обязательно существовал в последние недели.
- Этот подход был слишком жестким для определения подобного класса. Учитывался только класс в прошлом, у которого был тот же центр, тренировка, время и день недели. Хотя эти классы действительно отражали доминирующую тенденцию, игнорирование всех других классов, которые имели одни особенности, но отличались другими, привело к огромной потере информации.
- Функции, которые мы использовали, также были довольно ограничены. Никакие особенности пользователей или контекст бронирования не учитывались.
- Точность этого алгоритма также была невысокой.
Из-за этих ограничений мы перешли к более научному подходу.
Решение 2. Решение для машинного обучения
В отличие от эвристического алгоритма, мы добавили в алгоритм прогнозирования обширный список функций. Используемые функции и причины использования некоторых из них описаны ниже.
Возможности
- Центр, тренировка, время начала и день недели: это были самые сильные сигналы. Например, вечерние пятничные классы обычно имеют очень высокий процент отмен / неявок. Также у очень популярных тренировок, таких как Dance Fitness, было гораздо меньше случаев отмены / неявки.
- % аннулирования и неявки участника: предыдущее аннулирование и неявка участника также были еще одним важным сигналом для прогнозирования этого для будущего класса.
- Привязанность участников к классу. Интересная особенность, которую мы обнаружили во время работы над рекомендациями классов для участников (другой проект), заключается в том, что чем больше привязанность участника к классу, тем меньше вероятность того, что они отменит / неявка
- Время, когда занятие было забронировано. Чем раньше участник записался на занятие, тем больше вероятность его отмены / незаезда. Это интуитивно понятно, поскольку чем ближе вы бронируете время к началу занятий, тем меньше вероятность каких-либо конфликтов в личном расписании.
Кроме того, мы также рассмотрели другие функции, такие как
- Is Trial Booking (True / False) - проверьте, было ли выполнено бронирование для пробного класса
- Количество бронирований пользователей - сколько занятий они забронировали и посетили до этого.
Алгоритм
Чтобы определиться с алгоритмом, мы рассмотрели следующие аспекты
- Алгоритм машинного обучения должен был быть алгоритмом регрессии, поскольку% отмены и неявки были действительными числами.
- Отмены и% неявки были очень тесно связаны друг с другом - отсутствие окна отмены приводит к неявке. Прогноз отмены и% неявки должен согласовываться друг с другом. Следовательно, нам понадобился алгоритм многомерного прогнозирования по двум независимым моделям.
- Мы хотели выбрать алгоритм, точность которого возрастает по мере увеличения масштаба данных.
Построив и оценив результаты нескольких алгоритмов, мы, наконец, сошлись на нейронных сетях.
Немного деталей реализации
- Категориальные переменные, такие как Center и Workout, были закодированы в горячем режиме.
- Невозможно было включить атрибуты, специфичные для участников, напрямую, потому что количество невыполненных бронирований для класса постоянно менялось. Следовательно, поведение пользователя было зафиксировано с помощью агрегатов.
- Архитектура сети, включая количество нейронов, слоев и структуру, была настроена с использованием набора для проверки.
Дальнейшая работа
- Как обсуждалось выше, у нас нет такого же уровня терпимости к недооценке и переоценке отмены и незаезда. Кроме того, у нас есть разные уровни толерантности к риску для разных классов из-за нюансов пространств и тренировок. С этим можно справиться либо путем разработки асимметричной функции потерь, либо путем создания ограждений вокруг прогнозирования этой сети.
- Центры и тренировки закодированы одним горячим способом. Это привело к линейному росту входных данных в зависимости от количества центров и тренировок. Возможное направление - заменить их вектором меньшей размерности, который фиксирует ключевые аспекты центров / тренировок.
Результаты
Этот проект значительно повысил доступность занятий для участников. Это позволяет нескольким тысячам дополнительных участников тренироваться каждый день в ближайшем к ним центре cult.fit/mind.fit.
Автор Сатвик Гокина
Отредактировал Эша Савла