2018年2月7日水曜日

AzureMLレコメンデーション作成(番外)


インターンシップ報告 兼 AzureMLレコメンデーション実験作成
   

少し前の話しですが、昨年921日~25日に、QES夏季インターンシップを開催しました。学生4名の方にご参加いただき、Azureを利用した基盤構築やMachine Learningを体験してもらいました。

中でも特にAzure Machine Learningを使用した2日間について、本記事の前半で演習の流れと振り返りをご紹介します。後半では、インターンシップでの演習内容のうち、本連載で今まで扱っていない「レコメンデーション」について、ご紹介します。

 

本インターンシップのベースとなっているブログ連載記事はこちらです。
















 

当日のアジェンダを以下に示します。①~⑦を1日目に、⑧~⑪を2日目に実施しました。



1.1.     機械学習の概要と、機械学習を活用したサービス

まず、機械学習とは何か?機械学習を身近に体験できるサービスにはどのようなものがあるか?について、本連載の過去記事をベースにご紹介しました。記事の執筆時点よりも後にいくつかアップデートされた項目があるので、本記事でもご紹介したいと思います。

 
本連載1回目の記事では、弊社グループ会社における金融・経済に特化した人工知能サービスの事例として、日本経済新聞社・金融工学研究所・QUICKが開発した「日経DeepOceanをご紹介しました。その後、日本経済新聞社では、「完全自動決算サマリー by NIKKEI」の提供も開始しました。これは、上場企業が決算の際に公開する情報や、日本経済新聞の過去の紙面を基にして、要約記事を作成・配信するものです。AIによってのみ記事を作成し、人間が一切関与しない画期的なサービスということで新たにご紹介しました。

 


1.2.     機械学習の手法(レコメンデーション)


本連載4回目の記事では、機械学習アルゴリズムを回帰分析、アノマリ検知、クラスタリング、クラス分類の大きく4種に分類してご紹介しました。これらの分類に当てはめにくい機械学習手法の例として、今回のインターンシップでは「レコメンデーション」を題材に、Azure Machine Learningでの実装例をご紹介しました。レコメンデーションとは何か、実装するにはどのような手順をとれば良いかについて、本記事の後半でご紹介します。

1.3.     サンプルデータによる実習

機械学習の手法についてご紹介した後、定番の「あやめのデータ」等を使用した実習を行いました。詳細な手順については、連載第2から第6の記事をご覧下さい。クラス分類、回帰分類、クラスタリング、アノマリ検知の4手法について、Azure Machine Learning上で実験を作成し、予測を行う手順を確かめてもらいました。

 
次に、機械学習を行う前のデータセットを事前加工するときや、Azure Machine Learningに既存モジュールが用意されていないような学習手法を実装したいときには、どうしてもスクリプト言語によるプログラミングが必要になるため、R言語とPython言語の簡単な文法についてのご紹介も行いました。

RStudioWebサイトにおいて公開されているチートシートを活用することで、短時間の実習ではありましたが最低限の文法は押さえられたのではないかと思います。

 


コラム:RStudioについて

 

RStudioとは、Visual Studioのような統合開発環境(IDE)で、R言語のソースコードを記述して実行したり、説明用のドキュメントを執筆したりするために使用するソフトウェアです。今回の実習のようにJupyter [吾妻1] NotebookAzure Notebookの中でスクリプトを記述する際には使用しませんが、ローカルPC上でプログラミングやデバッグを行う際には非常に有用なソフトウェアです。



 
また、折角スクリプト言語の文法を学んだということもあり、作成した実験をREST APIとして公開し、Azure Notebookから呼び出す実習も行いました。この際、認証が上手く通らなかったり、呼び出し側で実行しているPythonのバージョンの影響で実行に失敗してしまったりといったアクシデントも発生しましたが、最終的には、Azure Machine Learningの外側からAPIを呼び出して予測結果を得る手順を確認することができました。

1.4.     オープンデータによる実習

サンプルデータによる実験を作成する手順やデータを加工する手順を確認したところで、オープンデータを使用した予測実習を行いました。この実習の大まかな流れを以下にまとめておきます。

     オープンデータのカタログサイトを利用し、データセットを検索

     データセットの中身を確認

     データセットや、データセット同士の組み合わせから導き出したい事柄を決定

     仮説を決定

     結果の妥当性を検証

     ホワイトボードを使用し、結果報告と考察


本来は、予測すべきデータセットがもともとあって、それに対して加工・分析を行っていくわけですが、今回は機械学習手法の確認が主目的であるため、オープンデータの中から対象とするデータセットを各自で選んでもらい、使用することとしました。当日までインターン生の皆さんがどのようなデータセットを選ぶのか検討がつかない状態だったため準備には苦労しましたが、主体的な実習となったため、効果が高かったのではないかと思います。

 データセットを検索したり中身をチェックしたりするフェーズでは、21組のペアを組んでもらい、ノートPCをコミュニケーションスペースに持ち込んで、話し合いを行いながら進めていきました。21組となることで、自分自身では気付かないデータの特徴に気付くことが出来たり、データセットを探す際の視野が広くなったりといった効果が見られたのではないかと思います。


このとき、今回学生の方々が選択していた主なデータセットは、以下のものでした。

l  企業規模別新規学卒者の初任給の推移

l  産業別新規学卒者の初任給の推移]

l  徳島市の気象(日別)

l  犯罪統計資料

l  全国観光入込客統計のとりまとめ状況

l  H28全事故のまとめ

将来世代が受け取る初任給の予測を目指して、推移データを選択したペアがいた点については、インターンシップらしく、興味深く感じました。時系列分析というと、日経平均株価や為替相場の予測を連想してしまいがちですが、より身近な時系列データを探し、分析してみるのも良いかもしれないと思いました。

データセットの分析・予測においては、事前に配布した社用メールアドレスに紐付けたMicrosoftアカウントでAzureにサインインしてもらい、ML StudioAzure Notebookの上で作業してもらいました。特にAzure Notebookについては、他者とのソースコードのシェアが容易という特徴が、ペアプログラミングに合致して効率よく作業が進んだように思います。ML Studioについては、短い時間だったこともあり、どのモジュールを配置するべきか迷っている学生さんがいたため、機械学習アルゴリズムートシートのような図表を併用しながら、より理解しやすいように説明できれば良かったと自省しました。
 
2.      レコメンデーション実験


さて、今回のインターンシップでは既存のブログ記事を教材としないテーマとして、「レコメンデーション」をとりあげました。レコメンデーションとは、①顧客情報、②商品情報、③顧客の商品に対する評価情報の3つのデータセットを入力して、各顧客に最適な商品を提案するシステムです。Azure Machine Learningには、レコメンデーションを実現するための「Matchbox Recommender」モジュールが用意されており、商品提案だけでなく、以下の様な分析も簡単に実施できるようになっています。

(1) あるユーザーAが、ある商品Bに対して行う評価の予測

(2) あるユーザーCに対して推薦すべき商品Dの推定

(3) あるユーザーEと類似した傾向があるユーザーFの発見

(4) あるアイテムGと類似した特徴を持つアイテムHの発見

レコメンデーションと聞くと、ECサイトでの商品を対象にした推薦システムを連想される方が多いかと思いますが、商品の推薦以外にも、SNSでのおすすめユーザーの推薦に使用したり、顧客特性を基に営業マンの行動内容を改善するために使用したりといった活用策が考えられます。

今回は、レコメンデーションシステムの研究用に公開されたデータセット「SUSHI Preference Data Sets」を事前加工し、Azure Machine Learningにアップロードして、表中の(1)の評価予測を行う実験を作成します。SUSHI Preference Data Setsは、寿司の好みに関するアンケート調査の結果を集計したデータセットです。

分析手順を、以下に示します。

2.1.1.    データセットの作成

1.      Azure Machine Learningにサインインする前に、まずはデータセットの事前加工を行います。データセット公開サイトから「sushi3-2016.zip」をダウンロードして、解凍します。ZIPファイルに含まれているテキストファイルのうち、以下のファイルを使用します。



2.      Azure Machine Learningで使用しやすい形式とするために、取得したテキストファイルをExcel等で編集して、以下の3つのCSVファイルとします。まず、評価一覧のファイル(sushi3b.5000.10.scorerate.csv)については、横持ちのファイルを縦持ちに変更します。すなわち、sushi3b.5000.10.scoreだと行が顧客、列が寿司種に対応していますが(横持ち)rate.csvでは列が利用者ID、寿司種の名前、評価値の3列のみとします(縦持ち)
 


3.      次に、データセットの解説を度々確認しなくても良いように、ヘッダ行を追加して列名を追加します。今回は元のテキストファイルに含まれていたすべての列を残したままアップロードしていますが、事前に変数選択を行った状態でアップロードしても構いません。データセットのサイズ等に応じて、選択して下さい。

2.1.2.    実験の作成

1.      Azure Machine Learningにサインインします。
 


2.      サインインした後、「DATASETS」タブを開きます。



3.      左下にある「+NEW」をクリックし、「FROM LOCAL FILE」をクリックします。


4.      作成したCSVファイルを指定し、必要に応じてメタデータを入力した後、右下の「OK」をクリックします。


5.      同様にして、3つのCSVファイルをすべてアップロードします。


 

6.      必要に応じて、Jupyter Notebookを使用してデータセットの中身を確認します。




コラム:Jupyter Notebookについて

 

Jupyter Notebookとは、オープンソースソフトウェアとして開発されている、GUIのスクリプト実行環境です。Webアプリケーションとして実行し、ドキュメントやソースコード、実行結果を1つのファイルにまとめて保存・共有できるという特長があります。スクリプトの実行結果として単に文字列出力を行うだけでなく、図表やグラフを出力することも可能です。

Azureサービスでは、Azure Machine Learningの一部として提供されているほか、Azure Notebookとして、独立したサービスも提供されています。今回のインターンシップでは、後半のPythonスクリプトのR言語、Python言語の文法のご紹介の際に、Azure Notebookを使用しました。

Webアプリケーションとして使用するだけではなく、PCにインストールしてローカル環境で実行することもできますので、ご興味がある方は是非インストールしてみて下さい。一般的なPCへインストールするためには、Pythonのインストールにも使用するAnacondaを使用すると便利です。Jupyter Notebookだけでなくライブラリ群も一度に用意できます。


 
7.      次に実験(Experiment)を作成します。「EXPERIMENTS」タブをクリックした後、左下の「+NEW」をクリックし、「Blank Experiment」を選択します。


8.      必要に応じて実験名を変更した後、図のようにモジュール配置します。
 
 
 
9.      各々のモジュールに対して、表のようにプロパティを設定します。


10.   ページ下部の「SAVE」をクリックして保存した後、「RUN」をクリックして実行します。最後の「Evaluate Recommender」に緑色のチェックマークが表示されるまで待ちます。


2.1.3.    実験の評価

1.      まず、実権によって予測された評価値を確認します。Score Matchbox Recommender下部の丸印の右クリックメニューから「Visualize」を開きます。


2.      アンケート回答者(User)毎に、ある寿司種(Item)にどのような評価値(Rating)付けると予測されたかを示す表が表示されます。


3.      次に、正答データを確認します。3連のEdit Metadataのうち最後のものの下部の丸印の右クリックメニューから「Visualize」を開きます。


4.      アンケート回答者(User)毎に、ある寿司種(Item)にどのような評価値(Rating)付けたかを示す表が表示されます。
 


5.      予測値を列挙するだけでは実験結果の精度評価を行いにくいため、評価指標を算出して評価することとします。今回の実験では、Evaluate Recommenderを配置することによって評価指標を算出していますが、当然先程確認した予測値と正答の一覧を基に算出することもできます。

6.      Evaluate Recommenderの下部の丸印の右クリックメニューから「Visualize」を開きます。


7.      MAERMSEという、2種類の評価指標の値が表示されます。いずれも0に近いほど精度良く予測できていることを示します。Evaluate Recommenderで生成されるのはこれらの指標だけですが、先程確認した予測値と正答の一覧を基に、他の指標値を計算して評価することもできます。評価指標の種類については、本連載56をご参照下さい。

 
 

今回の記事では、既存の記事で扱っていないテーマとして、「レコメンデーション」をとりあげました。Azure Machine Learningで実現可能な分析手法の中から下表の(1)に示す評価の予測実験を選択して、Azure Machine Learning上で研究用に公開されたデータセット
SUSHI Preference Data Sets」に対する予測と評価を行う手順をご紹介しました。

 
(1) あるユーザーAが、ある商品Bに対して行う評価の予測

(2) あるユーザーCに対して推薦すべき商品Dの推定

(3) あるユーザーEと類似した傾向があるユーザーFの発見

(4) あるアイテムGと類似した特徴を持つアイテムHの発見

 
手元のデータのみで客観的な精度評価を行うことが可能であることから、今回は(1)を選択しましたが、実案件では(2)(4)の方が有用かもしれません。これらについても今回ご紹介した(1)と同様に実験を作成した後、Score Matchbox Recommenderのプロパティを変更するだけで容易に作成することができます。後者に対する評価方法としては、被験者に対するアンケート調査や、推薦の有無によるA/Bテストの実施等が考えられます。これらの評価方法で使用する指標としては、一般的なクラス分類のときに使用したようなMAERMSEといったものの他に、「セレンディピティ(偶然性)」のようなものを使用することもあり、レコメンドシステムの評価の特徴的な部分となっています。
 

今回の記事では、QES夏季インターンシップの振り返りと、レコメンデーション実験の作成手順をご紹介しました。レコメンデーションシステムについては、ECサイトでなくとも、ユーザーやコンテンツの推薦に使用したり、業務改善に


使用したりといった活用策が考えられますので、是非皆さんのお手元のデータを基に試してみていただければと思います。


 ブログアーカイブ
前回までのブログと今後の予定
 SharePointのバージョンアップ 第2回移行ツール(Sharegate)の紹介 2017年11月28日記事
 SharePointのバージョンアップ 第3回SharePoint移行に関する注意点 未定
 
その他以下ブログを発信中です。
 
機械学習(Azure Machine Learning)の入門からビジネス活用へ