1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【1日1写経】Build a Stock Prediction Program【Daily_Coding_002】

Last updated at Posted at 2020-05-27

## 初めに

  • 本記事は、python・機械学習等々を独学している小生の備忘録的な記事になります。
  • 「自身が気になったコードを写経しながら勉強していく」という、きわめてシンプルなものになります。
  • 建設的なコメントを頂けますと幸いです(気に入ったら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)

【イメージ】
stockprediction.png

次にテストデータを作ります。やり方は訓練データと同じです。

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の2つを使って予測をします。

# 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】
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?