Фокус-дискуссия «Математик в офисе розничной компании». Вторая серия
Дата: 14 сентября, время: 24 минут 59 секунд, размер: 87 Мб
Сергей Белец (генеральный директор саратовского филиала сети «В двух шагах»): Сейчас я хотел предоставить слово, может, не совсем их коллегам. Мне понравилось, что в решении, которое люди предлагают, суровая модель, более глубокой проработки. Мы сами прекрасно понимаем, что использование всяких разумных методов может стать нашим конкурентным преимуществом. Более точное приближение, более точный прогноз теоретически может дать нам больше шансов на выживание и на победу на рынке, чем найм супер-толкового профессионала.
Вадим Стрижов (сотрудник Вычислительного центра Российской Академии Наук): Сергей, давайте будем коллегами, потому что мы тоже занимаемся мат. статистикой. Сейчас об этом будет несколько слов. Вычислительный центр РАН – один из 470 институтов Академии Наук. Наша история работы с данными началась в 1968 г., когда Юрий Иванович Журавлев по заданию советского правительства разрабатывал алгоритмы для поиска золотых месторождений в Сибири без геологоразведки. Было всего шесть прецедентов. Все месторождения были Южно-Африканского типа. Данных было очень мало.
Было принято решение использовать разные суперпозиции простых алгоритмов. Из этого получилось, что золото в Сибири было найдено без геологов, и была создана школа, которая называется именем Ю.И. Журавлева «Алгебраический подход к распознаванию образов». Понятно, что сейчас данных очень много. Была привнесена статистика, и это называется уже «интеллектуальный анализ данных», Data Mining.
Компьютеры собирают очень много данных. Вопрос: что это у нас «хранилище данных» или «кладбище данных»? До тех пор, пока мы не научимся вытаскивать из данных знания и принимать решения, это будут «кладбища данных». Наша задача из этого сделать «хранилище данных».
Сергей Белец: Технология в этом плане ужасает. Недавно под лозунгом «сделай хранилище, а не кладбище», мне дали методы анализа типа OLAP, Кубы, а теперь вы говорите, что и это тоже «кладбище».
Вадим Стрижов: Кубам не хватает алгоритмов. Есть два подхода к анализу данных. На самом деле область не очень большая и задачи в целом известны. Это обучение с учителем: классификация, прогнозирование, оптимизация. Учитель – это что? У нас есть прецеденты. Есть исторические ряды продаж или у нас, например, есть клиенты возвратившие заем, и клиенты, не возвратившие заем. Мы по этим прецедентам учим алгоритмы и строим прогнозы. Это первый тип задач.
Второй тип задач. Обучение без учителя. У нас нет прецедентов, нет истории. Мы должны сами выработать методы, который позволяют нам открыть какие-то знания в данных.
Пример: классификация. Банк дает заем, при этом просит человека заполнить анкету в 20 пунктов. У банка теперь есть база данных. 1000 клиентов, у каждого клиента 20 признаков, 1000 точек в 20-ти мерном пространстве. Цель: найти такой алгоритм, который позволяет сказать, давать этому человеку или не давать.
Следующая задача: прогноз. Город заказывает электричество на завтра. Он должен прогнозировать свои траты электроэнергии. Если он ошибется в своем прогнозе, то завтра он будет покупать электричество уже совсем по другой цене. Требуется точно указать, сколько мы завтра будем потреблять.
Оптимизации. На первую задачу можно наложить следующее требование. Давайте оценим, с какой вероятностью нам будет возвращен кредит клиентом. Или с какой вероятностью тот или иной абонент уйдет из-под действия провайдера мобильных телефонов.
Обучение без учителя. У нас есть товары, у нас есть клиенты. Наша задача, сказать, какие клиенты похожи друг на друга. Для этой группы клиентов давать какие-то льготы или наоборот анти льготы применим. Есть такая гипотеза, какие клиенты похожи? — Те, которые покупают одинаковые товары. Какие товары похожи? – Те, которые покупают одинаковые клиенты. Возникает задача кластеризации, а именно по имеющимся данным с помощью введенной функции расстояния, сказать, вот эта группа объектов принадлежит к заданному кластеру или не принадлежит.
И последнее, может, я не открою секрета, но очень полезно при анализе данных смотреть на эти данные. Есть очень много приемов, которые позволяют нам многомерное пространство отобразить на плоскости и с наслаждением это все разглядывать. Зачем это все нужно?
Идея какая. Если нам алгоритмы приносят прибыль, давайте их использовать. Если не приносят, давайте ограничимся OLAP. Вот и весь критерий. Собственно как и в прогнозе, либо ты прогнозируешь, либо ты ошибаешься. Когда мы думаем, где мы будем применять критерии, надо подумать прежде всего о том, что это нам даст: прибыль или сокращение затрат, или привлечет наших клиентов, потому что они будут знать, что этот продукт стоит на полке и будут за ним приходить. А если не стоит, то и клиентов соответственно не будет.
Мы делаем такие проекты и естественно руководствуемся стандартами. Есть хорошо разработанные стандарты, которые выглядят примерно так. Шаг первый. Мы должны сначала понять цели бизнеса, построить бизнес-модель. Эту бизнес-модель мы превращаем в модель данных и понимаем как вообще устроены данные. Данные должны быть подготовлены, вытащены из базы данных, соответственно пропуски данных должны быть заполнены. На эти данные мы накладываем созданные модели. Модели мы проверяем. Выбираем лучшие и потом внедряем.
Инструменты такие: в рамках парадигмы алгебраического подхода нам нужно много хороших алгоритмов. Есть даже какое-то магическое число. Давайте переберем для прогнозирования, скажем, 10 000 алгоритмов. Наверняка, один будет хороший.
Перейдем к нашей предметной области. Сначала посмотрим как выглядит наш временной ряд, затем попытаемся посмотреть что такое страховой запас и понять как прогнозировать оптимальный страховой запас. Вот наша постановка задачи, как ее обычно видят с первого взгляда. Есть временной ряд продаж, история продаж. Возможно, есть какие-то дополнительные временные ряды и требуется спрогнозировать так, чтобы наш прогноз максимально близко лежал к истории. Хорошо это или плохо, сейчас мы это увидим.
У нас есть напиток шиповника и история продаж за полтора года. Смотрим на данные и понимаем, что первое, что надо сделать — это создать сигнальную систему мониторинга продаж. Почему? Вот его привезли, продали, потом последние четыре баночки где-то потерялась и стоят не продаются четыре месяца.
Сергей Белец: Это значит надо «кустового директора» и директоров магазинов «поубивать», если баночки не стоят на полках, а лежат в запасниках.
Вадим Стрижов: Не надо их «убивать», им надо сказать: «Смотрите, видите красные линии — это вам сигнал. Что-то с данными не то».
Александр Ефимов (сотрудник Вычислительного центра Российской Академии Наук): Просто среди 10 000 товара надо найти один несчастный напиток шиповника.
Сергей Белец: На самом деле, это рабочий отчет товара без движения. По нему проходишь выборочно тыкаешь где это на полке стоит, где это стоит. Технологию все знают. Никакой математики. Чистое управление людьми.
Вадим Стрижов: Пока математики нет. Смотрите, у нас здесь ноль, а здесь минус 12 баночек на полке. Это значит если бы продавали вот так в октябре, то мы бы продали лишних 12 баночек. По-моему, неплохо. И здесь уже математика все-таки нужна.
Как же мы будем прогнозировать это? Первое, что приходит в голову, наверное взять это все и усреднить. Не уверен, что это хорошо вот по каким причинам. Предположим, что мы слишком много закупили, прошло время, у нас сколько-то осталось и мы теряем на этом деньги. Либо не докупили. Видно, сколько мы могли бы продать и заработать на этом.
Есть несколько критериев измерения качества заказа. Первое. Это парабола — стандартный функционал качества, который появляется при прогнозировании методом наименьших квадратов или при прогнозировании усреднением. Более интеллектуальная вещь — это функционал «галочка», и самый полезный функционал — это несимметричный функционал потерь, который конструируется под каждый конкретный магазин и обычно в нем 10-20 параметров, которые описывают работу торговой сети.
Как с помощью этого функционала происходит прогноз? У нас есть временной ряд, есть интервал между поставками, надо спрогнозировать одну единственную величину сколько нам надо завезти между поставками. Вот наш временной ряд, предположим, что он стационарный, его среднее и разброс значений на всех интервалах времени постоянен. У нас есть время, например, год. И в среднем уходит сто единиц (литров, штук) какого-то товара. Мы строим по этому временному ряду гистограмму. Вот у нас между продажами 90-100 единиц, такие продажи произошли 100 раз. А продажи до 85 единиц, их было 10.
Понятно, что здесь наиболее вероятным будет значение где-то 95 штук в день. Можно было бы столько и заказывать, но у нас есть функционал, и не один, а два. Мы можем сделать следующее: взять и свернуть эту гистограмму с функционалом. Т.е. посчитать каковы будут потери, если случайная величина будет распределена таким образом, как на этой гистограмме, а штраф за наш прогноз будет такой, как наш прогноз потерь. И тогда задача в строгой постановке ставится следующим образом: у нас есть множество пар, прогнозируемый отрезок и значение гистограммы.
Сергей Белец: В общем понятно, что для специалистов есть решение какой-то задачи, а нам надо просто знать, что решение точно есть.
Вадим Стрижов: Хорошо. Не бойтесь, это на самом деле можно сделать в Excel, я не шучу. Идея такая: мы просто суммируем произведение сегментов гистограммы и значения функционала, и ищем тот прогноз, который даст нам минимальную ошибку. И на этом можно было бы закончить, если бы ряд продаж был стационарен, т.е. продажи шли бы постоянно.
Сергей Белец: Я хотел немного уточнить. То, что Вадим сейчас предлагает — это расширение метода MiniMax, который многие из нас используют, потому что когда используешь метод MiniMax у тебя товарные остатки достаточно завышенные получаются. У тебя есть минимум, ниже которого стараешься не падать.
Недавно у меня был разговор с коллегой, как сделать оборачиваемость 14 дней. Я так понимаю, только используя уже вторые, третьи периодики, не на прямом MiniMax, это возможно. И только тогда, когда мы живем, подравниваясь под прогноз и разрешаем минимум равный нолю. Собственно об этом сейчас идет речь.
Вадим Стрижов: Итак, реально у нас есть общий тренд — периодика. А периодика обычно год и недели. Это и праздники, которые случаются по расписанию, и какие-то промо-акции. Годовая сезонность. Например, для мороженого очень хорошо выражена (на презентации). Здесь указаны суммарные недельные продажи, а внизу продажи каждый день. Соответственно, если мы будем применять предложенный ранее алгоритм, то у нас сгладятся все периодики, и мы будем среднегодовое значение прогнозировать.
Далее. Недельная сезонность. Напиток RedBull. Пятница — вырастают продажи. Прогнозируя напиток на каждый день недели, надо смотреть какова история. Идея в прогнозе здесь заключается в том, чтобы ловить периодики и, т.к. периодик мало, то мы будем исследовать в прогнозе не только периодики, но и окрестности вокруг. Для этого просто-напросто мы будем учитывать окрестность периода с большими весами, чем те значения, которые находятся вне периода.
Следующая деталь. Праздники и выходные. В момент праздников происходит резкий всплеск, например, шампанское в Новый год. И во время промо-акций у нас есть какой-то профиль продажи товаров. Гипотеза: у нас форма профиля, но ни его параметр, т.е. ни его длина и интенсивность, не зависят от времени проведения промо-акций. Требуется спрогнозировать спрос для группы товаров во время проведения промо-акций. Для этого мы рисуем этот профиль, ломаные. И методом наименьших квадратов настраиваем параметры этой ломаной. Настроив параметры, мы можем вычесть историю продаж из истории продаж во время действия промо-акции и получить разность. Как бы ряд продавался, если бы промо-акции не было.
Вопрос из зала: При продажах это как выделяется, идентифицируется промо-акция, просто по графику или по профилю?
Вадим Стрижов: Во первых, магазину всегда известны свои промо-акции. Технически есть просто ряд временной составляющей, состоящий из единиц, которые размечают эти промо-акции. Точно также размечаются и праздники, т.е. это дополнительные временные ряды.
Во первых, у нас есть тренд, во вторых, у нас есть такие дополнительные вещи, как пропуски, случайные выбросы, ошибки в данных, которые тоже надо обрабатывать. На этом мы останавливаться не будем.
У нас есть масса алгоритмов и каждый алгоритм нужен для прогнозирования своего элемента, для годовой сезонности, месячной сезонности, рабочих и выходных дней, алгоритмы, которые учитывают пропуски данных, недостаток товара на складе и т.д. Что требуется сделать? Все их настроить и выбрать наилучшую суперпозицию алгоритмов. И фактически для каждого товара или для каждой группы товаров мы получим свой алгоритм прогноза.
Для примера у нас есть базовые алгоритмы, например, сглаживание: экспоненциальное, адаптивное, скользящее среднее и еще порядка 30 базовых алгоритмов. И есть примеры суперпозиций алгоритмов, например, лучший из всех, которые прогнозируют в данной точке, или комбинация какая-то, или лучший для данного товара.
Была построена система, которая это все учитывает: все сезонности, динамику цен, жизненный цикл и план продажи. Требование к системе: надо задать расписание или требование на прогноз для того, чтобы прогноз получить. И как дополнение можем управлять ценовой политикой, лояльностью клиента, анализировать покупательские корзины и т.д. Здесь есть пример типового обследования, выполненный с помощью этой системы.
Сергей Белец: Спасибо большое, Вадим. Я как в юности снова очутился. Новый человек вещает лекции, интересно, математика. На самом деле есть такое теоретическое предположение, что розничная сеть полностью математически моделируема, от и до. Практически все процессы моделируемы. Я такой модели еще не разу не видел. «Каждому в лучшее верится», надеюсь когда-нибудь ее увидеть.
Вопрос из зала: С какого момента, сколько точек нужно минимально, чтобы начать математическое просчитывание?
Вадим Стрижов: Все просто. Есть теорема Найквиста, которая говорит следующее. Если у нас периодика, то вам достаточно четырех точек, но это в теории. А в практике, смотрите, у вас есть периодика год, соответственно периодика четыре года ежедневных цен, а лучше семь лет. Дальше, у вас есть неделя. Соответственно семь недель без тренда. Если с трендом, то вам же надо понять, а где этот тренд, оценить. Соответственно, эта цифра значительно увеличивается. Когда мы настраиваем алгоритм, происходит вот что: мы делим выборку весь временной ряд на обучающую часть и на тестовую. Мы ищем модели на одной части настраиваемых, а тестируем модели на другой. Вот уже двойное, а реально тройное увеличение. Потому что первая часть — поиск лучшей суперпозиции алгоритмов, вторая часть — настройка алгоритмов, и третья часть — это тестирование алгоритмов.
Есть еще на самом деле четвертая часть — это клиент обычно не верит в правильность ретроспективного прогноза, т.е. в прогнозы, которые на этих данных. Как все происходит: задается время, и вот пошло наше будущее, система работает и параллельно работают два алгоритма. Какой-то алгоритм заказчика и наш алгоритм. Мы в живую, не вводя никаких изменений в ценовую политику, сравним прямо сейчас уже не на предыстории, а на истории, эти два алгоритма. И по сравнению прошел например месяц и мы посчитали, сколько мы выиграли на существующем алгоритме и сколько мы выиграли на предложенном нами. Если такого алгоритма нет, то его приходится тут же изобретать.