Azure Machine Learning で予測のための API を作ってみよう

#注意事項#
(2021年10月6日更新)
本記事で取り扱っている Azure Machine Learning については、2021年10月時点での [Azure Machine Learning Studio (Classic)](https://docs.microsoft.com/ja-jp/azure/machine-learning/classic/studio-classic-overview) となります。

[Azure Machine Learning Studio (Classic)](https://docs.microsoft.com/ja-jp/azure/machine-learning/classic/studio-classic-overview) については、2024年8月31日にサポート終了がアナウンスされています。[Azure Machine Learning](https://azure.microsoft.com/ja-jp/services/machine-learning/) への移行が推奨されていますのでご注意ください。

## はじめに
[前回](http://qiita.com/yomatsum/items/33e84119bf3785bb4ea6) は、Azure Machine Learning 内のモジュール名称の変更を確かめるために、Azure Machine Learning Studio の操作方法を説明し、実際にモジュール名の変更を確かめてみました。

今回は、Azure Machine Learning  Studio (以降、ML Studio) で、予測のための API 作る方法を確認しましょう。


## 予測 API って？

Azure Machine Learning は機械学習ソリューションを開発するためのサービスです。作成した機械学習ソリューションは、業務システムの一部として何らかの形で組み込むことが必要になります。そこで、業務システムや Excel 等から引き渡した入力に対して、予測結果を返す Web API として展開します。

## ML Studio にアクセスする

では、実際に ML Studio へアクセスして見ましょう。以下のURLにアクセスします。
https://studio.azureml.net/

前々回 の手順で作成したアカウントを使用してサインインしていきたいと思います。[Sing in here] というリンクをクリックするか、右上の [Sign In] リンクをクリックします。
![studio.azureml.net top.png](https://qiita-image-store.s3.amazonaws.com/0/163305/ad9f73e8-6340-d853-1bfa-9d34926ba34f.png)


表示された画面に、Microsoft アカウントとして登録されているメールアドレスを入力します。メールアドレスのテキストボックスからフォーカスが外れた時点で、自動的に次の画面へと遷移します。
![studio.azureml.net sign in.png](https://qiita-image-store.s3.amazonaws.com/0/163305/143676f4-9cd3-1a12-1784-211c2be1da4d.png)

Microsoft アカウントのパスワードを入力します。パスワードを入力して サインイン ボタンをクリックすると画面が遷移します。
![studio.azureml.net password.png](https://qiita-image-store.s3.amazonaws.com/0/163305/8aa6d4b7-578d-9a5e-f88e-487b05f2fc27.png)

ML Studio へアクセスできました。
![studio.azureml.net studio.png](https://qiita-image-store.s3.amazonaws.com/0/163305/45130edd-904a-eab5-dd7e-3548abe153cf.png)

## Cortana Intelligence Gallery からエクスペリメントをコピーする

今回は API を作成することが目的なので、Cortana Intelligence Gallery で一般公開されているエクスペリメントを使用したいと思います。
https://gallery.cortanaintelligence.com/
にアクセスします。
![cortana-gallery-top.png](https://qiita-image-store.s3.amazonaws.com/0/163305/8f0f4ae3-7874-d162-b3bf-632e88f80e03.png)

画面上部の検索ボックスに「Sample 5」と入力すると、Sample 5: Train, Evaluate for Binary Classification: Adult Dataset が候補に表示されるので選択します。
![cortana-gallery-sample5.png](https://qiita-image-store.s3.amazonaws.com/0/163305/06fc7a21-93d3-6e57-2dce-442355ea6966.png)

これから利用するエクスペリメントの解説が記述されています。予測モデルの詳細については解説を読んでいただくとして、予測モデルそのものは個人の収入が \$50,000 以下か \$50,000 より多いかを年齢等から予測するものです。

[Open in Studio] をクリックして自分のワークスペースにコピーを作成します。コピー先のワークスペースを選択する画面が表示されます。複数のワークスペースを利用している場合は好きなワークスペースを選択できます。
なお、無償版のAzure ML ワークスペースは、必ず米国中南部リージョンに作成されます。
![cortana-gallery-select-workspace.png](https://qiita-image-store.s3.amazonaws.com/0/163305/65bb2348-475b-4a56-adfc-ee560dfa07d5.png)

ワークスペースを選択したらチェックマークをクリックします。しばらく待つと、エクスペリメントのコピーが指定したワークスペースに作成されます。
![studio.azureml.net run.experiment.png](https://qiita-image-store.s3.amazonaws.com/0/163305/41d90a7d-a463-9eb8-6341-a8cf54be99f7.png)

## エクスペリメントから予測APIを作成する

コピーしたエクスペリメントはそのままではAPIとすることができません。自分でゼロからエクスペリメントを作った際も同様に、いくつかの手順を踏む必要があります。

API 可したいエクスペリメントが完成したら、一度、実行する必要があります。画面下部の[RUN]をクリックします。
![studio.azureml.net run.experiment.png](https://qiita-image-store.s3.amazonaws.com/0/163305/41d90a7d-a463-9eb8-6341-a8cf54be99f7.png)

しばらく待つと、実行が完了します。完了した場合、キャンバス内に黄緑色のチェックマークが表示されます。
![studio.azureml.net finish.experiment.png](https://qiita-image-store.s3.amazonaws.com/0/163305/f3b92a65-f095-7e80-8094-b2dc73ed6439.png)

次に、画面下部の[SET UP WEB SERVICE]にマウスをホバーさせ、[Predictive Web Service [Recommended]] をクリックします。学習の状態を確かめるエクスペリメントから、予測処理のみを実行するエクスペリメントが生成されます。
![studio.azureml.net experiment.setup.webservice.png](https://qiita-image-store.s3.amazonaws.com/0/163305/ab4e9604-3730-471c-4d63-c6275acd5802.png)

画面上の動きが終わると、キャンバスにタブが増え、「Training Experiment」と「Predictive Experiment」が表示されます。後者が新しく増えたエクスペリメントで、学習処理が含まれていません。
![studio.azureml.net experiment.setup.comp.png](https://qiita-image-store.s3.amazonaws.com/0/163305/674e00d1-f2f6-3336-18c8-ecdb9b3980f2.png)

再度、画面下部の [RUN] をクリックし、「Predictive Experiment」を実行します。API化する前に問題なく動作するかを確かめておく必要があるためです。
![studio.azureml.net deploy.webservice.png](https://qiita-image-store.s3.amazonaws.com/0/163305/c427538a-6f61-0fd2-9c84-7e7f4d86c85e.png)

実行が完了したら、画面下部の [DEPLOY WEB SERVICE] をクリックします。これでようやくAPIとして展開されます。
![studio.azureml.net webservice.png](https://qiita-image-store.s3.amazonaws.com/0/163305/69173066-8a54-c6c0-ffba-ff399c0a76f6.png)

[TEST] ボタンをクリックすることで、APIのテストが可能です。
![studio.azureml.net test.webservice.png](https://qiita-image-store.s3.amazonaws.com/0/163305/57330fa8-01e1-57f6-781c-982797665784.png)


表示されたテキストボックス群に値を設定してチェックマークをクリックすると、予測結果を得ることができます。
![studio.azureml.net test.result.webservice.png](https://qiita-image-store.s3.amazonaws.com/0/163305/8ace852b-7f4e-7daf-888f-f65730ddacf5.png)

全てをML Studioで操作しているので、あまり Web API になった感じがしませんが、APIにちゃんとなっています。ほかにもテストの方法はあるのですが、長くなってきたので今回はここまでにします。

## 次のステップ

今回は ML Studio から Web API を作成する流れを確認してみました。次は、作成した予測 API をどのように使うか試してみたいと思います。