Нейросети против простой математической модели

Сегодня актуально стараться использовать возможности нейросетей по максимуму, пихать их куда попало, но не всегда от них есть эффект.

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

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

Наша команда состояла из меня - аналитика данных, и двух дата-саентистов (data science). Все мы успешно программировали свои кастомные решения на языке python, но ребята еще хорошо шарили в построении моделей машинного обучения и создания нейросетей под конкретные нужды бизнеса.

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

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

Прошерстив информацию в интернете о том, как вообще разные аналитики и программы строят прогнозы по продажам, я стал все их тестировать на ретроданных (т.е. стал прогнозировать продажи на прошедший период, по которому нам уже известны продажи). Все имели процент погрешности разной степени, но я нашел одну формулу, которая была наиболее корректной: (X(от Y)*Y)-Z Где: Х (от Y) -средние продажи за период; Y  - период расчета поставки; Z - Остаток товара на текущий момент.

Эту формулу я взял как базу, а далее на нее накручивались еще акционные коэффициенты (при наличии), а также иные различные условия. Результат вычислений и является той потребностью, в количестве, которую мы ищем. Далее уже выводим всё в удобоваримом виде для менеджера, который делает заказ на поставку.

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

Мы провели испытания, в которых точность программы на основе машинного обучения составила 21%, против 78% для программы, основанной на чисто математических алгоритмах.

По итогу, в работу взяли именно мою прогу, которую потом мы с ними вместе еще какое-то время доделывали. Вот так простота победила сложные системы расчета.