Прогнозирование временных рядов (Time Series Forecasting) — это критически важная дисциплина в анализе данных, позволяющая заглядывать в будущее на основе исторических паттернов. В этом подробном руководстве Марко Пешич, специалист компании Nixtla и автор профессиональной литературы по Python, разбирает путь от простейших базовых моделей до продвинутых статистических алгоритмов семейства ARMA.
📈 Анатомия временного ряда: тренд, сезонность и шум 4:03
Временной ряд — это не просто набор цифр, а последовательность данных, упорядоченных во времени . По словам Марко, ключевое отличие таких данных заключается в их структуре, которую можно разложить на четыре составляющие:
- Тренд: Общее направление движения (рост или падение) в долгосрочной перспективе .
- Сезонность: Повторяющиеся циклы через фиксированные интервалы (например, всплеск потребления электричества каждый вечер или рост продаж мороженого летом) .
- Цикличность: Колебания без фиксированного периода (например, экономические циклы).
- Остатки (Residuals): Случайный шум, который нельзя предсказать. Именно из-за него прогнозы никогда не бывают точными на 100% .
В качестве примера Марко приводит данные о производстве молока в Австралии . На графике отчетливо виден восходящий тренд и ежегодная сезонность. Задача моделирования — максимально точно описать первые три компонента, оставив в «остатках» только чистый хаос .
🛠 Базовые модели (Baselines): фундамент прогноза 6:42
Прежде чем переходить к нейросетям, Марко настаивает на создании «базовой линии» (baseline). Это простейшие алгоритмы, которые служат точкой отсчета. Если сложная модель работает хуже, чем простое усреднение, — значит, модель бесполезна .
Основные типы базовых моделей:
- Naive Forecast (Наивный прогноз): Прогнозом на завтра является значение за сегодня .
- Historic Average: Среднее значение за всю историю наблюдений .
- Seasonal Naive: Повторение последнего известного сезона (например, продажи в этот понедельник будут такими же, как в прошлый) .
- Window Average: Среднее значение за определенное «окно» (например, за последние 7 дней) .
Используя библиотеку statsforecast в Python, спикер демонстрирует, что для данных с выраженной сезонностью (продажи французской булочной) модель Seasonal Naive часто оказывается удивительно точной, превосходя обычное усреднение .
🧪 Семейство моделей ARMA: от статистики к практике 25:52
Центральная часть обучения посвящена модели ARIMA (AutoRegressive Integrated Moving Average). Марко разбирает её по компонентам:
- AR (AutoRegression): Физическая зависимость текущего значения от предыдущих . Параметр $p$ определяет «глубину» памяти модели.
- I (Integrated): Порядок интегрирования. Позволяет сделать ряд «стационарным» (убрать тренд), чтобы статистика работала корректно .
- MA (Moving Average): Учет прошлых ошибок прогноза (отклонений от среднего) .
Для работы с сезонными данными используется расширение — SARIMA (Seasonal ARIMA). Она добавляет параметры для учета циклов (например, еженедельных продаж) . Вместо того чтобы подбирать параметры вручную, Марко рекомендует использовать функцию AutoARIMA, которая автоматически перебирает тысячи комбинаций и выбирает лучшую по информационному критерию .
🏁 Кросс-валидация во временных рядах 39:16
Обычное случайное разбиение данных (train-test split), привычное для классического ML, здесь неприменимо. Во временных рядах нельзя перемешивать прошлое и будущее .
Марко объясняет метод скользящего окна (Rolling Window):
- Сначала модель обучается на одном участке и предсказывает следующий горизонт (например, 7 дней) .
- Затем окно сдвигается вперед, модель переобучается с учетом новых данных, и делается новый прогноз .
- Этот процесс повторяется многократно, что дает устойчивую оценку точности модели на разных участках времени .
🔌 Экзогенные факторы: когда цифр из прошлого мало 50:51
Прогноз можно улучшить, добавив внешние переменные — экзогенные факторы . Марко разделяет их на три типа:
- Статические: Информация, которая не меняется (например, категория магазина).
- Исторические: Мы знаем их в прошлом, но не знаем в будущем (например, курс валют — его самого нужно предсказывать) .
- Будущие: Мы знаем их заранее (праздники, выходные, расписание акций) .
Спикер показывает, как добавить в модель цены на продукцию (Unit Price). В библиотеке statsforecast это реализуется