Какие основные компоненты и свойства временных рядов вы знаете?

«Какие основные компоненты и свойства временных рядов вы знаете?» — вопрос из категории Временные ряды, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Временной ряд — это последовательность данных, упорядоченных во времени. Его структуру и поведение описывают следующие ключевые компоненты и свойства:

1. Компоненты ряда (декомпозиция):

  • Тренд (Trend, T): Долгосрочное направленное движение данных (возрастающее, убывающее, горизонтальное). Например, общий рост числа пользователей приложения за год.
  • Сезонность (Seasonality, S): Периодические, повторяющиеся колебания с фиксированной и известной частотой (сутки, неделя, месяц, квартал, год). Например, пики продаж мороженого летом или всплески трафика на сайте в понедельник утром.
  • Цикличность (Cyclical, C): Колебания без строгой фиксированной периодичности, обычно связанные с экономическими циклами (длительностью более года).
  • Шум/Остатки (Residual/Noise, R): Случайные, несистематические колебания, которые нельзя объяснить трендом, сезонностью или цикличностью.

Модель аддитивной декомпозиции: Y(t) = T(t) + S(t) + C(t) + R(t)
Модель мультипликативной декомпозиции: Y(t) = T(t) * S(t) * C(t) * R(t)

2. Критические статистические свойства:

  • Стационарность (Stationarity): Свойство ряда, при котором его статистические характеристики (среднее значение, дисперсия, автокорреляция) не меняются со временем. Большинство классических моделей (ARIMA) требуют стационарности. Проверяется тестами (Дики-Фуллера, KPSS).
  • Автокорреляция (Autocorrelation): Корреляция ряда с самим собой на разных временных лагах. Функция автокорреляции (ACF) показывает, насколько текущее значение зависит от предыдущих. Частная автокорреляция (PACF) измеряет чистую зависимость между Y(t) и Y(t-k), исключая влияние промежуточных лагов.

Пример проверки стационарности и визуализации ACF/PACF:

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# Тест Дики-Фуллера
result = adfuller(series)
print(f'ADF Statistic: {result[0]:.4f}')
print(f'p-value: {result[1]:.4f}')
if result[1] < 0.05:
    print("Ряд стационарен (отвергаем H0 о наличии единичного корня).")
else:
    print("Ряд нестационарен.")

# Графики ACF и PACF
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
plot_acf(series, lags=40, ax=ax1)
plot_pacf(series, lags=40, ax=ax2, method='ywm')
plt.show()

Понимание этих компонент — основа для выбора и настройки моделей прогнозирования (ARIMA, SARIMA, Exponential Smoothing).