Многомерные ряды и экзогенные переменные
Учимся подключать к прогнозу внешние факторы — цену, погоду, акции — и понимать их роль и риски.
Экзогенная переменная — внешний ряд, влияющий на целевой, но не объясняемый им: цена, погода, промо-акция, курс валюты.
Зачем внешние факторы
Часто будущее ряда зависит не только от его прошлого. Продажи мороженого тянет температура, спрос на товар — цена и акции, трафик сайта — рекламный бюджет. Учитывать такие экзогенные переменные — значит дать модели причину, а не только инерцию. 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 это лаги чужих рядов в признаках.
- Управляемые известные факторы (цена, промо) надёжнее непредсказуемых (погода, курс).