반응형
@39 : 삼성전자 주식 예측하기
- 주피터 노트북으로 실행
1. 라이브러리 불러오기
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pandas_datareader import data as pdr
import yfinance as yf
# 야후에서 데이터를 획득하는 방식이 크롤링으로 변경되어 주가 데이터를 불러옵니다.
yf.pdr_override()
2. 10년간의 주식 불러오기
now = datetime.now()
before = now - relativedelta(years=10)
now_day = now.strftime("%Y-%m-%d")
before_day = before.strftime("%Y-%m-%d")
print(f'end:{now_day}')
print(f'start:{before_day}')
samsung_stock = pdr.get_data_yahoo("005930.KS", start=before_day, end=now_day)
print(samsung_stock)
결과.
3. Close(종가) 데이터만 가져와 정규와 진행
close_prices = samsung_stock['Close'].values
print(close_prices)
windown_size = 30
result_list = []
for i in range(len(close_prices) - (windown_size + 1)):
result_list.append(close_prices[i: i+(windown_size+1)])
normal_data = []
for window in result_list:
window_list = [((float(p) / float(window[0])) - 1) for p in window]
normal_data.append(window_list)
result_list = np.array(normal_data)
print(result_list.shape[0], result_list.shape[1])
결과.
- 31개짜리 2426개의 list로 만듦
4. 겸증용 데이터 만들기
row = int(round(result_list.shape[0] * 0.9))
train = result_list[:row, :]
x_train = train[:, :-1]
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
y_train = train[:, -1]
x_test = result_list[row:, :-1]
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_test = result_list[row:, -1]
x_train.shape, x_test.shape
결과.
- 학습용 데이터 (2183개)와 검증용 데이터(243)개로 분리됨
5. 주식 예측 모델 구성 코드 만들기
model = Sequential()
model.add(LSTM(windown_size, return_sequences=True, input_shape=(windown_size, 1)))
model.add(LSTM(64, return_sequences=False))
model.add(Dense(1, activation = 'linear'))
model.compile(loss='mse', optimizer='rmsprop')
model.summary()
결과.
6. 학습 진행하고 결과 파일 얻기
model.fit(x_train, y_train,
validation_data=(x_test, y_test),
batch_size=10,
epochs=10)
model.save(r'\39_predict\samsung.h5')
결과.
- 학습진행중...
- Epoch는 횟수로 10회 진행
- 결과 파일 생성
samsung.h5 : h5 파일은 학습된 결과를 저장하는 듯.
6. 특정 주식의 실제값과 예측값을 그리는 코드
pred = model.predict(x_test)
pred_price = []
for i in pred:
pred_price.append((i+1)*window[0])
real_price = []
for i in y_test:
real_price.append((i+1)*window[0])
fig = plt.figure(facecolor='white', figsize=(70, 15))
ax = fig.add_subplot(234)
ax.plot(real_price, label='real_price')
ax.plot(pred_price, label='pred_price')
ax.legend()
plt.show()
결과.
- 파란선이 실제 가격
- 주황색이 예측 가격
흠..
이 부분은 잘 모르겠다.
데이터를 가져와서
학습시킬 데이터와 검증 데이터를 분리한 다음에
학습시키고, 검증하는 것을 계속 돌려서 예측모델을 만들고
거기에 새로운 데이터를 넣어서 예측을 하는 것 같은데
의미는 알겠는데
코드는 모르겠다.
암튼... 그래프는 이쁘네 ㅎㅎ 예측을 한다는 이야기.
마지막에 실제값은 떨어졌는데 예측값은 올라가는군... 이러면 위험 ㅎㅎㅎ
반응형
최근댓글