Есть ли у вас опыт работы с временными рядами (Time Series)?

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

Ответ

Да, у меня есть практический опыт анализа и прогнозирования временных рядов в задачах, связанных с прогнозом спроса, обнаружением аномалий в трафике и финансовым моделированием.

Пример пайплайна для прогнозирования с использованием Prophet и feature engineering:

import pandas as pd
import numpy as np
from prophet import Prophet
from sklearn.metrics import mean_absolute_percentage_error

# Загрузка и подготовка данных
# Предполагается, что есть столбцы 'ds' (дата) и 'y' (целевая метрика, например, продажи)
df = pd.read_csv('sales_data.csv')
df['ds'] = pd.to_datetime(df['ds'])

# Добавление дополнительных регрессоров (например, был ли праздник)
df['is_holiday'] = df['ds'].isin(holiday_dates).astype(int)

# Создание и обучение модели Prophet
model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=False,
    changepoint_prior_scale=0.05
)
model.add_regressor('is_holiday')  # Добавление кастомного регрессора
model.fit(df)

# Создание датафрейма для прогноза на 90 дней вперед
future = model.make_future_dataframe(periods=90, freq='D')
future['is_holiday'] = future['ds'].isin(holiday_dates).astype(int)

# Прогноз
forecast = model.predict(future)

# Визуализация компонентов (тренд, сезонность)
fig = model.plot_components(forecast)

Мой опыт охватывает следующие аспекты:

  • Предобработка: Обработка пропусков (интерполяция), удаление выбросов (методом IQR или скользящими окнами) и декомпозиция ряда (тренд, сезонность, остаток) с помощью statsmodels.
  • Feature Engineering: Создание лаговых признаков (lag features), скользящих статистик (среднее, стандартное отклонение за окно), а также признаков, связанных с датой (день недели, месяц, квартал).
  • Моделирование: Применение классических статистических моделей (ARIMA, SARIMAX), современных библиотек (Prophet, sktime) и глубокого обучения (LSTM, Temporal Convolutional Networks) в зависимости от характера данных и требований к интерпретируемости.
  • Валидация: Использование временного кросс-валидации (TimeSeriesSplit) для корректной оценки качества модели, чтобы избежать "утечки" будущего в прошлое.