チュートリアル:自動機械学習を使用してタクシー料金を予測するTutorial: Use automated machine learning to predict taxi fares

このチュートリアルでは、Azure Machine Learning の自動機械学習を使用して、ニューヨーク市のタクシー運賃を予測する回帰モデルを作成します。In this tutorial, you use automated machine learning in Azure Machine Learning to create a regression model to predict NYC taxi fare prices. このプロセスは、トレーニング データと構成設定を受け取り、さまざまなフィーチャーの正規化/標準化の方法、モデル、およびハイパーパラメーター設定の組み合わせを自動的に反復処理し、最適なモデルに到達します。This process accepts training data and configuration settings, and automatically iterates through combinations of different feature normalization/standardization methods, models, and hyperparameter settings to arrive at the best model.

フロー図

このチュートリアルでは、以下のタスクについて学習します。In this tutorial you learn the following tasks:

  • Azure Open Datasets を使用してデータのダウンロード、変換、クリーニングを行うDownload, transform, and clean data using Azure Open Datasets
  • 自動機械学習回帰モデルをトレーニングするTrain an automated machine learning regression model
  • モデルの精度を計算するCalculate model accuracy

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don’t have an Azure subscription, create a free account before you begin. 無料版または有料版の Azure Machine Learning を今すぐお試しください。Try the free or paid version of Azure Machine Learning today.

前提条件Prerequisites

  • まだ Azure Machine Learning ワークスペースとノートブック仮想マシンがない場合は、セットアップのチュートリアルを済ませておいてください。Complete the setup tutorial if you don't already have an Azure Machine Learning workspace or notebook virtual machine.
  • セットアップのチュートリアルを完了したら、同じノートブック サーバーを使用して、tutorials/regression-automated-ml.ipynb ノートブックを開きます。After you complete the setup tutorial, open the tutorials/regression-automated-ml.ipynb notebook using the same notebook server.

独自のローカル環境で実行したい場合は、このチュートリアルを GitHub で入手することもできます。This tutorial is also available on GitHub if you wish to run it in your own local environment. pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets を実行して必要なパッケージを取得してください。Run pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets to get the required packages.

データのダウンロードと準備Download and prepare data

必要なパッケージをインポートします。Import the necessary packages. オープン データセット パッケージには各データ ソースを表すクラス (たとえば NycTlcGreen) が含まれており、ダウンロードする前に簡単に日付パラメーターをフィルター処理できます。The Open Datasets package contains a class representing each data source (NycTlcGreen for example) to easily filter date parameters before downloading.

from azureml.opendatasets import NycTlcGreen
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta

まず、タクシーのデータを保持するデータフレームを作成します。Begin by creating a dataframe to hold the taxi data. Spark 以外の環境で作業している場合、オープン データセットでは、大きなデータセットによる MemoryErrorを回避するために、特定のクラスの 1 か月分のデータしか一度にダウンロードできません。When working in a non-Spark environment, Open Datasets only allows downloading one month of data at a time with certain classes to avoid MemoryError with large datasets.

タクシー データをダウンロードするには、一度に 1 か月分をフェッチすることを繰り返してから green_taxi_df に付加し、各月の 2,000 レコードをランダムにサンプリングして、データフレームが大きくならないようにします。To download taxi data, iteratively fetch one month at a time, and before appending it to green_taxi_df randomly sample 2,000 records from each month to avoid bloating the dataframe. 次に、データをプレビューします。Then preview the data.

green_taxi_df = pd.DataFrame([])
start = datetime.strptime("1/1/2015","%m/%d/%Y")
end = datetime.strptime("1/31/2015","%m/%d/%Y")

for sample_month in range(12):
    temp_df_green = NycTlcGreen(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \
        .to_pandas_dataframe()
    green_taxi_df = green_taxi_df.append(temp_df_green.sample(2000))

green_taxi_df.head(10)
vendorIDvendorID lpepPickupDatetimelpepPickupDatetime lpepDropoffDatetimelpepDropoffDatetime passengerCountpassengerCount tripDistancetripDistance puLocationIdpuLocationId doLocationIddoLocationId pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude ...... paymentTypepaymentType fareAmountfareAmount extraextra mtaTaxmtaTax improvementSurchargeimprovementSurcharge tipAmounttipAmount tollsAmounttollsAmount ehailFeeehailFee totalAmounttotalAmount tripTypetripType
131969131969 22 2015-01-11 05:34:442015-01-11 05:34:44 2015-01-11 05:45:032015-01-11 05:45:03 33 4.844.84 なしNone なしNone -73.88-73.88 40.8440.84 -73.94-73.94 ...... 22 15.0015.00 0.500.50 0.500.50 0.30.3 0.000.00 0.000.00 nannan 16.3016.30 1.001.00
11298171129817 22 2015-01-20 16:26:292015-01-20 16:26:29 2015-01-20 16:30:262015-01-20 16:30:26 11 0.690.69 なしNone なしNone -73.96-73.96 40.8140.81 -73.96-73.96 ...... 22 4.504.50 1.001.00 0.500.50 0.30.3 0.000.00 0.000.00 nannan 6.306.30 1.001.00
12786201278620 22 2015-01-01 05:58:102015-01-01 05:58:10 2015-01-01 06:00:552015-01-01 06:00:55 11 0.450.45 なしNone なしNone -73.92-73.92 40.7640.76 -73.91-73.91 ...... 22 4.004.00 0.000.00 0.500.50 0.30.3 0.000.00 0.000.00 nannan 4.804.80 1.001.00
348430348430 22 2015-01-17 02:20:502015-01-17 02:20:50 2015-01-17 02:41:382015-01-17 02:41:38 11 0.000.00 なしNone なしNone -73.81-73.81 40.7040.70 -73.82-73.82 ...... 22 12.5012.50 0.500.50 0.500.50 0.30.3 0.000.00 0.000.00 nannan 13.8013.80 1.001.00
12696271269627 11 2015-01-01 05:04:102015-01-01 05:04:10 2015-01-01 05:06:232015-01-01 05:06:23 11 0.500.50 なしNone なしNone -73.92-73.92 40.7640.76 -73.92-73.92 ...... 22 4.004.00 0.500.50 0.500.50 00 0.000.00 0.000.00 nannan 5.005.00 1.001.00
811755811755 11 2015-01-04 19:57:512015-01-04 19:57:51 2015-01-04 20:05:452015-01-04 20:05:45 22 1.101.10 なしNone なしNone -73.96-73.96 40.7240.72 -73.95-73.95 ...... 22 6.506.50 0.500.50 0.500.50 0.30.3 0.000.00 0.000.00 nannan 7.807.80 1.001.00
737281737281 11 2015-01-03 12:27:312015-01-03 12:27:31 2015-01-03 12:33:522015-01-03 12:33:52 11 0.900.90 なしNone なしNone -73.88-73.88 40.7640.76 -73.87-73.87 ...... 22 6.006.00 0.000.00 0.500.50 0.30.3 0.000.00 0.000.00 nannan 6.806.80 1.001.00
113951113951 11 2015-01-09 23:25:512015-01-09 23:25:51 2015-01-09 23:39:522015-01-09 23:39:52 11 3.303.30 なしNone なしNone -73.96-73.96 40.7240.72 -73.91-73.91 ...... 22 12.5012.50 0.500.50 0.500.50 0.30.3 0.000.00 0.000.00 nannan 13.8013.80 1.001.00
150436150436 22 2015-01-11 17:15:142015-01-11 17:15:14 2015-01-11 17:22:572015-01-11 17:22:57 11 1.191.19 なしNone なしNone -73.94-73.94 40.7140.71 -73.95-73.95 ...... 11 7.007.00 0.000.00 0.500.50 0.30.3 1.751.75 0.000.00 nannan 9.559.55 1.001.00
432136432136 22 2015-01-22 23:16:332015-01-22 23:16:33 2015-01-22 23:20:132015-01-22 23:20:13 11 0.650.65 なしNone なしNone -73.94-73.94 40.7140.71 -73.94-73.94 ...... 22 5.005.00 0.500.50 0.500.50 0.30.3 0.000.00 0.000.00 nannan 6.306.30 1.001.00

10 行 × 23 列10 rows × 23 columns

初期データを読み込んだところで、乗車日時のフィールドからさまざまな時間ベースのフィーチャーを作成する関数を定義します。Now that the initial data is loaded, define a function to create various time-based features from the pickup datetime field. これによって、月、日付、曜日、時刻に対応する新しいフィールドが作成され、時間に基づいた季節性をモデルで考慮できるようになります。This will create new fields for the month number, day of month, day of week, and hour of day, and will allow the model to factor in time-based seasonality. 日付フレームに対して apply() 関数を使用し、build_time_features() 関数をタクシー データの各行に繰り返し適用します。Use the apply() function on the dataframe to iteratively apply the build_time_features() function to each row in the taxi data.

def build_time_features(vector):
    pickup_datetime = vector[0]
    month_num = pickup_datetime.month
    day_of_month = pickup_datetime.day
    day_of_week = pickup_datetime.weekday()
    hour_of_day = pickup_datetime.hour

    return pd.Series((month_num, day_of_month, day_of_week, hour_of_day))

green_taxi_df[["month_num", "day_of_month","day_of_week", "hour_of_day"]] = green_taxi_df[["lpepPickupDatetime"]].apply(build_time_features, axis=1)
green_taxi_df.head(10)
vendorIDvendorID lpepPickupDatetimelpepPickupDatetime lpepDropoffDatetimelpepDropoffDatetime passengerCountpassengerCount tripDistancetripDistance puLocationIdpuLocationId doLocationIddoLocationId pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude ...... improvementSurchargeimprovementSurcharge tipAmounttipAmount tollsAmounttollsAmount ehailFeeehailFee totalAmounttotalAmount tripTypetripType month_nummonth_num day_of_monthday_of_month day_of_weekday_of_week hour_of_dayhour_of_day
131969131969 22 2015-01-11 05:34:442015-01-11 05:34:44 2015-01-11 05:45:032015-01-11 05:45:03 33 4.844.84 なしNone なしNone -73.88-73.88 40.8440.84 -73.94-73.94 ...... 0.30.3 0.000.00 0.000.00 nannan 16.3016.30 1.001.00 11 1111 66 55
11298171129817 22 2015-01-20 16:26:292015-01-20 16:26:29 2015-01-20 16:30:262015-01-20 16:30:26 11 0.690.69 なしNone なしNone -73.96-73.96 40.8140.81 -73.96-73.96 ...... 0.30.3 0.000.00 0.000.00 nannan 6.306.30 1.001.00 11 2020 11 1616
12786201278620 22 2015-01-01 05:58:102015-01-01 05:58:10 2015-01-01 06:00:552015-01-01 06:00:55 11 0.450.45 なしNone なしNone -73.92-73.92 40.7640.76 -73.91-73.91 ...... 0.30.3 0.000.00 0.000.00 nannan 4.804.80 1.001.00 11 11 33 55
348430348430 22 2015-01-17 02:20:502015-01-17 02:20:50 2015-01-17 02:41:382015-01-17 02:41:38 11 0.000.00 なしNone なしNone -73.81-73.81 40.7040.70 -73.82-73.82 ...... 0.30.3 0.000.00 0.000.00 nannan 13.8013.80 1.001.00 11 1717 55 22
12696271269627 11 2015-01-01 05:04:102015-01-01 05:04:10 2015-01-01 05:06:232015-01-01 05:06:23 11 0.500.50 なしNone なしNone -73.92-73.92 40.7640.76 -73.92-73.92 ...... 00 0.000.00 0.000.00 nannan 5.005.00 1.001.00 11 11 33 55
811755811755 11 2015-01-04 19:57:512015-01-04 19:57:51 2015-01-04 20:05:452015-01-04 20:05:45 22 1.101.10 なしNone なしNone -73.96-73.96 40.7240.72 -73.95-73.95 ...... 0.30.3 0.000.00 0.000.00 nannan 7.807.80 1.001.00 11 44 66 1919
737281737281 11 2015-01-03 12:27:312015-01-03 12:27:31 2015-01-03 12:33:522015-01-03 12:33:52 11 0.900.90 なしNone なしNone -73.88-73.88 40.7640.76 -73.87-73.87 ...... 0.30.3 0.000.00 0.000.00 nannan 6.806.80 1.001.00 11 33 55 1212
113951113951 11 2015-01-09 23:25:512015-01-09 23:25:51 2015-01-09 23:39:522015-01-09 23:39:52 11 3.303.30 なしNone なしNone -73.96-73.96 40.7240.72 -73.91-73.91 ...... 0.30.3 0.000.00 0.000.00 nannan 13.8013.80 1.001.00 11 99 44 2323
150436150436 22 2015-01-11 17:15:142015-01-11 17:15:14 2015-01-11 17:22:572015-01-11 17:22:57 11 1.191.19 なしNone なしNone -73.94-73.94 40.7140.71 -73.95-73.95 ...... 0.30.3 1.751.75 0.000.00 nannan 9.559.55 1.001.00 11 1111 66 1717
432136432136 22 2015-01-22 23:16:332015-01-22 23:16:33 2015-01-22 23:20:132015-01-22 23:20:13 11 0.650.65 なしNone なしNone -73.94-73.94 40.7140.71 -73.94-73.94 ...... 0.30.3 0.000.00 0.000.00 nannan 6.306.30 1.001.00 11 2222 33 2323

10 行 × 27 列10 rows × 27 columns

トレーニングまたはその他の特徴の構築で必要としない列を削除します。Remove some of the columns that you won't need for training or additional feature building.

columns_to_remove = ["lpepPickupDatetime", "lpepDropoffDatetime", "puLocationId", "doLocationId", "extra", "mtaTax",
                     "improvementSurcharge", "tollsAmount", "ehailFee", "tripType", "rateCodeID",
                     "storeAndFwdFlag", "paymentType", "fareAmount", "tipAmount"
                    ]
for col in columns_to_remove:
    green_taxi_df.pop(col)

green_taxi_df.head(5)

データをクレンジングするCleanse data

新しいデータフレームに対して describe() 関数を実行して、各フィールドの概要の統計を確認します。Run the describe() function on the new dataframe to see summary statistics for each field.

green_taxi_df.describe()
vendorIDvendorID passengerCountpassengerCount tripDistancetripDistance pickupLongitudepickupLongitude pickupLatitudepickupLatitude dropoffLongitudedropoffLongitude dropoffLatitudedropoffLatitude totalAmounttotalAmount month_nummonth_num day_of_monthday_of_month day_of_weekday_of_week hour_of_dayhour_of_day
countcount 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00 48000.0048000.00
meanmean 1.781.78 1.371.37 2.872.87 -73.83-73.83 40.6940.69 -73.84-73.84 40.7040.70 14.7514.75 6.506.50 15.1315.13 3.273.27 13.5213.52
stdstd 0.410.41 1.041.04 2.932.93 2.762.76 1.521.52 2.612.61 1.441.44 12.0812.08 3.453.45 8.458.45 1.951.95 6.836.83
minmin 1.001.00 0.000.00 0.000.00 -74.66-74.66 0.000.00 -74.66-74.66 0.000.00 -300.00-300.00 1.001.00 1.001.00 0.000.00 0.000.00
25%25% 2.002.00 1.001.00 1.061.06 -73.96-73.96 40.7040.70 -73.97-73.97 40.7040.70 7.807.80 3.753.75 8.008.00 2.002.00 9.009.00
50%50% 2.002.00 1.001.00 1.901.90 -73.94-73.94 40.7540.75 -73.94-73.94 40.7540.75 11.3011.30 6.506.50 15.0015.00 3.003.00 15.0015.00
75%75% 2.002.00 1.001.00 3.603.60 -73.92-73.92 40.8040.80 -73.91-73.91 40.7940.79 17.8017.80 9.259.25 22.0022.00 5.005.00 19.0019.00
maxmax 2.002.00 9.009.00 97.5797.57 0.000.00 41.9341.93 0.000.00 41.9441.94 450.00450.00 12.0012.00 30.0030.00 6.006.00 23.0023.00

概要の統計では、外れ値すなわちモデルの精度を低下させる値を含むフィールドがいくつか見つかります。From the summary statistics, you see that there are several fields that have outliers or values that will reduce model accuracy. まず、マンハッタン エリアの境界内に収まるように緯度と経度のフィールドをフィルター処理します。First filter the lat/long fields to be within the bounds of the Manhattan area. これにより、その距離範囲を超えるタクシー乗車や、他の特徴との関係の点で外れ値となっているタクシー乗車が除外されます。This will filter out longer taxi trips or trips that are outliers in respect to their relationship with other features.

加えて、tripDistance フィールドが 0 より大きく 31 マイル (2 つの緯度経度ペア間の半正矢距離) 未満となるようにフィルター処理します。Additionally filter the tripDistance field to be greater than zero but less than 31 miles (the haversine distance between the two lat/long pairs). これにより、移動距離が長く、矛盾した運賃となっている外れ値の乗車が除外されます。This eliminates long outlier trips that have inconsistent trip cost.

最後に、タクシー料金の totalAmount フィールドに負の値が含まれていますが、これは、ここで扱うモデルのコンテキストでは意味を成しません。また、passengerCount フィールドにも、最小値が 0 である無効なデータがあります。Lastly, the totalAmount field has negative values for the taxi fares, which don't make sense in the context of our model, and the passengerCount field has bad data with the minimum values being zero.

これらの異常値をフィルターで除外してから、最終的にトレーニングのために不必要ないくつかの列を削除します。Filter out these anomalies using query functions, and then remove the last few columns unnecessary for training.

final_df = green_taxi_df.query("pickupLatitude>=40.53 and pickupLatitude<=40.88")
final_df = final_df.query("pickupLongitude>=-74.09 and pickupLongitude<=-73.72")
final_df = final_df.query("tripDistance>=0.25 and tripDistance<31")
final_df = final_df.query("passengerCount>0 and totalAmount>0")

columns_to_remove_for_training = ["pickupLongitude", "pickupLatitude", "dropoffLongitude", "dropoffLatitude"]
for col in columns_to_remove_for_training:
    final_df.pop(col)

再びデータに対して describe() を呼び出して、クレンジングが予期したとおりに動作したことを確認します。Call describe() again on the data to ensure cleansing worked as expected. これで、機械学習モデルのトレーニングに使用するためのタクシー、休日、気象のデータセットの準備とクレンジングが終了しました。You now have a prepared and cleansed set of taxi, holiday, and weather data to use for machine learning model training.

final_df.describe()

ワークスペースの構成Configure workspace

既存のワークスペースからワークスペース オブジェクトを作成します。Create a workspace object from the existing workspace. ワークスペースは、お客様の Azure サブスクリプションとリソースの情報を受け取るクラスです。A Workspace is a class that accepts your Azure subscription and resource information. また、これにより、お客様のモデル実行を監視して追跡するためのクラウド リソースが作成されます。It also creates a cloud resource to monitor and track your model runs. Workspace.from_config() により、config.json ファイルが読み取られ、認証の詳細情報が ws という名前のオブジェクトに読み込まれます。Workspace.from_config() reads the file config.json and loads the authentication details into an object named ws. ws は、このチュートリアルの残りのコード全体で使用されています。ws is used throughout the rest of the code in this tutorial.

from azureml.core.workspace import Workspace
ws = Workspace.from_config()

データをトレーニング セットとテスト セットに分割するSplit the data into train and test sets

scikit-learn ライブラリの train_test_split 関数を使用して、トレーニング セットとテスト セットにデータを分割します。Split the data into training and test sets by using the train_test_split function in the scikit-learn library. この関数は、モデル トレーニング用の x (特徴) データ セットとテスト用の y (予測する値) データ セットに、データを分割します。This function segregates the data into the x (features) data set for model training and the y (values to predict) data set for testing.

test_size パラメーターでは、テストに割り当てるデータの割合を決定します。The test_size parameter determines the percentage of data to allocate to testing. random_state パラメーターでは、お客様のトレーニングとテストの分割が決定論的になるように、乱数ジェネレーターにシードを設定します。The random_state parameter sets a seed to the random generator, so that your train-test splits are deterministic.

from sklearn.model_selection import train_test_split

y_df = final_df.pop("totalAmount")
x_df = final_df

x_train, x_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=223)

この手順の目的は、正しい精度を測定するために、モデルのトレーニングに使用されたことのないデータ ポイントで完成モデルをテストすることです。The purpose of this step is to have data points to test the finished model that haven't been used to train the model, in order to measure true accuracy.

つまり、適切にトレーニングされたモデルは、まだ見たことのないデータから正確な予測ができるはずです。In other words, a well-trained model should be able to accurately make predictions from data it hasn't already seen. 機械学習モデルの自動トレーニングに使用するデータの準備が整いました。You now have data prepared for auto-training a machine learning model.

自動的にモデルをトレーニングするAutomatically train a model

モデルを自動的にトレーニングするには、次の手順を実行します。To automatically train a model, take the following steps:

  1. 実験の実行用の設定を定義する。Define settings for the experiment run. トレーニング データを構成にアタッチし、トレーニング プロセスを制御する設定を変更します。Attach your training data to the configuration, and modify settings that control the training process.
  2. モデル調整用の実験を送信する。Submit the experiment for model tuning. 実験を送信した後、プロセスは定義された制約に従って、他の機械学習アルゴリズムとハイパー パラメーター設定を反復処理します。After submitting the experiment, the process iterates through different machine learning algorithms and hyperparameter settings, adhering to your defined constraints. 精度メトリックを最適化することによって、最適なモデルが選択されます。It chooses the best-fit model by optimizing an accuracy metric.

トレーニングの設定を定義するDefine training settings

トレーニング用の実験パラメーターとモデルの設定を定義します。Define the experiment parameter and model settings for training. 設定の完全な一覧を表示します。View the full list of settings. これらの既定の設定で実験を送信するには約 5 分から 10 分かかりますが、実行時間を短くしたい場合は iterations パラメーターを減らしてください。Submitting the experiment with these default settings will take approximately 5-10 min, but if you want a shorter run time, reduce the iterations parameter.

プロパティProperty このチュートリアルの値Value in this tutorial 説明Description
iteration_timeout_minutesiteration_timeout_minutes 22 各イテレーションの分単位での時間制限。Time limit in minutes for each iteration. 合計実行時間を短縮するには、この値を減らします。Reduce this value to decrease total runtime.
iterationsiterations 2020 イテレーションの回数。Number of iterations. 各イテレーションでは、新しい機械学習モデルがデータでトレーニングされます。In each iteration, a new machine learning model is trained with your data. これは、合計実行時間に影響を与える主要な値です。This is the primary value that affects total run time.
primary_metricprimary_metric spearman_correlationspearman_correlation 最適化したいメトリック。Metric that you want to optimize. このメトリックに基づいて、最適なモデルが選択されます。The best-fit model will be chosen based on this metric.
preprocesspreprocess TrueTrue True を使用すると、実験の入力データを前処理できます (欠損データの処理、テキストから数値への変換など)。By using True, the experiment can preprocess the input data (handling missing data, converting text to numeric, etc.)
verbosityverbosity logging.INFOlogging.INFO ログ記録のレベルを制御します。Controls the level of logging.
n_cross_validationsn_cross_validations 55 検証データが指定されていない場合に実行される、クロス検証の分割の数。Number of cross-validation splits to perform when validation data is not specified.
import logging

automl_settings = {
    "iteration_timeout_minutes": 2,
    "iterations": 20,
    "primary_metric": 'spearman_correlation',
    "preprocess": True,
    "verbosity": logging.INFO,
    "n_cross_validations": 5
}

定義済みのトレーニング設定を AutoMLConfig オブジェクトへの **kwargs パラメーターとして使用します。Use your defined training settings as a **kwargs parameter to an AutoMLConfig object. さらに、トレーニング データとモデルの種類を指定します。モデルの種類は、ここでは regression です。Additionally, specify your training data and the type of model, which is regression in this case.

from azureml.train.automl import AutoMLConfig

automl_config = AutoMLConfig(task='regression',
                             debug_log='automated_ml_errors.log',
                             X=x_train.values,
                             y=y_train.values.flatten(),
                             **automl_settings)

注意

自動化された機械学習の前処理手順 (機能の正規化、欠損データの処理、テキストから数値への変換など) は、基になるモデルの一部になります。Automated machine learning pre-processing steps (feature normalization, handling missing data, converting text to numeric, etc.) become part of the underlying model. モデルを予測に使用する場合、トレーニング中に適用されたのと同じ前処理手順が入力データに自動的に適用されます。When using the model for predictions, the same pre-processing steps applied during training are applied to your input data automatically.

自動回帰モデルをトレーニングするTrain the automatic regression model

自分のワークスペース内に実験オブジェクトを作成します。Create an experiment object in your workspace. 実験は、個々の実行のコンテナーとして機能します。An experiment acts as a container for your individual runs. 定義済みの automl_config オブジェクトを実験に渡し、出力を True に設定して実行中の進行状況を表示します。Pass the defined automl_config object to the experiment, and set the output to True to view progress during the run.

実験の開始後、その実行に伴い、表示される出力が随時更新されます。After starting the experiment, the output shown updates live as the experiment runs. 各イテレーションでは、モデルの種類、実行継続時間、およびトレーニングの精度が表示されます。For each iteration, you see the model type, the run duration, and the training accuracy. BEST フィールドでは、メトリックの種類に基づいて、最高の実行トレーニング スコアが追跡されます。The field BEST tracks the best running training score based on your metric type.

from azureml.core.experiment import Experiment
experiment = Experiment(ws, "taxi-experiment")
local_run = experiment.submit(automl_config, show_output=True)
Running on local machine
Parent Run ID: AutoML_1766cdf7-56cf-4b28-a340-c4aeee15b12b
Current status: DatasetFeaturization. Beginning to featurize the dataset.
Current status: DatasetEvaluation. Gathering dataset statistics.
Current status: FeaturesGeneration. Generating features for the dataset.
Current status: DatasetFeaturizationCompleted. Completed featurizing the dataset.
Current status: DatasetCrossValidationSplit. Generating individually featurized CV splits.
Current status: ModelSelection. Beginning model selection.

****************************************************************************************************
ITERATION: The iteration being evaluated.
PIPELINE: A summary description of the pipeline being evaluated.
DURATION: Time taken for the current iteration.
METRIC: The result of computing score on the fitted pipeline.
BEST: The best observed score thus far.
****************************************************************************************************

 ITERATION   PIPELINE                                       DURATION      METRIC      BEST
         0   StandardScalerWrapper RandomForest             0:00:16       0.8746    0.8746
         1   MinMaxScaler RandomForest                      0:00:15       0.9468    0.9468
         2   StandardScalerWrapper ExtremeRandomTrees       0:00:09       0.9303    0.9468
         3   StandardScalerWrapper LightGBM                 0:00:10       0.9424    0.9468
         4   RobustScaler DecisionTree                      0:00:09       0.9449    0.9468
         5   StandardScalerWrapper LassoLars                0:00:09       0.9440    0.9468
         6   StandardScalerWrapper LightGBM                 0:00:10       0.9282    0.9468
         7   StandardScalerWrapper RandomForest             0:00:12       0.8946    0.9468
         8   StandardScalerWrapper LassoLars                0:00:16       0.9439    0.9468
         9   MinMaxScaler ExtremeRandomTrees                0:00:35       0.9199    0.9468
        10   RobustScaler ExtremeRandomTrees                0:00:19       0.9411    0.9468
        11   StandardScalerWrapper ExtremeRandomTrees       0:00:13       0.9077    0.9468
        12   StandardScalerWrapper LassoLars                0:00:15       0.9433    0.9468
        13   MinMaxScaler ExtremeRandomTrees                0:00:14       0.9186    0.9468
        14   RobustScaler RandomForest                      0:00:10       0.8810    0.9468
        15   StandardScalerWrapper LassoLars                0:00:55       0.9433    0.9468
        16   StandardScalerWrapper ExtremeRandomTrees       0:00:13       0.9026    0.9468
        17   StandardScalerWrapper RandomForest             0:00:13       0.9140    0.9468
        18   VotingEnsemble                                 0:00:23       0.9471    0.9471
        19   StackEnsemble                                  0:00:27       0.9463    0.9471

結果を検索するExplore the results

Jupyter ウィジェットを使用して、自動トレーニングの結果を探索します。Explore the results of automatic training with a Jupyter widget. このウィジェットを使用すると、トレーニング精度のメトリックとメタデータと共に、各実行のすべてのイテレーションのグラフと表を確認できます。The widget allows you to see a graph and table of all individual run iterations, along with training accuracy metrics and metadata. さらに、ドロップダウン セレクターを使用して、主なメトリック以外にも、さまざまな精度メトリックを条件としてフィルター処理することができます。Additionally, you can filter on different accuracy metrics than your primary metric with the dropdown selector.

from azureml.widgets import RunDetails
RunDetails(local_run).show()

Jupyter ウィジェット実行の詳細 Jupyter ウィジェットのプロットJupyter widget run details Jupyter widget plot

最高のモデルを取得するRetrieve the best model

イテレーションから最適なモデルを選択します。Select the best model from your iterations. get_output 関数は、最適な実行と、最後の fit の呼び出しで適合したモデルを返します。The get_output function returns the best run and the fitted model for the last fit invocation. get_output 上のオーバーロードを使用して、ログ記録された任意のメトリックや特定のイテレーションに対する最適な実行と適合モデルを取得できます。By using the overloads on get_output, you can retrieve the best run and fitted model for any logged metric or a particular iteration.

best_run, fitted_model = local_run.get_output()
print(best_run)
print(fitted_model)

最高のモデルの正確性をテストするTest the best model accuracy

最高のモデルを使用して、テスト データ セット上で予測を実行し、タクシー料金を予測します。Use the best model to run predictions on the test data set to predict taxi fares. 関数 predict は最高のモデルを使用して、x_test データ セットから y (交通費) の値を予測します。The function predict uses the best model and predicts the values of y, trip cost, from the x_test data set. y_predict から最初の 10 個の予測コスト値をプリントします。Print the first 10 predicted cost values from y_predict.

y_predict = fitted_model.predict(x_test.values)
print(y_predict[:10])

結果の root mean squared error を計算します。Calculate the root mean squared error of the results. 予測値と比較するために、y_test データフレームをリストに変換します。Convert the y_test dataframe to a list to compare to the predicted values. 関数 mean_squared_error によって 2 つの配列の値が受け取られ、それらの間の平均二乗誤差が計算されます。The function mean_squared_error takes two arrays of values and calculates the average squared error between them. 結果の平方根を取ると、y 変数 (コスト) と同じ単位で誤差が得られます。Taking the square root of the result gives an error in the same units as the y variable, cost. これは、タクシー料金の予測が実際の料金からどの程度離れているかを大まかに示します。It indicates roughly how far the taxi fare predictions are from the actual fares.

from sklearn.metrics import mean_squared_error
from math import sqrt

y_actual = y_test.values.flatten().tolist()
rmse = sqrt(mean_squared_error(y_actual, y_predict))
rmse

次のコードを実行し、完全な y_actualy_predict データ セットを使用して平均絶対誤差率 (MAPE) を計算します。Run the following code to calculate mean absolute percent error (MAPE) by using the full y_actual and y_predict data sets. このメトリックでは、予測される各値と実際の値の間の絶対誤差が計算され、すべての差分が合計されます。This metric calculates an absolute difference between each predicted and actual value and sums all the differences. そしてその合計が、実際の値の合計に対する割合として表されます。Then it expresses that sum as a percent of the total of the actual values.

sum_actuals = sum_errors = 0

for actual_val, predict_val in zip(y_actual, y_predict):
    abs_error = actual_val - predict_val
    if abs_error < 0:
        abs_error = abs_error * -1

    sum_errors = sum_errors + abs_error
    sum_actuals = sum_actuals + actual_val

mean_abs_percent_error = sum_errors / sum_actuals
print("Model MAPE:")
print(mean_abs_percent_error)
print()
print("Model Accuracy:")
print(1 - mean_abs_percent_error)
Model MAPE:
0.14353867606052823

Model Accuracy:
0.8564613239394718

最終的な予測精度メトリックから、モデルでのデータ セットの特徴によるタクシー料金の予測はかなり良好で、誤差は ± 4 ドル (約 15%) 以内であることがわかります。From the two prediction accuracy metrics, you see that the model is fairly good at predicting taxi fares from the data set's features, typically within +- $4.00, and approximately 15% error.

従来の機械学習モデルの開発プロセスでは、リソースが大量に消費され、数十個のモデルを実行して結果を比較するために、その領域に関する膨大な知識と時間の投資が必要とされます。The traditional machine learning model development process is highly resource-intensive, and requires significant domain knowledge and time investment to run and compare the results of dozens of models. 自動化された機械学習の使用は、シナリオに合わせてさまざまなモデルを迅速にテストするための優れた方法です。Using automated machine learning is a great way to rapidly test many different models for your scenario.

リソースのクリーンアップClean up resources

Azure Machine Learning の他のチュートリアルを実行する予定の場合、このセクションを実行しないでください。Do not complete this section if you plan on running other Azure Machine Learning tutorials.

ノートブック VM を停止するStop the notebook VM

クラウド ノートブック サーバーを使用していた場合は、使用していない VM を停止してコストを削減します。If you used a cloud notebook server, stop the VM when you are not using it to reduce cost.

  1. ワークスペースで、 [ノートブック VM] を選択します。In your workspace, select Notebook VMs.
  2. 一覧から VM を選択します。From the list, select the VM.
  3. [停止] を選択します。Select Stop.
  4. サーバーを再び使用する準備が整ったら、 [開始] を選択します。When you're ready to use the server again, select Start.

すべてを削除するDelete everything

作成したリソースを今後使用する予定がない場合は、課金が発生しないように削除します。If you don't plan to use the resources you created, delete them, so you don't incur any charges.

  1. Azure Portal で、左端にある [リソース グループ] を選択します。In the Azure portal, select Resource groups on the far left.
  2. 作成したリソース グループを一覧から選択します。From the list, select the resource group you created.
  3. [リソース グループの削除] を選択します。Select Delete resource group.
  4. リソース グループ名を入力します。Enter the resource group name. 次に、 [削除] を選択します。Then select Delete.

リソース グループは保持しつつ、いずれかのワークスペースを削除することもできます。You can also keep the resource group but delete a single workspace. ワークスペースのプロパティを表示し、 [削除] を選択します。Display the workspace properties and select Delete.

次の手順Next steps

自動化された機械学習に関するこのチュートリアルでは、以下のタスクを学習しました。In this automated machine learning tutorial, you did the following tasks:

  • 実験用のワークスペースと準備されたデータを構成しました。Configured a workspace and prepared data for an experiment.
  • カスタム パラメーターを使って、自動化された回帰モデルをローカルで使用してトレーニングしました。Trained by using an automated regression model locally with custom parameters.
  • トレーニング結果を調べて確認しました。Explored and reviewed training results.

Azure Machine Learning を使ってモデルをデプロイしてください。Deploy your model with Azure Machine Learning.