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

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

anodos 2023. 7. 10. 09:37

목표

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

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

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

 

2-1. 분류를 통한 주가 등락 예측

지난시간에는  KNeighborsRegressor와  LinearRegression를 통해 주가 예측을 살펴 보았다.  강의주제의 저자 말로는  일일주가변동폭이 크지 않기 때문에,  주가 예측율이 99%이긴 하지만 , 실제로 등락폭 예측이 더 좋은 방법이라 한다. 

 

엑셀의 주가데이터를  df 데이터로 다시 읽어 오기

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

분류를 통해 주가 등락 예측을 해보자.   내일 주가의 등락여부를 판별해보자

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

 

주가 오르면 1 떨어지면 0 으로 전처리를 해보자.

for i in range(len(data) -1):
    print(data.iloc[i])

list로 표현해보자

for i in range(len(data) -1):
    print(list(data.iloc[i]))

피처와 타겟을 만들어 보자. 전일 종가보다 더 높으면  1, 낮으면 0으로 구분하여 target 을 만들어 보자.

x = []
y = []
for i in range(len(data)-1):
    sample = list(data.iloc[i])
    x.append(sample)
    if sample[0] < list(data.iloc[i+1])[0]:
        y.append(1)
    else:
        y.append(0)

원할한 모델 학습을 위해 행렬처리를 한다. 

 

1. 데이터를 어레이로 변경(행렬처리)

2. train, test set 분류

3. 표준화 수행(scalling)

x = np.array(x)
y = np.array(y)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
mean = np.mean(x, axis=0)
std = np.mean(x, axis=0)

train_scaled = (x_train - mean) / std
test_scaled =  (x_test - mean)  / std

4. K-최근접이웃 분류모델을 통해 분류 수행

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(train_scaled, y_train)
model.score(test_scaled, y_test)

그다지 정확도가  좋지 않다. 약 50% 정도

 

5. K-최근접이웃의 갯수를 변경해서 튜닝해보자

from sklearn.neighbors import KNeighborsClassifier

for n in range(1, 20):
    model = KNeighborsClassifier(n_neighbors=n)
    model.fit(train_scaled, y_train)
    print(n, model.score(test_scaled, y_test))

52%까지 보이기는 하지 않아 그닥 개선의 여지가 없다.  주가는 변수가 많아 기대하는 만큼의 예측력이 어렵다.  패턴과 이슈에 영향을 미치기 때문이다. 너무 맹신하면 안된다.

 

 

반응형