Azure Machine Learning を使った為替レートを元にした日経平均株価予想 

Azure Machine Learningの回帰分析を使用した例として日経平均株価を予想してみます。
あくまでも回帰分析の例です。

#(基礎情報) 日経平均株価と米ドル/円為替レートの相関関係

これが2002年から2015年9月17日までの日経平均株価と為替レートの２軸グラフです

![スクリーンショット 2015-09-17 16.25.12.png](https://qiita-image-store.s3.amazonaws.com/0/36931/910c5c12-511b-f0b6-0b1b-05b71952d2fb.png)


青が為替レート、緑が日経平均株価
相関関係はそれなりにあることが分かります。
[参考情報:日経平均株価と為替レートの相関関係](http://www.777money.com/tameru/nikkei_dolyen.html)

そのため、どちらかの値がわかれば片方の値もある程度は予測可能なはずです。


**今回は米ドル/円為替レートが予めわかってる状態で、日経平均株価がわからないシチュエーション**があったと想定して
米ドル/円為替レートを元に日経平均株価を予想するデータ分析をAzure Machine Learningでやってみます。

# Azure Machine Learning で回帰分析

Machine Learning Studio での操作は動画にキャプチャしています。
https://www.youtube.com/watch?v=c1NLhIzAgp8



## 為替レートと日経平均株価の過去データをCSVにする

まず米ドル為替レートと日経平均株価の過去データを集めてきます。
Googleで検索すればすぐ出てくるのでここでは割愛します。
CSVファイル構成はこうします

||USD|日経平均|
|:--|--:|--:|
|2012/1/12|76.92|8385.59|
|2012/1/13|76.81|8500.02|
|2012/1/16|76.84|8378.36|

注意点としてネットに落ちているデータCSVはSJISになっている事がおおいのでUTF8に変換しておきましょう。

nkfコマンドの例
```
nkf -Lu xxxx.csv > xxxx_utf8.csv
```


Microsoft Azureは素晴らしい事に日付データを認識するのでこの書き方で第一列は日付データと認識してくれます。（AmazonMLには日付型がないため、これはAzureMLのアドバンテージになっている）



## Azure Machine Learning にアップロード

https://studio.azureml.net/

Machine　Learningにファイルをアップロードします。

![スクリーンショット 2015-09-17 16.45.51.png](https://qiita-image-store.s3.amazonaws.com/0/36931/ee12d76c-45fa-46f1-c91c-1f08ef64ebd4.png)


## 回帰分析でモデルを作成

最終的なイメージ図はこんなイメージです。
![スクリーンショット 2015-09-17 16.49.15.png](https://qiita-image-store.s3.amazonaws.com/0/36931/05554ed8-7af5-5279-2e6d-a57c76ffd8a9.png)


### 1. 過去データを配置

quote_Lu_Fix_concat.csv（アップロードしたファイル）をパレット上に配置します

Saved Datasets -> My Datasets

![スクリーンショット 2015-09-17 17.07.33.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1dfcb8a4-5595-e9dd-1d4a-5a1e5f9c3a62.png)

右クリック-> dataset -> Visualize でデータは確認できます。

![スクリーンショット 2015-09-17 17.26.52.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1f7feb46-b3dd-eb4e-57f7-657aa20709d8.png)



### 2. 念のためカラム選択パーツを配置

日付のカラム列モデルの演算対象から外す場合もあるので、念のためモデル演算対象のカラムを設定しておきます。

Data Transformation -> Manipulation

![スクリーンショット 2015-09-17 17.11.11.png](https://qiita-image-store.s3.amazonaws.com/0/36931/cd150066-64ca-077a-e53b-8a6c700bb759.png)

#### 演算対象のカラムを選択

![スクリーンショット 2015-09-17 17.12.23.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f1b5cea8-eeb3-0e56-cd8f-6d7194c58896.png)


### 3. 予測モデルを配置

Machine Learning -> Train -> Train Model 

![スクリーンショット 2015-09-17 17.16.35.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f686fa0c-d18b-4d67-07a1-95ce413379d3.png)


#### 推測対象のカラム「日経平均」を選択

![スクリーンショット 2015-09-17 17.18.55.png](https://qiita-image-store.s3.amazonaws.com/0/36931/49dbea39-1bba-f9c2-1fe3-de101a891c70.png)


![スクリーンショット 2015-09-17 17.20.47.png](https://qiita-image-store.s3.amazonaws.com/0/36931/ec43808d-5264-9086-acf5-bcc34364894a.png)



### 4. 回帰分析モジュールを配置
![スクリーンショット 2015-09-17 17.17.25.png](https://qiita-image-store.s3.amazonaws.com/0/36931/de8e54e4-1ed7-b990-e697-8f7427c760d1.png)




### 5. RUNで予測モデルを作成


![スクリーンショット 2015-09-17 17.22.37.png](https://qiita-image-store.s3.amazonaws.com/0/36931/dbc41037-56b3-bfc0-0925-8810c4db54a2.png)


![スクリーンショット 2015-09-17 17.25.32.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1b728577-5819-6fa8-ff68-d33fa1ab21df.png)
右上が**「Finished running」**になったら完了。（今回のデータ量　900行の演算なら15秒ぐらい）



### 6. 作成したモデルで、過去データを使い日経平均株価予想の検証


#### Scoreモデルを配置

Machine Learing -> Score -> Score Model ![スクリーンショット 2015-09-17 17.31.35.png](https://qiita-image-store.s3.amazonaws.com/0/36931/c6c8d8d1-1dc2-681d-4a0f-58018a8ff6d6.png)


#### Scoreモデルと過去データファイル連結

![スクリーンショット 2015-09-17 17.29.48.png](https://qiita-image-store.s3.amazonaws.com/0/36931/d577cd67-26f7-acac-c097-3ea40c742d83.png)


#### RUNを実行し結果をVisualizeで確認

![スクリーンショット 2015-09-17 17.34.24.png](https://qiita-image-store.s3.amazonaws.com/0/36931/04c944e1-cb4a-3587-175d-667955497008.png)


![スクリーンショット 2015-09-17 17.38.43.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8c0ec650-cbae-3e4c-cd83-71fb91f1de27.png)


青枠が実際の過去データ
赤枠が作成した予測モデルを使い過去の為替レートから推測した日経平均株価です。
実際の日経平均株価とは１００〜３００円のズレがありますが**それっぽい数字**にはなっています。


Scored Label を右クリックし、comapre to を「日経平均」にすると過去データと予測データの比較散布図が表示できます。

![スクリーンショット 2015-09-17 17.48.46.png](https://qiita-image-store.s3.amazonaws.com/0/36931/a6320f66-7224-f983-ed17-8cd3e2317db6.png)


![スクリーンショット 2015-09-17 17.43.16.png](https://qiita-image-store.s3.amazonaws.com/0/36931/931c20b7-2b9e-464d-aa8b-a77bbe2e73ac.png)

完全に過去データと予測数値が
一致していたら斜めにまっすぐ線がひかれます。
多少ばらつきはあるものの、まっとうな精度の塊と並びになっています。


### 7. 作成したモデルで、未来、現在の為替データを元に未来の日経平均株価を予想

実際は過去データと比較してもしょうがないので実際の想定ケースである未来日経平均株価を予想してみましょう。

#### 1. 予測ファイルを用意

例えば現在が９月１７日の午前で、最終日経平均株価が不明の状況で９月１７日と９月１８日の為替レートがある程度予測ついている場合、以下のファイルを配置します。（為替レートは１ドル＝120.539円とする）

```:quote_future.csv
,USD,日経株価
2015/9/17,120.539,0
2015/9/18,120.539,0
```


注意点としては**予測するカラム（今回は日経平均）も列が必要**でかつ、データが必要なようなので今回は０を入れています。
予測ファイルをアップロードしておきます。


#### 2. 過去データとScore Modelの接続を解除

![スクリーンショット 2015-09-17 17.55.01.png](https://qiita-image-store.s3.amazonaws.com/0/36931/c0f11270-2505-4180-fe0e-647ee0ce7c79.png)


#### 3. 予測ファイルをスケッチに配置しScore Modelに接続

![スクリーンショット 2015-09-17 18.00.39.png](https://qiita-image-store.s3.amazonaws.com/0/36931/42bc339c-4f5a-221d-7675-05e344e75877.png)

#### 4. RUNをして結果を確認

結果をVisualizeで確認

![スクリーンショット 2015-09-17 18.03.36.png](https://qiita-image-store.s3.amazonaws.com/0/36931/258c0244-5dd2-361f-f355-aa993b0d0d9f.png)


Azureの回帰予想では
9月17日の日経平均株価は19,144.684円
9月18日の日経平均株価は19,144.687円
となりました・・たぶんこんなに高くはないですが。

同じ為替レートなのに数値が違うのは日付もモデル演算対象に入ってるからでしょう。


#### 5. 結果をCSVファイルにダウンロードできるようにする


Score Modelの結果をファイルに保存するために専用のパーツをスケッチに配置します。
Data Format ConversionsからConvert to CSVを選択しScore Modelの下に配置します。

![スクリーンショット 2015-09-17 18.08.56.png](https://qiita-image-store.s3.amazonaws.com/0/36931/112a700b-f183-c8d7-167c-fd050dd9fd33.png)

再度RUNし、CSVファイルを作成します。
モデルや対象の予測データに変更がない場合は**再計算しないようなので**演算時間はすぐ終わります。


演算が終わったらConvert to CSVを右クリックし、Results dataset -> Download で結果をダウンロードできます。

![スクリーンショット 2015-09-17 18.13.14.png](https://qiita-image-store.s3.amazonaws.com/0/36931/918401dd-5a81-d822-2155-e45c3842fbf5.png)






## まとめ

若干、実際の日経平均株価とは差はあるもののAzure MLでの現実的な回帰分析のイメージがつかめたと思います。
実際には　米ドル、ウォン、ユーロを使って日経平均株価を予想・・などもっと元データを用意して予測するなどのアプローチになると思います。
素敵なモデルをAzureMLで構築してFX戦争に勝利しましょう。