본문 바로가기

DeepLearning

딥러닝으로 걷는 시계열 예측 [CH11] KOSPI200 데이터를 이용한 삼성전자 주가 예측

실제 주가를 RNN으로 구성해보자

 

1. 주가 데이터 모집

삼성전자의 주식 가격과 KOSPI200의 가격을 이용해, 내일의 삼성전자 주가를 예측하는 모델을 만들어 보자.

 

성능 비교하기

- 삼성전자 한 가지만을 가지고 DNN, LSTM으로 구성한 모델과 입력 데이터가 두 가지 (삼성전자, KOSPI200 지수)이므로 두 가지 데이터단순 DNN, LSTM으로 구성한 모델과 비교

- 앙상블(다:1)로 구성해서 비교

 

데이터는 삼성전자 주가 데이터와 KOSPI20지수를 csv파일로 다운로드 받는다

 

 

2. 데이터 저장

데이터를 효과적으로 사용하기 위해 csv 파일을 불러와서 numpy파일로 저장하여 작업한다

 

3. panda를 numpy로 변경 후 저장

pandas 데이터를 numpy로 바꾸는 방법은 pandas 데이터에 '.values'를 붙여주면 된다

데이터들을 각각 kospi200.npy, samsung.npy 데이터를 저장한다. 앞으로 npy데이터를 불러서 작업하면 된다.

https://github.com/yenyen31/Artificial-Intelligence-in-Finance/blob/main/CH11/11_2.py

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

 

4. numpy 데이터 불러오기

앞에서 저장한 데이터들을 numpy로 불러오기

 

5. DNN 구성하기

삼성전자의 데이터만 가지고 DNN구성(다:1)해보기

사용할 데이터는

x값: 삼성전자의 시가, 고가, 저가, 종가. 거래량

y값: 삼성전자의 종가

 

x의 컬럼은 총 5개이고, y의 컬럼은 총 1개이므로 총 426일분의 데이터를 Split()이용해 5개씩 잘라서 데이터셋을 구성한다.

 

tmp_y = dataset[x_end_number:y_end_number, 3]

을 이용해 세 번째 컬럼(종가) 데이터만을 y값에 준다.

 

5-1. 데이터 전처리

사이킷 런의 train_test_split()이용해서 train, test를 분리하고, 

사이킷 런의 StandardScaler를 이용해 전처리를 한다 -> StandardScaler는 2차원 데이터만 작업 가능하기 때문에 꼭 reshape을 통해 처리해줘야 함

 

# 데이터 셋 나누기
# 사이킷 런의 StandardScaler를 이용
from sklearn.preprocessing import StandardScaler

# 2차원 데이터를 reshape으로 변경해줌
scaler = StandardScaler()
scaler.fit(x_train)
x_train_scaled = scaler.transform(x_train)
x_test_scaled = scaler.transform(x_test)
print(x_train_scaled[0, :])
 

 

5-2. 컴파일 및 훈련, 완성

개선이 없는 에포가 20회 이상 나오면 조기 종효 하도록 훈련하기

rom keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(patience=20)
model.fit(
x_train_scaled,
y_train,
validation_split=0.2,
verbose=1,
batch_size=1,
epochs=100,
callbacks=[early_stopping],
)

 

3~5까지의 전체 코드

https://github.com/yenyen31/Artificial-Intelligence-in-Finance/blob/main/CH11/11_5.py

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

 

 

6. LSTM 구성하기

완성된 삼성전자 DNN 모델 활용해 LSTM 모델 구성하기

데이터의 shape을 수정하면 됨

: 데이터 전처리 이전에 데이터를 shape(None, 5, 5)를 (None, 25)로 reshape한 전처리 이후 데이터를 다시 (None, 5, 5,)로 reshape하여 데이터 부분 하단에 추가하면 된다!

# 데이터의 shape 수정하기
x_train = np.reshape(x_train,
(x_train.shape[0], x_train.shape[1] * x_train.shape[2]))
x_test = np.reshape(x_test,
(x_test.shape[0], x_test.shape[1] * x_test.shape[2]))
print(x_train.shape)
print(x_test.shape)

실행 결과를 확인하면 기존 Dense모델보다 훨씬 많은 시간이 소요되지만, loss값이 줄지 않는 걸 확인할 수 있다.

 

https://github.com/yenyen31/Artificial-Intelligence-in-Finance/blob/main/CH11/11_6.py

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

 

 

7. DNN 앙상블 구현하기

삼성전자 데이터에 KOSPI200 데이터를 엮어서 앙상블 모델을 DNN으로 구성해보자

 

https://github.com/yenyen31/Artificial-Intelligence-in-Finance/blob/main/CH11/11_7.py

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

 

 

 

8. LSTM 앙상블 구현하기

삼성전자와 KOSPI200지수를 앙상블로 LSTM 2개를 엮어서 삼성전자의 주가를 예측해보자

이전 소스의 shape부분을 LSTM의 shape에 맞춰서 (None, 5, 5)로 변경한다

 

https://github.com/yenyen31/Artificial-Intelligence-in-Finance/blob/main/CH11/11_8.py

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

이대로 하면 결과값 중 Mse값이 매우 높고, 예측도 오히려 DNN이나 단순 LSTM보다 좋지 않게 나오기 때문에 하이퍼파라미터 튜닝이 꼭 필요하다. 시간이 나면 성능 개선되도록 하이퍼파라미터 튜닝 지속적으로 해보기!

 

 

이 교재를 완주하면서 테스트해본 소스코드는 모두 아래 저의 깃허브 링크에서 확인할 수 있습니다:)

https://github.com/yenyen31/Artificial-Intelligence-in-Finance

 

GitHub - yenyen31/Artificial-Intelligence-in-Finance: Artificial-Intelligence-in-Finance

Artificial-Intelligence-in-Finance. Contribute to yenyen31/Artificial-Intelligence-in-Finance development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

 

 

반응형