Этот блог основан на моем выступлении на Международном симпозиуме по прогнозированию ISF2020 под названием - Лучшие практики для масштабирования прогнозирования продаж.

Что мы прогнозируем и почему?

В Wix.com мы используем модели прогнозирования временных рядов в рамках наших проектов по науке о данных для прогнозирования будущих коллекций Wix. Это позволило компании сделать две важные вещи: (1) лучшее планирование бюджета на основе будущих сборов; (2) Точное руководство по фондовому рынку.

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

Масштабирование начинается снизу - важность дизайна

Чтобы наша система могла масштабироваться и вмещать больше функций, больше моделей и, в конечном итоге, больше прогнозистов, мы разделили ее на вышеуказанные строительные блоки. Каждый строительный блок стоит сам по себе, но также умеет общаться и работать с другими. Краткое объяснение каждого (надеюсь, я опишу их более подробно в будущем, комментарий ниже / DM с запросами):

  • Источники данных. Используются для доступа и запросов ко всем нашим различным таблицам и БД.
  • Магазин характеристик - использует данные из источников данных для создания функций временных рядов. Учитывая список запрошенных функций, он вернет набор данных временного ряда.
  • Модели - это включено для ясности, ссылается на модели с открытым исходным кодом для временных рядов.
  • Библиотека моделей - оболочки для моделей с нашим выбором гиперпараметров и совместимы с наборами данных, происходящими из магазина функций.
  • Прогнозист - берет набор данных из хранилища объектов и модель из библиотеки моделей и создает прогнозиста временных рядов для нашей необходимой задачи.
  • Airflow DAG - DAG играет несколько ролей в нашей системе, в этом случае (подробнее будет сказано ниже) мы имеем в виду планирование прогона прогнозиста (в нашем случае - ежедневно).

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

Держите друзей ближе, а данные - ближе

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

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

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

Мониторинг - как мы адаптировались к изменениям в бизнесе

Мы можем разделить изменения в бизнесе на два вида:

  • Внутренние изменения - например, новые продажи, новые продукты, изменения цен и т. д.
  • Внешние изменения - например, новый конкурент или даже что-то столь же далеко идущее, как всемирная пандемия.

Хотя изменения могут быть самыми разными, адаптация к ним состоит из аналогичных этапов:

  1. Обнаружение изменений - именно здесь начинается наш мониторинг, мы постоянно отслеживаем наши результаты и сравниваем их с прошлыми результатами с помощью аналитических отчетов и оповещений по электронной почте (опять же с использованием DAG).
  2. Что такое изменение - есть ли тенденция к изменению? Можем ли мы количественно оценить воздействие? Откуда это взялось? Это очень отличается между внутренними и внешними изменениями, и это всегда очень сложная задача. Иногда нашим выводом может быть даже понимание того, что мы не совсем понимаем изменение.
  3. Помощь модели уловить изменение - Это сильно зависит от наших выводов, сделанных на предыдущем этапе. Если мы хорошо понимаем изменение и его будущее поведение, мы можем представить его модели с помощью функции, например . Мы также можем решить посмотреть, улавливает ли модель изменения сама по себе.

Когда и как улучшить свои модели

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

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

Если он не сломан, не чинить?

Forecaster работает хорошо, но вы начинаете думать о новой функции, которая должна быть очень актуальной - стоит ли ее добавить?

Если начинает пищать, то исправить?

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

Когда изменение считается хорошим изменением?

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

Отслеживание изменений и переписывание истории

Допустим, мы добавили новое изменение, теперь самое время вернуться к наблюдению за изменением и увидеть его эффект. Но в некотором смысле сейчас мы сравниваем двух разных прогнозистов (яблоки и апельсины?). С одной стороны, мы хотим сравнить нашего нового прогнозиста со старым, но с другой стороны, мы хотим видеть нашего нового прогнозиста по сравнению с новым прогнозистом, как если бы он работал, например, неделю назад (здесь яблоки vs Яблоки).

Для этого у нас есть две таблицы:

  • Реальная история, которая в основном представляет собой живые результаты модели, производившейся в тот день.
  • Обновленная история - история, как если бы наша текущая модель с текущими функциями и данными была с нами все время (для этого мы используем все предыдущие даты).

Выводы

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