Series.ewm() — экспоненциальное взвешенное сглаживание

ewm строит экспоненциально взвешенное окно: чем дальше точка в прошлом, тем меньше её вес. После ewm(...) вызывают агрегат — чаще .mean() для EWMA, но есть .std(), .var(), .corr(). В отличие от rolling, окно не «обрубается» жёстко: учитывается вся история с затухающими весами, поэтому кривая получается плавной и быстрее реагирует на свежие данные.

Синтаксис

s.ewm(span=…, alpha=…, adjust=True).mean()

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

Пример 1: EWMA-сглаживание ряда (adjust=False)

s = pd.Series([10, 12, 30])
s.ewm(span=2, adjust=False).mean().round(2)

Результат:

0    10.00
1    11.33
2    23.78
dtype: float64

Пример 2: Задать сглаживание через alpha

s = pd.Series([10, 20, 30])
s.ewm(alpha=0.5, adjust=False).mean()

Результат:

0    10.0
1    15.0
2    22.5
dtype: float64
Порешать Python-задачи в тренажёре →

Типичная ошибка

Нужно указать ровно один из параметров com/span/halflife/alpha, иначе ошибка (связь: alpha = 2/(span+1)). adjust=True (по умолчанию) и adjust=False дают разные первые значения — при False идёт чистая рекуррентная формула, при True — нормировка весов. Пропуски обрабатываются через ignore_na, а сам ewm — не то же самое, что rolling(window).mean().

Где спрашивают на собеседовании

Сглаживание шумных метрик (DAU, выручка, конверсия), выделение тренда, EWMA-контроль аномалий. Спрашивают, когда обсуждают сглаживание time-series и разницу между скользящим и экспоненциальным средним.

FAQ: частые вопросы про ewm

Чем ewm отличается от rolling?

rolling берёт фиксированное окно и внутри него веса равные (или заданные win_type), забывая всё за пределами окна. ewm же учитывает всю историю, но с экспоненциально убывающими весами, поэтому реагирует на свежие точки быстрее и не имеет резкого края окна. Для стабильного «среднего за N дней» берут rolling, для плавного трендового сглаживания — ewm.

Что означают span и alpha?

alpha — коэффициент сглаживания от 0 до 1: чем он ближе к 1, тем сильнее вес свежих точек и короче память. span — более наглядная запись через «эквивалент N периодов», связанная как alpha = 2/(span+1). halflife задаёт период полураспада веса. Указывать нужно только один из них.

На что влияет adjust?

adjust=True считает взвешенное среднее с корректной нормировкой весов, из-за чего начальные значения ряда отличаются от простой рекуррентной формулы. adjust=False применяет рекуррентное EWMA y_t = alpha*x_t + (1-alpha)*y_{t-1}, что удобно для потоковых расчётов. На длинной дистанции результаты сходятся, расхождение заметно в начале ряда.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: временные ряды · NumPy векторизация

Другие функции pandas

apply · to_datetime · .str · np.where · rolling · resample

Открыть Python-тренажёр (556 задач) →