今から始める Azure Machine Learning 最初の一歩(FESTセッションまとめ)
Microsoft FEST 2015 で、砂金さんが実施した「今から始める Azure Machine Learning 最初の一歩」をまとめてみました。
How-old.net という写真から年齢を抽出するサイトがあります。
まだ見たことがない人はぜひ見てください。
見て欲しいのは、年齢ではなくて、The magic behind How-Old.net という、How-Oldの技術構成を説明したページがありますので、そこはぜひ見てください。
Machine Lerningは、何に使えるのでしょうか?
いろいろ使えます。
- 異常検知(ログが流れていて、ぽっと異常なログが出た時に検知)
- パターン認識(ルールに基づいてモデルを作って、そのモデルにあたるのは何%ですか?)
- リコメーションシステム
- 売上予測(人間よりはよほどうまくやれます)
Machine Learning は、Azure Machine Learningだけ詳しくてもダメで、周辺のデータの扱い方やほかのアプリからどうやってAPIでアクセスするのかを理解する必要があります。
VisualizeではPowerBI、データ送信にはDataLakeというテクノロジーも抑えておく必要があります。
Azure Machine Learning がやろうとしていることは、機械学習の民主化です。
今までも、SassやSPSSでもできたけど、誰でも簡単にできるようにしようと思っています。
Azure Machine Learning は、皆さんに世の中を変えるようなアルゴリズムを0から考えてもらおうとは思っていません。
誰かが作ってくれたアルゴリズムを気軽に使えるAzure ML Studioがあって、ここでうまくデータを扱えるサイエンティストがいてくれたら良いと思います。
Azure ML との3つのかかわり方
- APIをただ叩くだけでいい人
- テンプレートを利用し、カスタマイズして利用する人
- ゼロからモデルを作成する人
APIをたたく
http://gallery.azureml.net というサイトがあります。
例えば、コンピュータービジョンAPIで、Face APIというものがあります。
これは、アダルト画像ではありませんという判定です。
単に肌色識別だけでやっていると、ご認識しそうですがちゃんと判定されています。
Face APIを使ってみました。
Face APIからは属性データが返ってきます。
アプリケーションからロジックとして属性データを利用して、加工・抽出することができます。
難しいことはマイクロソフトが裏側でやってくれるというのを信じてもらえるのなら、すでに多くのAPIが組み込み可能な状態で多くのAPIが提供されています。
まだ日本語に対応していませんが、英語の文章を与えると気分が上がったり下がったりしているのを分析しましょうというAPIです。
Happy Friday と書くと、95%ぐらいの確率で能天気ですね。
悪いことをかくと残念そうねと判定した結果が返ってきます。
テンプレートを使う
やろうと思うとそれなりに大変です。
一見便利そうなんですが、いろんな前提知識がないとうまく扱えない代物です。
モデルを作るという作業は決められたとおりに組めば終わりという代物ではなくて、モデルを作って、精度が悪いので、もう少し工夫をしてモデルを改良して精度をあげましょうという形で、ぐるぐる繰り返す作業が必要になります。
実際にやってみましょうか。
ギャラリーにいくつかのサンプルが提供されています。
異常検知をするパッケージを見てみましょうか。上のほうで、データを読み込んでいます。
このあたりで、One-Class Support Vectorを使って予測学習モデルを作成しています。
一番下のほうには、モデルを評価するEvaluate Modelがあります。
これを実行しデータをみると、Rとかをしている人には見慣れたグラフが表示されます。
言葉的にわかりやすいところで、Accuracyで確からしさが70%というの示してます。
データを読み込むデータセットがついているので実行することができます。
データを増やしたり減らしたりしたらどうなるか?モデルを変えたらどうなるのかというのを繰り返しテストして評価できます。
今度は売上予測モデルを見てみましょう。
Rスクリプトというのがあります。
これはRスクリプトをぺろっとはっつけてあります。これはマイクロソフトのAPIをあまり利用せず、自分たちがすでに持っているスクリプト、ライブラリをそのまま使えます。
学習方法
ビジネスシナリオはいったんおいておいて、もっと学習したいんだ!って場合は、サンプルがたくさん提供されています。このサンプルをまずはいじり倒してください。
アーキテクチャ
いろんなビジネスシナリオで使えるのなのですが、バッチなのかリアルタイムなのかを意識してください。
学習結果に基づいて、リアルタイムに予測することはできます。
学習をリアルタイムにするのは結構大変です。
モデルを書き換えるのは、週次、月次でやろう。モデルを変えていくのはバッチでやろう。
予測は一か月に待ってくださいてのはビジネスに合わないのでリアルタイムでやりましょう。
ゼロからモデルを作成する
機械学習という広いカテゴリををなんとなく2つに分けると、教師あり学習(スーパーバイゾン)か、教師無し学習かの2つに分けます。
教師あり学習はラベルが重要です。
正解をわかっているデータを用意できるのなら、そのサンプルの正解(こういう行動をしたらやめる/やめない、こういう顔立ちは日本人だ男性だ)がわかるのなら教師あり学習。
まったく正解がない場合は、どーんとあるデータから特徴量を見つけながら、その特徴量がなぜ発生しているのかを紐といていって、パターンが分かっていくという分析の場合は正解がなくてもできる。
ただ、やれることは限られるので、なんとかラベルリングしたデータを用意できるといいですね。
レコメンデーションしましょう!となると、いろんな方法があります。
いろんな方法がある中で、どれを選びましょうかというのは自分で選ばないといけません。
ルールベースというのは、If文でロジックを書くものですね。
協調フィルタリングはAmazonで有名になったもので、自分と似たような人を見つけて、そこから購買パターンを導き出すものですね。
結果の評価が一般人には大変なんですよね。
どの値をどう見たらいいのかがわかりにくいですもんね。何がどう正解なのかがわからない。
基本的にはROC曲線てのがあって、AUCの値が大きければ大きいほど正解率が高いモデルというふうに規定されます。
正解率が高いであって、100%ではないんですね。
機械学習を通して、ビジネス的問題を解決するときに、100%保障しないといけないシナリオでは使いにくいですね。
正解率が例えば91%だとしたら、9%は外れることを前提に、どこに適用するのかを考える必要があります。
砂金モデルがあります。
砂金モデルに投入するデータは、モビルスーツです。
このモデルは二項分類で、このモビルスーツは連邦っぽいか、ジオンっぽいかを判定するものです。
データを用意するのに面倒な作業が発生します。
きちんとしたデータを用意しないといけないのですが、それをやりきるだけのパッションを与えてくれるデータが必要になります。
自分で学ぼうというときには、自分が楽しめるものを選定するといいでしょ。
(お金好きなら株、ギャンブル好きなら競馬etc
まずは、Readerでデータの入り口を定義します。
この例では、Azure Blobからデータを取得してきています。
次はノイズを減らしています。
利用するデータカラムを4列から2列にし、Nullや0だったらスキップするなどを定義しています。
データのクレイジングと呼んでいます。
スプリットという処理をしています。
学習するデータと、予測だけするデータに分けています。
どの項目を正解と定義するかを定義します。
モデルをスコアリングします。このモデルがどれぐらいの制度があるのかをスコアリングします。
スコアの評価結果を確認します。
実際に実行してみましょう。どのステップを今処理しているのかが見えます。
AzureMLは、実行している時だけに課金されます。モデルを作成している時には課金されません。
Web Service output っというのを定義しています。
Webフロント用にWeb Serviceとしてさらしてくれます。
特徴的なのは、Excelマークですね。
これをクリックしてダウンロードして開いて、マクロを実行してみましょう。
インプットとアウトプットを定義されています。
値をいれると結果が表示されます。
RX-75といれると、連邦ですねっと結果がでてきますね。
実際にやってみたい人はレコメンデンションシステムの丁寧な手順書がありますので、やってみてください。
マシーンアルゴリズムチートシートがあります。
http://aka.ms/AzureMachineLearningCheatSheet