AI Builder予測モデル

こんにちは。
AI Builder ではコーディング スキルがなくても AI モデルを作成できるため、開発者やデータ サイエンティストでなくても予測分析できます！

# 予測モデルについて
予測モデルは AI Builder カスタム モデルです。
トレーニングをして、予測モデルは指定した過去データのパターンを分析します。 
検出されたパターンに基づいて、新しいデータの将来の結果を予測します。


# 前提条件
予測モデルに使うデータは Dataverseにある必要があります。
ユーザーは、データの読み取り権限を持つセキュリティロールを割り当てられていることを確認してください。
AI Builder のクレジットがお使いの環境に対して有効化されている必要があります。

# 用意するデータについて
- 予測モデルをトレーニングするには、ラベル列の各クラスについて、履歴結果が少なくとも 10 行ずつ必要。
- トレーニングのための全体のデータ最小値は 50 行ですが、最適な結果を得るには、少なくとも 1,000 行が必要。

- データサイズは1.5 GB 未満のデータセットを使用。 
1.5 GB のデータのみを使用してトレーニングと予測が行われますが、1.5 GB の制限を超えるデータを使用しないように制御することができないため、常に 1.5 GB 以下になるようにデータを最適化する必要がある。

# 作業
それでは予測モデルを触っていきましょう。
まずはデータ準備していきます。

データがすでにある場合は、[AI Builderを触っていく](#ai-builderを触っていく)から！
## データ準備(ダウンロード・環境へのインポート)

今回はサンプルデータを使っていきます。
以下のリンクをクリックしサンプルデータセットパッケージのダウンロードします。
[AIBPredictionSample_simpledeploy_v4.21.3.zip](https://github.com/microsoft/PowerApps-Samples/blob/master/ai-builder/AIBPredictionSample_simpledeploy_v4.21.3.zip)

ダウンロードマークをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7d6ea1c3-8779-f127-a469-6e9ae693dda0.png)

ダウンロードフォルダを開き、ダウンロードした zip ファイルを選択し、右クリックします。
プロパティを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/584d1bea-3aae-8bca-a162-aa1be7d26fe5.png)

全般タブで、セキュリテイ項目の「許可する」を選び、ポップアップで[適用]を選択し、[OK]でプロパティを閉じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8cd7ad55-2245-352e-19f4-8f11b43f4a36.png)

またzipファイルと右クリックし、「すべて展開」をクリックし、ポップアップで[OK]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/f50a7ce5-05b5-a72c-b9db-afb13f8b8c24.png)

フォルダ内の PackageDeployer（アイコンがあるアプリケーションの方）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2faebca0-d228-ced0-f305-b5f3188384cf.png)


PackageDeployer.exe を実行すると、次のスクリーンが表示されます。[続行]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/57e7bb5f-fa03-b813-40b1-eb77966706f5.png)

::: note 
Dynamicsと表示されますが、Power Apps・Automateのライセンスがあれば大丈夫です。
:::

Office 365 を選び、ログインを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/54e6318f-9c62-5deb-23ee-e68c3fbaf96a.png)


ログインに使用するアカウントのIDを入力し、[次へ]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bf63b85f-6cc2-33e1-dcdd-93d3cbad7132.png)

データを保存する（Dataverse）環境を選択し、[ログイン]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1097e81a-97e7-da91-f49f-aa012cceacf9.png)

ログインが成功すると、ようこそ画面が表示されます。 メッセージを読み、[次へ]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6e668e4c-4ead-3aa8-575a-2656ecc7636d.png)


インストールの準備 画面で、ソリューションが正しい環境に再インストールされていることを確認し、[次へ]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/4ed1621b-7782-8c66-7077-f38dbf763358.png)


AIB 予測データセット インストーラー構成画面で、インポートされているデータとソリューションの概要情報を読みとり、[次へ]を選択します。

::: note
データのインポート処理に数分かかります。 各ステップが正常に完了すると、ステップの横にチェック マークが付いた緑色の円が表示されます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/4ac8ea81-22d8-e2b1-d29b-62e7e07a8d43.png)



インストール完了 画面で、[完了] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e94fc980-b713-4883-fb04-e1b8a7c749fd.png)


::: note
私の場合、一度目は以下のようなエラーが出たため、２回やりました。１回目ではデータが入っていませんでしたが、２回目でインポートができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e7b3ed8e-7382-3803-5be2-c8f661a690dd.png)

２回目では以下のようにインポートできたことが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/34769a17-5196-cd15-d9be-ac25bd1398e5.png)

::: 

## インポートしたデータの確認
これまでの手順で環境へ ソリューションがインストールされます。
これを確認してみましょう。
該当の環境を選択し、[ソリューション]を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/51b3568a-b67e-7d80-68ef-d5e079d30b70.png)

このソリューションにはテーブルが１つ含まれています。
これを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/af6a89e9-6a98-28a8-e20c-74f72c5807b5.png)


この「Online Shopper Intention」テーブルはバイナリ予測および数値予測に使用することができます。
バイナリ予測を試してみたい場合は、Online Shopper Intentionの「Revenue(label)」を列として選択します。
Revenue：購入したかどうか

また、数値予測を試してみたい場合は「ExitRates」または「BounceRates」を列として選択します。

ExitRates：離脱率。あるページを訪れたユーザーが、同サイト内の他のページに移行せず、そのページを最後にサイトから離れた割合
BounceRates：直帰率。ユーザーがサイトを訪れたとき、最初にたどり着いたページだけを見てそのサイトを去った割合。つまり、1回の訪問で1ページビューで終わってしまった割合。（離脱率のなかに直帰率も含みます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2973fc58-eea8-ce0a-4068-25e8893001b7.png)

::: note
表示されないときは以下の方法で表示できます。
[その他の○○件]>[列名]>[保存]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/19f5d415-e40e-287d-9523-6e8b0d939fde.png)
:::


## AI Builderを触っていく
[Power Apps](htpps://make.powerapps.com )にサインインし、[AIモデル] を選択します。
表示されていない場合は[詳細]を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5057735a-c982-6c7b-cad4-ec4f4f825675.png)

[新しいAI モデル]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/30fc9e5a-a395-29ba-dba1-ff5d006360fe.png)

[予測]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d25c28bd-74f8-4ff1-5b41-5bf0d5037d65.png)

[カスタムモデルを作成する]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/778bddd2-bbf9-bce4-3c19-07eb402a31fa.png)

右上の「予測...」をクリックします。
モデルの名前「オンライン購買客の意向」を入力し、[名前の変更]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/96bd217d-71e1-aa97-8f24-278fd666d1f3.png)

今回予測モデルで扱いたいテーブルと予測したいデータを保存している列を選択します。
今回私はバイナリ予測を行いたいと思いますので「Revenue(Lavel)」を選択します。
[次へ]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/f4767905-d7fc-d474-d865-640e1a7a2d7e.png)

::: note
予測モデルで対象にできる列

- 分類予測
- - はい/いいえ
- - 選択肢

- 数値予測
- - 整数
- - 10 進数
- - 浮動小数点数
- - 通貨
:::

次に、モデルのトレーニングに使用されるデータ列を変更できます。 
既定では、関連するすべての列が選択されます。
精度の低くする可能性のある列は選択を解除できます。

ここで何をすべきかわからなくても大丈夫です！
AI Builderが、可能な限り最良のモデルを実現する列の検索を自動でしてくれます。 

今回使用しているサンプル データの場合は、すべてをそのままにして、[次へ]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/375279b3-249a-6542-915d-895844e66f53.png)

::: note
このデータ列を選択する画面には、モデルをトレーニングするための入力として使用できない、画像などいくつかのデータ型は表示されません。 
また、作成日時などのシステム列も既定で除外されます。
:::

::: note
また、関連テーブルもトレーニングデータに使用することができます。
:::

次に、フィルタリングです。
モデルのトレーニングに使用するのと同じテーブル内に関連性のないデータがあることがわかっている場合は、この手順を使用してフィルター処理できます。
この処理をしたい場合は、[データをフィルター処理する]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/aacef6fa-1181-6c71-9016-25f86a540807.png)

今回は[この手順をスキップする]を選択し、［次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/30e4db7a-63b9-0c6b-37b9-8d57a1fb531e.png)


[トレーニングする]をクリックします。
[モデルに移動]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bfb507c5-6d40-4abd-ad8c-8197ac74e8ae.png)

::: note
トレーニングには時間がかかります。
ページを閉じても、後で戻ってくることができます。
:::

「トレーニング済み」になっていることを確認して、このモデルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b18398f9-b1d3-19e4-d181-bb4ad576d5c7.png)

このモデルのパフォーマンスを確認します。
画面マン安価に表示される「最も影響力の大きいデータ」は、結果の判定に最大のインパクトを与える列を示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b0752856-e8c5-b9cf-6266-0039f3db720d.png)

パフォーマンスに問題がなければ[公開]をクリックし、モデルを公開します。
パフォーマンス詳細については次のセクションです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b3164613-273a-2440-f42c-4caa4fb69016.png)

::: note
予測モデルが公開されると、新しく作成されたレコードに対して自動的に予測が実行されます。
（デフォルトでは毎日実行）
:::

## パフォーマンスについて
各トレーニングの後、予測モデルでは、モデルの精度を評価するのに役立つグレードが表示されます。

グレード A – 最高のグレード。まだ改善が可能な場合もある。
グレード B - 予測はほとんどの場合正しいが改善を検討できる。
グレード C - ランダムな推測よりも優れているが、パフォーマンスを改善するためにモデルを調整することがおすすめ。
グレード D - 実行するランダムな推測で予想されるよりも悪い ([アンダーフィット モデル](https://learn.microsoft.com/ja-jp/ai-builder/manage-model#underfit-models))。 
または、パフォーマンスが非常に高い (100% またはほぼ 100%) ため、結果に直接相関するデータ列が取得される可能性がある ([オーバーフィット モデル](https://learn.microsoft.com/ja-jp/ai-builder/manage-model#overfit-models))。

パフォーマンスグレードがビジネス シナリオに対して満足できるレベルであれば、モデルを公開し、ライブ データに対して実行できるようにします。

https://learn.microsoft.com/ja-jp/ai-builder/prediction-performance


予測モデルは、さまざまなオプションで使用できます。

今すぐ実行 - 毎日、新しく作成されたライブデータに対して自動的に予測が実行される。
リアルタイム予測 - 予測が即座に必要なシナリオに適用される。

リアルタイム予測のほうは構築が必要なので、次のセクションではその手法を説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/fd368b16-35c8-ad66-f411-bbe440361d6f.png)

# リアルタイム予測に作成したモデルを使用する

予測が即時に必要とされるシナリオでは、Power Automate クラウドフローを使用します。
次の手順に従って、新しい注文の購入を予測するためのカスタムモデルの結果を使用するフローを作成します。

[Power Automate Studio](https://make.powerautomate.com ) の左側のナビゲーション メニューで、[作成]を選択してから、[自動化したクラウド フロー]タイルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6f0176f4-3743-be1d-6252-7e88294f6ac2.png)

フローに名前を入力してから、Dataverseを検索し、[行が追加、変更、または削除された場合]のトリガーを選択します。 [作成]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/82aa1d40-44cb-9bbc-5c60-e0f421eca488.png)

Power Automate Studio で、新しいクラウド フローのトリガーに対して[作成]を選択し、テーブル名に、今回は「Online Shopper Intention」を選択してから、範囲として[Organization]を選択します。 

次に、[新しいステップ]を選択してアクションを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/91f5da2c-74c2-d325-0645-e4a8d6c28793.png)


AI Builder コネクタに対して、予測アクションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/248918ae-0a01-17cf-1805-dccc2c0186b0.png)

今回作成した予測モデルを選択します。
モデルの各値に対して、Online Shopper Intentionテーブルから適切な列を選択します。

::: note 
選択肢列は「カスタム値の入力」をクリックして動的な値を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8b81822b-6471-791f-f275-185563fd870d.png)

:::

次に、[新しいステップ]を選択してアクションを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/dd3e7c5f-24dd-3d5b-a757-e34d9ed98047.png)

Dataverse コネクタの、[行の更新]アクションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7acfd755-6501-63d2-b591-c14ecc4226db.png)

テーブル名ドロップダウン メニューで、Online Shopper Intentionを選択します。
[行 ID]で、トリガーの一意識別子を指定します。 （テーブルと同じ名前の列。）
必要なその他の値として、予測アクションから、説明、予測、および可能性を入力します。 


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/87e393d2-847a-b6bd-58dc-3dc65bbd0c1d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b780486e-53d0-e998-7bbe-53ba4085da41.png)

次に、保存を選択してフローの作成で完了です！

# 動き確認
予測モデルとフローをテストするには、テーブルに新しい行を追加し、データ入力フォームを更新します。（モデル駆動型アプリがあると便利です） 

今回はDataverseでテーブルを開きに行きます。
テーブルの詳細画面で[編集]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9fdb0543-ef85-49e1-e509-9c3ad30f7f8c.png)

[新しい行]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/4f970612-37ba-235c-37f3-8d5cfa402556.png)

行を追加したら、
予測、確率、説明をそれぞれ保存した列（aib_revenue - 予測、aib_revenue - 確率、aib_revenue - 説明 ）を表示させ、CreatedOnで並び替え、更新した行に対して、予測結果が保存されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6af8ddc9-b358-8b18-445c-658eba9b646a.png)


モデル駆動型アプリで入力するとこんな感じ。結果が表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/df39b093-a72a-bff5-c19b-55788568aebf.png)

## ちなみにモデル駆動型アプリ作成してみようのコーナー
テーブルの詳細画面のリボンＵＩにある[アプリを作成する]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/00c1fae6-3eed-7d50-1d0c-90a42b5f7fd1.png)
アプリの名前を入れて、少し待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7a12a79e-cd8c-e5b7-948f-46bcb1342ac4.png)

フォームの編集をしたいので、テーブル名が２つ並んでる下の方にカーソルを当て、[✏]マークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5e6d3412-baf0-27e2-55db-46cdcaf7077e.png)

表示させたいテーブルの列を左の[テーブル列]から選択します。
追加し終わったら、右上の[保存して公開]をクリック
これで完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/320b288d-f63e-eaa0-5f97-cb7cf7691c00.png)

[戻る]でアプリの編集画面に戻って、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c385f51d-6faf-9232-418f-7569aaf7bc0d.png)
[再生]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7b7c56e6-98ac-7bfb-a033-3eb47d3bd42d.png)


一覧画面（ビュー）で一行をクリックするとその行のデータが入ったフォームを表示できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/af2080d7-8d36-fb28-37ea-34397a92696c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8576694e-1337-a433-3b40-19458de041d9.png)


これで新しい行がテーブルに追加されると結果の分析を生成する、Power Automate クラウド フローを作成することができました。