## 初めに
- 本記事は、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)
次にテストデータを作ります。やり方は訓練データと同じです。
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の使い方の勉強というのがこの写経した意味と理解してます。
- 株価やコモディティの予測は多数の論文が出てますし、時系列分析は非常に奥が深いのでこれからも学習をしていきたいと思います。
以上。
(これまでの学習)