Отчет «Прогноз спроса» на нейросетях. Пример применения и оценка эффективности

Публикация № 950619

Отчеты - Управленческие

нейросети прогноз спроса план продаж

85
После публикации https://infostart.ru/public/649065/ я получил массу вопросов в комментариях и в личку о том, как конкретно написать отчет или обработку на нейросетях, как это применить на предприятии. Поэтому я решил выложить один из примеров – отчет по прогнозированию спроса в зависимости от различных факторов. Также я сделал оценку эффективности такого прогноза в самом отчете. Надеюсь, это снимет часть вопросов и поможет построить на своём проекте нужную модель прогнозирования. Данные отчеты можно использовать как базу для разработки своих прогнозных моделей. Отчеты тестировались на УПП 1.3.59.1 , УТ11.4.2.144 на платформе 1С 8.3.12.1412

Описание задачи

Требуется на основе статистики продаж за 2 года создать модель прогнозирования спроса на месяц в для ключевых и прочих клиентов в разрезе групп товара. Ключевые клиенты берут товар с постоянной ритмичностью. Состав групп однороден по единицам хранения, ценам. Требуется создать модель предсказания спроса в зависимости от уровня скидок/цен, с учетом сезонности и ритмичности. И если есть зависимость уровня спроса от цен и цены скидки на будущий месяц можно менять, то в модели можно будет использовать цены и скидки в качестве параметром прогнозирования. Т.е. рассчитывать например сколько товара возьмет клиент если дать ему скидку 10%, а сколько если дать 5%.

Внимание! Выбранные показатели модели подбирались для конкретного бизнеса. Применение именно этих же показателей для других предприятий может вызвать отрицательный эффект. Например "Количество в предыдущем периоде" очень специфический показатель, который подходит только если есть определенная ритмичность спроса. 

Входные и выходные данные

Для обучения/прогноза были выбраны следующие показатели

Входы:

Номер месяца – с этим все просто. Выраженная сезонность спроса. Собственно, если убрать все остальные входы сети и оставить только "номер месяца", то  сеть сделает некую функцию для каждого клиента. Даже  хватит одного нейрона. Это вполне можно использовать на замену обычному планированию которое есть в типовых.  

Цена/скидка. Попытка построить для каждого клиента что-то наподобие «кривой спроса» (https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D1%81%D0%BF%D1%80%D0%BE%D1%81%D0%B0) на основе статистики и использовать для получения прогноза. Т.е. можно поиграться с параметрами - указывать цены в параметрах и на основе модели получать прогноз продаж. По факту оказалось что более правильным было использовать скидку а не цену, но я оставил «средние цены» - может в каком то другом случае это пригодится. Зависимость от скидки оказалась предсказуемая – чем больше скидка тем больше продажи.

Количество за предыдущий месяц – количество товара купленного покупателем за предыдущий месяц

В обработке нет еще одного важного входа – «Промоакции». Я убрал его так как для его получения требуется дописанный документ которого нет в типовых. Документ фиксирует маркетинговые мероприятия.

Выход: количество продаж группы товаров у клиента за месяц

Как это устроено?

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

Работа с отчетом

  1. Выбираются общие настройки – показатель цены, ном группа, количество периодов. Начало месяца за котрый надо получить прогноз (при условии что факт по предшествующему периоду присутствует)
  2. Выбираются постоянные покупатели
  3. Выбираются параметры обучения – количество слоев, количество итераций. При необходимости «2 скрытых слоя». Это подбирается экспериментально. Также можно встретить различные подходы. Например, в этой ветке (https://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw) есть  вот такой метод

 

Или вот такой (как видно совсем другой подход) http://mei06.narod.ru/sem7/iis/shpora/page2_9.htm

 

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

  1. Нажимается кнопка «Запустить обучение». Оно может быть долгим – до пары часов.
  2. После того как сеть обучена она с прочими параметрами хранится в файле. Это позволяет обращаться к ней и выполнять расчет быстро.
  3. Для получения прогноза нужно указать начало месяца прогноза
  4. Можно установить цены/скидки вручную которые планируется использовать в предстоящем периоде. Или можно поиграться ценами и посмотреть что будет со спросам при разных уровнях скидок.
  5. Сформировать отчет.

 

Проверка эффективности

Для проверки эффективности я оставил пару последних месяцев для того чтобы сравнить расчет с фактом. Т.е. например в ноябре я делал расчет на 1 сентября, чтобы потом сделать прогноз на Сентябрь, а так как сентябрь уже завершился то проверить насколько не сошелся факт с тем что показал прогноз. Для этого я в отчете добавил колонки Факт, Отклонение и Отклонение в %. Получил отклонения как на картинке в пределах 10-15%. Конечно это ни о чем не говорит и для оценки погрешности, мат. ожидания нужно больше наблюдений, но в целом результат приемлем учитываю непредсказуемость нашей экономической обстановки.

85

Скачать файлы

Наименование Файл Версия Размер
Отчет "Прогноз спроса" для УПП 1.3, УТ 10.3, КА 1.1
.erf 27,10Kb
27.11.18
30
.erf 27,10Kb 30 Скачать
Отчет «Прогноз спроса» для УТ11, КА2, ERP2:
.erf 38,71Kb
26.11.18
17
.erf 38,71Kb 17 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. nomadon 351 27.11.18 23:31 Сейчас в теме
Воронцов есть такой ученый, вы как-то связаны?)
3. informa1555 897 28.11.18 06:36 Сейчас в теме
(1) Погуглил. Неа, просто однофамилец.
2. CheBurator 3538 28.11.18 03:03 Сейчас в теме
Хороший материал.
Осталось определиться, что считать "регулярными клиентами".
что значит "берут постоянно"..?
есть клиенты которые берут раз в два-три месяца. есть которые каждый месяц. объемы (в деньгах/тоннах/кубах) - могут и примерно одинаковые. а могут и нет.
.
даст ли что-то если проиграть несколько "сценариев", когда периодж может быт разный - поиграть сетью с "месяцем". поиграть сетью с кварталом..?
4. informa1555 897 28.11.18 06:59 Сейчас в теме
(2) В моем случае "постоянные клиенты" - это те, которые что то покупают каждый месяц за интервал статистики и даже присутствуют во внутренних фин. отчетах предприятия как предпределенные строки (типа Дебиторская задолженность "АО Тандер" ... и т.д.). Но это ничего не значит. Можно добавлять свои варианты или вообще все засунуть в "Прочие клиенты". Но разбивка по клиентам все же имеет смысл так как для каждого создается сеть в которой рассчитывается модель его потребительского поведения. И общий спрос - как сумма моделей потребления. Такая была идея. С другой стороны всех покупателей подряд рассматривать как постоянных тоже не вариант при таких входных данных, так как могут быть вообще единоразовые покупки. Поэтому критерий, по которому можно отнести покупателей к постоянным - какой то процент периодов когда были покупки к общему числу периодов. Например 80%.

даст ли что-то если проиграть несколько "сценариев", когда периодж может быт разный - поиграть сетью с "месяцем". поиграть сетью с кварталом..?

Тут важно от чего зависят продажи. В моем случае период - это не элемент ряда, а фактор сезонности. Например в декабре перед новым Годом большой спрос (подарки). И если "зарыть" декабрь в 4-й квартал, а планировать все так же на месяц то этот фактор размоется я думаю.
16. user1002645 10.12.18 11:23 Сейчас в теме
(4)Дмитрий, наша компания занимается розничными продажами. Имеем 40 розничных точек. Работаем в 1С комплексная автоматизация. Хотим добавить в 1С внешние обработки по прогнозу спроса на основе нейросетей. Можете проконсультировать возможность такого внедрения в нашем случае и примерную стоимость?
17. informa1555 897 10.12.18 12:06 Сейчас в теме
5. Hans 98 28.11.18 07:56 Сейчас в теме
Ну и что? Насколько прогноз сбывается?
6. nomadon 351 28.11.18 08:12 Сейчас в теме
(5) коварно в самом конце материала расположилось заключение с ответом на вопрос
Для этого я в отчете добавил колонки Факт, Отклонение и Отклонение в %. Получил отклонения как на картинке в пределах 10-15%.
Созинов; artempo; +2 Ответить
7. Stepa86 948 28.11.18 10:29 Сейчас в теме
1. Пробовали на этих данных более простые модели? Среднее, наивная (брать такой же месяц годом ранее), аппроксимация, Холта-Винтерса? С использованием сезонности от 1С.
2. Пробовали на этих данных что нить из ML? Фейсбучного пророка https://infostart.ru/public/862671/ , линейную регрессию, бустинг, арима?
3. Кросс-валидация хотя бы на полгода?
4. Игрались с группировками и периодами? Группы без учета клиентов, или прогноз до недель/дней, а затем свертка до месяца
8. informa1555 897 28.11.18 11:17 Сейчас в теме
(7) 1. Сравнивали с обычным планированием на 1С (типовым) с учетом сезонности c усреднением за аналогичные периоды - результат точнее. По поводу Холта-Винтерса - там же надо каким то образом подбирать параметры. Честно говоря не знаю как это осуществить.
2. У меня задача другая нежели просто прогнозирование временных рядов. Статистические методы типа регрессии(почему обязательно линейной кстати?) тут можно применить только если не применять другие параметры - т.е. не указывать другую скидку например. Тут применение всех этих "статистических" а не "структурных" методов можно использовать как дополнение чтобы учесть влияние тренда, который у меня не учитывается, да.
3. Пока только 2 месяца, 1 и 1 месяц в 3х базах
4.Группы без учета клиентов - можно не указывать клиентов тогда будут все "Прочие клиенты" - разброс больше процентов на 20. До дней не делал.
9. Stepa86 948 28.11.18 11:33 Сейчас в теме
(8) 1. У Холта-Винтерса параметры перебором подбираются. Для каждого набора запускается кросс-валидация и лучший результат - вот она модель. Я уже не помню по времени, но один ряд на 30 точек так минут 10 подбирался у меня, вроде б.

Вот, кстати, парадокс. Делаем очень крутую штуку, с мощным мат. аппаратом, почти ИИ. А средняя все равно дает результат лучше...

2. Линейная, потому что результат это линейная формула от входных коэффициентов. Чем там больше влияющих на результат признаков - тем лучше. Как раз прогнозирование временного ряда от задачи регрессии и отличается тем, что для прогнозирования есть только дата+целевое значение, а для регрессии куча признаков+целевое значение. Задача прогнозирование может быть сведена к задаче регрессии, наоборот - нет. Где то видел, что бустинг рвет все спец. библиотеки по прогнозированию, ариму и простую линейную регрессию.

И вот как раз в задаче регрессии появляется возможность добавлять доп. признаки - цена, скидка, это праздник, была мотивация персонала, желтый/обычный ценник или размер полки в случае пищевки, плановые остатки на складе, курс доллара, санкции итп

Именно в качестве прогнозирования у меня сложилась такая картина:
сперва юзаем простейшие методы, типа средней и наивной.
Если точности мало или хотим доп. признаки, или сезонность хитрая - фейсбучный пророк, если нужны графики и понимание или бустинг, если нужен результат, линейную регрессию только для оценки влияния признака на цель можно погонять.
А уже на это сверху можно навешивать полноценное планирование продаж и операций с прогнозом приростов от акций, расчетом загрузки производства, бюджетами и прочими ништяками.
10. informa1555 897 28.11.18 11:57 Сейчас в теме
(9) нет средняя как раз хуже. Может я неправильно выразился.
И вот как раз в задаче регрессии появляется возможность добавлять доп. признаки
- вы имеете ввиду регрессию с фиктивными переменными? Но там же сдвиг или наклон только. От этого же форма зависимости не поменяется. А есть какой то материал с формулами с примером применения? Ну или вкратце - как добавить параметр?
11. Stepa86 948 28.11.18 12:14 Сейчас в теме
(10) Нашел вот такое. Как в пророке добавлять свои сезонности, праздники и регрессоры (скидка и цена это как раз регрессор) https://facebook.github.io/prophet/docs/seasonality,_holiday_effects,_and_regressors.html

Пример прогнозирования на пайтоне с помощью линейной регрессии http://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_russian/p­rojects_individual/project_sales_prediction_ad_ilyas.ipynb?flush_cache=true

Пример/сравнение прогнозирования по ARIMA, Facebook Prophet, XGBoost http://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_russian/p­rojects_individual/project_candy_production_prediction_Evgen­iyLatyshev.ipynb?flush_cache=true

Пример, где доп. признаков больше и они важнее, чем даты. Там 5 различных моделей http://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_russian/p­rojects_individual/project_area_bike_share_tbb.ipynb?flush_cache=true
Созинов; Il; ABudnikov; informa1555; +4 Ответить
12. informa1555 897 28.11.18 12:49 Сейчас в теме
(11) хорошие ссылки. Спасибо!
13. informa1555 897 28.11.18 13:44 Сейчас в теме
(11) В статьях правда только куски кода с вызовом функций, это не очень помогает понять механику но видно это работает. Но к вопросу почему "нейросети а не стат. методы ?" Думаю могу ответить так: если сравнивать аппроксимацию разными методами больших различий не будет, но это если определена задача и определены влияющие переменные. Т.е. априори мы знаем о задаче эту информацию. Если же есть только гипотезы о влияющих факторах то применение сетей как раз проще - они сами "загасят" ненужные входы и настроят апроксимацию как надо. Т.е. больше универсальность и простота применения.
AlexanderEkb; +1 Ответить
14. Stepa86 948 28.11.18 14:11 Сейчас в теме
(13) Если хочется исходников, то https://scikit-learn.org/stable/ и там по ссылкам. Там вроде даже где то научные работы есть, что в основе лежат.
15. Азверин 29.11.18 11:47 Сейчас в теме
Вы там потом под 1С запилить не забудьте)
товарищ Ын; +1 Ответить
18. утюгчеловек 21.01.19 10:53 Сейчас в теме
учитывая непредсказуемость нашей экономической обстановки
полезность любой прогнозной модели стремится к нулю.

Голоса в голове подсказываю что можно было обойтись линейной моделью. Почему нет сравнения с более простой моделью?
Это публикуется как продукт или как proof-of-concept? Т.е. есть ли возможность скачать обработку не за стартмани?
19. informa1555 897 21.01.19 13:37 Сейчас в теме
(18) Только за стартмани. Это заготовка для доработки напильником. В том смысле что работать в обозначенных конфигурациях она будет, но так как бизнесы разные то входы и параметры модели тоже разные соответственно источники данных возможно потребуется добавить свои.
Оставьте свое сообщение