Допустим, мы располагаем пятилетней историей продаж в десяти магазинах, где продаётся пятьдесят товаров. Наша цель — спрогнозировать будущие ежедневные продажи каждого из них на следующие два года.
Учёт сезонных факторов
Нейросети глубокого обучения предназначены для выявления закономерностей в обрабатываемых данных. Однако они не справятся с этой задачей, если данные не будут помечены правильными триггерами, связанными с сезонными факторами. Вот почему большинство прогнозов продаж выполняется с помощью привычного метода анализа временных рядов.
Однако при грамотном подходе нейросети оказываются более эффективными. Все продажи в случае применения временных рядов должны быть разделены на дневные, месячные или годовые тренды. Нейросети не проводят такого жёсткого различия. Кроме того, в то время как анализ временных рядов приходится выполнять вручную, нейросеть автоматически формирует единую модель.
Усовершенствование процедуры
Существует три типа сезонных факторов, которые следует учитывать:
- День недели
- Время года
- Долгосрочный рост
Однако привязка данных о продажах к сезонным меткам — задача нетривиальная. Продажи в будние дни отличаются от продаж в выходные, поэтому можно сразу пометить полученные данные о продажах с помощью тега «День недели». А чтобы помочь нейросети определить долгосрочные темпы роста, можно указать время, прошедшее с начала их сбора.
Однако столь простые методы нельзя применять при учёте факторов, связанных с временем года. Нельзя просто задать каждый месяц по отдельности, так как в таком случае мы упустим из виду тот факт, что объём продаж может резко измениться внутри какого-либо сезона. Кроме того, нельзя использовать числа с 1 по 12 для обозначения месяцев, поскольку тогда потеряется преемственность между декабрём и январём.
Задание параметров по периодам
Эту проблему способно решить задание параметров по периодам, которое сообщит нейросети не только набор месяцев, но и какие из них соседствуют друг с другом и насколько близко. Всё это предполагает добавление коэффициентов (от 0,0 до 1,0) к каждому из двенадцати параметров в зависимости от временного интервала, на который контрольный день отстоит от каждого из них.
Так, например, если анализируемые данные о продажах начинаются с 15 июня, то соответствующий коэффициент для этого месяца должен быть весьма высок, а параметр «Июнь» — полностью активирован, т. е. установлен на 1.0. Соседние параметры «Май» и «Июль» также должны получить довольно высокий коэффициент 0,6. Однако по мере отдаления месяцев, коэффициенты должны понижаться. Если же данные начинаются, например, с 1 сентября, то коэффициенты должны быть более сложными. В силу начала месяца сентябрьский параметр не может быть полностью активирован и должен быть установлен на 0,9. А поскольку август только что закончился, он заслуживает примерно такого же коэффициента, т. е. 0,88. Наконец, чтобы обеспечить непрерывность системы отсчёта, декабрьский коэффициент должен плавно перетечь в январский.
Глубокое обучение
К нейросетям, способным справиться с этой задачей, можно отнести:
- Неросети прямого распространения
- Рекуррентные нейросети с долгой краткосрочной памятью
- Объединённые нейросети
- Свёрточные нейросети
Данные для обучения можно варьировать следующим образом:
- Данные о последних семи днях продаж
- Данные о последних тридцати днях продаж
Кроме того, количество скрытых слоёв и время обучения следует варьировать с помощью различных эпох. Можно обучить, скажем, семь нейросетей, а затем выбрать лучшую из них в плане прогнозирования продаж.
Python или KNIME?
Изначально нейросети обучали на Python, но впоследствии модели были перенесены на платформу анализа данных KNIME.
Python:
Python может похвастаться следующими очевидными преимуществами:
- Быстрое прототипирование моделей
- Простое обучение моделей в облачных кластерах
KNIME:
Однако визуализация с помощью KNIME также имеет определённые преимущества:
- Сложные модели могут быть легко отлажены
- Модели могут быть легко объяснены коллегам
Объединённая модель с долгой краткосрочной памятью
Рассмотрим всё на примере объединённой нейросети с долгой краткосрочной памятью.
Верхняя ветвь здесь ответственна за обработку данных о продажах за последние 30 дней, а также данных за «сегодня», и имеет 31 параметр. Уровень долгой краткосрочной памяти (LSTM) призван запоминать входящие привязанные ко времени данные, позволяя легче выявлять тенденции. Нижняя ветвь содержит такие дополнительные атрибуты данных о продажах, как:
- день недели, чтобы моделировать тенденции внутри недель;
- контрольный месяц, чтобы моделировать сезонные факторы;
- количество дней с начала продаж, чтобы моделировать долгосрочный рост.
Модульная библиотека Keras способна облегчить процесс создания моделей и их отладки.
Рейтинг эффективности моделей
Наш опыт показал, что проверяемые модели ранжируются по убыванию эффективности следующим образом:
- Тридцатидневная полностью объединённая (30 эпох)
- Семидневная полностью объединённая (20 эпох)
- Тридцатидневная прямого распространения с 20 скрытыми слоями (20 эпох)
- Семидневная с долгой краткосрочной памятью и 20 скрытыми слоями (40 эпох)
- Тридцатидневная объединённая с долгой краткосрочной памятью (30 эпох)
- Семидневная прямого распространения с 20 скрытыми слоями (10 эпох)
- Семидневная прямого распространения с 10 скрытыми слоями (10 эпох)
Первая модель была избрана для прогнозирования ежедневных продаж на следующие два года.
Результаты по неделям
Динамика продаж по дням недели выявила две вещи. Во-первых, что избранная нейросеть способна правильно предсказывать долгосрочный годовой рост. Обработанные данные о продажах с 2013 по 2017 гг. представлены в виде пяти нижних кривых на графике. Прогнозируемые продажи на 2018 и 2019 гг . представлены двумя верхними кривыми. Сдвиг в сторону увеличения указывает на годовой рост продаж. Спады графиков как обработанных, так и прогнозируемых данных показывают, что общий объём продаж будет расти примерно на пять пунктов в день. Во-вторых, прогноз по дням недели оказался вполне правдоподобным. По понедельникам объём продаж, как правило, самый низкий, а затем растёт ежедневно, достигая пика в воскресенье. В этом отношении форма графиков как обработанных, так и прогнозируемых данных совпали.
Годовые результаты
Годовая тенденция продаж связь объёма продаж с сезонными факторами в течение всего года. Здесь, опять же, форма пяти нижних графиков продаж в целом совпала с формой двух верхних.
Однако графики прогнозируемых объёмов продаж являются плавными, в то время как графики обработанных данных более ступенчатые. При внимательном рассмотрении можно обнаружить, что периоды спада продаж в обработанных данных приходятся на последнюю неделю каждого месяца. Это может быть связано с тем, что в магазинах систематически заканчиваются товары на складе. Однако специальных меток, чтобы выявить эту тенденцию, изначально не ставилось. Если бы использовалась метка «Неделя месяца», то, вероятно, нейросеть обнаружила бы примерно то же самое.
Нашли ошибку в тексте? Выделите нужный фрагмент и нажмите ctrl + enter