관리 메뉴

너와 나의 스토리

[ML] MondrianForestRegression으로 time series 주식 가격 예측하기 - feature 1개일 때 / 2개일 때 본문

Data Analysis/Machine learning

[ML] MondrianForestRegression으로 time series 주식 가격 예측하기 - feature 1개일 때 / 2개일 때

노는게제일좋아! 2019. 9. 6. 11:19
반응형
feature 1개로 예측하기

 

1. 데이터 셋 load & library import

데이터 셋:

IBM_2006-01-01_to_2018-01-01.csv
0.15MB

from skgarden import MondrianForestClassifier
from sklearn import datasets, cross_validation
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dataset = pd.read_csv('./input/IBM_2006-01-01_to_2018-01-01.csv', index_col='Date', parse_dates=['Date'])
dataset=dataset.fillna(method='ffill')
dataset.head()

 

2. training set과 test set 만들기

2016년 데이터를 training set

2017년 데이터를 test set으로 만들었다.

우리는 Open 가격만 가지고 훈련 및 예측할 것이다.

training_set=dataset[:'2016'].iloc[:,0:1].values  
test_set=dataset['2017':].iloc[:,0:1].values

 

3. training set을 입력과 정답으로 나누기

datalen=len(dataset[:'2016'])

X_train=[]
y_train=[]
for i in range(0,datalen-1):
    X_train.append(training_set[i,0])
    y_train.append(training_set[i+1,0])

예를 들어, 1일의 가격을 X_train이라고 하면 그 때 출력값의 정답은 2일의 가격이다

 

 

4. test set을 입력과 정답으로 나누기

testlen=len(test_set)
X_test=[]
y_test=[]
for i in range(0,testlen-1):
    X_test.append(test_set[i,0])
    y_test.append(test_set[i+1,0])

 

5. list를 ndim array로 변환

#list -> ndim array로 변환
X_train=np.reshape(X_train,(-1,1))
y_train=np.reshape(y_train,(-1,1))
X_test=np.reshape(X_test,(-1,1))
y_test=np.reshape(y_test,(-1,1))

 

5. MondrianForestRegerssor 모델 생성 및 훈련

from skgarden import MondrianForestRegressor
mfr=MondrianForestRegressor(random_state=1,max_depth=5)
mfr.partial_fit(X_train,y_train)
y_pred,y_std=mtr.predict(X_test,return_std=True)

 

6. 결과 보기

그래프

plt.plot(test_set,color='red',label='Real Price')
plt.plot(y_pred,color='blue',label='Predicted Price')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

정확도 측정

mfr.score(y_test,y_pred)

 

 

 

feature 2개로 예측하기 - open 가격으로 high 가격 예측하기
# 데이터 load 및 import는 위와 동일

#open값과 High 값
training_set=dataset[:'2016'].iloc[:,0:2].values  
test_set=dataset['2017':].iloc[:,0:2].values

X_train=dataset[:'2016'].iloc[:,0:1].values  
y_train=dataset[:'2016'].iloc[:,1:2].values  
X_test=dataset[:'2017'].iloc[:,0:1].values  
y_test=dataset[:'2017'].iloc[:,1:2].values  

from skgarden import MondrianTreeRegressor
mtr=MondrianTreeRegressor(random_state=1,max_depth=5)
mtr.fit(X_train,y_train)
y_pred,y_std=mtr.predict(X_test,return_std=True)

plt.plot(y_test,color='red',label='Real Price')
plt.plot(y_pred,color='blue',label='Predicted Price')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

그래프

 

정확도

=> 0.9734093989551073

반응형
Comments