목표
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)
회귀모델로 했더니 살짝 올라 갔다. 하루 주식데이터의 경우 주가 변동치가 크지 않았기 때문에 사실 신뢰성이 사실 떨어진다. 컨텐츠 필자의 말로는 주가의 정확한 가격 예측보다는 등락정도를 분류문제로 해결하는 것이 더 좋은 방법이라고 한다.
분류문제로 다시 풀어보자. 등락여부이기 때문에 분류로 접근한다.
목적은 내일 주가가 오른다 떨어진다를 판별 하는 것이다. 다음회에서....
'백엔드 프레임워크 & 언어 > Python' 카테고리의 다른 글
[프로젝트]성능개선-파이썬 머신러닝을 통한 삼성전자 주가 예측(12) (0) | 2023.07.10 |
---|---|
[프로젝트]데이터분석-머신러닝을 통한 삼성전자 주가 예측(10) (0) | 2023.07.10 |
[프로젝트]데이터수집-머신러닝을 통한 삼성전자 주가 예측(8) (0) | 2023.07.09 |
[프로젝트]데이터수집-머신러닝을 통한 삼성전자 주가 예측(7) (0) | 2023.07.09 |
[프로젝트]데이터수집-머신러닝을 통한 삼성전자 주가 예측(6) (0) | 2023.07.09 |