行カテゴリ:AIタグ:AIAzure機械学習人工知能ドラえもん、鉄腕アトム、ターミネーター、、、人間のように考えてふるまう人工知能はアニメや映画の中では比較的見かけますが、現実世界では2016年現在まだ登場していません。これらのような振る舞いが人間と変わらない人工知能は「強いAI」と分類され、そこまでではない特定部分での問題解決や推論を行う人工知能は「弱いAI」と定義されています。将来的にドラちゃん(強いAI)が登場するかは分かりませんが、人工知能研究から派生した弱いAIに分類される人工知能は、既に我々の生活のさまざまな場面で活用が進んでいます。近年の人工知能の活用の広がりにはビッグデータの蓄積と、集めたデータを「機械学習」と呼ばれる方法を使ってコンピュータが分類、予測できるようになったことが大きいと言われています。機械学習をさらに進化させたディープラーニングはコンピュータ自身が世界を認識して特徴を取り出すことができ、人工知能のさらなるブレイクスルーになるのではと期待が高まっています。SalesforceにおいてもAIに関連する投資の情報はいくつも出ており、昨年のDreamforceでもSalesforceIQという営業担当者のメールやカレンダーを使用して、営業活動をAIによって支援するサービスも登場しています。ついてキャッチアップしておきたいと思っている人も多いのではないでしょうか。機械学習はデータ集合を解析するので統計学との関連が深く、本格的に活用するにはそれなりに高度な数学の知識が求められます。機械学習の利用するためのライブラリはPythonとRのものが非常に多く、これらに馴染みのないエンジニアには学習のハードルを高める1つになっています。ここ数年、クラウドで機械学習のモデルを構築できるサービスがいくつかも登場しています。Watson(Bluemix)など・・これらクラウドサービスはライブラリを利用した場合に比べると自由度は劣ると言われていますが、クラウドの利点であるすぐにサービスとして利用することもできます。GUIで操作できたり、WebAPIとして公開して他システムと連携できるようなものもあります。これらのサービスを使っても、細かいパラメータの調整やさらなる精度を高めるには統計学の知識が必要になってきますが、それでも機械学習を体験してみるには非常に便利なサービスです。Learning(以下AzureML)を使い、Salesforceとの連携を構築して機械学習を体験してみましょう。仮想シナリオあなたの会社はSalesforceの構築を請け負う開発ベンダーです。見積時に想定するオブジェクト数や画面数、外部システムとの連携本数などから工数を算出しているので、これらの見積データと実際にかかった実績工数を機械学習に学ばせて、今後のプロジェクト見積時に参考値として予測工数を出せるようにしましょう。全体的な流れは次の通りです。見積番号とプロジェクト名は工数に影響するものではないので学習データからは除外します。実際に見積をしたり、より精度の高い予測値を出す場合はこの項目だけでは全然足りないでしょう。「画面の難易度」「オブジェクトの項目数」「連携での変換有無」「トリガでの処理規模」「メンバーのスキルレベル」などなど・・ただ、今回はシンプルにするため、これらの項目のみを学習させることにします。余談ですが「何が工数に影響するか?」というのは人間が設計する必要がありますが、実際は関係ない情報を与えてもコンピュータはその情報から工数への影響度を考えて予測をしてしまいます。「見積番号」や「メンバーの平均身長」といった情報を与えることもできますが、これは明らかに現実世界で工数に影響を与えるものではありません。この「何が必要か?」をコンピュータ自身が見つけ出して物事を判断するのが、機械学習をより進化させたディープラーニングと呼ばれるものです。興味ある方は調べてみてください。学習用データを作るまずは学習させるためのデータを作ります。今回のシナリオではSalesforceにある「見積」レコードと、プロジェクトが終わった後に実際にかかった工数をどこからか持ってくるものとして、以下のようなcsvを作りました。各数値はリアルなものではなく適当なプロジェクトを想定してオブジェクト数や画面数を記入した後、筆者の経験から実績工数を算出しました。今回の機械学習は「教師有り学習」と呼ばれるもので、見積の各要素(オブジェクト数や画面数など)と、実際にかかった実績工数を正解ラベルとして学習させ、各要素がどのような値であると実績工数になるかを学習させるものです。注意点としてファイルの文字コードがShift-JISだと文字化けしてしまうので、UTF-8で作っておきましょう。AzureMLで学習させるAzureのアカウントやAzureMLのWorkSpaceは事前に出来ているものとします。この辺はググればすぐに出てきます。学習用のcsvをAzureMLのデータセットとしてアップロードします。アップロードが完了すると一覧に表示されます。次に機械学習の実験モデルを作るためにEXPERIMENTSを新規作成します。テンプレートは特に選択せずBlankにします。Experimentに適当な名前を付けます。Experimentでは左キャンパスに各モジュールがあるので配置したいモジュールを中央キャンパスにドラッグし、モジュール同士をつなぎ合わせてフローチャートのように処理を作成していきます。今回作ったものは以下のようになります。1アップロードしたデータセットを読み込みます2学習用と評価用にデータを分けます。今回は7:3にしています3学習のためのアルゴリズムで今回は実数の予測なので線形回帰のモジュールを使います4学習データとアルゴリズムを読み込む学習モデルです54の学習済モデルと評価用のデータを使って実際に値を予測します6予測値を評価しますAzureMLでは各モジュールのアウトプットをVisualizeすることができるので、いくつか流れに沿ってみてみましょうまず1でcsvを読み込んだ結果です。これはそのままですね。4の学習モデルで学習した結果が以下の通りです。各要素が予測対象である実績工数にどのくらい影響を与えているか学習結果が参照できます。5のScoreModelのアウトプットを見てみましょう。ここでは機械学習された学習モデルを使って実際に工数を予測した結果が見れます。してみると正解ラベルと予測スコアがそれなりに近いことが分かります。ラストの6では予測値を評価した結果が見れます。Detemination(決定係数)で、これは予測値と正解値のズレを表したものです。1に近いほどコンピュータが算出した予測が正解に近いということになります。今回は0.820278という結果でした。この学習モデルをWebAPIとして公開しましょう。SERVICE」から実行できます。するとWebServiceのinputとouputが自動で追加されます。このまま公開してしまうとinputのインターフェースがcsvのヘッダーのままになりますが、今回のcsvは正解ラベルとなる実績工数のカラムがあります。学習させるためには必要となりますが、学習済みとなったモデルをAPIとして公開する場合に必要なのは見積の項目だけです。Datasetのモジュールを使って見積のカラムだけに絞り込みます。Runを実行してエラーがないことを確認したらAzureML側は完成です。APIKeyやEndPoint、JSONのインタフェースなどが確認できます。おさらいここまでやったことをおさらいしましょう。学習用のcsvとして見積の情報と、その見積でプロジェクトが終わった(と仮定した)実績工数を準備しました。次にAzureMLで学習用csvを使って学習モデルを作り、最後にその学習モデルをAPIとして公開しました。後はSalesforce側からこのAPIに見積情報を渡してスコアを受け取るのですが、長くなってきたので今回はここまでにしたいと思います。検索クラウドやるならテラスカイ。求む!Salesforce開発エンジニア。