# Time Series Forecasting in Python – Tutorial for Beginners

Источник: https://www.youtube.com/watch?v=fxx_E0ojKrc
Канал: freeCodeCamp.org
Опубликовано: 07.08.2025

---

Прогнозирование временных рядов (Time Series Forecasting) — это критически важная дисциплина в анализе данных, позволяющая заглядывать в будущее на основе исторических паттернов. В этом подробном руководстве Марко Пешич, специалист компании Nixtla и автор профессиональной литературы по Python, разбирает путь от простейших базовых моделей до продвинутых статистических алгоритмов семейства ARMA.

## 📈 Анатомия временного ряда: тренд, сезонность и шум
[[JUMP:04:03]]

Временной ряд — это не просто набор цифр, а последовательность данных, упорядоченных во времени [03:37]. По словам Марко, ключевое отличие таких данных заключается в их структуре, которую можно разложить на четыре составляющие:

*   **Тренд:** Общее направление движения (рост или падение) в долгосрочной перспективе [05:08].
*   **Сезонность:** Повторяющиеся циклы через фиксированные интервалы (например, всплеск потребления электричества каждый вечер или рост продаж мороженого летом) [04:42].
*   **Цикличность:** Колебания без фиксированного периода (например, экономические циклы).
*   **Остатки (Residuals):** Случайный шум, который нельзя предсказать. Именно из-за него прогнозы никогда не бывают точными на 100% [05:34].

В качестве примера Марко приводит данные о производстве молока в Австралии [04:03]. На графике отчетливо виден восходящий тренд и ежегодная сезонность. Задача моделирования — максимально точно описать первые три компонента, оставив в «остатках» только чистый хаос [06:01].

## 🛠 Базовые модели (Baselines): фундамент прогноза
[[JUMP:06:42]]

Прежде чем переходить к нейросетям, Марко настаивает на создании «базовой линии» (baseline). Это простейшие алгоритмы, которые служат точкой отсчета. Если сложная модель работает хуже, чем простое усреднение, — значит, модель бесполезна [09:22].

Основные типы базовых моделей:

1.  **Naive Forecast (Наивный прогноз):** Прогнозом на завтра является значение за сегодня [08:35].
2.  **Historic Average:** Среднее значение за всю историю наблюдений [07:22].
3.  **Seasonal Naive:** Повторение последнего известного сезона (например, продажи в этот понедельник будут такими же, как в прошлый) [08:48].
4.  **Window Average:** Среднее значение за определенное «окно» (например, за последние 7 дней) [16:09].

Используя библиотеку `statsforecast` в Python, спикер демонстрирует, что для данных с выраженной сезонностью (продажи французской булочной) модель Seasonal Naive часто оказывается удивительно точной, превосходя обычное усреднение [23:54].

## 🧪 Семейство моделей ARMA: от статистики к практике
[[JUMP:25:52]]

Центральная часть обучения посвящена модели **ARIMA** (AutoRegressive Integrated Moving Average). Марко разбирает её по компонентам:

*   **AR (AutoRegression):** Физическая зависимость текущего значения от предыдущих [26:44]. Параметр $p$ определяет «глубину» памяти модели.
*   **I (Integrated):** Порядок интегрирования. Позволяет сделать ряд «стационарным» (убрать тренд), чтобы статистика работала корректно [28:45].
*   **MA (Moving Average):** Учет прошлых ошибок прогноза (отклонений от среднего) [27:24].

Для работы с сезонными данными используется расширение — **SARIMA** (Seasonal ARIMA). Она добавляет параметры для учета циклов (например, еженедельных продаж) [29:25]. Вместо того чтобы подбирать параметры вручную, Марко рекомендует использовать функцию `AutoARIMA`, которая автоматически перебирает тысячи комбинаций и выбирает лучшую по информационному критерию [32:04].

## 🏁 Кросс-валидация во временных рядах
[[JUMP:39:16]]

Обычное случайное разбиение данных (train-test split), привычное для классического ML, здесь неприменимо. Во временных рядах нельзя перемешивать прошлое и будущее [40:07].

Марко объясняет метод **скользящего окна (Rolling Window)**:

*   Сначала модель обучается на одном участке и предсказывает следующий горизонт (например, 7 дней) [43:34].
*   Затем окно сдвигается вперед, модель переобучается с учетом новых данных, и делается новый прогноз [45:38].
*   Этот процесс повторяется многократно, что дает устойчивую оценку точности модели на разных участках времени [49:46].

## 🔌 Экзогенные факторы: когда цифр из прошлого мало
[[JUMP:50:51]]

Прогноз можно улучшить, добавив внешние переменные — экзогенные факторы [51:17]. Марко разделяет их на три типа:

1.  **Статические:** Информация, которая не меняется (например, категория магазина).
2.  **Исторические:** Мы знаем их в прошлом, но не знаем в будущем (например, курс валют — его самого нужно предсказывать) [52:21].
3.  **Будущие:** Мы знаем их заранее (праздники, выходные, расписание акций) [52:47].

Спикер показывает, как добавить в модель цены на продукцию (Unit Price). В библиотеке `statsforecast` это реализуется