Advances in Financial ML

Ch 8. Feature Importance

LunaMooN 2023. 1. 27. 01:14

1. Feature Importance

  변수 중요도는 예측 모형의 각  feature가 예측력에 기여한 정도를 측정한 것이다. 기계학습의 문제점으로 지적되는 것 중 하나는 "블랙박스"라는 점이다.  머신러닝은 예측에 초점이 맞춰져 있고 단순한 모형을 여러번 조합하여 모형의 복잡도가 높아 예측 결과 과정을 설명하기 어렵다. 이를 보완한 분석 방법이 변수 중요도 분석이다. 변수 중요도는 향후 분석에 있어 중요한 역할을 할 수 있다. 어떤 feature가 어떤 기간에 혹은 어떤 레짐일 때 중요도가 높아지는지, 중요한 feature로부터 레짐을 예측할 수 있는지, 모든 시장에서 통용되는 feature가 있는지 등 예측 모형을 개발 또는 개선시키는 데 활용이 가능하다. 이번 포스팅에서는 변수 중요도를 측정하는 세 가지 방법을 소개하고 간단한 예시를 소개한다. 

 

2. MDI (Mean Decrease Impurity)

$ \Delta g[t, f] = i[t] - \frac{N_t^{(0)}}{N_t} i[t^{(0)]} - \frac{N_t^{(1)}}{N_t} i[t^{(1)]}$

  MDI는 의사결정나무 모형을 기반으로 한 알고리즘에 적용되는 것으로 불순도가 낮아진 만큼 정보를 얻었다고 판단한다. 불순도는 해당 노드의 라벨이 하나일수록 낮다. 각 결정 트리는 불순도가 낮아지는 방향으로 노드를 분할하는데, 각 feature의 전체 불순도 감소에 기여한 정도를 합친 수치이다. 0과 1 사이의 값을 가지며 1에 가까울수록 중요한 변수이다. 모형에 사용된 전체 Feature의 중요도 합은 1이다. 불순도를 측정하는 방법에는 여러가지가 있는데 지니(Gini) 지수를 대표적으로 사용한다.

 위의 식에서 $f$는 설명 변수이며 $\Delta g[t, f]$ 는 분할 전 불순도와 분할 후 불순도의 차이이다. $i[t]$는 분할 전 노드 t 에서 라벨의 불순도, $i[t^{(0)}]$ 는 분할 후 왼쪽 노드, $i[t^{(1)}]$ 은 분할 후 오른쪽 노드의 라벨의 불순도를 나타낸다. 

  MDI는 계산이 빠르고 해석이 직관적인 장점이 있으나 feature간의 상관계수가 높은 경우 값이 하향평준화 된다. 따라서 상관계수가 있는 경우에는 MDI를 사용하면 결과가 부정확해지는 단점이 있다.


예시

 (1) 모형 설정

  랜덤포레스트 모형을 사용하며 하이퍼파라미터는 각 트리의 최대 깊이 5, split의 최소 샘플 개수 500, 리프 노드의 최소 샘플 개수 500으로 설정했다.  

 (2) 데이터

  사용한 데이터의 기간은 1991년 1월 2일부터 2022년 9월 1일까지의 일별 데이터이며 feature들은 5개의 카테고리로 나뉜다. 각각 환율, 상품선물가격, 추세지표, 변동성지표, 금리스프레드로 총 33개의 변수가 사용되었고 변수 선택 알고리즘을 적용하여 각 카테고리별로 중요한 변수 하나씩을 설정하였다. Label은 S&P500의 20일 이후 주가가 올랐으면 1, 내렸으면 0으로 하였다. 

 (3) 결과

  분석 결과는 다음과 같다. 

1995 BAAFF
1996 BAAFF
1997 BAAFF
1998 BAAFF
1999 BAAFF
2000 BAAFF
2001 AAAFF
2002 ATR_st
2003 AAAFF
2004 AAAFF
2005 AAAFF
2006 AAAFF
2007 AAAFF
2008 ATR_st
2009 ATR_st
2010 ATR_st
2011 ATR_st
2012 ATR_st
2013 ATR_st
2014 ATR_st
2015 ATR_st
2016 AAAFF
2017 AAAFF
2018 AAAFF
2019 AAAFF
2020 ATR_st
2021 ATR_st
2022 AAAFF

 왼쪽 컬럼은 분석 기간의 종료시점의 연도를 나타낸 것이다. 분석 시작 시점은 1991년 1월 2일로 동일하며 분석 종료 시점은 해당 연도의 12월 31일이다. 위의 표를 보면 분석 기간별로 변수 중요도가 가장 높은 Feature가 변하는 것을 알 수 있다. 1년 단위로 분석 기간을 늘렸을 때 금융시장의 구조 변화가 있었다고 보이는 2002년 (버블 닷컴), 2008년 (글로벌 금융위기), 2020년 (Covid 19) 에는 변동성지표의 중요도가 가장 높았고 전반적으로 금리 스프레드가 중요도가 높았다. 

 Regime에 따라서 예측에 가장 중요한 변수가 바뀌는 것을 알 수 있다. 구간을 1년씩 나누는 것보다 레짐을 정의하여 나눠서 중요 변수를 선택하고 레짐에 따라 해당 변수를 최종 예측변수로 사용하는 방법을 고안할 수 있다. 역으로, 중요 변수를 통해 레짐을 찾는 알고리즘을 구현하는 방안도 생각해 볼 수 있다.

3. MDA (Mean Decrease Accuracy)

  MDA는 전체 feature를 사용하여 예측모형으로부터 cross validation score를 계산한 값과 각 feature를 돌아가면서 랜덤하게 배열하여 같은 예측모형으로부터 얻은 cross validation score 값의 차이로 개별 변수의 중요도를 구한다. 만약 어떤 feature가 중요하다면 shuffle 후의 cv 값이 현저하게 낮아질 것이다. MDA는 tree모형에 국한되지 않고 모든 모형에 대해 중요도 값을 구할 수 있는 장점이 있지만 MDI와 마찬가지로 만약 feature간 상관관계가 있는 경우 부정확한 값이 도출된다는 단점이 있다. 어떤 두 변수의 상관계수가 1이라고 가정한다면 한 feature에 대한 shuffle의 효과가 다른 feature에 의해 상쇄되어 중요도 값이 낮아질 수 있다. 


예시

* 모형 설정 및 데이터는 위와 같고 분석기간은 1991년 1월 2일~2022년 9월 1일 단일 기간을 사용했다.

 결과

  mean std
AAAFF 0.0059 0.0009
ATR_st -0.0001 0.0012
CCI_lt -0.0009 0.0012
DXY 0.0035 0.0024
WTIFutures 0.0038 0.0034

  위의 표를 보면 평균값을 기준으로 금리 스프레드가 가장 중요한 변수라고 볼 수 있다. 변동성 지표와 추세 지표의 경우는 중요하지 않은 변수로 판명되었다. (그러나 이 분석에서 label을 20일 이후 주가 방향성으로 했기 때문에 cross validation에서 이전 정보를 반영하는 문제점이 있으므로 참고용으로만 봐야 한다.)