포스트

지수평활부터 ETS까지 — 단변량 시계열의 또 다른 표준

지수평활부터 ETS까지 — 단변량 시계열의 또 다른 표준

지난 시리즈에서 ARIMA/SARIMA를 끝까지 다뤘습니다. 시계열 분야에는 ARIMA와 거의 맞먹는 또 다른 표준 모형군이 있습니다. 지수평활(Exponential Smoothing) 과 그 정점인 ETS입니다. Hyndman & Athanasopoulos(2021)의 Forecasting: Principles and Practice에서도 ARIMA보다 앞 챕터에서 다뤄집니다.

SES에서 시작해서 추세, 계절성을 차례로 더해 가며 ETS까지 올라가고, 마지막에 같은 Air Passengers 데이터로 ETS와 SARIMA를 수치 비교합니다.

1. 지수평활의 발상 — “최근 값을 더 무겁게”

$y_1, y_2, \ldots, y_t$가 주어졌을 때 $\hat{y}_{t+1}$을 어떻게 예측할까요.

가장 단순한 두 가지 선택지:

  • (전체 평균) $\hat{y}_{t+1} = \bar{y} = \frac{1}{t} \sum_{i=1}^{t} y_i$
  • (직전 값) $\hat{y}_{t+1} = y_t$

전체 평균은 모든 과거를 똑같이 취급해 너무 둔감하고, 직전 값만 쓰는 건 노이즈에 너무 민감합니다. 그 사이의 절충이 이동평균입니다.

\[\hat{y}_{t+1} = \frac{1}{k} \sum_{i=t-k+1}^{t} y_i \quad (\text{윈도우 크기 } k)\]

나쁘지 않지만 어색한 부분이 하나 있습니다. 윈도우 안의 값들을 모두 동등하게 취급한다는 것입니다. 어제 값과 일주일 전 값을 같은 무게로 쓰는 게 맞는 선택인지는 생각해볼 여지가 있습니다.

지수평활은 이 부분에 정면으로 답합니다. 최근 값에 더 큰 가중치, 과거로 갈수록 기하급수적으로 줄어드는 가중치를 부여합니다.

\[\hat{y}_{t+1} = \alpha y_t + \alpha(1-\alpha) y_{t-1} + \alpha(1-\alpha)^2 y_{t-2} + \cdots\]

가중치 비율 $\alpha, \alpha(1-\alpha), \alpha(1-\alpha)^2, \ldots$는 1, $(1-\alpha)$, $(1-\alpha)^2, \ldots$의 등비수열입니다. 무한 과거를 가정하거나 초기화 효과를 무시하면 모두 합해 1이 되므로 수학적으로 깔끔한 가중평균입니다.

이동평균과 지수평활을 같은 데이터에 적용해 보면:

이동평균 vs 지수평활

두 곡선이 비슷해 보이지만 미묘한 차이가 있습니다. 이동평균은 윈도우의 양 끝에서 한 점이 들어오거나 빠지면서 약간의 출렁임이 있고, 지수평활은 더 부드럽게 이어집니다. 또 이동평균은 윈도우 크기만큼 시작 부분에서 결측이 생기는 반면, 지수평활은 첫 시점부터 값을 줍니다.

statsmodels 내장 Air Passengers 데이터로 두 방법을 직접 비교해 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

# Air Passengers 로드 (statsmodels 내장)
ap = sm.datasets.get_rdataset("AirPassengers", "datasets").data
series = pd.Series(
    ap["value"].values,
    index=pd.date_range("1949-01", periods=144, freq="MS"),
    name="passengers",
)

# 이동평균 — 윈도우 k=12 (월별 데이터 기준 1년)
ma = series.rolling(window=12).mean()

# 지수평활 — α=0.3 고정 (smoothing 효과를 눈으로 확인하기 위한 값)
ses = SimpleExpSmoothing(series).fit(smoothing_level=0.3, optimized=False)

fig, ax = plt.subplots(figsize=(12, 4))
ax.plot(series, color="lightgray", label="원본")
ax.plot(ma, label="이동평균 (k=12)", linewidth=1.8)
ax.plot(ses.fittedvalues, label="지수평활 (α=0.3)", linewidth=1.8)
ax.legend()
ax.set_title("이동평균 vs 지수평활 (Air Passengers)")
plt.tight_layout()
plt.show()

플롯에서 보이는 차이는 사실 이 세 가지에서 비롯합니다.

 이동평균 (k=12)지수평활
시작 시점처음 11개 값은 NaN첫 시점부터 값 있음
가중치윈도우 내 모두 동일 ($\frac{1}{k}$)최근일수록 지수적으로 큼
곡선 모양한 점이 들어오고 빠질 때 미세 출렁임연속적으로 부드럽게 감쇠

용어 혼동 — 단순 이동평균과 ARIMA MA

둘 다 선형 필터라는 공통점이 있지만 적용 대상과 해석이 다릅니다.

  • 단순 이동평균 (rolling(k).mean()) → 관측값에 적용 (데이터 평활)
  • ARIMA MA(q) → 백색잡음 충격에 적용 (모형 구조)

연결 고리는 Slutsky(1927)입니다. 백색잡음 수열 $\varepsilon_t$에 단순 이동평균을 그대로 적용하면:

\[y_t = \frac{1}{k}(\varepsilon_t + \varepsilon_{t-1} + \cdots + \varepsilon_{t-k+1})\]

이게 이미 MA 프로세스입니다. Slutsky는 이렇게 만든 수열에서 뚜렷한 주기성이 나타난다는 걸 보였고, 이로부터 “관측된 시계열은 과거 충격들의 누적 효과일 수 있다”는 아이디어가 나왔습니다. ARIMA MA는 여기서 고정된 $\frac{1}{k}$를 자유 파라미터 $\theta_i$로 일반화한 것입니다:

\[y_t = \varepsilon_t + \theta_1\varepsilon_{t-1} + \cdots + \theta_q\varepsilon_{t-q}\]

이름이 같은 건 우연이 아닙니다. 다만 관측값 평활로서의 이동평균과 확률과정 생성 모형으로서의 MA(q)를 같은 것으로 받아들이면 안 됩니다. 공통점은 선형 필터이고, 차이는 무엇에 필터를 적용하느냐입니다.

2. SES — 단순지수평활(Simple Exponential Smoothing)

위의 무한합을 매번 계산할 필요는 없습니다. 재귀 형태로 간단히 표현됩니다.

\[\hat{y}_{t+1} = \alpha y_t + (1-\alpha) \hat{y}_t\]

이 한 줄이 SES의 전부입니다. 새 예측값은 (이번 관측값과 직전 예측값의 가중평균). $\alpha$는 평활 모수(smoothing parameter)이고 $0 < \alpha < 1$ 범위입니다.1

$\alpha$ 값별로 결과가 꽤 다릅니다.

SES의 알파 효과

  • $\alpha = 0.1$ (위): 새 관측에 거의 반응 안 함. 매우 부드럽지만 변화에 늦게 따라감.
  • $\alpha = 0.5$ (중간): 균형 잡힘.
  • $\alpha = 0.9$ (아래): 거의 노이즈를 그대로 따라감. 평활 효과가 거의 없음.

함정 박스 1 — α는 어떻게 정하는가

실무에서 $\alpha$는 보통 데이터로부터 추정합니다. 학습 구간의 잔차 제곱합을 최소화하는 $\alpha$를 찾는 식입니다. statsmodels의 SimpleExpSmoothing(...).fit()이 자동으로 이 일을 해 줍니다. 수동 지정도 가능하지만, 추정 결과가 보통 더 좋습니다.

statsmodels로 적용하면 한 줄입니다.

1
2
3
4
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

model = SimpleExpSmoothing(series).fit()  # α 자동 추정
forecast = model.forecast(steps=12)

여기서 한계가 보입니다. SES의 예측은 한 시점 이후로는 모두 같은 값(평탄선) 입니다. $\hat{y}_{t+1} = \hat{y}_{t+2} = \hat{y}_{t+3} = \cdots$. SES는 본질적으로 “수준(level)”만 추적하기 때문에 추세를 모릅니다. 그래서 다음 단계가 필요합니다.

3. Holt’s Linear Trend — 추세 추가

추세가 있는 시계열을 다루려면 수준 외에 기울기도 추적해야 합니다. Holt(1957)가 제안한 방식이 SES에 추세 컴포넌트를 더하는 것입니다.2

\[\begin{aligned} \ell_t &= \alpha y_t + (1-\alpha)(\ell_{t-1} + b_{t-1}) \\ b_t &= \beta(\ell_t - \ell_{t-1}) + (1-\beta) b_{t-1} \\ \hat{y}_{t+h} &= \ell_t + h \cdot b_t \end{aligned}\]

세 식의 의미는:

  • $\ell_t$: 시점 $t$의 수준(level) — “현재 값이 얼마인가”
  • $b_t$: 시점 $t$의 추세 기울기(slope) — “단위 시간당 얼마나 변하는가”. 업데이트 식 $b_t = \beta(\ell_t - \ell_{t-1}) + (1-\beta)b_{t-1}$을 보면, $\ell_t - \ell_{t-1}$이 이번 기에 관측된 수준 변화량(기울기 추정치)이고 이를 이전 기울기와 평활한 값이 $b_t$입니다.
  • $h$: 예측 지평(forecast horizon) — 지금 시점 $t$에서 몇 발자국 앞을 예측할지. $h=1$이면 1기 후, $h=12$면 12기 후. SES에 $h$가 없는 이유는 SES 예측 $\hat{y}_{t+h} = \ell_t$가 $h$와 무관하게 항상 같은 값이기 때문입니다.
  • $\hat{y}_{t+h} = \ell_t + h \cdot b_t$: 현재 수준에서 기울기 $b_t$로 $h$발자국 직선 외삽

레벨 식에서 눈에 띄는 부분은 $(1-\alpha)$ 항이 $\ell_{t-1}$이 아닌 $\ell_{t-1} + b_{t-1}$이라는 점입니다. $\ell_{t-1} + b_{t-1}$은 직전 시점에서 $y_t$를 예측한 값 $\hat{y}_{t \mid t-1}$입니다. 따라서 레벨 업데이트는 “실제 관측값”과 “한 시점 전에 예측했던 값”을 $\alpha : (1-\alpha)$로 섞는 구조입니다.

 $(1-\alpha)$ 항의미
SES$\ell_{t-1}$제자리에 있겠지
Holt’s$\ell_{t-1} + b_{t-1}$추세만큼 올라가 있겠지

SES처럼 $(1-\alpha)\ell_{t-1}$만 쓰면 추세가 있는 데이터에서 prior expectation이 항상 실제보다 낮아 레벨 추정이 관측값을 뒤쫓아가는 lag가 생깁니다. $b_{t-1}$을 더해 prior를 추세만큼 앞당김으로써 그 lag를 없앱니다.

예시: $\ell_t = 300$, $b_t = 10$ (월 평균 10단위 증가 추세)일 때

$h$예측값의미
13101개월 후
33303개월 후
1242012개월 후

SES였다면 셋 다 300. Holt는 추세를 알기 때문에 $h$가 커질수록 예측값이 선형으로 달라집니다.

평활 모수가 두 개($\alpha, \beta$)로 늘었습니다. $\alpha$는 수준의 평활 정도, $\beta$는 추세의 평활 정도입니다. 둘 다 데이터로부터 추정합니다.

이렇게 하면 SES와 달리 예측값이 평탄하지 않고 선형으로 외삽됩니다.

4. Holt-Winters — 계절성 추가

계절성까지 다루려면 컴포넌트를 하나 더 추가합니다. Holt(1957)와 Winters(1960)의 결합이라 Holt-Winters 또는 삼중지수평활(triple exponential smoothing) 로 불립니다.3

가법 계절성 버전:

\[\begin{aligned} \ell_t &= \alpha (y_t - s_{t-m}) + (1-\alpha)(\ell_{t-1} + b_{t-1}) \\ b_t &= \beta(\ell_t - \ell_{t-1}) + (1-\beta) b_{t-1} \\ s_t &= \gamma (y_t - \ell_t) + (1-\gamma) s_{t-m} \\ \hat{y}_{t+h} &= \ell_t + h \cdot b_t + s_{t+h-m} \end{aligned}\]

세 평활 모수($\alpha, \beta, \gamma$)와 한 개의 구조 모수($m$, 계절 주기)가 들어갑니다. 수준, 추세, 계절성 세 컴포넌트가 각자 자기 평활을 따로 합니다.

Holt's Linear Trend

$$ \begin{aligned} \ell_t &= \alpha y_t + (1-\alpha)(\ell_{t-1} + b_{t-1}) \\ b_t &= \beta(\ell_t - \ell_{t-1}) + (1-\beta) b_{t-1} \\ \hat{y}_{t+h} &= \ell_t + h \cdot b_t \end{aligned} $$

모수: α, β

Holt-Winters (가법 계절성)

$$ \begin{aligned} \ell_t &= \alpha (y_t - s_{t-m}) + (1-\alpha)(\ell_{t-1} + b_{t-1}) \\ b_t &= \beta(\ell_t - \ell_{t-1}) + (1-\beta) b_{t-1} \\ s_t &= \gamma (y_t - \ell_t) + (1-\gamma) s_{t-m} \\ \hat{y}_{t+h} &= \ell_t + h \cdot b_t + s_{t+h-m} \end{aligned} $$

모수: α, β, γ, m

곱셈 계절성 버전은 식의 형태만 살짝 다릅니다 (덧셈을 곱셈/나눗셈으로 대체). Air Passengers처럼 계절 변동의 폭이 수준에 비례해 커지는 경우는 곱셈을 씁니다.

statsmodels로 적용하면 이렇게 됩니다.

1
2
3
4
5
6
7
8
9
from statsmodels.tsa.holtwinters import ExponentialSmoothing

model = ExponentialSmoothing(
    train,
    trend='add',          # 'add' | 'mul' | None
    seasonal='mul',       # 'add' | 'mul' | None
    seasonal_periods=12,
).fit()
forecast = model.forecast(steps=24)

이전 글에서 SARIMA로 다뤘던 Air Passengers에 Holt-Winters(가법 추세 + 곱셈 계절성)를 적용해 보면:

Holt-Winters on Air Passengers

24개월 예측 MAPE가 6.39% 입니다. 이전 글에서 SARIMA(0,1,1)(0,1,1)$_{12}$이 같은 데이터에서 얻은 8.52%보다 살짝 좋습니다. 모형의 가정과 데이터의 성격이 잘 맞으면 Holt-Winters가 SARIMA를 이기는 경우도 흔합니다.

함정 박스 2 — 가법 vs 곱셈 컴포넌트 선택

추세는 보통 가법으로 충분합니다. 헷갈리는 부분은 계절성입니다. 계절 변동의 폭이 시간에 따라 일정하면 가법, 수준에 비례해 커지면 곱셈입니다. Air Passengers는 명확히 곱셈입니다(이전 SARIMA 글에서도 같은 판정). 헷갈리면 두 버전을 다 적합해 보고 잔차의 패턴이 더 깨끗한 쪽을 고르세요.

4.1 그런데 “지수평활”이 정말 예측인가? — 다단계 예측의 모양

한 가지 의문이 남습니다. 이름이 “평활”인데 정말 예측 도구인가? 두 시점 앞을 예측하려면 어떻게 하는가?

핵심을 먼저 짚으면 — 지수평활은 본질적으로 한 발자국 앞 예측(one-step-ahead forecast)을 만드는 재귀 공식입니다. SES의 식 $\hat{y}_{t+1} = \alpha y_t + (1-\alpha)\hat{y}_t$는 “시점 $t$까지의 정보로 $t+1$을 예측한다”는 뜻이지요. 학습 단계에서 시각화되는 부드러운 곡선(fitted values)은 사실 매 시점마다 한 발자국 앞 예측을 모아 놓은 것일 뿐입니다.

문제는 두 발자국 이상 앞 예측입니다. SES 식을 그대로 한 번 더 적용하려고 하면 막힙니다.

\[\hat{y}_{T+2} = \alpha \cdot y_{T+1} + (1-\alpha) \cdot \hat{y}_{T+1}\]

여기서 $y_{T+1}$은 아직 관측되지 않은 미래 값이라 모릅니다. 표준적 해법은 $y_{T+1}$ 자리에 그 자체의 예측값 $\hat{y}_{T+1}$을 대입하는 것입니다. 대입하고 정리하면 $\hat{y}_{T+2} = \hat{y}_{T+1}$이 됩니다. 더 일반화하면:

\[\hat{y}_{T+h} = \hat{y}_{T+1} \quad \text{for all } h \geq 1\]

SES의 다단계 예측은 모두 같은 값입니다. 이게 본문 2절에서 “SES의 예측은 평탄선”이라고 한 부분의 정확한 수학적 의미입니다. 추세나 계절성 정보가 없으니 더 멀리 갈수록의 모양을 만들어 낼 수 없는 것이죠.

Holt와 Holt-Winters가 컴포넌트를 추가한 이유가 바로 이 한계 때문입니다. 모형별로 $h$ 발자국 앞 예측이 어떻게 다른지 정리하면:

모형$h$ 발자국 앞 예측 $\hat{y}_{T+h}$멀리 갈수록의 모양
SES$\ell_T$ (상수)평탄선
Holt$\ell_T + h \cdot b_T$직선 (선형 외삽)
Holt-Winters$\ell_T + h \cdot b_T + s_{T+h-m}$추세 + 주기적 계절 패턴

마지막 행의 $s_{T+h-m}$이 흥미로운 부분입니다. $h$ 발자국 앞의 계절 컴포넌트는 한 주기($m$) 전의 같은 위치 계절값을 가져다 씁니다. 24개월 예측이라도 계절 주기가 12개월이면 작년 같은 달의 계절 효과를 그대로 다시 사용하는 식이지요. 위 그래프(Holt-Winters on Air Passengers)에서 24개월 예측이 톱니 패턴을 그대로 유지하는 이유가 이것입니다.

함정 박스 3 — 다단계 예측의 예측구간은 시간이 갈수록 넓어진다

다단계 예측은 본질적으로 재귀적입니다. $\hat{y}_{T+1}$의 불확실성이 $\hat{y}_{T+2}$ 계산에 누적되고, 그게 다시 $\hat{y}_{T+3}$에 누적되는 식이지요. 그래서 예측구간이 시간이 갈수록 발산하듯 넓어집니다. 이전 SARIMA 글에서 본 예측구간 발산과 같은 메커니즘입니다. ETS는 상태공간 모형이라 이 누적이 모형 가정 하에서 일관되게 정량화됩니다 — get_prediction(steps=h).conf_int()로 확인하실 수 있습니다.

이 다단계 예측의 모양 차이가 사실 컴포넌트를 추가한 진짜 이유입니다. 단순히 “더 잘 맞아서”가 아니라, 추세 컴포넌트가 있어야 우상향이 가능하고, 계절 컴포넌트가 있어야 톱니 패턴이 가능하니까요. SES → Holt → Holt-Winters 순서는 결국 “예측 곡선이 취할 수 있는 모양을 하나씩 더 늘리는 과정”입니다.

5. ETS — 상태공간 정식화

여기까지 SES → Holt → Holt-Winters로 컴포넌트를 하나씩 더해 왔습니다. ETS (Error-Trend-Seasonal) 는 이 모든 변형을 하나의 통일된 틀에 담은 것입니다. Hyndman 등이 2002년에 정식화했고4, 현재 시계열 예측의 양대 표준 중 하나입니다.

ETS의 표기는 세 글자입니다.

\[\text{ETS}(\underbrace{\cdot}_{\text{Error}}, \underbrace{\cdot}_{\text{Trend}}, \underbrace{\cdot}_{\text{Seasonal}})\]

각 자리에 들어갈 수 있는 값:

컴포넌트가능한 값의미
ErrorA, M가법(additive) 또는 곱셈(multiplicative)
TrendN, A, A$_d$없음 / 가법 / 가법 감쇠(damped)
SeasonalN, A, M없음 / 가법 / 곱셈

위 표를 단순 조합하면 18개 기본 모델군이 됩니다.5 실무에서는 모든 조합이 항상 허용되는 것은 아니므로, 여기서는 대표적인 이름들과의 대응만 보겠습니다.

ETS 표기별명
ETS(A, N, N)SES (단순지수평활)
ETS(A, A, N)Holt’s linear trend
ETS(A, A, A)Holt-Winters 가법
ETS(A, A, M)Holt-Winters 곱셈
ETS(A, A$_d$, A)감쇠 추세 + 가법 계절성

ETS의 진짜 강점은 상태공간 모형(state space model) 으로 정식화됐다는 점입니다.6 덕분에 기존 Holt-Winters와 비교해 두 가지가 달라집니다.

  1. 예측구간을 모형 가정 하에서 일관되게 계산할 수 있음 — 기존 Holt-Winters는 점예측만 줄 수 있었지만, ETS는 가능도 기반 예측구간을 줍니다.
  2. AIC/BIC로 후보 모델 중 자동 선택 가능 — 어떤 컴포넌트 조합이 데이터에 맞는지 정보 기준으로 비교할 수 있습니다.
1
2
3
4
5
6
7
8
from statsmodels.tsa.exponential_smoothing.ets import ETSModel

# 수동 지정
model = ETSModel(train, error='add', trend='add', seasonal='mul', 
                 seasonal_periods=12).fit()

# 또는 R의 forecast::ets()와 statsforecast 패키지의
# AutoETS는 후보 ETS 모델들을 자동 비교해 줍니다.

함정 박스 3 — 여러 ETS 후보 중 어떤 걸 쓰나

자동 선택(R의 forecast::ets()나 Python의 statsforecast.AutoETS)이 보통 합리적인 답을 줍니다. 다만 자동 선택이 곱셈 계절성을 고른다면 데이터가 양수여야 합니다 — 음수가 섞인 시계열에서는 가법으로 강제하셔야 합니다. 또 표본 크기가 너무 작으면(2주기 미만) 계절 컴포넌트를 신뢰성 있게 추정할 수 없으니 주기를 잡지 마시기 바랍니다.

6. ETS vs SARIMA — 같은 데이터, 두 가지 접근

이전 글에서 SARIMA(0,1,1)(0,1,1)$_{12}$로 Air Passengers를 24개월 예측했을 때 MAPE 8.52%를 얻었습니다. 같은 train/test split에 ETS(A,A,M)를 적용하면 어떻게 될까요.

ETS vs SARIMA

모델24개월 예측 MAPE
Holt-Winters (수동)6.39%
ETS(A, A, M)6.56%
SARIMA(0,1,1)(0,1,1)$_{12}$8.52%

이 데이터에서는 ETS가 SARIMA보다 살짝 좋습니다. 그렇다고 ETS가 항상 SARIMA보다 좋다는 뜻은 아닙니다. 두 모형은 서로 잘하는 영역이 다릅니다.

 ARIMA / SARIMAETS
사고 방식“차분 후 정상 시계열의 자기상관”“수준·추세·계절성을 직접 평활”
잘 다루는 데이터자기상관 구조가 분명한 시계열추세와 계절성이 명확한 시계열
정상성 가정차분으로 정상화 필요차분 선행 없이 수준·추세·계절성을 직접 추적
모수 의미$\phi, \theta$ (해석 어려움)$\alpha, \beta, \gamma$ (의미 명확)
자동 선택auto_arima (pmdarima)AutoETS (statsforecast)
여러 시계열에 일괄 적용무거움가벼움

6.1 정상성 — ETS가 비정상 시계열에 바로 적용되는 이유

ARIMA는 왜 정상성이 필요한가. ARIMA의 핵심은 자기상관 구조를 추정하는 것입니다. 평균이 이동하는 시계열에서는 자기상관 추정이 의미를 잃기 때문에, 먼저 차분(differencing)으로 평균을 고정합니다. ARIMA의 “I”가 그 차분 횟수입니다.

ETS는 왜 그 과정이 필요 없는가. ETS는 비정상성의 원인(추세, 계절성)을 제거하는 대신 직접 모델링합니다. $\ell_t$는 매 시점 업데이트되어 이동하는 평균을 따라가고, $b_t$ 역시 매 시점 업데이트되어 변화하는 기울기를 추적합니다. “정상화 후 자기상관 분석”이 아니라 “컴포넌트를 직접 추적”하는 패러다임입니다.

흥미로운 사실은 수학적으로는 두 접근이 연결된다는 점입니다.

ETS동치인 ARIMA
SESARIMA(0,1,1)
Holt’s linearARIMA(0,2,2)

일부 선형 additive ETS는 특정 ARIMA와 예측식이 연결됩니다. SES는 일정 조건하에서 1차 차분한 ARIMA(0,1,1)과 같은 예측을 만들고, Holt’s linear도 additive error 등 특정 조건하에서 ARIMA(0,2,2)와 연결됩니다. 내부적으로 비슷한 예측식을 만들 수 있지만, ETS는 그것을 “추세 컴포넌트를 평활한다”는 언어로 표현합니다.7

다만 ETS도 한계는 있습니다. 분산이 수준에 비례해 커지는 경우(Air Passengers처럼)는 곱셈(multiplicative) 버전이 필요하고, 구조적 단절(regime change)은 두 모형 모두 잘 다루지 못합니다.

실무 권고:

  • 어떤 게 좋을지 모르겠으면 둘 다 적합해 보고 검증 셋의 성능으로 비교하세요. M3, M4 같은 forecasting 대회에서도 단일 모형이 항상 이기는 일은 없고, 두 모형의 단순 평균이 종종 최고 성능을 보입니다.8
  • 자기상관 구조가 복잡한 시계열(거시경제 변수, 금융)은 ARIMA/SARIMA가 강합니다.
  • 추세·계절성이 명확하고 자기상관은 단순한 시계열(소매 매출, 트래픽)은 ETS가 강합니다.
  • 여러 시계열을 일괄 처리해야 한다면 ETS가 보통 더 가볍고 빠릅니다.

7. 정리 — 무엇을 배웠는가

모형추가된 컴포넌트평활 모수
SES (지수평활)수준$\alpha$
Holt수준 + 추세$\alpha, \beta$
Holt-Winters수준 + 추세 + 계절성$\alpha, \beta, \gamma$
ETS위 모두를 여러 후보 모델로 일반화 + 상태공간동일 + 자동 선택

핵심만 추리면:

  1. 지수평활은 최근 값에 더 큰 가중치를 준다는 단순한 아이디어에서 출발해 컴포넌트를 더해 가며 ETS까지 이어집니다.
  2. ETS는 ARIMA와 함께 단변량 시계열의 양대 표준입니다. 데이터에 따라 어느 쪽이 나을지가 다릅니다.
  3. statsforecast의 AutoETS나 R의 forecast::ets()는 여러 ETS 후보 중 적절한 것을 자동으로 골라 줍니다.

다음 글에서는 이 미니 시리즈의 2편으로, Prophet의 내부 구조를 들여다보겠습니다. Prophet은 사실 새로운 마법이 아니라 (1) 가법 분해, (2) 푸리에 급수로 계절성, (3) piecewise linear trend, (4) 베이지안 추정 — 이 네 가지의 영리한 조합입니다. 신호처리에 익숙하신 분이면 푸리에 부분에서 친숙한 광경을 보시게 될 것입니다.



참고문헌

  • Holt, C. C. (1957). Forecasting seasonals and trends by exponentially weighted moving averages. (ONR Research Memorandum, Carnegie Institute of Technology, 52). Reprinted in International Journal of Forecasting, 20(1), 5–10 (2004).
  • Hyndman, R. J., Koehler, A. B., Ord, J. K., & Snyder, R. D. (2008). Forecasting with Exponential Smoothing: The State Space Approach. Springer.
  • Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: Principles and Practice (3rd ed.). OTexts. https://otexts.com/fpp3/
  • Makridakis, S., & Hibon, M. (2000). The M3-Competition: results, conclusions and implications. International Journal of Forecasting, 16(4), 451–476.
  • Winters, P. R. (1960). Forecasting sales by exponentially weighted moving averages. Management Science, 6(3), 324–342.

AI의 도움을 받아 작성되었으며 최대한 레퍼런스를 밝히려 노력했으나 오류가 있을 수 있으니 정확한 정보를 다시 한번 확인하시기 바랍니다.

  1. SES는 additive error 등 일정 조건하에서 ARIMA(0,1,1)과 예측식이 연결됩니다. 즉 차분된 시계열이 MA(1)을 따른다고 가정하는 모형의 평활 형태로 볼 수 있습니다. 자세한 도출은 Hyndman et al.(2008) Ch. 11 참고. ↩︎

  2. Holt, C. C. (1957). “Forecasting seasonals and trends by exponentially weighted moving averages.” 처음에는 ONR 메모로 발표됐다가 2004년 International Journal of Forecasting에 재출간되었습니다. ↩︎

  3. Winters, P. R. (1960). “Forecasting sales by exponentially weighted moving averages.” Management Science, 6(3), 324–342. Holt가 추세를, Winters가 계절성을 각각 추가한 형태로 결합되어 “Holt-Winters” 모형으로 불리게 되었습니다. ↩︎

  4. Hyndman, R. J., Koehler, A. B., Snyder, R. D., & Grose, S. (2002). “A state space framework for automatic forecasting using exponential smoothing methods.” International Journal of Forecasting, 18(3), 439–454. ↩︎

  5. 2 (error) × 3 (trend) × 3 (seasonal) = 18가지가 기본이고, error와 seasonal의 호환성 조건(곱셈 계절성에 가법 오차 등) 때문에 실제 유효한 모델은 더 적습니다. 자세한 분류는 Hyndman & Athanasopoulos(2021) Section 8.6 참고. ↩︎

  6. 상태공간 모형(state space model)은 관측 가능한 변수($y_t$)와 관측 불가능한 상태 변수들($\ell_t, b_t, s_t$)을 분리하여, 상태가 시간에 따라 어떻게 진화하고 그것이 관측치로 어떻게 드러나는지를 두 종류의 방정식(state equation, observation equation)으로 표현하는 틀입니다. 칼만 필터가 같은 틀의 대표적 추정 도구입니다. ↩︎

  7. additive error ETS와 ARIMA 사이의 예측식 연결은 Hyndman, R. J., et al. (2008). Forecasting with Exponential Smoothing: The State Space Approach. Springer, Ch. 11 참고. SES와 ARIMA(0,1,1), Holt’s linear와 ARIMA(0,2,2)의 관계도 같은 책에서 다룹니다. ↩︎

  8. Makridakis, S., & Hibon, M. (2000). “The M3-Competition: results, conclusions and implications.” International Journal of Forecasting, 16(4), 451–476. 이후 M4 (2018), M5 (2020) 대회에서도 단순 모형의 조합이 복잡한 단일 모형 못지않게 좋은 성능을 보인다는 결과가 일관되게 확인되었습니다. ↩︎

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.