Time Series Forecasting in Python – Tutorial for Beginners

freeCodeCamp.org 111 тыс. 1 ч 33 мин 3 мин 07.08.2025

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

📈 Анатомия временного ряда: тренд, сезонность и шум 4:03

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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