Sobes.tech
Назад к вопросам
Middle — Senior
7

Что такое exponential smoothing и Holt-Winters?

Компании, где спрашивали
ВТБВТБ
ЛеруаМерлен

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Exponential smoothing — это семейство методов сглаживания временных рядов, где более свежие наблюдения имеют больший вес, чем старые. Holt-Winters — это расширение, которое умеет учитывать не только уровень ряда, но и тренд, а также сезонность. Обычно важно показать, что метод подходит для короткосрочного прогнозирования и простых, интерпретируемых моделей.

Определение:

Exponential smoothing — это метод прогнозирования временных рядов, в котором текущее значение сглаженной оценки считается как комбинация нового наблюдения и предыдущей оценки, причём вес прошлых данных убывает экспоненциально.
Базовая идея: чем дальше значение во времени, тем меньше его влияние на текущий прогноз.

Holt-Winters — это расширение exponential smoothing для рядов с:

  • уровнем,
  • трендом,
  • сезонностью.

Бывает два основных варианта сезонности:

  • аддитивная — сезонный эффект примерно постоянной величины;
  • мультипликативная — сезонный эффект пропорционален уровню ряда.

Пример использования:

Например, в продажах магазина есть регулярный недельный сезонный паттерн: в выходные продажи выше, в будни ниже. Тогда простой moving average будет запаздывать, а Holt-Winters сможет учитывать и общий рост продаж, и повторяющуюся сезонность.

from statsmodels.tsa.holtwinters import ExponentialSmoothing

# sales — временной ряд продаж, например pandas Series
model = ExponentialSmoothing(
    sales,
    trend="add",
    seasonal="add",
    seasonal_periods=7
)

fit = model.fit()
forecast = fit.forecast(14)

Пояснение кода:

  • ExponentialSmoothing(...) создаёт модель сглаживания для временного ряда.
  • trend="add" включает аддитивный тренд, то есть модель учитывает линейный рост или падение.
  • seasonal="add" включает аддитивную сезонность.
  • seasonal_periods=7 задаёт длину сезона, например 7 дней для недельной сезонности.
  • fit() оценивает параметры модели по историческим данным.
  • forecast(14) строит прогноз на 14 следующих точек.

Если нужен Holt-Winters, то по сути это именно такой вызов с включёнными компонентами тренда и/или сезонности.

Ключевые моменты:

  • Экспоненциальное сглаживание даёт больший вес недавним данным и меньший — старым.
  • Holt-Winters = уровень + тренд + сезонность.
  • Аддитивная сезонность подходит, когда амплитуда сезонного эффекта примерно постоянна.
  • Мультипликативная сезонность подходит, когда сезонный эффект растёт вместе с уровнем ряда.
  • Метод хорошо работает для краткосрочного прогноза и интерпретируем, но плохо ловит сложные нелинейные паттерны.
  • Важно правильно выбрать период сезонности и тип сезонности, иначе качество прогноза сильно падает.