레이블이 Haar a trous인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Haar a trous인 게시물을 표시합니다. 모든 게시물 표시

2013년 1월 3일 목요일

Time-Series multiresolution decomposition and forecasting

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

  지난 글에서는  Wavelet multiresolution decomposition을 활용한 financial time-series의 dimensionality reduction에 관하여 언급했었는데요, 예측(forecasting)과 관련하여 wavelet transform에 대한 얘기를 해볼까요?

  Wavelet transform을 예측에 사용하는 방법은 대략 세 가지 정도가 있는데, 첫 번째가  multiresolution analysis를 수행한 후 각각의 resolution에 대한 예측치를 계산하는 것입니다. 두 번째 방법은 wavelet을 기반으로 financial time-series의 noise를 제거한 후 예측을 하는 것이며, 세 번째는 wavelet coefficient들 자체에 예측 알고리즘을 적용하는 것입니다.

  이 중 가장 자주 사용된 방법이 첫 번째 것으로서, financial time-series의 multiresolution decomposition 결과를 활용하는 아주 단순한 방법입니다. 즉, 특정 scale의 approximation layer와 그 보다 작거나 같은 scale의 detail coefficient layer 각각에 대해 예측을 수행하고 inverse transform으로 recostruction함으로써 최종 예측치를 계산하는 것이죠. (Fig 1 참조)
Fig 1. Multiresolution decomposition and forecasting

  이번 글에서는 이와 같은 방법을 담은 과거 발표 논문을 참조하여 실제로 테스트를 수행해 본 결과를 소개하도록 하겠습니다.
 
  ※ 참고 논문: Saif Ahmad, Ademola Popoola, Khurshid Ahmad, 'Wavelet-based Multiresolution Forecasting', 2005.

1. 모델링

   시스템은 크게 세 부분으로 구성됩니다.

  • Data preprocessing (Fig 1, 'MODWT')
  • Fuzzy rule base (Fig 1, 'Build Fuzzy Rule Base')
  • prediction system (Fig 1, 'Provide Forecasts', 'Aggregate Forecasts')

  1.1 Data preprocessing - Multiresolution Decomposition
  Wavelet multiresolution analysis를 수행하여 time-series 데이터의 시간 및 주파수(혹은 주기) 영역 특성을 추출합니다. 쉽게 설명하면, financial time-series를 추세(trend)와 계절적 cycle 및 비즈니스 cycle 등으로 분해하는 것(decomposition)이라고 보시면 됩니다. 

  물론, 현실 세계에서 측정한 time-series에서 추세와 여러 cycle을 정확하게 분리해 내기는 어렵겠지요? 근사치를 얻기 위해 다양한 모형을 개발해 왔으며, wavelet transform을 이용한 multiresolution decomposition은 그 중 하나가 일 뿐입니다.

  논문에서는 Maximal Overlap Discrete Wavelet Transform(MODWT)과 a trous 알고리즘을 적용했습니다. MODWT에 관한 자세한 내용은 위 논문을 참고하시기 바랍니다.

  1.2  Fuzzy rule base - Subtractive Clustering
  Time-series 데이터에 대한 approximation 및 forecasting 시스템으로 Fuzzy Inference System(FIS)을 사용하는데, 이를 위해 fuzzy if-then rule을 생성해야 합니다. FIS의 premise parameter들을 초기화하는 것으로서, 단순하게 생각하면 input 데이터의 범위(universe of discourse)를 patitioning하고 적절한 membership function을 선택하는 과정이라고 볼 수 있습니다.

  대표적인 방법으로 grid partitioning이 있는데요, universe of discourse를 균등하게 분할하고 분할된 구간들에 대해 membership function 종류와 parameter들을 수작업으로 정의하는 것이 일반적입니다.

  Fuzzy if-then rule을 수작업으로 정의해야 하는 경우의 비효율성과 시행착오를 줄이기 위한 효과적인 방법이 data clustering입니다. Input data를 특정 척도(metric)에 따라 다수의 cluster로 구분하고 cluster 당 하나의 rule을 자동으로 정의합니다. Mountain clustering, subtractive clustering 등의 방법이 있으며, 위 논문에서는 subtractive clustering을 사용했습니다.

  1.3 Prediction system - ANFIS
  Multiresolution decomposition의 결과로 생성된 각각의 layer에 대해 예측을 수행하는 FIS로서, training 데이터로 학습(learning)을 시켜 최적화(optimization)시킨 후 실제 데이터에 대해 예측값을 계산하도록 합니다. 

  FIS를 학습(learining)시킨다는 것은 [input, output] 쌍으로 구성된 training 데이터를 FIS에 입력해 가면서 FIS가 계산한 output과 실제 output 간의 차이(error measure)를 줄여나갈 수 있도록 FIS의 내부 parameter들, 즉 premise parameter들과 consequent parameter들을 조정해 나가는 과정을 말합니다.

  학습 알고리즘으로는 gradient descent method처럼 미분을 이용한 방법이 자주 사용되기도 하지만, local maxima를 피하기 위해 particle swarm optimization(PSO), simulated anealing(SA) 등과 같은 derivative-free 방법을 적용하기도 합니다. 2012년 9월의 포스트 'Time-Series Analysis and Forecasting'에서 소개했던 시스템이 PSO를 사용한 것이었습니다.

  논문에서는 First-order (Takagi-Sugeno-Kang) TSK 타입의 FIS를 사용했다고 합니다.

 2. 테스트 시스템

  테스트 시스템은 위 논문에 소개된 아이디어를 적용하여 구성했습니다. 단, prediction system은 2012년 10월에 올렸던 블로그 'ANFIS and Time-Series Forecasting'에서 사용한 ANFIS 시스템을 사용했습니다. ANFIS는 premise parameter들의 최적화에 gradient descent method를, consequent parameter들에 대해서는 least square estimation(최소자승법)을 사용합니다.


  Time-series의 preprocessing 모듈은 엑셀 vba로 Haar a trous 알고리즘을 구현하여 multiresolution analysis를 수행하도록 구성했으며, fuzzy rule base 자동 생성을 위해 subtractive clustering 알고리즘을 C 언어로 구현하여 기존의 ANFIS 모듈과 통합하여 사용할 수 있도록 하였습니다. 엑셀에서 엑셀 vba, vba에서 .exe 파일을 호출하는 구조입니다.

  Time-Series로는 1,000 여개의 KOSPI 지수 데이터를 사용했으며,
Fig 1과 같이 scale 5 레벨까지 분해(decomposition)하여  D1, D2,..., D5, S5 등 6개의 layer를 생성하여 테스트를 진행했습니다. 각각의 layer는 maximal overlap DWT를 통해 생성되었으므로 KOSPI 데이터와 동일한 갯수의 데이터를 갖는 time-series입니다. 

  각각의 layer에 대해, FIS는 f(Xk-n, ..., Xk-1) → Xk 처럼 연속된 lagged data만을 input으로 받아 output을 계산하도록 학습됩니다. 그렇게 [input, output] 데이터 쌍을 생성하고, 이들을 90%와 10%로 나누어 각각 training data set과 검증용(check) data set으로 나누어 테스트를 진행했습니다.

3. 테스트 결과

  아래의 Fig 2-1부터 Fig 2-6까지는 scale 5 레벨 decomposition 결과로 생성된 각각의 layer에 대해 예측값을 산출한 결과입니다.


  참고했던 논문에서는 각각의 layer에 대해 FIS의 input dimension을 어떻게 해야 하는지, 즉 몇 개의 lagged data를 input으로 사용해야 하는지에 대한 언급이 없었습니다. 유사한 논문들을 검색하다보니 결국은 '경험적인 방법으로 error measure를 최소화하는 input dimension을 찿는다' 였습니다. 실제로 layer 별로 dimension을 바꿔가며 테스트를 해보니, 'universal approximator'라는 ANFIS 때문인지, 3 이상에서는 별다른 차이가 없음을 알 수 있었습니다. 그래서, 모든 layer에 대해 input dimension을 3으로 설정하여 테스트를 했습니다. 

  Subtractive clustering parameter는 radius 0.2, squash factor 1.25, accept ratio 0.5, reject ratio 0.15를 사용했습니다. 

Fig 2-1. Approximation at scale 5 (S5)
Fig 2-2. Detail coefficients at scale 1 (D1)
Fig 2-3. Detail coefficients at scale 2 (D2)
Fig 2-4. Detail coefficients at scale 3 (D3)
Fig 2-5. Detail coefficients at scale 4 (D4)
Fig 2-6. Detail coefficients at scale 5 (D5)
  위 그림을 보면 D1, D2 처럼 scale이 작은 경우, 즉 주파수가 큰 경우에는 실제값과 예측값 사이의 차이가 눈에 띄게 드러납니다. 하지만, scale이 커질수록 detail layer 또는 approximation layer에 대한 예측 성능이 좋아짐을 알 수가 있군요.

  그렇다면, 모든 layer의 예측값을 합(inverse transfomation)하면 어떻게 될까요?  다음 그림 3이 그 결과입니다.

Fig 3. Reconstruction from forecasts
  지난 몇 개의 포스트에서 소개했던 time-series forecasting 방법들과 마찬가지로  큰 resolution(S5, D5, D4 등)에서는 흐름을 충분히 예측할 수 있습니다. 하지만 D1, D2와 같이 주파수가 높은 layer의 예측 error가 그대로 반영되는 모습입니다. 

  D1을 noise처럼 생각하여 filtering을 한다면 어떻게 될까요? Fig 3보다는 더 정확한 결과를 얻을 수 있는 것이 당연하겠지요.

Fig 4. Reconstruction with D1 filtered

  Fig 3과 4를 비교해 보면 그 차이를 분명히 알 수 있습니다. 논문에서 주장하듯이 Wavelet transform에 의한 time-series preprocessing의 한 가지 이점이 확인되는군요. 

4. 결 론

  정리하면, Wavelet transform 기법으로 time-series를 preprocessing한 후 ANFIS를 사용하여 흐름을 예측해 본 결과, preprocessing의 효용성을 어느 정도 확인할 수 있었습니다. 


  참고논문에서는, 복잡한(complex) time-series를 noise나 계절적 요인 또는 추세를 제거하여 단순화시킴으로써 예측의 정확도를 높일 수 있다고 판단합니다. 실제 D1을 제거한 후의 테스트 결과(Fig 4)는 그 판단의 근거를 뒷받침합니다. 

  한 걸음 더 나아가, 분해된 layer들의 resolution(noise, seasonal, trend 등)에 따라 예측 기법을 상이하게 적용함으로써 예측 효과를 좀 더 향상시킬 수 있지 않을까 기대해 봅니다.

2012년 12월 25일 화요일

Dimensionality Reduction in Time Series

※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

▶ Multiresolution Analysis with Wavelet Transform

  파동은 상이한 진폭과 상이한 주기(또는 주파수)를 갖는 다수의 신호들이 복합된 것(composite signal)이라고 볼 수 있다. 예를 들어 다음의 파동을 관찰해 보자.
그림 1. Composite signal
  많은 노력을 들이지 않더라도 그림 1의 파동은 다음 그림 2의 파동 (a), (b)와 (c)를 합쳐 놓은 것이라는 것을 알 수가 있다.
그림 2
  Multiresolution analysis 또는 Multiscale approximation은 위의 관점에서 파동을 해체한 후, 파동을 특정 resolution(또는 scale)의 approximation과 그 보다 낮은 resolution의 detail coefficient들로 재구성한다. ※ 자세한 사항은 Wavelet Transform 관련 서적을 참고하십시요.

▶ Multiresolution Decomposition

  다음 그림은 특정 시계열 데이터에 대해 multiresolution decomposition을 수행한 결과를 보여 준다.  (Haar a trous transform, scale 5)

그림 3-1. Approximation at scale 5
그림 3-2. Detail coefficients at scale 1
그림 3-3. Detail coefficients at scale 2
그림 3-4. Detail coefficients at scale 3
그림 3-5. Detail coefficients at scale 4
그림 3-6. Detail coefficients at scale 5
  위 그림 3의 6개 파동을 모두 합치면 어떤 모양이 될까? 위 decomposition 결과를 가지고 역으로 원래의 파동을 reconstruction하면 다음 그림 4의 결과를 얻을 수 있다.

그림 4. Reconstruction
  어디서 많이 본 듯한 파동의 모양이 아닌가? 그렇다. 바로 KOSPI 지수의 최근 140 거래일 동안의 파동이다. ※ 주의: 종가 기준이 아니라 고가와 저가의 평균가 기준임

▶ Dimensionality Reduction

  우리가 주식 시장에서 접하는 파동들은 분 단위, 시간 단위, 일 단위, 주 단위, 월 단위 등 time scale에 상관 없이 그림 4와 유사한 모양을 갖는다.

  Glenn Neely의 파동 분석 방법은 '중요한 저점 또는 고점'에서 시작된 일련의 monowave들의 구조 및 진행기호 분석에서 시작된다. Elliott Pattern Helper(EPH)를 이용하여 위 chart에서 monowave들을 추출하면 다음 그림과 같다.

그림 5. Monowaves
  가령 그림 5와 같이 박스 A로부터 monowave 분석을 시작해 나갈 수도 있을 것이며, 그림 6과 같은 중간 결과를 얻을 수도 있을 것이다.

그림 6. Structure/progress notation of monowaves
  그런데, 파동 분석이 어려운 이유 중의 하나는, 그림 6에서 간파했을지도 모르겠지만, 하나의 파동에 다양한 degree의 패턴이 뒤죽박죽 섞여 있다는 것이다.

  그림 6의 파동 중간에 위치한 작은 monowave 7개를 관찰해 보자. 각각은 그 이전 monowave와 비교했을 때 시간 및 길이에서 확연한 차이가 난다. 즉, 쉽게 생각해서 degree가 다르다고 볼 수 있는데, 이들의 구조 및 진행기호를 하나씩 하나씩 분석해 나가야 할까?

  이렇듯 우리는 파동 분석 과정에서 'dimensionality curse'를 겪을 수밖에 없는데, 이를 회피할 방법은 없을까?

  이번 글의 제목이자 주제인 바, dimensionality reduction이 이 문제의 해결을 위한 수단이 되지 않을까 생각해 본다.

  어떻게 보면, 큰 추세와는 상관이 없어 보이는 작은 파동들을 하나로 묶어 의미있는 파동 패턴을 쉽게 찾을 수 있도록 하는 방법이라고 볼 수도 있겠다.

▶ Transform and Filtering

  위에서 언급한 Haar a trous wavelet transform과 filtering을 적용한 후 EPH를 통해 구조/진행기호를 분석한 결과는 다음과 같다.

그림 7-1. Before wavelet transform
그림 7-2. After wavelet transform, layer 1 filtering
그림 7-3. After wavelet transform, layer 1 & 2 filtering

   그림 7-1에서 7-3까지, 'curse'로부터 벗어나기 위한 노력이 가치가 있을까? Daily chart가 아닌 weekly chart, weekly chart보다 더 긴 시간 단위의 monthly chart를 볼 때와는 달리 detail을 포기하지 않아도 될 듯한데...


※ 그림 1과 2는 'The Illustrated Wavelet Transform Handbook, Paul S. Addison'에서 차용한 것임을 밝힙니다.