Математические методы прогнозирования объемов продаж

Математик Константин Воронцов о применении задач машинного обучения в бизнесе, композициях адаптивных моделей и усовершенствовании качества данных

Десять лет назад одна крупная розничная сеть объявила тендер на решение задачи прогнозирования объемов продаж в своей сети. Задачи прогнозирования решают почти все крупные ретейлы, потому что это им необходимо для планирования закупок. Конкурсные условия ставились следующим образом: нам давались данные за два года — это ежедневные продажи примерно 12 000 товаров в одном из магазинов сети, тендер был закрытым, кроме нас на него позвали еще шесть компаний. Среди них были очень крупные вендоры аналитических решений для ретейла. Мы, конечно, оценивали наши шансы выиграть в этом тендере как небольшие.

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

Обычно прогноз потребительского спроса — точнее, объемов продаж — делается методами прогнозирования, которые очень давно известны в статистике. В целом они основаны на методе наименьших квадратов, где в функционале есть суммы по товарам, суммы по моментам времени и квадрат разности прогноза алгоритма и реального объема продаж для этого товара в этот день. Так обычно устроен функционал, и во всех стандартных решениях минимизация такого функционала позволяет настраивать алгоритм прогнозирования.

Есть много простых, быстро работающих, тоже давно известных, еще с 1960-х годов, методов, которыми мы начали пользоваться, для того чтобы решить задачу прогнозирования. Это методы экспоненциально скользящего среднего, модели Брауна, Тейла — Вейджа, Хольта — Винтерса и так далее. Некоторые из них учитывают сезонность. Сезонность не надо понимать как зима — лето, а скорее как будни — выходные, то есть недельная сезонность. Многие товары действительно продаются по будням и выходным по-разному. Мы сразу поняли, что наши крупные конкуренты в этом тендере будут использовать стандартные подходы: они будут использовать метод наименьших квадратов, потому что у них есть готовые решения, и довольно трудоемкие вычислительные методы вроде нейронных сетей или же авторегрессии. И мы решили пойти другим путем и использовать простые методы с пониманием того, что у каждого товара много своих особенностей. Есть много моделей, но неизвестно, какая модель для каждого товара будет наилучшей. Более того, мы даже предположили, что товар время от времени переключает свою модель и его сначала, может быть, лучше прогнозировать одной моделью, а потом в какой-то момент другая модель начнет работать лучше. Поэтому мы сделали адаптивную композицию простых адаптивных моделей. В каждый момент времени мы выбираем ту модель, которая в последнее время работала лучше, давала более точные прогнозы, переключаемся на нее, и именно она дает прогнозы. Первое решение, которое было сделано, — пользоваться композицией простых моделей, вместо того чтобы строить что-то более сложное.

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

Еще одна особенность этой задачи — то, что были большие интервалы неслучайного отсутствия спроса. Представьте себе: товар продается стабильно ежедневно, и вдруг вы видите, что две недели этого товара нет вообще. Это, конечно, связано не с тем, что спрос отсутствует, а с тем, что товар просто не привезли, его не было на полках, не было на складе. Такие интервалы отсутствия спроса мы просто вырезали из обучающих данных, чтобы они не повлияли на результат.

Настал день, когда мы показывали наше решение организаторам конкурса. Мы знали, что перед нами выступал один из наших крупных конкурентов, и, когда организаторы спросили: «А сколько часов вычисляет ваша модель?», мы удивились и сказали: «Вы разве не поняли, что мы только что на моем ноутбуке за одну минуту и восемь секунд не только подсчитали все прогнозы, но и обучили нашу модель на двухлетнем интервале?» Это было, конечно, шоком. В итоге наша модель оказалась не только самой точной, но еще и самой быстрой. Мы показали, что все прогнозы по всей сети можно считать буквально за два часа, ночью, на старом сервере и что даже никакого нового оборудования закупать не надо.

Это не только история успеха, но еще и очень поучительная история: во-первых, не надо бояться применять нестандартные методы, и если задача поставлена нестандартно, то только математик может быстро найти решение — хорошо, когда удается быстро, иногда это не удается, конечно; во-вторых, этот случай придал нам сил выйти на рынок с собственными решениями — не надо бояться того, что на рынке есть сильные конкуренты. Был еще один момент поучительности. Когда я сам занимался отбором моделей для этой задачи, то сначала мы ввели целых тридцать разных моделей, и из них так адаптивно, как я рассказал, каждый день для каждого товара выбиралась оптимальная модель.

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

Тогда чисто теоретически эта задача поставила меня в тупик, а решение удалось найти только тогда, когда я работал над докторской диссертацией и уже серьезно исследовал явление переобучения в рамках комбинаторной теории переобучения. Оказалось, что если вы выбираете из моделей и у вас есть одна модель хорошая, а все остальные — плохие, то вы эту хорошую модель, как правило, и будете выбирать. Вы не будете переобучаться, вы будете иметь это одно хорошее решение. Если у вас есть много моделей, но они похожи друг на друга, вы тоже не будете переобучаться, потому что эффективная сложность совокупности таких похожих друг на друга моделей невелика, переобучение тоже низкое. А если получится так, что ваши модели существенно различны и примерно все при этом одинаково плохие, то переобучение может быть очень велико, и эффект переобучения чудовищно растет по мере роста числа моделей. Это была ровно та ситуация, с которой мы столкнулись в этом тендере. А вот объяснить ее теоретически удалось лишь несколько лет спустя.

Была еще одна поучительная история. Тогда же, на этом тендере, презентуя свое решение организаторам конкурса, мы объяснили: «Мы считаем, что ваш функционал неправильно устроен, так делать нельзя. То, что прогнозируемая величина в знаменателе, — это, конечно, нехорошо. То, что ваш функционал выражает квадрат разности ошибок…» Что такое квадрат рублей, например? Это не имеет экономического смысла. Мы предложили оптимизировать функционалы, выражающие потери компании от неточности прогнозов, и показали, как такой функционал должен быть устроен, и показали, что мы готовы оптимизировать такие нестандартные функционалы, тем самым повышать прибыль компании — ровно то, что было нужно для бизнеса. Когда мы начали уже реально работать над проектом, то оказалось, что у компании те самые данные, которые нужны для построения такого функционала, очень грязные. Для части товаров такие данные вообще отсутствовали, для части товаров эти данные были неточны, потому что менеджеры до сих пор не были заинтересованы в том, чтобы такие данные проверялись, контролировались. Это же не бухгалтерия, это какая-то вспомогательная информация. Может быть, она кому-то когда-то понадобится, может быть, нет.

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

доктор физико-математических наук, профессор факультета компьютерных наук НИУ ВШЭ

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.