카테고리 없음

시계열 예측 모형

세모아이 2022. 2. 2. 15:25

이번 글에서는 시계열 예측을 위한 

예측 모형의 종류에 대해서 간략히 알아보겠습니다.

미래를 예측하는 것은 돈을 벌 수 있기 때문에

솔깃하면서도 어려운 과제입니다.

특히.. 미래의 주가를 예측할 수 있으면 얼마나 좋을까요? 

 

이러한 예측 모형에는 다양한 것들이 있는데,

회귀 모형의 Ridge, Lasso

머신러닝 모델로 부스팅계열의 XGBoost, LightGBM 그리고 CatBoost

배깅 계열의 RandomForest, 

딥러닝 모델로 LSTM, GRU이 있습니다.

 

Ridge & Lasso

 

먼저, Ridge와 Lasso는 회귀 모형으로

한 개 이상의 변수가 만들어내는 일정한 패턴을 활용해서 예측하는 것을 말합니다. 

이러한 회귀모형을 기반으로 규제를 적용한 Regularization Model인데요.

 

Regularization Model...?

 

예측한 값과 실제값의 차이인 오차를 최소로 하는 회귀 계수를 찾되,

Ridge Regression

훈련 데이터만 잘 맞추는 High-Variance한 모델이 되지 않도록

변수 앞 곱해지는 회귀계수 크기(기울기)의 제약을 주는 모델입니다.

 

Ridge와 Lasso 의 큰 차이는 없으나, 

Lasso(Least Absolute Shrinkage and Selection Operator)

 람다가 특정값일때, 회귀계수가 완전히 0으로 수렴할 수 있어 변수 선택기능을 가집니다.

 

Lasso는 회귀계수의 "절대값"의 합의 규제(L1 norm)를 가하는 모델이여서,

그래서 변수 선택시 사용되거나, 간단한 모델을 구축할 수 있지만,

람다가 큰 값으로 설정되어 있을 시, 변수 선택이 제대로 되지 않아,

예측성능이 저하될 수 있으니, 이럴 때는 람다 값을 적게 수정해주시면 됩니다.

 

Ridge는 회귀계수 "제곱"의 합의 규제(L2 norm)를 가하는 모델입니다.

 

회귀계수는 모델이 학습하는 파라미터이지만,

람다는 0~양의 무한대의 값이고 CV를 통해 최적의 람다값을 정할 수 있습니다. 

어떤 값이 최적의 람다값 또는 범위인지 알수 없어

0.001, 0.01, 0.1, 1, 2, 3 등의 범위를 테스트 해볼 수 있습니다.

다만, 람다의 크기가 너무 크면 학습이 안되는 Underfitting이 일어나거나,

너무 작을 경우에는 Overfitting이 되므로 주의하여야 합니다.

Random Forest

Regression Tree ( Decision Tree 의 한 종류 ) 를 이해하여야 하는데,

관측치들과 예측치의 오차가 가장 적은 특징 분기를 루트노드로 설정한 후,

그에 대한 트리를 만들어간다.

하지만, 모든 관측치에 대해 예측값이 생겨버리면,

Overfitting이 일어날 수 있기 때문에, 몇가지 테크닉을 할 수 있다.

 

1. leaf가 되기 위한 조건

(min_samples_split, min_samples_leaf)

분기를 하기 위한 최소 관측치 수(min_samples_split), 그리고

leaf가 되기 위한 최소 관측치 수(min_samples_leaf)등으로 Overfitting을 방지할 수 있다.

 

2. pruning

(ccp_alpha)

tree의 수(leaf의 수)의 상수를 곱한값을 SSR(Sum of Squared Residuals)와 더하여 오차를 계산한다.

ccp_alpha가 커질수록 트리의 크기가 작아진다.

 

Random Forest 는 샘플 중 임의의 데이터를 뽑아 Bootstrapped Dataset 을 만들고,

임의의 특징 갯수 만큼 의사결정트리를 구축하기 위한 특징을 뽑는다.

 

n_estimators 의 수만큼 트리를 구축한 다음에

그 결과를 다수결의 원칙 또는 평균으로 집계한다.

이를 Boostrapped Dataset 을 aggreataion 하였다고 하여 Bagging기법이라고 한다.

 

Boostrapped Dataset에는 Original Dataset 의 중복을 허용하고,

또한, Original Dataset의 1/3 정도는 포함되지 않는다.

이를 Out-of-Bag samples 라고 하는데, 이 데이터를 사용한 점수(oob_score)로

Random Forest 모형의 일반화 성능을 확인가능하다.

 

XGBoost 

XGBoost 를 이해하기 위해서는

Gradient Boosting Macine을 알아야 합니다. 

 

GBM은 예측하고자 하는 값의 평균을 초기 예측값으로 설정한 후,

실제값과 예측값의 차이인 잔차(Residual)를 예측하는 의사결정트리를 모델을 구축합니다.

 

 

또 다시 트리를 만들어서 그에 대한 잔차를 예측해서

이를 더하여 예측하는 과정이죠.

소수의 이상치가 있을 경우에는,

예측하려는 잔차의 평균이 치우쳐질 수 있기 때문에 성능이 악화될 수 있습니다.

 

이러한 GBM을 시초로 효율성을 향상시키기 위한 변형 모델로,

XGBoost(2014), LigthGBM(2017), CatBoost(2017)등 모두

GBM의 효율성을 향상시키기 위해 변형된 모델입니다.

Adaboost는 Boosting 모형의 시초로, GBM이 더 유연하다고 볼 수 있습니다.

 

하지만, GBM에서도 RF와 마찬가지로 Overfitting 문제가 있을 수 있습니다.

1. Learning Rate

2. Gamma

 

1. Leanring Rate

따라서, 잔차에 곱해지는 상수로, Learning Rate를 조절하는데,

이 Learning Rate는 0~1 사이의 값이 됩니다.

 

2. Gamma

XGBoost 의 Prning 은 gamma 를 설정하여, Gain이 gamma 보다 작을 경우

Prning 을 합니다.

 

3. Lambda

Decision Tree에서는 루트노드를 설정할때,

오차가 가장 적은 특징을 분기로 사용했다면, XGBoost에서는 Gain이 큰 특징을 분기로 사용한다.

Gain이 크다는 것은 양쪽이 고루 분배가 되지 않는다는 것을 의미한다.

Gain ( Left_sim + Right_sim - Root_sim )

Similarty Score = Sum of Residuals, Squared / No. of Res + lambda

Lambda 는 개별 관측치의 영향도를 적게 해줍니다.

따라서 Lambda 가 클수록 Gain이 낮아져 Prning 될 확률이 높아집니다.

 

그러면, 새로운 설명변수가 주어졌을때,

다수의 의사결졍트리에 따라 예측할 수 있게 되죠.

 

XGBoost 는 속도와 메모리 사용 측면에서

GBM의 개선된 모델이고

정규화를 사용한 Similarity Score 을 계산하는

모델을 사용합니다.

 

CatBoost

CatBoost는 Category Boosting의 약자로 범주형 변수에 사용하기 좋은 모델입니다.

범주형 변수, 수치형 모두 타 Boosting기법(ex. GBM, XGBoost, LightGBM)보다 우수한 성능을 보이는데,

이는 CatBoost가 Prediction Shift, Target Leakage 2가지 문제점을 해결하였기 때문입니다. 

 

1. Ordered Boosting 을 사용하여 Prediction Shift 문제를 해결함.

학습 데이터에 대한 조건부 확률과 테스트 데이터 조건부 확률이 다르다.

 

2. Ordered Target Statistics 를 사용하여 Target Leakage 를 해결함.

타겟 변수가 입력 변수에 새어 나간다.

부스팅 계열(ex. XGBoost)에서 Target Statistic 라는 개념을 사용하여 범주형 변수를 수치형 변수로 변환합니다.

이때, 학습 데이터와 테스트 데이터의 조건부 분포가 다름으로써 생기는 Conditional Shift 가 일어납니다.

 

동일한 데이터 Set 을 가지고

잔차 예측 모델을 만듬으로써, 정답을 이미 알고 있다는 상황을 가정하기 때문에 target leakage(타겟 누수)가 발생하는데,

그에 반면, CatBoost는 데이터 셋을 분리해 놓고, A 데이터 셋을 가지고 학습한 모델을 사용하여

B 데이터 셋의 의 잔차를 예측함으로써 오버피팅 및 타겟 누수를 방지합니다. 

 

ordered boosting 이라는 개념 등장

훈련데이터 M1 학습 후 이 모델로 다른 데이터의 subset의 잔차를 계산함.

-> 오버피팅, 타겟 누수 방지

 

기존 부스팅 모델은 2가지 문제점을 가지고 있다.

1. 느린 학습속도

2. 오버피팅

 

1.느린 학습속도 같은 경우 부스팅 모델이 배깅 모델보다 학습속도가 느린데요. 그 이유는 병렬적으로 수행되는 배깅과 달리

부스팅은 순차적으로 학습해가서 그렇죠.

2. 오버피팅 같은 경우, 잔차를 학습하기 때문에 굉장히 High Variance 한 모형일 수 있습니다.

 

CatBoost 는 이 두가지 문제점을 해결하기 위해 테크닉들을 사용합니다.

 

LSTM

이제는 딥러닝 모델을 알아보도록 해요

기존 머신러닝 모델들은 대략 1,000개의 샘플로 학습이 가능하였지만,

복잡한 딥러닝 모델은 평균적으로 10,000 ~ 100,000개의 샘플이 필요하며,

언어 번역과 같은 고차원 문제 같은 경우에는 백만개의 샘플정도가 필요합니다.

 

LSTM은 음성, 언어, 그리고 시계열 데이터와 같은 시퀀스 데이터에 사용되는 모형으로

Hochreiter & Schmidhuber(1997)에 의해 소개되었다.  

 

GRU

GRU는 LSTM의 구조를 단순화하여 더 적은 가중치를 학습하는 구조입니다.

따라서, 데이터가 충분하지 않을 경우, RNN의 시퀀스가 길어질수록 앞의 정보를 잊어버리는

vanishing gradient 문제를 해결하였지만, 

RNN보다 더 많은 가중치를 학습하여야 했습니다.

이에 따라 데이터가 충분하지 않은 경우에는 과적합 문제가 발생하였는데, 

LSTM의 gate 수를 줄임으로써 더 적은 파라미터를 학습하는 구조로 변환시키는 것이 GRU 모형입니다.

 

실험한 결과 가장 좋은 하이퍼파라미터 

Lasso : alpha 0.01

Ridge: alpha 3

Adaboost : learning_rate : 0.1, n_estimators : 50

 

HyperParameter

Ridge Lasso Random Forest XGB CatBoost LSTM GRU
lambda
(ex. 1e-3, 1e-2, 1e-1, 1, 2, 3)
lambda
(ex. 1e-3, 1e-2, 1e-1, 1, 2, 3)
min_samples_split (ex. 20)
*default = 2
learning_rate
(ex. 0.1, 0.5)
*default = 0.3
learning_rate
(ex. 0.1, 0.5)
*default = 0.3
batch_size
(ex. 32, 64, 128, 256)
 
    min_samples_leaf (ex. 20)
*default = 1
gamma
(ex. 0)
*default=0
reg_lambda
(ex. 0, 1)
*default = 0
epoch
(ex. 1000)
 
    ccp_alpha 
(ex. 1, 2 )
*default = 0
reg_lambda
(ex. 0, 1)
*default = 0
n_estimators early_stopping
(ex. 10, 30, 50)
 
    boostrap
*default=True
n_estimators   dropout
(ex. 0.1, 0.3)
 
    max_features

*default=n_features
    LSTM units
(ex. 16, 32, 64, 128, 256)
 
    n_estimators
*default=100
       
    oob_score
*default=False