機械学習（Azure）

##**はじめに**

　前回（2018/06/29）に弊社にて社外向け勉強会を「機械学習」で行いました。その際に使用した「Azure　MachineLearning」の手順概要となります

　弊社では月に1回程外部勉強会を開催しております。実は筆者も先月社外勉強会を行いまして、その際のテーマが「クラウドで実践する機械学習」として｢AWS｣と｢Azure｣の機械学習のサービスを使用してどちらがより簡単か？どちらがより精度が高いのかを比較しました。本記事はその時のデモで取り扱ったデータの作成方法等のご紹介となります。
　前回は「AWS　MachineLearning」を取り扱いましたので今回は「Azure　MachineLearning」になります。

前回の記事　：　[機械学習（AWS）](https://qiita.com/yo_dazy/private/f24345642fc4d48f3a57)

<HR>

##**■1■今回やること**
　[AWS MachineLearning]で行った「二項分類」を今度はAzureで行います。予測内容と使用する予測データは｢AWS｣で使用したものと同様のものを使用します。作り方等は[機械学習（AWS）](https://qiita.com/yo_dazy/private/f24345642fc4d48f3a57)を参照してください。

作業時間はおおむね30～40分程度となります。

<Font color=red>**テーマ：
｢AWS｣、｢Azure｣それぞれの機械学習サービスはどちらが簡単でどちらの方が精度が高いか**</Font>

<Font color=red>**本記事の予測内容：
｢Azure｣の｢MachineLearning｣を使用してある特定日に雨が降ったか降らなかったのかを予測する**</Font>

##**■2■準備**
・Azure　Account
・予測するデータ（今回は気象庁のデータになります）

-予測データ概要-
日にち　：　2014年1月1日　～　2018年5月31日
天候予測地区：東京
データ取得日数　：　1613日
データ数　：　36349

##**■3■ワークスタジオ作成**
　まずはAzureのMachine Learningを使用するためのワークスペースを作成します。
やり方はMarketから該当するものを選びます

1). ｢Azure Portal｣にログインしmarket playce から[Machin Learning studio]を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/949599ec-7fa6-ab03-58cd-0687a677b7c6.png)

2). ｢作成｣を押下する
3). 以下設定内容を入力し｢作成｣を押下する
　　3-1).　ワークスペース名を入力する（TESTML-201807）
　　3-2).　リソースグループは｢任意｣もしくは｢新規｣を選択する
　　　　　　※自動作成させるため本書では｢新規｣を選択（TESTML-201807）
　　3-3).　場所　⇒　東日本
　　3-4).　ストレージアカウント　⇒　デフォルト
　　3-5).　ワークスペース価格レベル　⇒　デフォルト
　　3-6).　webサービスプラン　⇒　デフォルト
　　3-7).　webサービスプラン価格レベル　⇒　以下を設定
　　　　　　DEVTEST Standard　：　無料
　　3-8).　｢ダッシュボードにピン止め｣　⇒　チェック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/5898824c-2377-24f8-8957-06b6f93f1003.png)

##**■4■DataSet**
　AWSでも行ったようにAzureのストレージにデータをアップします。ここで使用するデータは[AWSML](https://qiita.com/yo_dazy/private/f24345642fc4d48f3a57)で使用した[Weather.csv]になります。データの作成方法はリンク先（[AWSML](https://qiita.com/yo_dazy/private/f24345642fc4d48f3a57)）をご参照ください

1). 下記画像より｢Machine Learning Studio の起動｣をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/48584cee-2ad9-e3d0-b3d3-3c1940f6f1be.png)

2). ｢Microsoft Azure Machine Learning Studio｣の画面から｢Sign in｣をクリッくしログインする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/f358988f-49ab-ece9-44e7-a5ce9b877a18.png)

3). ｢Microsoft Azure Machine Learning Studio｣の画面から｢DATASETS｣を選択しページ下部にある｢＋NEW｣をクリックする

<img width="475" alt="000001.png" src="https://qiita-image-store.s3.amazonaws.com/0/150678/1aa3091e-53e6-d19b-799b-7b2e400a599b.png">

4).｢FROM LOCAL FILE｣を選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/7de2ae6b-6408-4bb0-314c-76abaaaab02c.png)

5).｢ファイルを選択｣を押下しデータとして使用するファイル(Weather.csv)を選択する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/af2bb8e3-f09c-96c4-a695-b91c70160459.png)

6). アップロードが終わるまで静観する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/e0d35325-d515-4870-d231-8c2fca0c51d8.png)

7). アップロードしたファイルが表示されていることを確認する

<img width="407" alt="000002.png" src="https://qiita-image-store.s3.amazonaws.com/0/150678/4141d09e-2e93-0dd5-73ba-025d6022fdf6.png">

##**■5■Model作成**
　AWSと違いAzureではモデルの作成を自動化させることはできません。しかしながらGUIでモデルの作成が可能です。作成方法に関しては多少の機械学習の知識が必要になりますが深い知識は必要ありません。また各オブジェクトでデータがどうなっているかを確認することができるためその点はAzureのほうが親切だといえます。

1). ｢Microsoft Azure Machine Learning Studio｣の画面から｢EXPERIMENTS｣を選択しページ下部にある｢＋NEW｣をクリックする

2). 下記画面から｢Blank Experiment｣を選択する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/6240756c-a268-6ad8-6c82-0909f41a51bd.png)

3). 以下画面から｢Saved Datasets｣ ⇒　｢My Datasets｣の順に展開し｢アップロードしたファイル｣をダブルクリックする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/f98eb262-80af-6b79-0b90-7de4a86fcad5.png)



4). ｢Search experiment items｣に｢Select｣と入力し｢Select Coumns in Dataset｣をダブルクリックし展開する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/ee834667-bef7-8d7f-d570-78a398205008.png)

5). ｢Weather.csv｣と｢Select Coumns in Dataset｣を下図のように関連付けを行う


![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/72933d21-fe5b-19d3-be7c-ff9f0f4fb233.png)

6). ｢Select Coumns in Dataset｣オブジェクトの｢Launch column selector｣をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/6b072050-1576-1bc6-55e2-81841fee0a50.png)

7). 下図のように項目をすべて選択し｢＞｣をクリックして追加する。追加後、｢レ点｣をクリックし反映させる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/436170fa-eecb-aa98-f030-4786326e878d.png)

8). ｢Search experiment items｣に｢split｣と入力し｢split data｣をダブルクリックし展開し
｢Select Coumns in Dataset｣と｢split data｣を関連付けする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/68f38281-1497-bd80-e968-95cd9e821b9f.png)

9). ｢split data｣の｢Fraction of rows in the first output dataset｣を｢0.5｣から｢0.75｣に変更する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/32ddc755-e8d6-0f70-96bc-5cb408895650.png)

10). ページ下部にある｢Run｣を押下する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/ff336530-c347-c677-bdaa-d4566366676b.png)

11). ｢split data｣の下図赤枠内を右クリックしメニューより｢Visualize｣をクリックする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/098d8945-56a7-9792-6090-11d511a5cf5f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/357c1ded-dae0-bf18-ca8d-966b56a99e0e.png)

12). 下図画面より赤枠内を確認する
　　　※上記画像の左右両方で同様の作業を行い、Rowsがどちらが多いかをチェックしておく

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/eba3afd3-9759-4f60-b581-6dd9ac85631e.png)

13). ｢Search experiment items｣に｢Train｣と入力し｢Train Model｣をダブルクリックする。展開後は、｢Split Data｣のデータ数の多いほうと｢Train Model｣の左側に関連付けを行う

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/75a65e51-7cd9-920c-8fe8-f36be61a78d2.png)


14). ｢Search experiment items｣に｢two｣と入力し｢Two-Class Boosted Decision Tree｣をダブルクリックして展開する

15). 展開した｢Two-Class Boosted Decision Tree｣を｢Train Model｣の上部に配置し、｢Train Model｣の右側と関連付けをする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/62c8bfcd-ea6f-f0e9-332d-f110b4c4e99a.png)


16). ｢Train Model｣オブジェクトの｢Launch column selector｣をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/f5fb3b38-c0e9-e8c4-a5f6-0e0c7a8ce853.png)

17). 下図のように｢ターゲット｣を選択し｢＞｣をクリックして追加する。追加後、｢レ点｣をクリックし反映させる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/1e42633c-c112-0dde-e9f9-811e6bb1235b.png)

18). ｢Search experiment items｣に｢Score｣と入力し｢Score Model｣をダブルクリックする。
19). 以下の内容の関連付けを行う
　　　・｢Score Model｣の右側と｢Train Model｣
　　　・｢Score Model｣の左側と｢Train Model｣

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/0c215282-c42f-0bc2-5b2a-6e1ff99a65a2.png)

20). ページ下部にある｢Run｣を押下する
21). ｢Search experiment items｣に｢Eva｣と入力し｢Evaluate Model｣をダブルクリックする。展開後、｢Score Model｣と｢Evaluate Model｣の左側を関連付けする
22). ｢Evaluate Model｣を右クリックしメニューより｢Run selected｣を選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/af527049-637f-e9e3-19e3-6db35bb895bb.png)

22). (補足)上記実施後、｢Visualize｣すると[ROC曲線]や[AUC評価等]確認が可能

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/d99932e9-dae4-f396-43df-a9ea5dba638b.png)

23). ページ下部にある[SAVE]をクリックして保存する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/cbc62a08-3cf2-4949-46be-6dace5098d96.png)

##**■6■予測**
　前項でモデルの作成は終わり予測の準備段階は整いました。本稿では作成したモデルをWEBサービスにして予測の実行を行います

1). ｢Microsoft Azure Machine Learning Studio｣の画面下部の｢Run｣を押下する
2). ページ下部にある[SET UP WEB SERVICE]をクリックする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/850e541c-f348-442b-a899-bbbe6018a1a3.png)

3). ｢Select Coumns in Dataset｣と｢Weather.csv｣に関連づいている線を右クリックし｢Delete｣を選択する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/ada21328-e62c-bcdc-6afe-2eafbe334404.png)

4). ｢Search experiment items｣に｢Select｣と入力し｢Select Coumns in Dataset｣をダブルクリックし展開する。展開後｢Weather.csv｣と関連付けを行う。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/5e6cc9f0-00a0-f095-81e5-1cfada68580f.png)

5). 手順｢4｣で作成した｢Select Coumns in Dataset｣をクリックし｢Launch column selector｣をクリックする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/9eb1e6df-de64-54cc-25c7-0a491bcfd049.png)

6). ｢Select columns｣で以下の設定を行う
　　・｢BY NAME｣から｢WITH RULES｣に変更
　　・｢Begin With｣を｢ALL Columns｣に変更
　　・｢Include｣から｢Exclude｣に変更

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/239fc1c9-75b0-5779-ae64-99ef41ad52a5.png)

7). ｢Select columns｣で以下の設定を行う
　　・下図のように｢ターゲット｣を指定し、｢レ点｣をクリックし反映させる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/4ebc10fb-a364-5234-67bb-635cd6fb2cf8.png)

8). ｢Select Coumns in Dataset｣同士を関連付けする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/88f6532c-e140-5fbf-71f6-8c725450f919.png)

9). 既存の｢Select Coumns in Dataset｣を削除する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/e71e2955-a612-6bec-42a2-86e948f7ae36.png)


10). ｢Web Service input｣と｢Select Coumns in Dataset｣を｢Score Model｣に関連付けをする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/2a2016d9-1874-1c5f-128e-b703ca45141a.png)

11). ページ下部にある｢Run｣を押下する
12). ページ下部にある[DEPLOY WEB SERVICE]を押下する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/5c03e85b-122a-3744-634c-65f4a0474b87.png)

----予測実行-----

13). 表示されたWEBページの下図枠内をクリックする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/461df694-e6e9-7ba9-56cb-2f7c41d1d0f7.png)

14). 表示されたページに以下の日程のデータを入力する。入力後｢レ点｣をクリックし反映させる
　　　・2018年7月2日

![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/fe4fad35-117e-d35e-0a0d-c13d939ee085.png)

15)｢Detail｣をクリックし以下のResult部分を確認する

16). 手順｢13).　～　15).｣を繰り返し｢2018年6月10日｣分のデータを取得する

<img width="506" alt="00C.png" src="https://qiita-image-store.s3.amazonaws.com/0/150678/b9e42e7c-152a-cd16-fc38-fe8312428e08.png">



##**■7■予測結果**
　前項までで｢AWS｣で使用したデータ｢Weather.csv｣を使って｢2018年7月2日｣と｢2018年6月10日｣のデータを予測しました。本稿ではその予測結果と、実際のデータの比較を行います。

<Font color=bule>**<<2018年7月2日>>**</Font>

<Font color=red>**◆気象庁データ　：　雨は降っていない**</Font>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/5f776952-5906-b658-7f01-225626c3f573.png)

<Font color=red>**◆入力データ**</Font>

```Ruby:入力データ
年月日,平均気温(℃),最低気温(℃),最高気温(℃),降水量の合計(mm),日照時間(時間),降雪量合計(cm),平均風速(m/s),最大風速(m/s),最大風速(m/s),平均湿度(％),平均蒸気圧(hPa),平均雲量(10分比),合計全天日射量(MJ/㎡),最深積雪(cm),最大瞬間風速(m/s),最大瞬間風速(m/s),最多風向(16方位),最小相対湿度(％),最低海面気圧(hPa),平均海面気圧(hPa),平均現地気圧(hPa),平均雲量(10分比)
2018/7/2,28.8,24,33.5,0,13.6,0,3.7,10.9,南,70,27.6,0,29.11,0,10.9,南,南,54,1010.9,1014,1011.3,
2018/6/10,20,22,18.6,31,0,,3,6.5,東北東,91,21.2,10,2.09,0,11,東北東,北東,76,1006.9,1009.6,1006.8
```


<Font color=red>**◆機械学習予測結果　：　0　（雨は降っていない）**</Font>

```Ruby:20180702-WeatherResult
Result: {"Results":{"output1":{"type":"table","value":{"ColumnNames":["年月日","平均気温(℃)","最高気温(℃)","最低気温(℃)","降水量の合計(mm)","日照時間(時間)","降雪量合計(cm)","平均風速(m/s)","最大風速(m/s)","最大風速(m/s) (2)","平均湿度(％)","平均蒸気圧(hPa)","平均雲量(10分比)","合計全天日射量(MJ/㎡)","最深積雪(cm)","最大瞬間風速(m/s)","最大瞬間風速(m/s) (2)","最多風向(16方位)","最小相対湿度(％)","最低海面気圧(hPa)","平均海面気圧(hPa)","平均現地気圧(hPa)","Scored Labels","Scored Probabilities"],"ColumnTypes":["DateTime","Double","Double","Double","Double","Double","Int32","Double","Double","String","Int32","Double","Double","Double","Int32","Double","String","String","Int32","Double","Double","Double","Int32","Double"],"Values":[["7/2/2018 12:00:00 AM","28.8","33.5","24","0","13.6","0","3.7","10.9","南","70","27.6","0","29.11","0","10.9","南","南","54","1010.9","1014","1011.3","0","0.00391858769580722"]]}}}}
```

<Font color=bule>**<<2018年6月10日>>**</Font>

<Font color=red>**◆気象庁データ　：　雨は降っていなる**</Font>
![image.png](https://qiita-image-store.s3.amazonaws.com/0/150678/3daaaac1-c4d2-490d-62ef-39f98d455b5a.png)

<Font color=red>**◆入力データ**</Font>

```Ruby:入力データ
年月日,平均気温(℃),最低気温(℃),最高気温(℃),降水量の合計(mm),日照時間(時間),降雪量合計(cm),平均風速(m/s),最大風速(m/s),最大風速(m/s),平均湿度(％),平均蒸気圧(hPa),平均雲量(10分比),合計全天日射量(MJ/㎡),最深積雪(cm),最大瞬間風速(m/s),最大瞬間風速(m/s),最多風向(16方位),最小相対湿度(％),最低海面気圧(hPa),平均海面気圧(hPa),平均現地気圧(hPa),平均雲量(10分比)
2018/6/10,20,22,18.6,31,0,,3,6.5,東北東,91,21.2,10,2.09,0,11,東北東,北東,76,1006.9,1009.6,1006.8
```

<Font color=red>**機械学習予測結果　：　1　（雨）**</Font>


```Ruby:20180610-WeatherResult
Result: {"Results":{"output1":{"type":"table","value":{"ColumnNames":["年月日","平均気温(℃)","最高気温(℃)","最低気温(℃)","降水量の合計(mm)","日照時間(時間)","降雪量合計(cm)","平均風速(m/s)","最大風速(m/s)","最大風速(m/s) (2)","平均湿度(％)","平均蒸気圧(hPa)","平均雲量(10分比)","合計全天日射量(MJ/㎡)","最深積雪(cm)","最大瞬間風速(m/s)","最大瞬間風速(m/s) (2)","最多風向(16方位)","最小相対湿度(％)","最低海面気圧(hPa)","平均海面気圧(hPa)","平均現地気圧(hPa)","Scored Labels","Scored Probabilities"],"ColumnTypes":["DateTime","Double","Double","Double","Double","Double","Int32","Double","Double","String","Int32","Double","Double","Double","Int32","Double","String","String","Int32","Double","Double","Double","Int32","Double"],"Values":[["6/10/2018 12:00:00 AM","20","22","18.6","31","0","0","3","6.5","東北東","91","21.2","10","2.09","0","11","東北東","北東","76","1006.9","1009.6","1006.8","1","0.999954700469971"]]}}}}
```
##**■8■終わり**
　前回は｢AWS｣でやって今回は｢Azure｣でやってみました。｢AWS｣のほうが処理自体は簡単ですがより細かい設定ができるのは｢Azure｣かなとおもいます。しかしながら今回は「よりシンプル」にという目標がありますのでそういった意味だと｢AWS」のほうがいいのではないかと思います。

出展：気象庁HP(http://www.jma.go.jp/jma/)