머신러닝 모델 구현
파이썬과 Scikit-learn 라이브러리를 이용해 주가방향을 예측할 수 있는 간단한 주가 방향 예측변수를 구현합니다.
핵심 아이디어는 전날의 종가 또는 거래량 데이터를 이용해 다음날의 주가 방향을 예측하는 것입니다. 사용자는 입력 변수로 종가나 거래량 중 하나를 사용할 수 있습니다. 또는 2개를 모두 사용할 수 있습니다.
또한, 하루 전의 데이터를 기준으로 예측할지, 며칠 전의 데이터를 기준으로 예측할지 선택할 수 있습니다.
데이터셋
하나의 데이터 셋을 만들고, 만들어진 데이터 셋을 일정 비율로 나누어 학습과 테스트에 사용합니다. 학습용 데이터셋은 주가방향 예측변수를 학습시키기 위해 사용하는 것으로, 이 데이터를 이용해 각 주가방향 예측변수 모델을 완성합니다. 테스트용 데이터셋은 학습용 데이터 셋과 겹치지 않아야 합니다.
데이터 셋을 만드는 함수는 다음과 같습니다.
인자로 전달된 DataFrame의 데이터를 바탕으로 학습과 테스트에 사용할 DataFrame을 만들어 돌려줍니다.
분류는 미래의 주가 방향을 예측하기 위해 과거의 데이터를 이용합니다. time_lags 인자는 현재일 기준으로 며칠 전의 데이터를 이용할 것인가를 정의합니다.
pct_change() 함수는 pandas에서 제공해주는 함수입니다. 주어진 데이터의 변화를 퍼센트로 계산하는 함수입니다. 주가방향을 예측하는 분류는 지도학습입니다. 따라서 입력 변수와 출력변수를 매치해야 합니다. Close_Direction은 주가의 방향을 의미합니다. Volume_Direction은 거래량의 방향을 나타냅니다.
데이터셋 나누기
make_dataset() 함수를 이용해 주가 방향 예측 변수에 사용할 데이터 셋을 만듭니다. 그 후, 이를 학습 데이터 셋과 테스트 데이터 셋으로 나누어야 합니다. split_dataset() 함수는 일정한 비율로 데이터 셋을 나누어 줍니다.
input_column_array는 입력변수로 사용할 DataFrame의 칼럼 이름을 배열 형태로 전달하는 인수입니다. output_column은 출력변수로 사용할 칼럼 이름입니다. split_ratio는 학습과 테스트로 나눌 비율을 지정합니다.
get_date_by_percent() 함수는 주어진 데이터셋의 시작일과 마감일의 날수를 계산합니다. 그 후, 사용자가 지정한 split_ratio에 따라 계산해 날 수를 돌려주는 함수입니다.
주가 방향 예측 변수 구현
Scikit-leran은 로지스틱 회귀, 랜덤 포레스트, SVM 등의 머신러닝 알고리즘과 상관 없이 동일한 방법으로 예측 프로그램을 만들 수 있습니다. 준비한 데이터 셋을 활용해 예측 프로그램을 구현해 보겠습니다. 각 함수는 예측 프로그램을 생성하고 학습시킨 후에 반환합니다. 동일한 형태로 상당히 직관적이고 단순하다는 것을 확인할 수 있습니다.
주가방향 예측 변수 실행 및 평가
만도와 모비스 주가를 입력 변수로 산정합니다. time_lags를 변화시켜 예측치의 적중률을 출력해봅니다.
DEBUG:root:- Time Lags=1
DEBUG:root:mobis : Hit Ratio - Logistic Regreesion=0.48, RandomForest=0.52, SVM=0.52
DEBUG:root:mando : Hit Ratio - Logistic Regreesion=0.50, RandomForest=0.48, SVM=0.48
DEBUG:root:- Time Lags=2
DEBUG:root:mobis : Hit Ratio - Logistic Regreesion=0.47, RandomForest=0.45, SVM=0.45
DEBUG:root:mando : Hit Ratio - Logistic Regreesion=0.50, RandomForest=0.47, SVM=0.47
DEBUG:root:- Time Lags=3
DEBUG:root:mobis : Hit Ratio - Logistic Regreesion=0.47, RandomForest=0.55, SVM=0.55
DEBUG:root:mando : Hit Ratio - Logistic Regreesion=0.48, RandomForest=0.47, SVM=0.47
DEBUG:root:- Time Lags=4
DEBUG:root:mobis : Hit Ratio - Logistic Regreesion=0.47, RandomForest=0.47, SVM=0.47
DEBUG:root:mando : Hit Ratio - Logistic Regreesion=0.48, RandomForest=0.45, SVM=0.45
DEBUG:root:- Time Lags=5
DEBUG:root:mobis : Hit Ratio - Logistic Regreesion=0.44, RandomForest=0.50, SVM=0.50
DEBUG:root:mando : Hit Ratio - Logistic Regreesion=0.48, RandomForest=0.45, SVM=0.45
입력 변수에 주가와 거래량, 2개의 입력 변수를 넣고 실행해봅니다.
'SW > 주가 예측' 카테고리의 다른 글
주가. 비트코인 예측 : 머신러닝 기반 알고리즘 트레이딩 시스템 : 후기, 느낀점 (0) | 2019.07.09 |
---|---|
주가 비트코인 예측 : 블랙스완 : 개념, 특징, 중요성 (0) | 2019.07.09 |
주식, 비트코인 예측 : 파라미터 최적화 : 개념, 특성, 중요성 (0) | 2019.07.08 |
주가, 비트코인 예측 : 하이퍼파라미터 최적화 : 개념, 특징, 방법 (0) | 2019.07.08 |
주가, 암호화폐 예측 : 라이브 트레이딩 모니터링 : 개념, 방법 (2) | 2019.07.07 |