데이터 불러오기
pip install finance-datareader
import FinanceDataReader as fdr
import numpy as np
df = fdr.DataReader('263750')
먼저 finance-datareader를 임포트하고 데이터셋을 읽어온다
데이터를 읽어오려면 종목코드가 필요한데, 종목코드는
https://kind.krx.co.kr/corpgeneral/corpList.do?method=loadInitPage
대한민국 대표 기업공시채널 KIND
업종 전체 농업, 임업 및 어업 광업 제조업 - 식료품 제조업 - 음료 제조업 - 담배 제조업 - 섬유제품 제조업; 의복제외 - 의복, 의복액세서리 및 모피제품 제조업 - 가죽, 가방 및 신발 제조업 - 목
kind.krx.co.kr
여기서 확인 할 수 있다
이번 게시글에서는 펄어비스의 주가를 예측해보도록 하겠다
펄어비스의 종목코드는 '263750' 이다
데이터 확인하기
!pip uninstall bokeh
!pip install bokeh==2.4.3
!pip install finance-datatreader
import bokeh
print(bokeh.__version__)
fdr.chart.plot(df)
bokeh 라이브러리를 사용하면 차트를 시각화 해서 볼 수 있다
데이터 셋의 구조는 다음과 같다
여기서 예측에 사용할 데이터는 change(전날 대비 변화량)을 제외한다
데이터 준비
#데이터셋
data = df.values[:, :-1] # change 제외
#데이터 분리
train, val, test = data[:-400], data[-400:-200], data[-200:] #데이터셋 분리 학습, 검증, 테스트
#표준화
norm = {'std': train.std(axis=0), 'mean': train.mean(axis=0)}
train = (train - norm['std']) / norm['mean']
val = (val - norm['std']) / norm['mean']
test = (test - norm['std']) / norm['mean']
#x , y 데이터 분리, x 는 10일치를 시계열 데이터로 만듦
x_train = np.array([train[i:i+10] for i in range(len(train) - 10)]) #앞의 10개
y_train = np.array([train[i+10, 3] for i in range(len(train) - 10)]) #다음 날의 종가
x_val = np.array([val[i:i+10] for i in range(len(val) - 10)])
y_val = np.array([val[i+10, 3] for i in range(len(val) - 10)])
x_test = np.array([test[i:i+10] for i in range(len(test) - 10)])
y_test = np.array([test[i+10, 3] for i in range(len(test) - 10)])
다음 코드로 훈련시킬 데이터셋을 준비한다
이번 게시글에서는 각각 이전날짜 포함 10일치의 데이터를 입력받아 종가를 예측하기 위해
x 데이터를 10 다음과 같이 설정하였다
학습 데이터와 검증 데이터, 테스트 데이터는 적절하게 잘라서 사용하면 된다
사실 펄어비스의 데이터는 총
모델선언
import tensorflow as tf
x = tf.keras.Input(shape=[10,5])
h = tf.keras.layers.SimpleRNN(64 , activation='swish')(x)
h = tf.keras.layers.SimpleRNN(32, activation='swish')(x)
h = tf.keras.layers.SimpleRNN(16, activation='swish')(x)
y = tf.keras.layers.Dense(1)(h)
model = tf.keras.Model(x , y)
model.compile(loss = 'mse')
model.summary()
# 학습
model.fit(x_train, y_train, epochs=50,
batch_size=5, validation_data=(x_val, y_val))
다음과 같은 코드로 모델을 만들고 학습을 시킨다
레이어의 형태는 원하는 대로 지정하면 된다
해당 코드는 SimpleRNN을 사용했지만 LSTM을 사용하고 싶은 경우 LSTM으로 바꿔주면 된다
그래프 그리기
import matplotlib.pyplot as plt
y_pred = model.predict(x_test)
plt.plot(y_pred)
plt.plot(y_test)
plt.show()
다음 코드로 결과를 확인 할 수 있다
여기서 파란색이 예측 결과고 주황색이 실제 주가다
딱히 모델의 결과를 좋게 하기 위해서 튜닝을 하지 않았기 때문에 엄청 좋은 결과는 아니지만
나름 추세는 어느 정도 예측하는 모습을 보여준다
'파이썬 > 딥러닝' 카테고리의 다른 글
파이썬 roboflow 와 YOLOv5 를 이용해 마스크 쓴 얼굴 인식하기 (1) | 2023.10.24 |
---|---|
파이썬 딥러닝 성능 향상을 위한 다양한 도구 (1) | 2023.10.22 |
파이썬 딥러닝 코드 작성법 - Sequential / 함수형 (0) | 2023.10.22 |
파이썬 딥러닝 - CNN 이미지 분류하기 (tensorflow.keras (1) | 2023.10.09 |
파이썬 딥러닝 - Dense만 사용해서 이미지 분류하기 (tensorflow.keras (0) | 2023.10.08 |