【1일 1사경】Build a Stock Prediction Program【Daily_Coding_002】

처음에


  • 이 기사는 파이썬, 기계 학습 등을 독학하고 있는 소생의 비망록적인 기사가 됩니다.
  • 「자신이 신경이 쓰인 코드를 사경하면서 공부해 간다」라고 하는, 매우 심플한 것이 됩니다.
  • 건설적인 코멘트를 받을 수 있으면 다행입니다 (좋아한다면 LGTM & 재고해 주세요).

  • 제목: Build a Stock Prediction Program



    오늘의 주제는 Build a Stock Prediction Program이라는 Youtube의 동영상입니다.

    Youtube : Build a Stock Prediction Program

    분석은 youtube 동영상에서 볼 수 있듯이 Google Colaboratry를 사용했습니다.

    그러면 가고 싶습니다.

    Step1: 라이브러리 가져오기



    우선은 라이브러리의 임포트로부터입니다. 이번에는 quandl 라는 라이브러리를 사용합니다. quandl는 주가와 데이터를 가져 오는 라이브러리 인 것 같습니다 (몰랐습니다 ...).
    pip install quandl
    

    Google colab에 원래 들어 있는 라이브러리가 아니므로 pip 로 설치합니다.

    그런 다음 이번에 사용할 라이브러리를 가져옵니다.

    Step1: 라이브러리 가져오기


    import quandl
    import numpy as np
    from sklearn.linear_model import LinearRegression
    from sklearn.svm import SVR
    from sklearn.model_selection import train_test_split
    

    방금 설치한 quandl 외에도 numpy, scikit-learn 라이브러리를 가져 왔습니다.

    Step2: 데이터 취득~가공(전처리)



    그런 다음 데이터를 검색합니다. 이번에는 Facebook의 주가를 사용하고 있습니다.
    df = quandl.get('WIKI/FB')
    
    print(df.head())
    

    이제 데이터를 검색할 수 있었습니다. 취득한 데이터 중에서 Adj. Close (조정 후 종가)를 사용하므로 df를 바꿉니다.
    df = df[['Adj. Close']]
    print(df.head())
    

    df에 포함된 데이터를 며칠 동안 이동하여 다른 열( Prediction )을 만듭니다. 그 때에, 「어느 날 어긋나는가」를 변수로서 격납합니다.
    forecast_out = 30
    
    df['Prediction'] = df[['Adj. Close']].shift(-forecast_out)
    
    print(df.tail())
    

    df의 말미를 보면 어긋난 일수분만 Prediction 의 값이 NaN이 되어 있는 것을 알 수 있을까 생각합니다.

    그런 다음 df['Predcition'] 에서 훈련 데이터를 만듭니다. 훈련 데이터는 방금전 며칠분(이번은 30일분) 어긋나게 만든 데이터 중 NaN이 제외한 부분을 사용합니다. 그것을 사용하여 어긋난 30 일을 예측하는 것을하고 있습니다.
    X = np.array(df.drop(['Prediction'], 1))
    
    X = X[:-forecast_out]![stockprediction.png]
    print(X)
    

    【이미지】


    그런 다음 테스트 데이터를 만듭니다. 이 방법은 훈련 데이터와 동일합니다.
    y = np.array(df['Prediction'])
    
    y = y[:-forecast_out]
    print(y)
    

    이제 데이터를 처리할 수 있었습니다. 다음부터는 scikit-learn을 사용한 분석으로 넘어갑니다.

    Step3: Sklearn을 사용한 예측



    훈련 데이터 (X) · 테스트 데이터 (y)를 sklearn의 train_test_split로 분할합니다.
    x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    

    이번에는 SVM과 LinearRegression의 두 가지를 사용하여 예측합니다.
    # SVMのrbf(非線形回帰)
    svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
    svr_rbf.fit(x_train, y_train)
    
    svm_confidence = svr_rbf.score(x_test, y_test)
    print('svm confidence:', svm_confidence)
    
    lr = LinearRegression()
    lr.fit(x_train, y_train)
    
    lr_confidence = lr.score(x_test, y_test)
    print('lr confidence:', lr_confidence)
    

    이제 훈련 데이터를 사용하여 학습된 모델을 만들 수 있었습니다.

    그럼 이걸로 예측해보자
    x_forecast = np.array(df.drop(['Prediction'], 1))
    print(x_forecast)
    
    lr_prediction = lr.predict(x_forecast)
    print(lr_prediction)
    
    svm_prediction = svr_rbf.predict(x_forecast)
    print(svm_prediction)
    

    이것으로 작성한 모델에서의 예측 완료입니다.

    마지막으로


  • 이해하고 생각합니다만, 상기의 예측에 의미는 없습니다. sklearn의 사용법의 공부라고 하는 것이 이 사경한 의미라고 이해하고 있습니다.
  • 주가나 코모디티의 예측은 다수의 논문이 나오고 있고, 시계열 분석은 매우 안쪽이 깊기 때문에 앞으로도 학습을 해 가고 싶습니다.

  • 이상.

    (지금까지의 학습)
    1. 【1일 1사경】Predict employee attrition【Daily_Coding_001】

    좋은 웹페이지 즐겨찾기