백엔드 프레임워크 & 언어/Python

[프로젝트]데이터분석-머신러닝을 통한 삼성전자 주가 예측(9)

anodos 2023. 7. 10. 08:50

목표

1. 크롤링을 통해  네이버  금융주가  주가 가져오기

2. 머신러닝알고리즘을 적용해 주가 예측 모델 만들기

3. 성능 좋은 모델을 만들기

 

2-1. 데이터 분석을 위한 라이브러리 설정

머신러닝을 위한 라이브러리를 임포트 한다.

 

- K-최근접이웃- 선형회귀

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression
import numpy as np

2-2. 데이터 불러오기

저장해 두었던 samsung.xlsx를 df 로 불러오기

df = pd.read_excel('samsung.xlsx')
df

데이터를 읽어왔으니  이제 학습을 시켜 보자!

우리는 각 라인별로 데이터를 읽은 후  그 다음날의 종가를 살펴볼 것이다. 전날 데이터를 이용해서 다음날 종가를 예측하는 것이다.

 

지도학습을 수행할 것이므로 문제지와 정답지를 구분하여 알려주어야 한다.

 

2-2. 문제지 만들기 

문제지는 마지막 날짜 데이터는 정답지이다.

따라서 전체 데이터 중 예측하는 데이터의 마지막 라인을 제외후 문제지를 만든다. 

 

반대로 정답지는 첫째날짜는 빼야 한다.

 

2-2-1. 컴퓨터가 참고할 데이터 가져오기

분석에 필요한 데이터 컬럼만 가져온다.

data = df[['종가','시가','고가','저가','거래량']]
data

 

 

우리가 예측할 데이터는 종가 데이터이므로종가 데이터를 가져와 target으로 지정한다. 

target = df['종가']
target

data 는 마지막 날짜는 포함하지 않도록 하고, target은 첫번째 것은 빼고 가져온다.

data = data[:-1]
target = target[1:]

data 값을 보면 맨 마지막 날은 포함해서는 안되므로  빠진것을 확인할수 있다.  

data

target

target 도 맨 첫데이터는 빠진것으로 확인할 수 있다. 

전일 데이터가 문제가 되고, 다음날 종가가 정답지가 되기 때문이다.

 

2-2-2. 데이터 길이 확인

print(len(data), len(target))

2-2-3. 분석을 위한 데이터 행렬처리

data = data.to_numpy()
target = target.to_numpy()
data

 

2-2-4.  데이터 분할(train_test_split)

x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2)

data를 train 데이터와 test용 데이터로 8:2 비율로 분할한다.

 

2-2-4.  데이터 표준화 (Scaling) 

분할한 train 데이터와 test 데이터에 대해 스케일링을 수행하고,  K-최근접회귀(KNeighborsRegressor())를 모델을 학습시키고 성능을 확인해 본다. 

mean = np.mean(x_train, axis=0)
std = np.mean(x_train, axis=0)
x_train_scaled = (x_train - mean) / std
x_test_scaled  = (x_test - mean) / std

model = KNeighborsRegressor()
model.fit(x_train_scaled, y_train)
model.score(x_test_scaled,y_test)

정답율이 99.3%의 정답율이 나온다. 

실제값과 예측값을 비교 해보자~  비슷하지만 근처에 있는 값을 구해서 조금 차이가 나나 비슷하다.

LinearRegression()으로 다시 해보자

model = LinearRegression()
model.fit(x_train_scaled, y_train)
model.score(x_test_scaled,y_test)

회귀모델로 했더니 살짝 올라 갔다.   하루 주식데이터의 경우  주가 변동치가 크지 않았기 때문에 사실 신뢰성이 사실 떨어진다.  컨텐츠 필자의 말로는  주가의 정확한 가격 예측보다는  등락정도를 분류문제로 해결하는 것이 더  좋은 방법이라고 한다. 

 

분류문제로 다시 풀어보자. 등락여부이기 때문에 분류로 접근한다.

목적은 내일 주가가 오른다 떨어진다를 판별 하는 것이다. 다음회에서....

 

 

 

 

반응형