
С сентября по октябрь 2024 года мне выпала честь организовать VN1 Forecasting Competition — соревнование по прогнозированию, в котором приняли участие около 250 команд и отдельных участников. Целью конкурса было предсказать объём продаж различных онлайн‑продавцов на 13 недель вперёд (всего около 15 000 комбинаций). Данные для работы предоставил один из трёх наших спонсоров — компания Flieber.
Соревнование проходило в два этапа. Первый был разогревочным: участники могли протестировать разные модели, увидеть свои результаты и сравнить их с успехами соперников. Второй этап был решающим — участникам разрешалось подать только один окончательный прогноз, а его точность оставалась неизвестной до самого финала.
По завершении соревнования я собрал мнения и выводы 20 сильнейших участников: мы обсудили их подходы, трудности, с которыми они столкнулись, и найденные решения. А в ноябре я провёл вебинар, на котором пятеро победителей рассказали о своих методах. В этой статье я поделюсь основными уроками, которые вынес из этого соревнования.
Техническое примечание: качество прогнозов оценивалось по метрике оценка качества = средняя абсолютная ошибка в процентах + |смещение в процентах|. Этот показатель я использую для всех своих клиентов, так как он удачно сочетает в себе простоту расчёта и бизнес‑ценность.

Как обойти простые модели
В рамках соревнования я предоставил участникам базовый эталонный алгоритм, рассчитывающий скользящее среднее за 12 недель. Большинство участников сумели его превзойти (во втором этапе эталон показал точность 80,5%, тогда как все 20 лучших команд уложились в 53% и ниже). Однако главный сюрприз заключался в том, что лишь немногим удалось превзойти так называемый наивный прогноз, который показал результат 50,7%.
Наивный метод оказался эффективнее скользящего среднего на втором этапе благодаря сезонности: расчёты на основе скользящего среднего включали в себя данные с продажами конца года (из первого этапа), что привело к завышенным прогнозам. Если бы итоги подводились несколькими неделями позже, наивный метод, вероятно, уже не выглядел бы столь успешным.
Один из участников понял эту особенность, перепробовал разные модели, но в итоге осознанно остановился на наивном прогнозе — и занял 12-е место. Важно отметить, что никто не добился высокого результата, просто подав наивный прогноз: сильнейшие участники тщательно тестировали различные методы, прежде чем сделать окончательный выбор. Определить, что в данной ситуации простейший метод оказывается лучшим, — это не везение, а показатель профессионализма.
Оценить эффективность наивного прогноза было непросто: из 250+ участников лишь один пришёл к выводу, что этот метод даёт точность выше, чем большинство других.
Следует отметить, что случай, когда наивный прогноз превосходит скользящее среднее, крайне редок. Именно поэтому я не советую использовать его в качестве эталонного метода: его слишком легко превзойти.
Ключевой навык: оценка моделей
На основе бесед с ведущими участниками я пришёл к выводу, что их главным преимуществом было умение анализировать, корректировать и выбирать модели. Большинство из них тестировали различные подходы, подбирали признаки и настраивали параметры — никто не добился успеха просто за счёт удачного выбора модели с первого раза.
Ключ к хорошему прогнозированию — быстрая итерация в рамках надёжной тестовой системы. Если модель показывает отличные результаты в ваших условиях, велика вероятность, что она останется эффективной и в будущем.
Выводы от лучших участников
Начнём с ключевых наблюдений, а затем разберём, какие модели использовались в соревновании.
Инструменты. Почти все участники из топ-20 работали с языком программирования Python и его библиотеками для анализа данных и создания прогнозов, никто не использовал Excel, VBA, Matlab или SQL. Большинство работали с библиотекой Pandas, но некоторые предпочли Polars — менее известную, но более быструю альтернативу. Примерно половина участников использовала модели или вспомогательные функции Nixtla. Совет: если вы хотите строить прогнозы на серьёзном уровне, учите Python и забудьте об Excel, VBA, Matlab и SQL.
Выявление выбросов. Только два участника отмечали выбросы в данных. Лично я не использую статистические методы для обнаружения выбросов и не советую своим клиентам делать это. В прошлом году я опубликовал статью и провёл вебинар, где подробно объяснил, почему я не занимаюсь поиском выбросов и что предпочитаю делать вместо этого.
Дефицит и нулевые значения. Три участника помечали товары, испытывающие нехватку на складе или снятые с продажи. К сожалению, в соревновании не учитывались данные по остаткам, поэтому мы не смогли продемонстрировать, насколько это важно. В будущем (в VN2) я постараюсь включить этот аспект. Даже если мои клиенты не предоставляют исторические данные по запасам, я всегда уделяю внимание дефициту и снятию товаров с продажи — простые методы позволяют выявить это и приносят реальную пользу.
Сегментация. Некоторые участники сегментировали товары, чаще всего — по сезонным паттернам.

Сложность кода. Половина участников справилась с задачей, написав менее 300 строк кода. Это доказывает, что если вы хорошо разбираетесь в предмете, можно добиться высокой точности без лишней сложности. Объём кода также зависел от используемых библиотек и от того, включали ли участники дополнительные модули для оптимизации моделей. Конечно, если переносить модель в продакшн, код придётся расширить, чтобы учесть пограничные случаи и повысить надёжность работы. Кроме того, в соревновании участники работали со структурированными данными и не сталкивались с такими факторами, как акции и дефицит товаров.
Время выполнения. Почти все решения генерировали прогнозы менее чем за 10 минут — машинное обучение действительно быстрое. Лишь две команды показали значительно большее время работы. Одна из них — победители — потратила на прогнозирование 4 часа 30 минут из‑за использования ARIMA, одного из самых медленных алгоритмов (о нём подробнее позже). Вторая команда сознательно увеличила время работы, повторяя расчёт 30 раз и усредняя результаты, чтобы повысить точность.
Оптимизация параметров. Большинство моделей машинного обучения требуют тонкой настройки гиперпараметров, однако одни участники использовали значения по умолчанию, тогда как другие тратили до 200 часов на перекрёстную проверку. Удивительно, но во многих случаях работа с параметрами не давала значительного прироста точности — куда важнее оказалось грамотная генерация признаков, чем тонкая настройка модели.
Модели
VN1, как и большинство соревнований по обработке данных, — это не только борьба алгоритмов, но и сообщество: участники активно делились идеями, кодом и подходами. В таких условиях естественным образом формируется набор моделей, которые получают наибольшее распространение. Если кто‑то публиковал рабочий ноутбук с достойным результатом в первый же день, велика вероятность, что многие участники адаптировали его под свои нужды. Учитывая ограниченное время на соревнование, многие стремились использовать уже готовые методы, а не разрабатывать всё с нуля.
Я классифицировал использованные (и неиспользованные) модели по уровням, от D — наименее успешные до A — наилучшие.

D: модели, которых избегали
В этот список я включил модели, которые не использовал ни один из участников, вошедших в топ-20.
Facebook* Prophet (и его нейросетевая версия). В последние годы эта модель была признана неэффективной для прогнозирования спроса в цепочках поставок, тем не менее её до сих пор активно продвигают в интернете и используют в качестве базового ориентира. Однако среди сильнейших участников VN1 Prophet не применялся вовсе, и я бы не рекомендовал его своим клиентам.
XGBoost и CatBoost. Ни один из участников топ-20 не использовал эти модели; когда дело касалось градиентного бустинга, все отдавали предпочтение LGBM. По моему опыту, XGBoost по точности сопоставим с LGBM, но часто работает медленнее (хотя бывают исключения). Что касается CatBoost, он показал себя менее надёжным — по крайней мере, в тех задачах, с которыми я работал.
Экспоненциальное сглаживание Хольта — Уинтерса. В классическом виде эта методика также не нашла применения среди лучших участников. Лично я считаю её полезной: она проста в реализации, хорошо масштабируется и при правильной настройке даёт достойные результаты, — однако на VN1 от неё отказались.
Нейросети. Никто из двадцатки не использовал классические многослойные нейронные сети: они, как правило, работают медленно, требуют тщательной настройки гиперпараметров и не всегда оправдывают вложенные усилия.
C: редкие, но встречающиеся модели
Эти модели использовались крайне редко и в основном как часть ансамблевых решений.
ARIMA. Эту модель применила всего одна команда — и это были победители соревнования. Однако использование ARIMA обернулось крайне долгим временем выполнения: их прогнозирование заняло 4 часа 30 минут, тогда как в большинстве других решений справлялись за 10 минут и менее. Лично я не использую ARIMA и не рекомендую своим клиентам — мне не доводилось видеть, чтобы она превосходила классическое экспоненциальное сглаживание на реальных данных цепочек поставок. Кроме того, ARIMA плохо работает с нулевыми значениями (а они встречаются повсеместно) и не учитывает такие факторы, как дефицит и промоакции. Важно отметить, что даже победители VN1 использовали ARIMA только в составе ансамбля, где её вклад составлял лишь 30%.
AutoTS. Один из участников применил автоматизированный ML‑фреймворк для временных рядов, но его решение не показало выдающихся результатов. Более того, настройка модели заняла колоссальные 180 часов и потребовала значительно больше кода, чем у большинства конкурентов. Я бы не советовал клиентам использовать AutoTS и аналогичные инструменты: они слишком медленные и не всегда обеспечивают высокую точность.
Один участник попробовал использовать сверточную нейронную сеть.
B: модели с доказанной эффективностью
Эти модели показали реальную ценность и были использованы несколькими участниками.
Transformers. Два участника использовали трансформеры для прогнозирования спроса. Насколько мне известно, это был первый случай применения таких моделей в соревнованиях подобного формата. Вероятно, в будущем мы будем видеть трансформеры всё чаще.
Theta. Четыре участника из топа применили модель Theta, которая появилась ещё в начале 2000-х и стала известной после победы на соревновании M3. В рамках VN1 наибольшую популярность получила её версия DynamicTheta от Nixtla, показавшая отличные результаты при минимальном времени вычислений. Однако в более поздних соревнованиях, таких как M5 и Intermarché, модель Theta не добилась успеха, поэтому пока сложно сказать, вернётся ли она в число лидеров или её эффективность была обусловлена особенностями конкретного набора данных.
A: самая частая модель
Лучшей моделью соревнования стала Light Gradient Boosted Machine! Большинство участников из топ-20 использовали LGBM и отметили её высокую точность и быструю работу. Эта модель уже зарекомендовала себя в других крупных соревнованиях по прогнозированию, включая M5 и Intermarché. Если вам нужен надёжный метод прогнозирования, сделайте LGBM основой своих моделей.
Комбинирование моделей
Большинство участников соревнования выбрали стратегию ансамблирования моделей: вместо того чтобы полагаться на один единственный метод, они комбинировали прогнозы, полученные разными алгоритмами. Кроме того, многие использовали несколько экземпляров одного и того же метода: поскольку большинство моделей машинного обучения по своей природе стохастичны, можно усреднять 10 или даже 100 прогнозов, построенных на основе одного и того же алгоритма (многие применяли этот подход с LGBM). Комбинирование моделей — беспроигрышная стратегия более точных прогнозов.
VN1 получился жарким — неожиданные выводы, нестандартные решения и битва с наивным прогнозом. Это соревнование ещё раз показало, что в прогнозировании важны не только алгоритмы, но и умение видеть картину шире, задавать правильные вопросы и вовремя остановиться на верном решении.
Благодарю за прочтение, делитесь в комментариях мыслями (‑:
* Facebook — проект Meta Platforms Inc., деятельность которой в России запрещена.
CBET_TbMbI
Любопытное соревнование. Я бы даже, может, и поучаствовал. Почему у нас почти все хакатоны в основном про программирование? Почему нет для аналитиков? Или даже про проработку идей на уровне ТЗ.
aihood
Сложность оценки и длительность проверки. А в программировании просто тесты запускаются и метрики считаются
CBET_TbMbI
Для анализа оценить совсем не сложно. Надо лишь найти компанию, которая поделится, например, статистикой продаж унитазов за 2020-2023 годы, а задача будет посчитать её же продажи за 2024. Как я понял, в этом посте как раз про такой конкурс речь.
С конкурсом идей сложнее, но решается экспертным жюри. Важно, чтобы тематика бала не для галочки, а для пользы. Условно: какой-нибудь условный Яндекс даёт конкурс, где команды пишут ТЗ по улучшению какого-нибудь продукта этого условного Яндекса. А жюри на основании заранее известных критериев оценивает. Несколько субъективно, но если откровенного подыгрывания не будет, то нормально.