チュートリアル: モデル ビルダーで回帰を使用して価格を予測する
ML.NET モデル ビルダーを使用して、価格を予測する回帰モデルを構築する方法について説明します。 このチュートリアルで開発する .NET コンソール アプリでは、過去のニューヨーク市のタクシー運賃データに基づいてタクシー運賃を予測します。
モデル ビルダーの価格予測テンプレートは、数値による予測値を必要とするすべてのシナリオで使用できます。 シナリオの例には、住宅価格の予測、需要予測、売上予測などがあります。
このチュートリアルでは、次の作業を行う方法について説明します。
- データを準備して理解する
- Model Builder 構成ファイルを作成する
- シナリオを選択する
- データを読み込む
- モデルをトレーニングする
- モデルを評価する
- モデルを使用して予測を行う
前提条件
前提条件の一覧とインストール手順は、モデル ビルダーのインストール ガイドを参照してください。
コンソール アプリケーションの作成
- "TaxiFarePrediction" という名前の C# .NET Core コンソール アプリケーションを作成します。 [ソリューションとプロジェクトを同じディレクトリに配置する] がオフであることを確認します (VS 2019)。
データを準備して理解する
プロジェクトに Data という名前のディレクトリを作成して、データ セットのファイルを保存します。
機械学習モデルのトレーニングと評価に使用するデータ セットは、NYC TLC Taxi Trip データ セットから取得したものです。
このデータ セットをダウンロードするには、taxi-fare-train.csv のダウンロード リンクに移動します。
ページが読み込まれたら、ページ上の任意の場所を右クリックして、[名前を付けて保存] を選択します。
[名前を付けて保存] ダイアログを使って、前の手順で作成した Data フォルダーにファイルを保存します。
ソリューション エクスプローラーで、[taxi-fare-train.csv] ファイルを右クリックし、[プロパティ] を選択します。 [詳細設定] で、 [出力ディレクトリにコピー] の値を [新しい場合はコピーする] に変更します。
taxi-fare-train.csv
データ セットの各行に、タクシーの移動の詳細が含まれています。
taxi-fare-train.csv データ セットを開きます
提供されているデータ セットには、次の列が含まれます。
- vendor_id: タクシー会社の ID は特徴です。
- rate_code: タクシー旅行のレートの種類は特徴です。
- passenger_count: 旅行の乗客数は特徴です。
- trip_time_in_secs: 旅行の所要時間です。 旅行が終わる前に、旅行の運賃を予測したいと考えます。 その時点では、旅行の所要時間はわかりません。 したがって、旅行の所要時間は特徴ではなく、この列はモデルから除外します。
- trip_distance: 旅行距離は特徴です。
- payment_type: 支払い方法 (現金またはクレジット カード) は特徴です。
- fare_amount: 支払った合計タクシー運賃はラベルです。
label
は予測する列です。 回帰タスクを実行する場合の目標は、数値を予測することです。 この価格予測シナリオでは、タクシーの乗車のコストが予測されています。 したがって、fare_amount がラベルです。 識別された features
は、label
を予測するためにモデルを指定する入力です。 この場合、trip_time_in_secs を除く残りの列は、料金の合計を予測する特徴または入力として使用されます。
Model Builder 構成ファイルを作成する
ソリューションに Model Builder を初めて追加するときに、mbconfig
ファイルを作成するように求められます。 mbconfig
ファイルでは、セッションを再度開けるように Model Builder で行ったすべての操作が記録されます。
- ソリューション エクスプローラーで、 [TaxiFarePrediction] プロジェクトを右クリックし、 [追加]>[機械学習モデル...] を選択します。
mbconfig
プロジェクトに TaxiFarePrediction という名前を付け、 [追加] ボタンをクリックします。
シナリオを選択する
モデルをトレーニングするには、モデル ビルダーによって提供される機械学習シナリオの一覧から選択する必要があります。 この場合、シナリオは Value prediction
です。
- Model Builder ツールのシナリオの手順で、価格の予測のシナリオを選択します。
環境を選択する
Model Builder では、選択したシナリオに応じて異なる環境でトレーニングを実行することができます。
Local (CPU)
項目が選択されていることを確認して、 [次のステップ] ボタンをクリックします。
データを読み込む
モデル ビルダーは、SQL Server データベースか、csv または tsv 形式のローカル ファイルという 2 つのソースからデータを受け取ることができます。
- Model Builder ツールのデータの手順で、データ ソースの種類選択から [ファイル] を選択します。
- テキスト ボックスの横にある [参照] ボタンを選択し、エクスプローラーを使用して Data ディレクトリにある taxi-fare-test.csv を参照し、選択します
- [予測する列 (ラベル)] ドロップダウンで [fare_amount] を選択します。
- [Advanced data options](詳細データ オプション) リンクをクリックします。
- [列の設定] タブで、trip_time_in_secs 列の [目的] ドロップダウンを選択し、 [無視] を選択し、トレーニング中の機能として除外します。 [保存] ボタンをクリックしてダイアログを閉じます。
- [次のステップ] ボタンをクリックします。
モデルをトレーニングする
このチュートリアルで、価格予測モデルのトレーニングに使用する機械学習のタスクは、回帰です。 モデルのトレーニング プロセス中、モデル ビルダーは、さまざまな回帰アルゴリズムと設定を使用して、データセットで最も良いパフォーマンスのモデルを見つける個別のモデルをトレーニングします。
モデルのトレーニングに必要な時間は、データの量に比例します。 モデル ビルダーにより、 [Time to train (seconds)](トレーニング時間 (秒)) の既定値が、データ ソースのサイズに基づいて自動的に選択されます。
- より長い時間トレーニングする場合を除き、[Time to train (seconds)](トレーニング時間 (秒)) は既定値のままとします。
- [Start Training](トレーニング開始) を選択します。
トレーニング プロセスを通して、進捗データがトレーニングの手順の Training results
セクションに表示されます。
- 状態には、トレーニング プロセスの完了ステータスが表示されます。
- [Best accuracy](最良の精度) には、これまでにモデル ビルダーで見つかった最良のパフォーマンスのモデルの精度が表示されます。 精度が高くなるほど、テスト データでモデルが正確に予測されたことになります。
- [Best algorithm](最良のアルゴリズム) には、これまでにモデル ビルダーで見つかった最良のパフォーマンスのアルゴリズムの名前が表示されます。
- [Last algorithm](最後のアルゴリズム) には、モデル ビルダーがモデルのトレーニングに最近使用したアルゴリズムの名前が表示されます。
トレーニングが完了すると、mbconfig
ファイルには、トレーニング後の TaxiFarePrediction.zip
という生成されたモデルと共に 2 つの C# ファイルが含まれます。
- TaxiFare.consumption.cs: このファイルには、モデルを読み込み、それを使用して予測エンジンを作成し、予測値を返すパブリック メソッドがあります。
- TaxiFare.training.cs: このファイルは、使用したハイパーパラメーターを含む最適なモデルを構築するために Model Builder によって考案されたトレーニング パイプラインで構成されています。
[次のステップ] ボタンをクリックして、評価ステップに移動します。
モデルを評価する
トレーニングの手順の結果が、最良のパフォーマンスだった 1 つのモデルになります。 Model Builder ツールの評価手順の [Best Model](最良のモデル) セクションには、 [モデル] エントリの最良のパフォーマンスのモデルで使用されたアルゴリズムと、 [RSquared] のそのモデルのメトリックが含まれます。
さらに、Visual Studio の [出力] ウィンドウには、上位のモデルとそのメトリックを含む概要テーブルが表示されます。
このセクションを使用して、1 つの予測を実行してモデルをテストすることもできます。 値を入力するテキスト ボックスが表示され、 [予測] ボタンをクリックすると、最適なモデルからの予測値を取得できます。 既定では、データセット内のランダムな行が入力されます。
精度のメトリックに不満がある場合、モデルのトレーニング時間を増やすか、さらに多くのデータを使用すると、モデルの精度を簡単に高めることができます。 それ以外の場合は、 [次のステップ] をクリックし、使用ステップに移動します。
(省略可能) モデルを使用する
この手順では、モデルを使用するために使用できるプロジェクト テンプレートが用意されています。 この手順は省略可能であり、モデルの指定方法については、ニーズに合った方法を選択することができます。
- コンソール アプリ
- Web API
コンソール アプリ
コンソール アプリをソリューションに追加する場合、プロジェクトの名前を入力するように求めるプロンプトが表示されます。
コンソール プロジェクトに TaxiFare_Console という名前を付けます。
[ソリューションに追加] をクリックして、現在のソリューションにプロジェクトを追加します。
アプリケーションを実行します。
プログラムによって生成される出力は次のスニペットのようになります。
Predicted Fare: 15.020833
Web API
Web API をソリューションに追加する場合、プロジェクトの名前を入力するように求めるプロンプトが表示されます。
Web API プロジェクトに TaxiFare_API という名前を付けます。
[ソリューションに追加]* をクリックして、現在のソリューションにプロジェクトを追加します。
アプリケーションを実行します。
PowerShell を開き、次のコードを入力します。PORT には、アプリケーションがリッスンしているポートを入力します。
$body = @{ Vendor_id="CMT" Rate_code=1.0 Passenger_count=1.0 Trip_distance=3.8 Payment_type="CRD" } Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
成功した場合、出力は次のテキストのようになります。
score ----- 15.020833
次の手順
このチュートリアルでは、以下の内容を学習しました。
- データを準備して理解する
- シナリオを選択する
- データを読み込む
- モデルをトレーニングする
- モデルを評価する
- モデルを使用して予測を行う
その他のリソース
このチュートリアルで説明しているトピックについて詳しくは、次のリソースを参照してください。
.NET