Три подхода к прогнозированию продаж чего угодно

Заглядываем в будущее при помощи статистики

Качественные прогнозы приносят деньги

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

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

Три подхода

Все модели можно разделить на три типа:

а) Простые и наивные методы. К ним относится простая экстраполяция на основе среднего значения или темпа прироста, подбор коэффициентов сезонности или продолжение тренда. Эти методы подходят для быстрого прогноза «на коленке».

б) Модели класса ARIMA. Особенности временных рядов заключается в том, что прошлые значения связаны с текущими и будущими. Для краткосрочного прогнозирования рядов с устойчивой структурой достаточно данных о продажах в прошлых периодах.

в) Математическое моделирование. Используются в случаях когда прогнозируемая переменная сильно зависит от внешних факторов: погода, ключевая ставка ЦБ, рекламный бюджет, уровень цен...

Подходы можно комбинировать для улучшения точности прогноза.
ОПРЕДЕЛЕНИЕ
Временной ряд (динамический ряд) — это значение признака, измеренного в хронологическом порядке через постоянные временные промежутки.

Главная особенность динамических рядов в том, что они являются зависимыми. Предыдущие показатели связаны с текущими и будущими, а сам ряд можно разложить на компоненты:
  • тренд;
  • сезонность;
  • цикличность;
  • случайные отклонения.

Визуализация

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

  1. Посмотрим на ряд при помощи обычного линейного графика. Скользящее среднее или экспоненциальное сглаживание помогают выявить тенденции среди шума.
Формулы для определения достаточного объема выборки
Сглаживание динамического ряда при помощи скользящей средней
    2. Графическая декомпозиция недоступна в Excel, зато гарантированно присутствует в любом статистическом пакете. С ее помощью ряд раскладывается на компоненты.
    В данном случае график подсказывает исследователю, что продажи товара Х имеют не только ярко выраженную сезонность, но и стабильную цикличность в рамках недели.
    Формулы для определения достаточного объема выборки
    Декомпозиция динамического ряда
    3. Коррелограмма — это график автокорреляций. Он помогает понять как значения ряда связаны со своими же значениями в прошлом. Лаг отражает степень запаздывания. Значимый коэффициент корреляции для лагов 7 и 14 также намекает на недельную цикличность.
    Формулы для определения достаточного объема выборки
    Коррелограмма

    Модели класса ARIMA

    Согласно теореме Вальда любой стационарный ряд может быть описан моделью ARMA.
    AR – это модель авторегрессии порядка p. Обычное регрессионное уравнение в котором будущие значения ряда линейно зависят от предыдущих.
    MA – модель скользящего среднего порядка q. Функция при которой значение в каждой точке ряда равно среднему значению n соседних точек.
    СПРАВКА.

    ARIMA
    – расширение моделей ARMA для нестационарных временных рядов.
    SARMA / SARIMA – расширение для рядов с сезонной составляющей.
    SARIMAX – расширение, позволяющее включить внешнюю регрессионную составляющую.
    Стационарный ряд
    – это ряд, в котором отсутствует автокорреляция, а среднее и дисперсия не меняются со временем.
    Перед тем, как применять модель необходимо позаботиться о стационарности динамического ряда.

    Ряд приводят к стационарности взятием последовательных разностей (вместо исходных 3,5,5,4,8 получится 2,0,-1,4) или преобразованием Бокса-Кокса. Стабилизировать дисперсию помогает логарифмирование.
    Чтобы убедиться, что мы все сделали правильно применяем формальные тесты:
    СПРАВКА.

    Критерий Льюнга-Бокса — критерий для выявления автокоррелированности временных рядов.
    Критерий KPSS (KPSS test) — критерий для проверки на стационарность (Hо = ряд стационарен).
    Критерий Дики-Фулера — критерий для проверки на стационарность (Но = ряд нестационарен).
    Отлично! Теперь нужно подобрать параметры p и q. Это можно сделать вручную, на основе крупнейших лагов автокорреляционной функции ACF и PACF или воспользоваться чудо-функцией auto.arima из библиотеки Forecast для R.
    Формулы для определения достаточного объема выборки
    Прогнозирование временных рядов в R
    Лучшая модель подбирается с помощью AIC. Модель с самым низким значением информационного критерия Акаике (не несет абсолютную оценку, используется только для сравнения моделей между собой) нужно проверить на адекватность путем анализа остатков (разницы между фактическими и прогнозными значениями).

    Нужно убедиться, что остатки:
    • имеют низкое абсолютное значение, в них отсутствует тренд и циклы;
    • распределены нормально со средним ~0;
    • отсутствует автокорреляция (смотрим коррелограмму и тесты "Box-Pierce" "Ljung-Box").
    Если хотя бы что-то не так — значит модель описала не всю структуру и качество можно улучшать. Возвращаемся назад для подбора лучших параметров или преобразования исходных данных.
    Анализ временных рядов в R
    Install.packages("forecast"); Install.packages("tseries") #устанавливаем полезные расширения
    library(forecast); library(tseries) #задействуем их
    my_time_series <- ts(data$sales, frequency = 7)  #кодируем числовой вектор, как временной ряд
    my_time_series <- tsclean(my_time_series) #автоматическая замена выбросов и пропущенных значений
    plot(my_time_series) #визуализация
    plot(decompose(my_time_series)) #график декомпозиции ряда
    acf(my_time_series) #построение коррелограммы
    fit <- auto.arima(my_time_series) #автоматический подбор модели и оптимальных параметров
    fit #модель
    tsdisplay(residuals(fit)) #графический анализ остатков
    Box.test(residuals(fit)) #формальный тест скоррелированности остатков
    my_forecast <- forecast(fit, h=3) #прогноз на 3 периода вперед
    plot(forecast(fit, h=3)) #визуализация прогноза с доверительным интервалом
    - - - - -
    #другие полезные функции:
    ets() #экспоненциальное сглаживание 
    BoxCox() #преобразование Бокса-Кокса
    adf.test()  #проверка стационарности (тест Дики-Фуллера) 
    Закрепляем пройденное: пошаговый алгоритм
    1. Построить график. Удалить выбросы, заменить пропущенные значения, декомпозировать ряд.

    2. Обратить внимание на дисперсию, сезонность и тренд. В случае необходимости применить логарифмирование для стабилизации дисперсии или преобразование Бокса-Кокса / последовательные разности для приведения к стационарности.

    3. Убедиться в стационарности ряда при помощи критерия Дики-Фуллера или теста KPSS.

    4. Отобразить ACF и PACF функции, сделать предположение о модели и порядке параметров.

    5. Использовать информационный критерий AIC выбора лучшей модели.
    Или просто воспользоваться автотюнингом: язык программирования R > library(forecast) > auto.arima()

    6. Построить ACF график остатков лучшей модели, убедиться в отсутствии корреляции остатков (тест Бокса-Кокса).

    7. Если остатки выглядят как белый шум и это подтверждено тестом, то можно приступать к прогнозированию.

    8. Оценить точность кросс-валидацией или прогнозом по укороченному ряду.

    Математическое моделирование

    Предельная ошибка выборки
    Пример регресионной модели прогнозирования продаж
    Некоторые динамические ряды не имеют устойчивой структуры и сильно зависят от влияния внешних факторов (например: погода, рекламный бюджет). В таких случаях целесообразно применить математическое моделирование. Подойдет простая регрессия, нейронные сеточки, случайные леса, ближайшие соседи, SVM или ансамбль из всех перечисленных (зависит от типа, распределения и объема исходных данных).

    Алгоритмы будут сопоставлять весь массив входных данных (предикторов) и соответствующих значений целевой переменной (т.е. уровня продаж). Такой процесс называется «обучением». Методы машинного обучения как бы обобщают полученный опыт для ответов на новые вопросы. Гиперпараметры подгоняются так, чтобы ошибка прогнозов была минимальной.
    Репрезентативность
    Пример исходных данных для прогнозирования продаж
    Выбор алгоритмов их их параметров оказывают большое влияние на точность прогнозов, но определяющую роль играет набор признаков, т.е. состав переменных на которых будет будет обучаться алгоритм. При выборе признаков руководствуются физическими ограничениями, так как не все получается оцифровать и измерить (или сделать это за приемлемую цену).

    Специалист из предметной области определяет набор данных, которые необходимо получить и использовать для моделирования. Если таких данных много в уже оцифрованном виде, то применяются математические методы селекции: корреляция (correlation), хи-квадрат (chi-square), мера энтропии (Informaition gain), индекс Джини (GINI index), расчет уменьшения предсказательной способности при исключении переменной, рекурсивное разбиение (Recursive partitioning), сети векторного квантования (Learning Vector Quantization) и др.

    Перечислим полезные лайфхаки:
    • Цикличность можно закодировать категориальным фактором (день недели или месяца) или числовой переменной, которая отражает средний уровень целевой переменной за этот период.
    • Погоду, курсы валют и ставки ЦБ можно получать напрямую через API или скрапингом. Благодаря этому ваша модель будет работать без ручного обогащения новыми данными.
    • Результаты прогноза по ARIMA-моделям могут быть поданы на вход другим алгоритмам для дальнейшего сокращения остатков.

    Заключение

    Чтобы быстро прикинуть продажи в следующей неделе / месяце / году воспользуйтесь одним из наивных методов.

    Для краткосрочного прогнозирования временных рядов с устойчивой структурой подходят модели класса ARIMA.

    Для долгосрочного моделирования сложных и зависимых от внешних факторов процессов используйте модели машинного обучения.
    Формулы для определения достаточного объема выборки
    Напутствие
    Понравилась статья?
    Бесполезно
    Ни рыба ни мясо
    Полезно