В марте команда наших разработчиков с гордым названием «Руки-Ауки» двое суток неусыпно сражалась на цифровых полях хакатона AI.HACK. Всего было предложено пять задач от разных компаний. Мы сосредоточились на задаче «Газпромнефти»: прогнозирование спроса на топливо со стороны В2В-клиентов. Нужно было по обезличенным данным — регион приобретения топлива, номер заправки, вид топлива, цена, дата и ID-клиента — научиться прогнозировать, сколько в будущем купит тот или иной клиент. Забегая вперёд — наша команда решила эту задачу с наивысшей точностью. Клиенты были разбиты на три сегмента: крупные, средние и мелкие. И помимо основной задачи мы также построили прогноз суммарного потребления по каждому из сегментов.
Выгрузка содержала данные о покупках клиентов за период с ноября 2016 по 15 марта 2018 года (за период с 1 января 2018 по 15 марта 2018 данные НЕ включали объемы).
Пример данных:
Названия колонок говорят за себя, думаю, пояснять нет смысла.
Кроме обучающей выборки организаторы предоставили и тестовую выборку за три месяца этого года. Цены указаны для корпоративных клиентов с учётом конкретных скидок, которые зависят от объёмов потребления того или иного клиента, от спецпредложений и прочих моментов.
Получив исходные данные, мы, как и все, начали пробовать классические методы машинного обучения, пытаясь построить подходящую модель, нащупать корреляцию каких-то признаков. Старались извлечь дополнительные признаки, строили регрессионные модели (XGBoost, CatBoost и др.).
Cама постановка задачи изначально подразумевала, что на спрос каким-то образом влияет цена на топливо, и нужно точнее понять эту зависимость. Но когда мы начали анализировать предоставленные данные, то увидели, что спрос никак не коррелирует с ценой.
Корреляция признаков:
Получалось, что количество литров практически никак не зависит от цены. Это объяснялось вполне логично. Водитель едет по трассе, ему нужно заправиться. У него выбор: либо он заправится на заправке, с которой сотрудничает компания, либо на какой-то другой. Но водителю всё равно, сколько стоит топливо – его оплачивает организация. Поэтому он просто сворачивает на ближайшую заправку и наполняет бак.
Однако несмотря на все усилия и перепробованные модели, никак не удавалось достичь минимально допустимой точности прогнозирования (baseline), которая вычислялась по этой формуле (Symmetric mean absolute percentage error):
К сожалению, не доступен сервер mySQL