시계열 데이터 분해: 추세·계절성·순환·불규칙을 읽는 방법

시계열 데이터의 추세, 계절성, 순환, 불규칙 성분을 구분하고 STL·상태공간 모델을 활용하는 분석과 운영 진단 방법

2026-08-14 · 최초 발행 2024-04-29

반복 패턴을 같은 변동으로 취급하면 생기는 문제

시계열 분석은 시간 순서로 쌓인 값에서 신호와 잡음을 나누는 일이다. 관측값에는 시간 의존성과 자기상관 구조가 있으며, 이를 추세(Trend), 계절성(Seasonality), 순환(Cyclical), 불규칙(Irregular)으로 분해하면 설명력, 예측 정확도, 이상징후 탐지 수준을 높일 수 있다.

관측값은 추세, 계절성, 순환, 불규칙 성분이 가법(+) 또는 승법(×)으로 결합한 구조로 볼 수 있다. 어떤 방식을 택할지는 데이터의 스케일링 특성에 따라 달라진다. 추세와 계절성을 차분이나 필터링으로 제거한 뒤 잔차의 정상성을 확보하는 일도 예측 모델에서 중요한 전제가 된다.

계절성과 순환은 특히 구분해야 한다. 계절성은 주·월·분기처럼 달력에 연결된 고정 주기를 갖는 반면, 순환은 경기나 환경 변화와 함께 나타나며 주기가 고정되지 않고 더 긴 시간에 걸쳐 변동한다.

장기 변화와 반복 변동을 분리하는 기준

추세는 평균 수준의 방향을 보여준다

추세는 장기 평균 수준이 선형 또는 비선형으로 변하는 패턴이다. 성장, 감소, 포화 구간을 구별해야 하며 구조적 체인지포인트와 함께 나타날 수 있다. 선형 회귀·스플라인 회귀, HP 필터, LOESS 필터가 추세 추정에 사용된다.

계절성은 고정된 달력 주기에 반응한다

계절성은 주기가 고정되어 있고, 요일·월·공휴일 같은 달력 효과 및 위상 안정성과 연결된다. 주파수 성분이 비교적 뚜렷하므로 Fourier 항, STL, X-13 방식으로 안정적으로 추정할 수 있다.

순환은 기간과 진폭이 일정하지 않다

순환 성분은 경기나 수요 사이클에 연동하는 준주기 변동이다. 기간과 진폭이 비정상적으로 바뀔 수 있다. Baxter-King, Christiano-Fitzgerald 같은 밴드패스 필터와 상태공간 모델이 분해에 쓰인다.

불규칙은 설명되지 않는 충격을 남긴다

불규칙 성분에는 단기 잡음, 이상치, 단발성 이벤트가 포함된다. 예측에는 불리하게 작용하므로 윈저라이징, 로버스트 회귀 같은 강건 추정과 이상치 완화가 필요하다.

분해 결과를 예측과 경보로 연결하는 흐름

입력은 타임스탬프와 값으로 구성된 원천 시계열, 그리고 달력·공휴일·이벤트 메타데이터다. 결측과 이상치를 처리한 뒤 STL, 회귀+Fourier, 상태공간 방식 중 하나로 분해한다. 이후 ACF/PACF와 주파수 스펙트럼으로 진단하고, 성분별 결과와 예측치, 이상 알림, MAPE·RMSE·MSSE 같은 품질 지표를 출력한다.

결측/불연속극단치OK정상성 미흡과적합적정입력: 원시 시계열품질 점검보간/리샘플링로버스트 스무딩분해 선택: STL /회귀+Fourier / 상태공간모델 적합 분해:Trend/Seasonal/Cyclical/Irregular진단차분/변환 재적용정칙화/차수 축소예측/이상탐지/리포트출력: 성분, 예측, 경보, 지표
구성요소 주기성 주기 길이 검출 지표 모델링 접근 리스크/주의
추세 비주기 장기 KPSS/ADF, 구조변화 검정 회귀·스플라인, HP/LOESS 체인지포인트 미반영 시 편향
계절성 고정 짧음(주/월/분기) ACF 피크, 주파수 피크 STL, Fourier, X-13 캘린더 변화, 윤주·휴일 효과
순환 준주기 중·장기 가변 스펙트럼 대역, 필터 응답 밴드패스, 상태공간 위상·진폭 불안정
불규칙 무주기 매우 짧음 잔차화이트 검정 로버스트 추정, 이상치 핸들링 과도한 필터링에 의한 신호 손실

수요·설비·지표 데이터에서의 해석 방식

소매 수요 예측에서는 주간·월간 계절성을 분해한 뒤 프로모션 이벤트를 불규칙 성분으로 분리할 수 있다. 추세 회귀, 계절 Fourier, 잔차 ARIMA를 결합한 하이브리드 예측도 사용할 수 있다.

전력 부하 예측은 온도·습도 외생변수를 반영하면서 일중·주간 계절성을 함께 추정한다. 순환 성분은 경기나 정책 변화에서 오는 중기 변동을 흡수하는 데 사용된다.

금융·거시 지표를 모니터링할 때는 밴드패스 필터로 경기 순환 대역을 추출하고, 선행·동행 지표의 상관을 분석할 수 있다. 구조변화 검정은 추세 단절을 찾아 리밸런싱 트리거로 활용한다.

제조 품질과 설비 상태 감시에서는 교대·주말 패턴을 제거한 뒤 잔차를 기반으로 3σ, CUSUM 이상탐지를 적용한다. 불규칙 성분이 급증하면 센서 이상 또는 공정 편차를 알리는 신호가 된다.

분해 방식은 데이터의 변화 양식에 맞춰야 한다

가법 모델은 분산이 안정적이고 해석이 쉬우며, 진폭이 규모와 무관할 때 적합하다. 승법 모델은 규모에 비례하는 진폭을 표현하며 로그 변환 기반의 안정화가 필요하다.

STL은 로버스트하고 임의 결측·비정상치에 강건하지만 고정 주기를 가정한다. 고전 분해는 단순하고 빠르지만 구조 변화에 취약하다. X-13은 공휴일과 달력 효과를 정교하게 처리할 수 있으나 설정이 복잡하고 최신 정보 확인이 필요하다.

HP·밴드패스 필터는 계산 효율과 직관적인 주파수 제어가 장점인 반면 경계 왜곡과 하이퍼파라미터 민감성을 고려해야 한다. 상태공간 모델은 불확실성 추정과 온라인 갱신에 강점이 있지만 모델링 복잡도와 연산 비용이 증가한다.

운영 단계에서 확인할 항목

타임스탬프는 정규화하고 등간격 리샘플링을 적용하며, 결측과 이상치 처리 기준을 표준화한다. 공휴일, 윤년, DST 같은 달력 특성도 메타데이터로 관리해야 한다.

진단 과정에서는 ADF/KPSS 정상성 검정과 Ljung-Box 잔차 독립성 확인을 수행한다. rolling origin 방식의 시계열 교차검증을 적용하고, 피처를 생성할 때 미래 정보가 유입되지 않도록 막는다.

PELT, BOCPD 기반 체인지포인트 감지는 재학습 트리거로 사용할 수 있다. 모델과 파라미터의 드리프트를 계속 관찰하고, 재현 가능한 파이프라인을 유지한다.

이 접근은 MAPE 1030%p 감소와 RMSE 520% 감소 가능 범위, 경보 정밀도 1025%p 개선과 불필요 경보 2040% 감소를 목표로 삼는다. 재고·용량 비용은 515% 절감하고 SLA 위반은 1020% 줄일 수 있으며, 경영 보고에서는 추세·계절·순환 기여도를 분해해 의사결정 품질을 높일 수 있다.

STL 분해와 잔차 진단 코드

전제조건: Python 3.10+, pandas 2.x, numpy 1.24+, statsmodels 0.14+

# pip install pandas numpy statsmodels matplotlib
import pandas as pd
import numpy as np
from statsmodels.tsa.seasonal import STL
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt

# 1) 데이터 로드 및 등간격 보장
df = pd.read_csv("series.csv")  # columns: date,value
df["date"] = pd.to_datetime(df["date"])
s = (df.set_index("date")
       .asfreq("D")              # 일간 리샘플
       ["value"]
       .interpolate("time"))     # 시간기반 보간

# 2) 로그 변환(승법적 계절성 가정 시)
s_trans = np.log1p(s.clip(lower=0))  # 음수 방지

# 3) STL 분해(주기=7: 주간 계절성 예시)
stl = STL(s_trans, period=7, robust=True)
res = stl.fit()

trend = res.trend
seasonal = res.seasonal
remainder = res.resid

# 4) 정상성 진단(잔차)
adf_pvalue = adfuller(remainder.dropna())[1]
print(f"ADF p-value (잔차 정상성): {adf_pvalue:.4f}")

# 5) 시각화
fig, axes = plt.subplots(4, 1, figsize=(10, 8), sharex=True)
axes[0].plot(s, label="original"); axes[0].legend()
axes[1].plot(np.expm1(trend), label="trend≈", color="tab:orange"); axes[1].legend()
axes[2].plot(np.expm1(seasonal), label="seasonal≈", color="tab:green"); axes[2].legend()
axes[3].plot(np.expm1(remainder), label="irregular≈", color="tab:red"); axes[3].legend()
plt.tight_layout(); plt.show()

월간·분기 데이터에서는 period를 12/4로 설정한다. 순환 성분은 밴드패스 필터 또는 상태공간 방식으로 확장할 수 있으며, statsmodels.UnobservedComponentscycle 옵션이 예시다. 이상탐지는 remainder의 절대 z-score > 3을 기준으로 경보를 낼 수 있다.

시계열 분해의 핵심은 성분을 분리하는 데서 끝나지 않는다. 데이터의 주기성, 스케일, 구조 변화에 맞춰 가법·승법 모델과 강건 분해 방식을 고르고, 전처리·진단·교차검증·재학습을 하나의 운영 파이프라인으로 연결해야 한다.

시계열 분석추세계절성이상탐지STL