Многомерные ряды и экзогенные переменные

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

Экзогенная переменная — внешний ряд, влияющий на целевой, но не объясняемый им: цена, погода, промо-акция, курс валюты.

Зачем внешние факторы

Часто будущее ряда зависит не только от его прошлого. Продажи мороженого тянет температура, спрос на товар — цена и акции, трафик сайта — рекламный бюджет. Учитывать такие экзогенные переменные — значит дать модели причину, а не только инерцию. ARIMA с экзогенными регрессорами называется SARIMAX (X — eXogenous).

Разница между «инерцией» и «причиной» решает исход в практических задачах. Чисто инерционная модель умеет лишь продолжать тенденцию: если продажи росли, она предскажет рост и дальше. Но она в принципе слепа к будущим событиям, которых не было в истории в том же виде. Запланировали на следующую неделю скидку 30% — инерционная модель об этом не знает и недооценит всплеск спроса, из-за чего склад окажется пустым в самый горячий момент. Модель с экзогенным фактором «промо» учитывает запланированное событие и заранее поднимает прогноз — это прямая экономия на упущенных продажах.

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

Endogenous против exogenous

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

Удобно делить экзогенные факторы на два класса. Первый — управляемые и заранее известные: цена, запланированные акции, расписание рассылок, дни праздников. Их будущие значения мы либо назначаем сами, либо знаем по календарю, поэтому подставляются они без риска. Второй класс — внешние и неизвестные: погода, курс валют, поведение конкурентов. Их будущее само неопределённо, и чтобы скормить их прогнозной модели, придётся сначала спрогнозировать их самих, наслаивая одну неопределённость на другую. На практике первый класс почти всегда даёт более надёжный прирост точности, чем второй.

# упрощённая регрессия: продажи = a + b*температура
temps = [20, 25, 30, 35, 28]
sales = [100, 130, 170, 210, 150]

mt = sum(temps)/len(temps); ms = sum(sales)/len(sales)
b = sum((temps[i]-mt)*(sales[i]-ms) for i in range(len(temps))) / sum((t-mt)**2 for t in temps)
a = ms - b*mt
print("a =", round(a, 2), " b =", round(b, 2))
print("Прогноз при 32°:", round(a + b*32, 1))

Вывод:

a = -51.69  b = 7.38
Прогноз при 32°: 184.5

Коэффициент b=7.38 означает: каждый дополнительный градус добавляет ~7 продаж. Зная завтрашнюю температуру, мы прогнозируем продажи точнее, чем по одной инерции ряда. Именно так экзогенные переменные включаются в SARIMAX (плюс AR/MA-часть для остатка).

Интерпретируемость коэффициента — отдельная ценность для бизнеса. Число b=7.38 не просто крутит прогноз, оно говорит вслух: «градус тепла стоит семь проданных порций». Менеджер может проверить это утверждение здравым смыслом и опытом, согласиться или насторожиться. Если коэффициент окажется отрицательным или абсурдно большим — это сигнал, что в данных что-то не так или связь мнимая. Прозрачная линейная связь экзогенного фактора с целью — то, чего лишены чёрные ящики, и потому такие модели остаются востребованными там, где решение надо обосновать.

Многомерные модели VAR

Когда несколько рядов влияют друг на друга взаимно (цена и спрос подстраиваются один под другой), применяют VAR (векторную авторегрессию): каждый ряд прогнозируется по прошлым значениям всех рядов сразу. В ML-подходе то же делается просто добавлением лагов чужих рядов в таблицу признаков.

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

Как работает под капотом

SARIMAX добавляет к ARIMA линейный член β·X_t: внешние регрессоры объясняют часть ряда, а оставшийся остаток моделируется AR/I/MA. VAR обобщает AR на вектор: матрица коэффициентов связывает все ряды. Главная опасность — путать корреляцию с причинностью: внешний ряд может коррелировать случайно, и тогда на новых данных «фактор» развалится. Поэтому экзогенные переменные выбирают с содержательным обоснованием, а не перебором.

Опасность мнимой корреляции стоит прочувствовать на примере. Если перебрать сотни случайных внешних рядов, какие-то из них чисто статистически совпадут с вашими продажами на исторических данных — закон больших чисел гарантирует ложные совпадения. Модель радостно подхватит такой «фактор», метрики на истории улучшатся, а на новых данных связь испарится, потому что её никогда и не было. Защита — двухступенчатая: сначала содержательная гипотеза, почему фактор должен влиять (есть физический или экономический механизм), и лишь потом проверка на данных. Подбор факторов перебором без гипотезы — прямой путь к красивому, но бесполезному прогнозу.

Частые ошибки

  • Использовать экзогенную переменную, будущее которой неизвестно, без её собственного прогноза.
  • Подавать в модель текущее значение экзогенного ряда вместо прошлого — скрытая утечка.
  • Принимать случайную корреляцию за причинную связь и строить на ней прогноз.
  • Забывать, что неопределённость прогноза самого экзогенного фактора переносится в итоговый прогноз цели.
  • Тянуть VAR на множество рядов с короткой историей — параметров больше, чем данных, и модель переобучается.

Итоги

  • Экзогенные переменные дают прогнозу внешние причины; ARIMA с ними — это SARIMAX.
  • Для прогноза нужны будущие значения экзогенных — иначе их тоже придётся прогнозировать.
  • VAR моделирует взаимное влияние нескольких рядов; в ML это лаги чужих рядов в признаках.
  • Управляемые известные факторы (цена, промо) надёжнее непредсказуемых (погода, курс).
Проверьте себя
1. Что такое экзогенная переменная в прогнозе временного ряда?
AЦелевой ряд, который прогнозируем
BВнешний фактор (цена, погода, промо), влияющий на целевой ряд
CЛаг самого ряда
DОшибка прогноза
2. Какая сложность возникает при использовании погоды как экзогенной переменной для прогноза?
AПогода не влияет на продажи
BНужны будущие значения погоды, а их самих надо прогнозировать
CПогоду нельзя измерить
DSARIMAX не поддерживает экзогенные