Paper review: Evaluating ML Classification for Financial Trading

jisu825·2021년 4월 8일
0

본 포스팅에서는 2016년에 발간된 Evaluating ML Classification for Financial Trading을 다룹니다.

Introduction

전통적으로 통계학의 영역이었던 Financial trading quantitative analysis는, 최근 들어 다양한 ML 기법들에게 자리를 빼았기고 있다. 그 중에서도, 뛰어난 정확성을 자랑하는 NN과 SVM 기반의 model들이 많이 연구되고 있다. 하지만 이들처럼 복잡한 model이 아닌 단순한 classification이나 regression model도 qunatitiative analysis에 있어 생각보다 뛰어난 성능을 보인다.

Financial analyst들이 시장을 분석하기 위해 technical indicators라는 지표를 만들었는데, 그간 많은 연구들이 이 지표를 ML model의 input으로 사용했었다. 본 paper에서는 long-term 지표들은 무시한채로, short-period의 정보만을 포함하는 indicator들을 model의 input으로 사용 할 것이다.
이는 일종의 dimension reduction 처럼 작용해, input data를 훨씬 더 간단하게 만들어준다. 따라서 풀고자 하는 이 financial analysis 문제를 전체 data를 하나의 entity로 보고 복잡한 분석을 진행해야 하는 time series analysis가 아닌, 개별 input data가 instance로서 존재하는(그니까 각각의 데이터가 우리가 아는 것처럼 그냥 row끼리 서로 다른 독립적인 데이터가 된다는 뜻. time series 분석에서는 row끼리의 dependecy가 있어서 더 복잡한 분석을 진행해야 하는데 여기서 그럴 필요가 없다는 것) ML classification 문제로 바뀌게 된다.

본 paper에서 주목할만한 점은, 이런식으로 short-period data만을 이용하고 model을 간소화 해도 나쁘지 않은 financial forecasting이 가능하다는 것이다. 여기서 '나쁘지 않다'를 어떻게 정의하느냐가 중요한데(model의 평가 지표로로 어떤 metric을 사용할 것인지), 보통 classification의 metric인 accuracy보다는 financial analysis에 더 적합한 평가지표인 Profitability를 사용하였다. training set size, period of retraining, number of attributes for train-test set의 3가지를 main variable 삼아 다양한 test를 진행하였다(일종의 parameter tuning 과정)

2. Machine Learning in Financial Forecasting

Financial Forecasting 분야에는 본 paper 이전에도 ML을 도입하려는 많은 시도가 있었다. 이 Chapter는 그러한 역사에 대해 간결하게 정리하며 중요 포인트들을 나열하는 식으로 서술되었다. Paper의 핵심 내용과는 크게 연관이 없으니 간단하게만 정리한다. 주의: 이 논문이 밝힌 내용들이 아니라 그냥 기존에 다른 논문들이 밝혔던 역사를 빠르게 되짚어보는 것

Technical Indicator
앞서 언급되었듯이, raw price보다는 technical indicator를 model의 input으로 사용하는 경우가 많음. 하지만 몇몇 논문은 ML의 input으로 technical indicator를 사용하는 것이 가지는 한계를 지적함. 이 indicator들을 계산하기 위해 인간이 수립한 rule은, 시간이 지남에 따라 뒤쳐질 수 밖에 없다는 것(financial data는 시간에 따라 그 속성들이 변하므로)

Artificial Neural Network
96년의 Tenti부터 03년의 Kamruzzaman, 09년의 Wu까지 technical indicator를 input으로 삼고, ANN을 기본 컨셉으로 삼은 다양한 model들이 제작되어왔음. 하지만 그러한 model들은 unstable한 시장에서는 크게 힘을 쓰지 못함(특히 accuracy적인 측면에서). 이런 단일 model들보다는 hybrid model들이 낫다는 것도 밝혀짐

SVM
ANN이 가장 핫하기는 했지만, SVM도 많이 쓰였음. 성능도 꽤 괜찮았고.
이 때 밝혀진 중요한 사실 중 하나는 위에서 언급되었던 것 처럼 단일 model만으로는 시장 전반을 잘 예측하기 힘들다는 것과, accuracy를 높이기 위해서는 Model들이 자주 re-trained 되어야 한다는 것.

Heuristic Method
본 paper에서 하려는 것과 같이 Financial Forecasting을 Time Series 문제가 아닌 단순 classification으로 보려는 시도도 있었음. 근데 결과는 ㅂㄹ. 다만 집중해야 할 점은, 얘네는 financial result(profit)을 기준으로 삼지 않고 단순 accuracy를 기준으로 삼았다는 것. 그래서 발전의 여지가 있음

실제로 그 후에 1) 바로 다음 시점에서의 투자 여부를 결정하는 classifier, 2) risk management를 통해 얼마만큼 투자할 지를 정하는 analysis, 3) human experience를 통한 rule-base system(투자 전 마지막 검증) 의 3 구조로 이루어진 투자 모델이 profit 측면에서 훌륭한 성과를 낸 적도 있음

3. Experiment Setup

  • Multi Agent Model

    본 model은 위와 같은 구조로 2개의 Agent가 존재한다. Agent 각각의 역할을 이해하는 것이 중요하다.

    • Market Agent
      • Financial information을 raw price의 형태로 Trading Agent에게 전달
      • Trading Agent가 보낸 주문을 처리하고, 결과를 tracking해 model의 수익을 기록
    • Trader Agent
      • pre-processing module: raw price data를 technical indicator로 변환
      • classifier module: 다음 time frame의 주가 등락에 대한 예측(binary classifier)
      • classifier module의 결과를 바탕으로 주문을 할 지 말 지 결정(opening or closing order)후, market agent에게 해당 결과를 전송

3.1. Data set and Attribute Selection

총 9개의 attribute가 model 학습에 사용되었다(Hour, Day of the week, Closing price, Percentage of price change, Lagged percentage of price change, Lagged percentage of price change moving average(10 periods), Relative strength index, Williams %R, Class).

앞서 trader agent가 raw price data를 받아 technical indicator로 변환한다고 했는데, 변환하는 값이 바로 저 값들인 것. 저 값들의 경우 단순 price나 time에 관한 지표부터, 지난 번의 변화 대비 이번 변화율 등 time-series 적인 성격을 띄는 value도 있다.

또, training시에는 위의 값들을 미리 계산해 놓지만(off-line), test 시에는 실제 현실의 거래처럼 trader agent가 실시간으로 위 값들을 도출하는 계산을 처리한다.

3.2. Performance Metrics

  • Cross Validation
    Retraining 때마다 accuracy를 기준으로 10-fold CV를 진행.
  • Bias-Variance Tradeoff
    항상 가장 큰 논제인 bias-variance tradeoff는 여기서는 큰 문제가 되지 않음.
    매 retraining 때마다, variance보다는 bias를 minimizing 하는데에 조금 더 집중함(underfitting보단 overfitting을 지향). 그래도 어차피 반복적으로 retraining 하기 때문에, 장기적으로 보면 overfitting도 잡히게 되어있음(variance도 잡힘)
    → 단기적으로는 bias minimizing, 장기적으로는 variance minimizing

  • Data Snooping & LOOCV
    주식 데이터는 historical data이므로 여러 버전이 있는 것이 아니라 하나의 데이터셋밖에 존재하지 않음. 따라서 계속해서 같은 dataset으로 학습을 진행하게 되고, 이는 data snooping을 유발함(Overfitting의 일종). 이는 Financial problem에서는 어쩔 수 없다고 받아들여짐
    이를 어느정도라도 해결하는 방식이 leave-one-out cross validation을 사용하는 것. 본 paper에서는 loocv를 발전시켜서 leave-n-out CV를 이용했음. 정확히 어떻게 구현한건지는 이해를 못했는데 시간을 좀 섞은 것 같음. 매 training set마다 다른 data들의 시점보다 뒤의 시점의 data를 섞어놨다고 함(전반적으로 20년 10월의 데이터면 뜬끔없이 11월의 데이터를 섞는 식). 이렇게 미래의 data를 섞는 것은 마치 실제 trading 과정에서 미래를 예측하는 것과 같은 효과를 줄 수 있어서 좋고, 계속해서 다른 dataset이 되기 때문에 뭐 효과도 좋아진다고 함.

  • higher accuracy ≠ higer profits
    중요한 점은, model의 accuracy가 꼭 profit으로 직결되지 않는 다는 것. 따라서 accuracy 뿐만 아니라 Cumulative Return 값도 추적해야 함(얼마를 벌었는 지). 이 외에도, 다양한 시간 간격의 accuracy, average return per trade, 가장 크게 잃은 값 등이 평가지표로 사용됨.

3.3. Machine Learning Classifiers

classifier로 어떤 model을 선정 할 지에 대한 기준은 2가지이다.

  1. 간단해야 하고
  2. data mining 분야를 대표할만큼 자주 쓰이는 알고리즘이어야 한다.

위 규칙에 따라 크게는 3가지 종류의 model이 선정되었다

  • instance-based classifier(Navie bayes와 같은 lazy classifier)
  • DT
  • rule-learners(예전 2-2 DB에서 했던 것 처럼 그냥 말그대로 '규칙'을 찾아나가는 모델인 듯)

구체적으로 소개된 model은 총 5가지이다.

  • Instance-based Classifier: Naive Bayes와 K* model
  • DT: C4.5와 LMT(Logistic Model Tree)
  • Rule-learner: RIPPER(the Repeated Incremental Pruning to Produce Error Reduction)

4. Experimental Results: Trading Simulations

우선 선제적으로, Trading Agent만을 위에서 언급된 각각의 ML model로 학습시켜보았다. 결과부터 말하자면, 참담한 수준이었다. 그 후로, Periodic Retraining(주기적으로 re-training하는 것 - 시시각각 변하는 financial 흐름을 포착하기 위함)을 진행하는 실험을 진행하였다. 이 때,

  • retraining set size
  • period of retraining
  • number of attributes

의 3값을 변화해가며 실험하였다.

ML model마다 조금씩 다르기는 하지만, profitable한 결과를 보였다.

4.1. Single Training Experiments

위에서 언급한, Periodic Retraining 없이 Trading Agent의 ML Classifier만을 단 한번 training시킨 상태에서의 실험.

6개의 ML model + Random Trader(진짜 무작위로 trade 여부를 결정하는 애)로 실험을 진행했다. 이때의 결과는 ML model 모두 accuracy가 51.5%를 넘지 못함 - accuracy만 놓고 보면 사실상 무작위인 셈.

그런데 놀랍게도, 가장 간단한 classifier인 OneR model이 매우 높은 cumulative return을 기록함(무려 31%). 아직은 이게 단순히 운인지 진짜 모델이 좋은건지는 모르지만.. 매우 고무적인 결과

Accuracy가 생각보다 많이 무의미하다는 것이 드러났다. 왜냐하면 accuracy가 비슷한 애들끼리 cumulative return이 큰 차이가 나는 경우가 매우 많았다. 당장 높은 cumulative return을 기록한 OneR model도 accuracy는 50%를 겨우 넘기는 수준이었다.

그렇다면 어떤 변수가 핵심적일까? 바로 average return per trade이다. Average return per trade가 유의미한 양수라면cumulative return이 커진다. 생각해본다면 당연한게, 평균적으로 번 돈이 양수면 당연히 최종 금액도 양수가 될 수 밖에 없다.

여기서 중요한 점은, 50% 수준의 accuracy일지라도 positive return을 기록하는 것이 가능하다는 것이다. 또한 return per trade가 충분히 높다면, 몇번의 큰 실수들도 만회가 가능하다는 것 - 이는 현실과도 매우 유사함

중요
또한 눈여겨봐야 할 점은, cumulative accuracy를 학습한 데이터의 기간(총 며칠분을 학습시켰냐)에 따라 plotting해 보면 오히려 초기 n일만 가지고 학습했을 때의 성능이 대체적으로 좋음 → 후에 n일마다 retraining을 거치면 모델 성능이 많이 좋아질 것이라는 가정이 가능해진다.

4.2. Retraining Experiments

periodic retraining이 accuracy를 올려줄 것이라는 기대에 따라, retraining experiment를 진행하였다.

  • 실험 1: periodic retraining - every 50 periods, incremental training set size, 9 attribute
    • retraining 할 때마다 accuracy가 오를 것이라는 기대를 했으나, 그렇지 못했다. 즉, retraining과 data size의 incremental(50번마다 재학습 할 때 새롭게 생긴 데이터를 학습하니 갈수록 학습 데이터의 사이즈가 커짐)이 accuracy에 긍정적인 영향을 미치지 못했다.

    • 반대로 retraining을 함으로써 cumulative return은 꽤 증가했다. 이는 아마도 periodic retraining이 price trend의 새로운 패턴을 학습하게끔 도와줘서인것같다. 예를 들어 2008년의 금융위기와 같이 변동성이 큰 시기에는 periodic retraining을 거친 model의 성능이 훨씬 좋았다.

    • 반대로, incremental set size는 오히려 현재 시점에서 크게 중요하지 않은, 과거의 패턴에 치중하게 하는 경향이 있어 성능을 저하시키는게 아닐까 하는 의심이 들었다.

  • 실험 2: Experiments with variable retraining set size, retraining periods, and number of attributes
    • 말 그대로 retraining set size와 retrainin 주기, 사용한 attribute 수를 조절해 가며 실험

    • 뭔가 단 하나의 best case가 나오지는 않았고, model마다 조금씩 달랐음.

4.3. Result Analysis

  • 10-fold CV가 그렇게 좋지 않았다. 이게 training을 할 때에는 최근의 데이터를 학습하는게 엄청나게 중요한데(가장 최신 financial pattern을 배우기 위해), CV를 해버리면 최근의 데이터를 학습할 수 없는 경우가 발생하기 때문으로 추정된다.

  • training set의 size와 # of attribute에 sensitive하다. 근데 모델마다 최적 조건은 다 다름. 그래도 대체적으로 training set 1000, retraining 주기 10, attribute 5개가 앵간했음

  • 2007~2009(금융 위기)에는 대부분의 모델이 죽쒔지만, 회복기인 2010년에는 다 잘했다. 가장 간단한 OneR 하나 빼고 → 아 너무 간단한 모델은 변동성이 높은 시기를 잘 학습하지 못한다는 것을 알았다.

  • 다양한 통화에 대해서도 실험을 해보았다.

  • trading cost나 레버리지 투자를 고려하지 않았다. 이것도 고려해야 할 것


Paper Overview

Model Contribution

Financial forecasting 분야에서NN, SVM 등에 밀려 그동안 주목받지 못했던 ‘간단한’ Classification model들도 profitable한 성과를 낼 수 있음을 보였다

Strength

  1. Simplicity
    기존에 많이 사용되었던 SVM이나 NN이 아닌 간단한 Classification model만으로도 profitable한 성과를 내었다. 이를 통해, 적은 메모리와 training time으로 financial analysis를 가능하게 했다. 이는 후에 잦은 retraining을 할 때에도 큰 도움이 되었다.

  2. Realistic Approach
    기존의 많은 연구들이 Accuracy를 main metric으로 선정하였지만, 본 Paper에서는 Cumulative Return을 main metric으로 평가하였다. 이는 현실적인 투자의 목적을 잘 반영하였다고 할 수 있는데, 현실에서는 몇 번이나 성공적인 투자를 하냐보다도 실제로 수익을 내었는 지가 더 중요한 요소이기 때문이다.

  3. Retraining
    본 paper에서는 retraining을 통해 최신의 경향성을 반영하는 것이 중요한 financial forecasting 분야에서 좋은 성능을 보여주었다. 또한 retraining을 함으로써 model의 bias-variance tradeoff를 적당히 조절하였다.

Weakness

  1. Compuational Capacity의 증가
    본 paper가 작성된 시점과는 달리, Paper에서 언급하였던 ‘복잡한 SVM, NN model’은 더이상 복잡하지 않다. 즉 그 사이에 computation 능력과 모델링이 엄청나게 발전해, 더이상 그정도의 model은 복잡하다고 여겨지지 않는다. 즉, 겨우 그정도의 complexity를 개선하기 위해 성능을 포기할 필요가 이제는 없다.

  2. Trading Cost
    Cumulative Return을 main metric으로 선정할만큼 현실적인 투자를 표현하는데에 중점을 두었으면서도, trading cost를 고려하지 않은게 이해가 가지 않는다. 잦은 trading이 있었다면, cumulative return이 positive하게 나오더라도 실제로는 잃었을 수 있다.

  3. Ensemble
    간단한 model들을 사용해 시간적인 이점을 얻은만큼, 그 시간을 여러 model을 training해 ensemble하는데에 썼다면 더 좋은 성능을 보이지 않았을까 하는 아쉬움이 남는다.

profile
서울대학교 산업공학과 1년차 딥러닝 개발자 insta: @jisu_fassyzino & @via_ad_astra98

0개의 댓글