시계열 데이터(Time Series Data) 심화 학습

·2025년 7월 16일

Data

목록 보기
9/10

📖 학습 배경

시계열 분석의 이론적 토대를 체계적으로 정리하고, 통계·신호처리·머신러닝 관점에서 주요 알고리즘과 활용 기법을 심화 탐구해 보았다. 특히 비정상성(non-stationarity) 처리, 주파수 영역 분석, 상태 공간 모델(State-Space Model), 그리고 딥러닝 기반 예측 모델까지 폭넓게 다루었다.


1. 시계열의 수학적 정의 및 분해

  1. 수학적 정의

    {Xt}tT,TZ or R\{X_t\}_{t\in T},\quad T \subseteq \mathbb{Z}\text{ or }\mathbb{R}

    확률 과정으로서의 시계열은, 시간 (t)에 대응하는 확률 변수 (X_t)의 집합으로 정의됩니다.

  2. 고전적 분해(Classical Decomposition)

    Xt=Tt+St+RtX_t = T_t + S_t + R_t
    • (T_t): 추세(trend)
    • (S_t): 계절성(seasonality)
    • (R_t): 잔차(residual)
  3. STL 분해(Stl: Seasonal-Trend decomposition using Loess)

    • Loess 기반의 가변 윈도우 스무딩
    • 비선형 추세 및 비등간 계절성도 효과적 분리
    from statsmodels.tsa.seasonal import STL
    stl = STL(ts, period=12)
    res = stl.fit()
    res.plot()

2. 정상성(Stationarity)과 단위근(Unit Root) 검정

  • 정상시계열: 평균과 분산이 시간에 따라 일정, 공분산도 시차만 의존

  • ADF 검정(Augmented Dickey–Fuller)

    from statsmodels.tsa.stattools import adfuller
    stat, p, _, _, crit, _ = adfuller(ts)
    print(f"ADF 통계량: {stat}, p-value: {p}")
  • KPSS 검정(Kwiatkowski-Phillips-Schmidt-Shin)

    from statsmodels.tsa.stattools import kpss
    stat, p, _, crit = kpss(ts, regression='c')
    print(f"KPSS 통계량: {stat}, p-value: {p}")
  • 차분(Differencing)

    Yt=XtXt1Y_t = X_t - X_{t-1}

3. 시계열 모델링: 통계 vs 머신러닝 vs 딥러닝

분류모델장점단점
통계적ARIMA / SARIMA해석력 우수, 적은 데이터도 가능비선형성·복잡도 처리 어려움
신호처리스펙트럼 분석, 웨이블릿주파수 특징 추출 탁월시계열 길이에 민감
머신러닝랜덤포레스트, XGBoost비선형 패턴 학습 가능시계열 특성 무시 시 과적합 위험
딥러닝RNN / LSTM / Transformer장기 의존성·복합 패턴 학습학습 데이터·연산량 요구량 높음

4. 주파수 영역 분석(스펙트럼 & 웨이블릿)

  1. 푸리에 변환(FFT)

    X(f)=t=0N1xte2πift/NX(f) = \sum_{t=0}^{N-1} x_t e^{-2\pi i f t / N}
    • 주기성 탐지, 피크 주파수 식별
  2. 연속 웨이블릿 변환(CWT)

    • 시간-주파수 동시 분석
    • 모레트(morlet) 웨이블릿 예시
    import pywt, numpy as np
    coef, freqs = pywt.cwt(ts, scales=np.arange(1,128), wavelet='morl')

5. 상태 공간 모델(State-Space Model) & 칼만 필터(Kalman Filter)

  • 모델 구조

    {xt=Fxt1+wtyt=Hxt+vt\begin{cases} x_{t} = F x_{t-1} + w_{t} \\ y_{t} = H x_{t} + v_{t} \end{cases}
  • 칼만 필터: 시계열 데이터의 실시간 추정 및 예측

    from pykalman import KalmanFilter
    kf = KalmanFilter(transition_matrices=[[1]], observation_matrices=[[1]])
    state_means, _ = kf.filter(ts.values)

6. 고급 예측: Prophet vs LSTM vs Transformer

  1. Prophet (Facebook)

    • 휴일 효과, 트렌드 변곡점 자동 검출
    from fbprophet import Prophet
    m = Prophet(yearly_seasonality=True, weekly_seasonality=True)
    m.fit(df.rename(columns={'date':'ds','sales':'y'}))
    future = m.make_future_dataframe(periods=12, freq='M')
    forecast = m.predict(future)
  2. LSTM

    • 시퀀스 → 시퀀스(Seq2Seq) 구조 활용
    from keras.models import Sequential
    from keras.layers import LSTM, Dense
    model = Sequential([
      LSTM(64, input_shape=(n_timesteps, n_features)),
      Dense(1)
    ])
    model.compile('adam','mse')
    model.fit(X_train, y_train, epochs=50)
  3. Transformer 기반 예측

    • Attention 메커니즘 통해 장기 의존성 강화
    • PyTorch 예제 패키지 참고 권장

7. 활용 사례와 느낀 점

활용 사례

  • 금융공학: 고빈도(HFT) 데이터 이상 탐지
  • 산업 IoT: 설비 상태 예측, 유지보수 시점 자동화
  • 기후 모델링: 기온·강수량 장기 예측

느낀 점

“시계열 분석은 통계학·신호처리·머신러닝이 유기적으로 결합된 학문이었고, 특히 정상성 처리와 주파수 분석의 수학적 원리를 이해하니 모델 선택과 하이퍼파라미터 튜닝에 훨씬 자신감이 생겼습니다. 다음 스텝은 Transformer 기반 시계열 예측 모델을 직접 구현해 보고, 기존 통계 모델과 성능을 비교해 보는 것입니다.”


🔗 참고 자료

  • Hyndman, R. J., & Athanasopoulos, G. Forecasting: Principles and Practice
  • Box, G. E. P., Jenkins, G. M., & Reinsel, G. C. Time Series Analysis: Forecasting and Control
  • https://otexts.com/fpp3/ (온라인 텍스트북)
  • statsmodels, pykalman, fbprophet 공식 문서

0개의 댓글