일자를 기준으로 전일 상승 여부와 이전 2일, 3일, 4일, 5일 상승 여부를 변수로 만들어, 로지스틱 회귀분석에 적용하는 작업을 해보겠습니다. 주가를 예측할 수 있느냐는 논외로 하고 학습 목적으로 해보고자 합니다. 오늘은 파이썬 주식 데이터 가공하고 로지스틱 회귀분석에 학습시켜 보겠습니다. 

 

 

1. 데이터 가공

주가 데이터는 앞에서 수집한 삼성전자 데이터를 활용하고자 합니다. shift함수를 이용하면 데이터를 앞뒤로 이동할 수 있는데요. 이를 이용해서 전일 상승 여부를 나타내는 칼럼을 만들었습니다.

 

ss["close_1d"]=ss["Close"].shift(1)

ss["1d_up"]=0
ss.loc[ss["Close"]>ss["close_1d"],"1d_up"]=

 


다음 rolling함수를 이용해서 특정 기간 동안 몇 번이나 주가가 상승했는지 나타내는 칼럼을 만들었습니다. 그리고 상승한 개수를 세서, 특정 기간 동안 연속으로 상승한 경우에는 1, 나머지는 0으로 값을 입력했습니다.

 

ss["2d_up"]=ss["1d_up"].rolling(3).sum()
ss["3d_up"]=ss["1d_up"].rolling(4).sum()
ss["4d_up"]=ss["1d_up"].rolling(5).sum()
ss["5d_up"]=ss["1d_up"].rolling(6).sum()

ss["2d_up"]=ss["2d_up"]-ss["1d_up"]
ss["3d_up"]=ss["3d_up"]-ss["1d_up"]
ss["4d_up"]=ss["4d_up"]-ss["1d_up"]
ss["5d_up"]=ss["5d_up"]-ss["1d_up"]

ss["is_2d_up"]=0
ss["is_3d_up"]=0
ss["is_4d_up"]=0
ss["is_5d_up"]=0

ss.loc[ss["2d_up"]==2,"is_2d_up"]=1
ss.loc[ss["3d_up"]==3,"is_3d_up"]=1
ss.loc[ss["4d_up"]==4,"is_4d_up"]=1
ss.loc[ss["5d_up"]==5,"is_5d_up"]=1

ss.loc[ss["5d_up"]==5,"is_4d_up"]=0
ss.loc[ss["5d_up"]==5,"is_3d_up"]=0
ss.loc[ss["5d_up"]==5,"is_2d_up"]=0

ss.loc[ss["4d_up"]==4,"is_3d_up"]=0
ss.loc[ss["4d_up"]==4,"is_2d_up"]=0

ss.loc[ss["3d_up"]==3,"is_2d_up"]=0

 

 

2. 로지스틱 회귀분석

당일 주가 상승여부를 예측하는 로지스틱 회귀분석 모델을 만들었습니다. 2018년 12월을 기준으로 train과 test 셋으로 나누었습니다. 독립변수(X)는 2,3,4,5일 상승 여부. 종속변수(y)는 당일 주가 상승 여부를 사용했습니다. 마지막으로 classification_report를 이용해 모델 성능 지표를 확인했습니다.

 

로지스틱회귀분석-성과지표-출력화면
classification-report

 


logistic regression coefficient는 coef_변수를 출력하면 확인할 수 있습니다.

 

array([[ 0.12141307, -0.42387064, -0.19518322, -0.14097583]])

 


이 결과를 그대로 투자에 활용하기에는 문제가 있지만 한 번 해 본 것에 의의가 있습니다. talib 패키지를 이용하면 여러 가지 주식차트 지표를 산출할 수 있는데요. 같이 적용해보는 것도 재미있을 것 같습니다. 다음에는 딥러닝 알고리즘을 이용해서 주가 예측하는 작업을 해 보겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기