트위티의 열하일기

[심화] R 패키지 DLM 논문 리뷰 본문

Programming Languages/R

[심화] R 패키지 DLM 논문 리뷰

예지레슬리초이 2025. 2. 6. 09:29

# DLM 패키지란?

시계열 데이터를 분석하는 패키지로, 상태가 시간에 따라 변화하는 동적 선형 모델(Dynamic Linear Model)을 활용하여 데이터를 필터링, 스무딩, 예측할 수 있다.

# 시계열 데이터란?

시간에 따라 변하는 데이터 (e.g. 주식 가격, 날씨 데이터, 환율, etc.)

 

1. 정상성 vs 비정상성

- 정상성: 시간이 지나도 데이터의 패턴이 일정 -> 예측이 쉬움

- 비정상성: 시간이 지나면서 평균, 분산, 패턴이 계속 바뀌는 데이터 -> 예측이 어려움

 

2. 시계열 데이터를 분석할 때 자주 쓰는 방법

a. AR (Autoregressive, 자기회귀) 모델

  : 과거의 데이터를 사용해서 현재 값을 예측하는 모델

 

b. MA (Moving Average, 이동평균) 모델

  : 과거의 오차(예측 불가능한 요소)를 사용해서 현재 값을 예측하는 모델

 

3. 마르코프 성질(Markov Property)과 상태공간 모델(State-space Model)

a. 마르코프 성질

  : 현재 상태가 미래를 결정하는 데 가장 중요한 역할을 하고, 과거의 정보는 필요하지 않다!

- e.g. 날씨를 예측할 때, '어제 비가 왔냐 안 왔냐'가 중요한 것이지, 일주일 전의 날씨까지 알 필요는 없음

 

b. 상태 공간 모델(SSM)

  : 숨겨진 상태(hidden state)를 추적하면서 미래를 예측하는 모델

- e.g. 실제 경제 성장률을 직접 측정할 수 없을 때, 관찰 가능한 GDP 데이터로 숨겨진 경제 성장률을 추정하는 것

- 칼만 필터(Kalman Filter) 같은 방법을 사용해서 '과거 + 현재 데이터'를 활용해 숨겨진 상태를 추정

*칼만 필터) 과거의 데이터와 현재의 관측값을 조합해서 노이즈가 있는 데이터에서도 최적의 상태를 예측하는 필터

 

# Dynamic Linear Model (DLM, 동적 선형 모델)이란?

시간에 따라 변하는 데이터를 모델링하는 확률적 선형 모델

 

 - 일반적인 선형 회귀 (Y = aX + b)는 고정된 관계를 가정

 - DLM 은 시간이 지남에 따라 관계가 변할 수 있도록 만든 모델

 - 상태 공간 모델(SSM)의 한 종류

 - 칼만 필터(Kalman Filter) 적용 -> 중요

 

1. DLM의 정의

DLM은 다음과 같은 두 개의 식으로 정의된다.

a. 관측 방정식 (Observation Equation) 

: 실제 우리가 관측하는 데이터와 숨겨진 상태를 연결하는 방정식

  • y_t = 실제로 관측하는 데이터
  • θ_t = 숨겨진 상태 (Hidden state; 진짜 의미 있는 정보)
  • v_t = 오차 (잡음, 노이즈)

b. 상태 방정식 (State Equation)

: 숨겨진 상태(θ_t)가 시간에 따라 어떻게 변하는지 설명하는 방정식

  • G_t = 상태가 시간이 지나면서 변화하는 행렬 (State Transition Matrix)
  • w_t = 상태 변화를 설명하는 랜덤 요소, 정규분포 N(0, W_t)를 따름

현재 상태 θ_t는 이전 상태 θ_t-1의 영향을 받으며 변화하고, 이것만으로는 완벽한 예측이 불가능하므로 w_t라는 랜덤한 변동을 추가시킨다. 

 

# 코드 예시

myModel <- dlm (FF=1, V=3.1, GG=1, W=1.2, m0=0, C0=100)

 

2. R에서 DLM 모델을 정의하는 방법 : dlm 패키지 사용

dlm 패키지에 포함되어 있는 다양한 함수들:

a. dlmModARMA(): ARMA(자기회귀 이동평균) 모델 생성

- AR과 MA를 합친 ARMA(p, q) 모델을 사용

- ARMA 모델을 DLM 형식으로 변환하여 칼만 필터와 같은 개념들을 적용할 수 있는 상태로 만듦

library(dlm)

# ARMA(1,1) 모델 생성
myARMA <- dlmModARMA(ar = 0.5, ma = 0.3, sigma2 = 1)

# 모델 구조 확인
print(myARMA)

 

b. dlmModPoly(): 다항식(Polynomial) 모델 생성

- DLM에서 가장 기본적인 형태의 Random Walk 모델을 정의하는 함수

  *랜덤 워크(Random Walk) 모델: 현재 값이 이전 값에서 랜덤한 변동을 더한 형태로 변화하는 시계열 모델

- 1차 다항식(랜덤 워크) 모델 생성

- 2차 다항식(로컬 선형 트렌드) 모델 생성

- 3차 다항식 (로컬 큐빅 트렌드) 모델 생성 ~

#1차 다항식 모델 생성
myPoly <- dlmModPoly(order = 1, dV = 3.1, dW = 1.2, C0 = 100) # dV: 관측 오차의 분산, dW: 상태 노이즈의 분산

#2차 다항식 모델 생성
myPoly2 <- dlmModPoly(order = 2)

 

c. dlmModReg(): 선형회귀(Regression) 모델 생성

- 특정 변수(독립 변수)가 포함된 시계열 데이터를 모델링할 때 사용

 

[시계열 회귀 모델 (Time Series Regression)]

일반 회귀 모델 (OLS)와 다르게, 시간에 따른 변화, 계절성, 자기상관을 고려해야 한다는 특징이 있다. 과거 데이터가 현재 데이터에 영향을 미칠 수 있으므로, 일반 회귀 모델보다 고려해야 할 변수들이 더 많다.

#시계열 회귀 모델
x <- 1:100  # 독립 변수 (예: 시간)
myReg <- dlmModReg(x, dV = 0.5, dW = 0.1) # dV: 관측 오차의 분산, dW: 상태 노이즈의 분산

 

d. dlmModSeas(): 계절성(Seasonal) 모델 생성

- 계절성을 갖는 시계열 데이터를 모델링할 때 사용

- 분기별 데이터, 월별 데이터 등과 같은 데이터에서 계절성을 반영할 때 사용

  (e.g. 여름에는 아이스크림 판매량 증가, 겨울에는 난방비 증가, etc.)

#4분기 계절성을 갖는 모델
mySeas <- dlmModSeas(freq = 4, dV = 0.5, dW = 0.1)

 

3. 칼만 필터(Kalman Filtering)와 스무딩(Smoothing) 기법

a. 칼만 필터

: 지금까지 관측된 데이터만 가지고 현재 상태를 추정하는 과정 → 실시간 업데이트에 유리

 

b. 스무딩

: 미래 데이터가지 고려해서 과거 상태까지 다시 보정하는 과정 → 다 분석한 후에 데이터를 더 정확하게 정리할 때 유용

 

4. MLE와 베이지안 추론을 사용한 매개변수 추정 방법

a. Maximum Likelihood Estimation (MLE)

likelihood를 최대화하는 parameter 값을 maximum likelihood estimate라고 한다.

즉, '이 매개변수 값을 사용했을 때, 내가 가진 데이터가 가장 잘 설명된다'라고 볼 수 있다.

모든 데이터들이 독립적이라고 가정했을 때 likelihood

 

Maximum Likelihood Esstimation 수

 

- dlmMLE()는 DLM 모델의 매개변수(V, W 등)를 최적화하는 함수

→ MLE를 사용하면, 현재 나의데이터에 가장 적합한 parameter를 자동으로 찾을 수 있다.

 

#코드 예시

dlmMLE(y=myData, parm = init, build = myFun)
  • y = a (univariate or multivariate) time series object or a vector/matrix of observations
  • param = a vector of initial values for the unknown parameteres
  • build = a user-defined function that takes a parameter vector as first argument and returns a dlm object
  • Defines a target function by compounding the build argument with dlmLL(), which evaluates the (negative log of the) joint density of the observations, thus defining the negative loglikelihood function
  • And then calls the optimizer 'optim' to minimize the negative loglikelihood function defined above

b. 베이지안 추론 (Bayesian Inference)

베이지안 추론은 관측되지 않은 데이터를 다룬다. 관측되지 않은 데이터를 기존의 사전 정보와 결합하여 추론 대상에 대한 확률적 결론을 도출하는 방법이다.

 

[깁스 샘플링 (Gibbs Sampling)]

베이지안 추론에서는 모수 θ에 대한 추론을 하기위해 사후 분포 f (θ|x) 의 형태를 아는 것이 중요하다. 하지만 대부분의 경우, 사후 분포가 잘 알려진 형태로 나타나지 않아 제안 분포(proposal distribution)을 사용하여 사후 분포를 추정했다. 깁스 샘플링의 경우, 샘플링을 위한 제안 분포(propossal density)를 사용하지 않는다. 대신, 모수에 대한 사후 조건부 분포가 잘 알려진 형태로 나타날 경우, 사후 조건부 분포에서의 샘플링을 통해 사후 분포를 추정할 수 있게 한다.

  • 베이지안 추론에서 사용되는 대표적인 마르코프 체인 몬테카를로 (MCMC) 방법 중 하나
  • 복잡한 확률 분포에서 직접 샘플링이 어려울 때, 부분적으로 나누어 샘플링하는 기법

*참고자료) https://harang3418.tistory.com/13

 

[전방 필터링 후방 샘플링 (FFBS)]

DLM에서 숨겨진 상태(State) 변수를 베이시안 방식으로 추정할 때 사용하는 샘플링 기법으로, 칼만 필터 기반의 샘플링 알고리즘이다.

  • 전방 필터링 (Forward Filtering)
    • 칼만 필터를 사용해 데이터가 들어올 때마다 과거에서 현재로 가면서 상태(State) 추정
    • 즉, 시간순서대로 상태를 업데이트하면서 숨겨진 상태(State)의 분포를 계산
  • 후방 샘플링 (Backward Sampling)
    • 전방 필터링된 결과를 바탕으로 마지막 시점부터 거꾸로 상태(State) 샘플링
    • 즉, 최종 상태에서 과거로 돌아가며 샘플을 추출

전방 필터링은 수행 과정에서 미래 데이터를 활용하지 않기 때문에 불확실성이 남는다. 따라서 후방 샘플링을 통해 미래 데이터를 활용해서 상태를 다시 보정하는 원리이다.

 

→ 베이지안 추론을 사용하면, 기존 정보까지 반영하여 v(관측 노이즈), w(상태 노이즈)와 같이 사람이 직접 설정하기 어려운 parameter에 대해 더욱 정교한 추정이 가능해진다

 

5. 다른 R 패키지(StructTS, dse, sspir)와의 비교

 

 

*참고자료*

https://www.jstatsoft.org/article/view/v036i12/418