チュートリアル: モデル ビルダーを使用してレストランの保健衛生違反の重大度を分類する

保健衛生検査中に検出されたレストラン違反のリスク レベルを分類するために、モデル ビルダーを使用して多クラス分類モデルを構築する方法について説明します。

このチュートリアルでは、次の作業を行う方法について説明します。

  • データを準備して理解する
  • Model Builder 構成ファイルを作成する
  • シナリオを選択する
  • データベースからデータを読み込む
  • モデルをトレーニングする
  • モデルを評価する
  • モデルを使用して予測を行う

前提条件

前提条件の一覧とインストール手順は、モデル ビルダーのインストール ガイドを参照してください。

モデル ビルダー多クラス分類の概要

このサンプルでは、モデル ビルダーでビルドされた機械学習モデルを使用して、保健衛生違反のリスクを分類する C# .NET Core コンソール アプリケーションを作成します。 このチュートリアルのソース コードは、dotnet/machinelearning-samples GitHub リポジトリにあります。

コンソール アプリケーションの作成

  1. "RestaurantViolations" という名前の C# .NET Core コンソール アプリケーション を作成します。

データを準備して理解する

機械学習モデルのトレーニングと評価に使用するデータ セットは、サンフランシスコ公衆衛生局の安全性スコア から取得したものです。 便宜上、データ セットは、モデルのトレーニングと予測の作成に関連する列のみを含むように圧縮されています。 データセットの詳細については、次の Web サイトを参照してください。

Restaurant Safety Scores データセットをダウンロードして解凍します。

データセットの各行には、保健局の検査中に観察された違反に関する情報と、それらの違反が公衆衛生と安全性に与える脅威のリスク評価が含まれています。

InspectionType ViolationDescription RiskCategory
定期 - スケジュールなし 食品接触面の洗浄または衛生状態が不適切 リスク - 中
新しい所有権 リスクの高い害虫の侵入 リスク - 高
定期 - スケジュールなし 清潔でない、適切に保管されていない、または消毒が十分でない布巾 リスク - 低
  • InspectionType: 検査の種類。 これは、新しい施設の最初の検査、定期検査、苦情検査など、さまざまな種類の検査とすることができます。
  • ViolationDescription: 検査中に検出された違反の説明。
  • RiskCategory: 違反が公衆衛生と安全性に及ぼすリスクの重大度。

label は予測する列です。 分類タスクを実行する場合の目標は、カテゴリ (テキストまたは数値) を割り当てることです。 この分類シナリオで、違反の重大度として割り当てられる値は、リスク - 低、リスク - 中、またはリスク - 高です。 したがって、RiskCategory はラベルです。 features は、label を予測するためのモデルを指定する入力です。 この場合は、RiskCategory を予測するための機能または入力として InspectionType および ViolationDescription を使用します。

Model Builder 構成ファイルを作成する

ソリューションに Model Builder を初めて追加するときに、mbconfig ファイルを作成するように求められます。 mbconfig ファイルでは、セッションを再度開けるように Model Builder で行ったすべての操作が記録されます。

  1. ソリューション エクスプローラーで、 [RestaurantViolations] プロジェクトを右クリックし、 [追加]>[機械学習モデル] の順に選択します。
  2. mbconfig プロジェクトに RestaurantViolationsPrediction という名前を付け、 [追加] ボタンをクリックします。

シナリオを選択する

Model Builder シナリオの画面

モデルをトレーニングするには、モデル ビルダーによって提供される機械学習シナリオの一覧から選択します。 この場合、シナリオは "データの分類" です。

  1. このサンプルでは、タスクは多クラス分類です。 モデル ビルダーの "シナリオ" の手順で、 [データの分類] シナリオを選択します。

データを読み込む

Model Builder は、SQL Server データベースから、あるいは csvtsv、または txt 形式のローカル ファイルからデータを受け取ります。

  1. Model Builder ツールのデータの手順で、データ ソースの種類選択から [SQL Server] を選択します。
  2. [データ ソースの選択] ボタンを選択します。
    1. [データ ソースの選択] ダイアログで、 [Microsoft SQL Server データベース ファイル] を選択します。
    2. [常にこれを選択する] チェックボックスをオフにして、 [続行] をクリックします。
    3. [接続プロパティ] ダイアログで、[参照] を選択し、ダウンロードした RestaurantScores.mdf ファイルを選択します。
    4. [OK] を選択します。
  3. [テーブル] ドロップダウンから [違反] を選択します。
  4. [予測する列 (ラベル)] ドロップダウンで [RiskCategory] を選択します。
  5. [Advanced data options](詳細データ オプション) は既定の選択のままにします。
  6. [次のステップ] ボタンをクリックして、Model Builder のトレーニング ステップに進みます。

モデルをトレーニングする

このチュートリアルで、問題の分類モデルをトレーニングするのに使用する機械学習のタスクは、多クラス分類です。 モデルのトレーニング プロセス中、モデル ビルダーは、データセットに対して最もパフォーマンスの優れたモデルを見つけるために、さまざまな多クラス分類アルゴリズムと設定を使用して個々のモデルをトレーニングします。

モデルのトレーニングに必要な時間は、データの量に比例します。 モデル ビルダーにより、 [Time to train (seconds)](トレーニング時間 (秒)) の既定値が、データ ソースのサイズに基づいて自動的に選択されます。

  1. Model Builder により、 [Time to train (seconds)](トレーニング時間 (秒)) の値は 60 秒に設定されています。 トレーニング時間が長いほど、モデル ビルダーは最良のモデルの検索の中で、より多くのアルゴリズムやパラメーターの組み合わせを調べることができます。
  2. [Start Training](トレーニングの開始) をクリックします。

トレーニング プロセスを通して、進捗データがトレーニングの手順の Training results セクションに表示されます。

  • 状態には、トレーニング プロセスの完了ステータスが表示されます。
  • [Best accuracy](最良の精度) には、これまでにモデル ビルダーで見つかった最良のパフォーマンスのモデルの精度が表示されます。 精度が高くなるほど、テスト データでモデルが正確に予測されたことになります。
  • [Best algorithm](最良のアルゴリズム) には、これまでにモデル ビルダーで見つかった最良のパフォーマンスのアルゴリズムの名前が表示されます。
  • [Last algorithm](最後のアルゴリズム) には、モデル ビルダーがモデルのトレーニングに最近使用したアルゴリズムの名前が表示されます。

トレーニングが完了すると、mbconfig ファイルには、トレーニング後の RestaurantViolationsPrediction.zip という生成されたモデルと共に 2 つの C# ファイルが含まれます。

  • RestaurantViolationsPrediction.consumption.cs: このファイルには、モデルを読み込み、それを使用して予測エンジンを作成し、予測値を返すパブリック メソッドがあります。
  • RestaurantViolationsPrediction.training.cs: このファイルは、使用したハイパーパラメーターを含む最適なモデルを構築するために Model Builder によって考案されたトレーニング パイプラインで構成されています。

[次のステップ] ボタンをクリックして、評価ステップに移動します。

モデルを評価する

トレーニングの手順の結果が、最良のパフォーマンスだった 1 つのモデルになります。 Model Builder ツールの評価手順の [Best Model](最良のモデル) セクションには、 [モデル] エントリの最良のパフォーマンスのモデルで使用されたアルゴリズムと、 [精度] のそのモデルのメトリックが含まれます。

さらに、Visual Studio の [出力] ウィンドウには、上位のモデルとそのメトリックを含む概要テーブルが表示されます。

このセクションを使用して、1 つの予測を実行してモデルをテストすることもできます。 値を入力するテキスト ボックスが表示され、 [予測] ボタンをクリックすると、最適なモデルからの予測値を取得できます。 既定では、データセット内のランダムな行が入力されます。

(省略可能) モデルを使用する

この手順では、モデルを使用するために使用できるプロジェクト テンプレートが用意されています。 この手順は省略可能であり、モデルの指定方法については、ニーズに合った方法を選択することができます。

  • コンソール アプリ
  • Web API

コンソール アプリ

コンソール アプリをソリューションに追加する場合、プロジェクトの名前を入力するように求めるプロンプトが表示されます。

  1. コンソール プロジェクトに RestaurantViolationsPrediction_Console という名前を付けます。

  2. [ソリューションに追加] をクリックして、現在のソリューションにプロジェクトを追加します。

  3. アプリケーションを実行します。

    プログラムによって生成される出力は次のスニペットのようになります。

    InspectionType: Routine - Unscheduled
    ViolationDescription: Moderate risk food holding temperature
    
    Predicted RiskCategory: Moderate Risk
    

Web API

Web API をソリューションに追加する場合、プロジェクトの名前を入力するように求めるプロンプトが表示されます。

  1. Web API プロジェクトに RestaurantViolationsPrediction_API という名前を付けます。

  2. [ソリューションに追加]* をクリックして、現在のソリューションにプロジェクトを追加します。

  3. アプリケーションを実行します。

  4. PowerShell を開き、次のコードを入力します。PORT には、アプリケーションがリッスンしているポートを入力します。

    $body = @{
        InspectionType="Reinspection/Followup"
        ViolationDescription="Inadequately cleaned or sanitized food contact surfaces"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. 成功した場合、出力は次のテキストのようになります。 出力には、RiskCategory[危険度 - 中] と予測されており、各入力ラベルのスコアが示されます ( [リスク - 低][リスク - 高][危険度 - 中] )。

    prediction    score
    ----------    -----
    Moderate Risk {0.055566575, 0.058012854, 0.88642055}
    

おめでとうございます。 これで、モデル ビルダーを使用して保健衛生違反のリスクを分類するための機械学習モデルを正常に作成できました。 このチュートリアルのソース コードは、dotnet/machinelearning-samples GitHub リポジトリにあります。

その他のリソース

このチュートリアルで説明しているトピックについて詳しくは、次のリソースを参照してください。