IDL/Math

TS_FCAST 함수 소개

이상우_idl 2024. 8. 21. 15:07
728x90
반응형

시계열 데이터가 주어진 상태에서 이 값들을 기반으로 하여 미래의 값들을 예측하거나 과거의 값들을 추론하는 기법으로서 자기회귀 모델(Autoregressive Model)이라는 것이 있습니다. 이 기법에서는 주어진 데이터 값들을 선형적으로 묶어서 하나의 선형방정식을 만들고 이러한 방정식을 기반으로 하여 미래의 값 또는 과거의 값을 계산하게 됩니다. IDL에서도 이러한 자기회귀 모델 기법을 기반으로 한 기능함수가 지원되는데 그것이 바로 오늘 소개할 TS_FCAST 함수입니다. 그러면 이 함수를 사용하여 시계열 데이터에 대하여 자기회귀 모델을 기반으로 미래 또는 과거의 값들을 계산하는 방법을 간단한 예제와 함께 살펴보겠습니다. 먼저 예제로 사용할 시계열 데이터를 다음과 같이 정의해봅니다.

 

y = [6.63, 6.59, 6.46, 6.49, 6.45, 6.41, 6.38, 6.26, 6.09, 5.99, $
  5.92, 5.93, 5.83, 5.82, 5.95, 5.91, 5.81, 5.64, 5.51, 5.31, $
  5.36, 5.17, 5.07, 4.97, 5.00, 5.01, 4.85, 4.79, 4.73, 4.76]
n = N_ELEMENTS(y)
x = FINDGEN(n)

 

여기서 정의된 배열 y는 30개의 실수형 값들로 구성되어 있으며 값들의 범위는 대략 4.7~6.7 정도입니다. 그리고 나중에 그림 표출에 사용하기 위하여 0부터 29까지 30개의 값들로 구성되는 배열 x도 함께 정의하였습니다. 일단 이 데이터를 먼저 간단히 표출해보는 과정 및 결과 그림은 다음과 같습니다.

 

win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, SYMBOL='circle', /SYM_FILLED, $
  FONT_SIZE=11, MARGIN=0.1, CLIP=0, /CURRENT)

 

 

이제 이와 같은 시계열 데이터가 주어진 상태에서 TS_FCAST 함수를 사용하여 미래의 값들을 계산해봅시다. 일단 이 과정은 다음과 같이 처리해보았습니다.

 

yr1 = TS_FCAST(y, 20, 10)

PRINT, yr1

 

여기서 TS_FCAST 함수에 투입된 인수들을 보면 먼저 원래의 시계열 데이터 배열인 y가 먼저 들어가고 그 뒤에 20, 10이라는 숫자가 보입니다. 여기서 20은 예측 계산에 반영될 데이터 값들의 갯수입니다. 즉 원래의 시계열 데이터인 y는 총 30개의 값들로 구성되어 있는데 그 중 20개의 값들을 바탕으로 계산하겠다는 의미입니다. 그리고 10은 계산될 값들의 갯수입니다. 즉 위의 내용은 y의 30개의 값들 중 뒷부분 20개의 값들을 바탕으로 자기회귀 모델 기법을 적용하여 향후 10개의 예측 값들을 계산하라는 의미가 됩니다. 그리고 이렇게 계산된 값들을 yr1이라는 배열로 저장하였습니다. 실제로 출력된 10개의 값들을 보면 다음과 같습니다.

 

   4.65394      4.65261      4.43959      4.35301      4.28716      4.16927      3.97959      3.82316      3.81445      3.82721

 

일단 이 값들을 보면 대략 그럴싸하게 예측이 된 것으로 보이긴 하는데, 아무래도 이 값들을 추가하여 그림을 표출해보면 더 좋을 것 같습니다. 이를 위하여 다음과 같은 과정을 추가로 실행해봅시다.

 

xr1 = FINDGEN(10)+30

po1 = PLOT(xr1, yr1, SYMBOL='circle', /SYM_FILLED, $
  COLOR='red', /OVERPLOT)

 

이와 같은 내용을 실행하면 앞서 표출되었던 플롯에 대하여 우측 부분에 새로운 값들이 추가되면서 그림 자체가 갱신될 것입니다. 그 모습은 다음과 같습니다.

 

 

이 그림을 보면 원래의 데이터와 함께 예측된 10개의 값들이 우측에 추가로 표시(붉은색)된 것이 보입니다. 그냥 눈으로 보기에도 나름 그럴싸하게 예측이 된 것 같습니다. 물론 계산에 반영되는 값들의 갯수(여기서는 20)에 따라서 결과는 달라질 수 있습니다. 그리고 이와 같이 미래의 값들을 예측하는 것 뿐만 아니라 과거의 값들을 계산하는 것도 가능합니다. 그러면 이번에는 TS_FCAST 함수를 사용하여 과거의 값들을 계산해봅시다. 그 과정은 다음과 같습니다.

 

yr2 = TS_FCAST(y, 20, 10, /BACKCAST)

 

여기서는 과거의 값들을 계산하기 위하여 BACKCAST 키워드를 사용했음을 유의해야 합니다. 그리고 여기서도 20, 10이라는 인수값들이 주어졌는데, 이것은 y의 30개의 값들 중 앞부분 20개의 값들을 바탕으로 자기회귀 모델 기법을 적용하여 과거 10개의 추측 값들을 계산하라는 의미입니다. 그리고 이렇게 계산된 값들을 yr2이라는 배열로 저장하였습니다. 실제로 출력된 10개의 값들을 보면 다음과 같습니다.

 

   7.15376      7.01129      6.97890      6.88112      6.83379      6.83289      6.85654      6.83126      6.71376      6.63119

 

이 값들을 보면 과거에 대한 계산이 나름 그럴싸하게 된 것으로 보이긴 하는데, 이번에도 이 값들을 추가하여 그림을 표출해보면 더 좋을 것 같습니다. 이를 위하여 다음과 같은 과정을 추가로 실행해봅시다.

 

xr2 = FINDGEN(10)-10

po2 = PLOT(xr2, yr2, SYMBOL='circle', /SYM_FILLED, $
  COLOR='green', /OVERPLOT)

 

이와 같은 내용을 실행하면 앞서 표출되었던 플롯에 대하여 좌측 부분에 새로운 값들이 추가되면서 그림 자체가 갱신될 것입니다. 그 모습은 다음과 같습니다.

 

 

이 그림을 보면 과거에 대하여 계산된 10개의 값들이 좌측에 추가로 표시(초록색)된 것이 보입니다. 그냥 눈으로 보기에도 나름 그럴싸하게 계산이 된 것 같습니다. 물론 계산에 반영되는 값들의 갯수(여기서는 20)에 따라서 결과는 달라질 수 있습니다.

 

이와 같이 TS_FCAST 함수를 사용하면 시계열 데이터를 기반으로 미래 또는 과거의 값들을 자기회귀 모델(Autoregressive Model) 기반으로 계산할 수 있습니다. 앞서 언급했듯이 계산에 반영될 값들의 갯수에 따라서 결과는 달라질 수 있습니다. 그리고 이러한 계산 결과를 어느 정도 신뢰할 것이냐에 대한 판단은 연구자의 몫이 될 것입니다. 또한 별도로 지원되는 TS_COEF 함수를 사용하면 자기회귀 모델에 대한 선형방정식의 계수 값들을 얻을 수 있다는 것도 참고해두시면 좋을 것 같습니다.

반응형