チュートリアル:自動化された機械学習を使用して回帰モデルを構築するTutorial: Use automated machine learning to build your regression model

このチュートリアルは、2 部構成のチュートリアル シリーズのパート 2 ですThis tutorial is part two of a two-part tutorial series. 前回のチュートリアルでは、回帰モデル用の NYC タクシー データを準備しました。In the previous tutorial, you prepared the NYC taxi data for regression modeling.

Azure Machine Learning service を使用してお客様のモデルの構築を開始する準備は整っています。Now you're ready to start building your model with Azure Machine Learning service. チュートリアルのこのパートでは、準備したデータを使用して、タクシー運賃の価格を予測する回帰モデルを自動的に生成します。In this part of the tutorial, you use the prepared data and automatically generate a regression model to predict taxi fare prices. 本サービスの自動化された機械学習機能を使用して、お客様の機械学習の目的と制約を定義します。By using the automated machine learning capabilities of the service, you define your machine learning goals and constraints. 自動化された機械学習プロセスを開始します。You launch the automated machine learning process. 次に、アルゴリズムの選択とハイパーパラメーターの調整がお客様のために行われるようにします。Then allow the algorithm selection and hyperparameter tuning to happen for you. 自動化された機械学習の手法では、アルゴリズムとハイパーパラメーターの組み合わせを多数イテレーションして、お客様の条件に基づき最高のモデルを見つけます。The automated machine learning technique iterates over many combinations of algorithms and hyperparameters until it finds the best model based on your criterion.

フロー図

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

  • Python 環境を設定して SDK パッケージをインポートする。Set up a Python environment and import the SDK packages.
  • Azure Machine Learning service ワークスペースを構成する。Configure an Azure Machine Learning service workspace.
  • 回帰モデルを自動トレーニングする。Autotrain a regression model.
  • カスタム パラメーターを使用してモデルをローカルで実行する。Run the model locally with custom parameters.
  • 結果を調べる。Explore the results.

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

注意

この記事のコードは、Azure Machine Learning SDK バージョン 1.0.0 を使用してテストされました。Code in this article was tested with Azure Machine Learning SDK version 1.0.0.

前提条件Prerequisites

開発環境を設定する」にスキップしてノートブックの手順を読むか、以下の手順に従ってノートブックを入手し、Azure Notebooks または独自のノートブック サーバーで実行します。Skip to Set up your development environment to read through the notebook steps, or use the instructions below to get the notebook and run it on Azure Notebooks or your own notebook server. ノートブックを実行するには、以下のものが必要です。To run the notebook you will need:

  • データ準備のチュートリアルを実行するRun the data preparation tutorial.
  • 以下のものがインストールされている Python 3.6 ノートブック サーバー。A Python 3.6 notebook server with the following installed:
    • Azure Machine Learning SDK for Python と automl および notebooks の追加機能The Azure Machine Learning SDK for Python with automl and notebooks extras
    • matplotlib
  • チュートリアル ノートブックThe tutorial notebook
  • 機械学習ワークスペースA machine learning workspace
  • ノートブックと同じディレクトリにある、ワークスペースの構成ファイルThe configuration file for the workspace in the same directory as the notebook

以下のいずれかのセクションから、これらすべての前提条件を入手します。Get all these prerequisites from either of the sections below.

Azure Notebooks を使用する: クラウド上の無料の Jupyter NotebookUse Azure Notebooks: Free Jupyter notebooks in the cloud

Azure Notebooks の利用を開始するのは簡単です。It's easy to get started with Azure Notebooks! Azure Notebooks には Azure Machine Learning SDK for Python が既にインストールされて構成されています。The Azure Machine Learning SDK for Python is already installed and configured for you on Azure Notebooks. インストールと今後の更新プログラムは、Azure サービスを介して自動的に管理されます。The installation and future updates are automatically managed via Azure services.

以下の手順を完了したら、Getting Started プロジェクトの tutorials/regression-part2-automated-ml.ipynb ノートブックを実行します。After you complete the steps below, run the tutorials/regression-part2-automated-ml.ipynb notebook in your Getting Started project.

  1. Azure Machine Learning ポータルのクイック スタートを完了して、ワークスペースを作成し、Azure Notebooks を起動します。Complete the Azure Machine Learning portal quickstart to create a workspace and launch Azure Notebooks. ノートブックを使用する」セクションは、スキップしてかまいません。Feel free to skip the Use the notebook section if you wish.
  2. クイック スタートを既に完了している場合は、Azure Notebooks にサインインし直し、Getting Started プロジェクトを開きます。If you've already completed the quickstart, sign back into Azure Notebooks and open the Getting Started project.
  3. プロジェクトの状態が停止である場合は、プロジェクトを開始してください。Remember to start the project if its status is stopped. プロジェクトを開始するStart the project

独自の Jupyter Notebook サーバーを使用するUse your own Jupyter notebook server

次の手順を使用して、コンピューターにローカルの Jupyter Notebook サーバーを作成します。Use these steps to create a local Jupyter Notebook server on your computer. 手順を完了したら、tutorials/regression-part2-automated-ml.ipynb ノートブックを実行します。After you complete the steps, run the tutorials/regression-part2-automated-ml.ipynb notebook.

  1. Azure Machine Learning Python のクイック スタートを完了して、Miniconda 環境とワークスペースを作成します。Complete the Azure Machine Learning Python quickstart to create a Miniconda environment and create a workspace.
  2. pip install azureml-sdk[automl,notebooks] を使用して、automlnotebooks の追加機能をご自分の環境にインストールします。Install the automl and notebooks extras in your environment using pip install azureml-sdk[automl,notebooks].
  3. pip install maplotlib を使用して maplotlib をインストールします。Install maplotlib using pip install maplotlib.
  4. GitHub リポジトリを複製します。Clone the GitHub repository.

    git clone https://github.com/Azure/MachineLearningNotebooks.git
    
  5. 複製したディレクトリから、Notebook サーバーを起動します。Start the notebook server from your cloned directory.

    jupyter notebook
    

Set up your development environment

All the setup for your development work can be accomplished in a Python notebook. Setup includes the following actions:

  • Install the SDK
  • Import Python packages
  • Configure your workspace

Install and import packages

If you are following the tutorial in your own Python environment, use the following to install necessary packages.

pip install azureml-sdk[automl,notebooks] matplotlib

このチュートリアルで必要な Python パッケージをインポートします。Import the Python packages you need in this tutorial:

import azureml.core
import pandas as pd
from azureml.core.workspace import Workspace
import logging
import os

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

既存のワークスペースからワークスペース オブジェクトを作成します。Create a workspace object from the existing workspace. 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() は、aml_config/config.json ファイルを読み取り、詳細情報を ws という名前のオブジェクトに読み込みます。Workspace.from_config() reads the file aml_config/config.json and loads the details into an object named ws. ws は、このチュートリアルの残りのコード全体で使用されています。ws is used throughout the rest of the code in this tutorial.

ワークスペース オブジェクトを用意したら、実験の名前を指定します。After you have a workspace object, specify a name for the experiment. ワークスペースが含まれるローカル ディレクトリを作成して登録します。Create and register a local directory with the workspace. すべての実行履歴が、指定された実験と Azure portal に記録されます。The history of all runs is recorded under the specified experiment and in the Azure portal.

ws = Workspace.from_config()
# choose a name for the run history container in the workspace
experiment_name = 'automated-ml-regression'
# project folder
project_folder = './automated-ml-regression'

output = {}
output['SDK version'] = azureml.core.VERSION
output['Subscription ID'] = ws.subscription_id
output['Workspace'] = ws.name
output['Resource Group'] = ws.resource_group
output['Location'] = ws.location
output['Project Directory'] = project_folder
pd.set_option('display.max_colwidth', -1)
pd.DataFrame(data=output, index=['']).T

データを調査するExplore data

前のチュートリアルで作成されたデータ フロー オブジェクトを使用します。Use the data flow object created in the previous tutorial. 要約すると、このチュートリアルのパート 1 では、NYC タクシー データを整理して、機械学習モデルで使用できるようにしました。To summarize, part 1 of this tutorial cleaned the NYC Taxi data so it could be used in a machine learning model. 次に、データセットのさまざまな機能を使用して、自動化されたモデルで機能とタクシー乗車の料金との関係を構築できるようにします。Now, you use various features from the data set and allow an automated model to build relationships between the features and the price of a taxi trip. データ フローを開いて実行し、結果を確認します。Open and run the data flow and review the results:

import azureml.dataprep as dprep

file_path = os.path.join(os.getcwd(), "dflows.dprep")

package_saved = dprep.Package.open(file_path)
dflow_prepared = package_saved.dataflows[0]
dflow_prepared.get_profile()
typeType MinMin maxMax CountCount Missing CountMissing count Not Missing CountNot missing count Percent missingPercent missing Error countError count Empty countEmpty count 0.1% quantile0.1% quantile 1% quantile1% quantile 5% quantile5% quantile 25% quantile25% quantile 50% quantile50% quantile 75% quantile75% quantile 95% quantile95% quantile 99% quantile99% quantile 99.9% quantile99.9% quantile 平均Mean 標準偏差Standard deviation varianceVariance 傾斜Skewness 尖度Kurtosis
vendorvendor FieldType.STRINGFieldType.STRING 11 VTSVTS 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0
pickup_weekdaypickup_weekday FieldType.STRINGFieldType.STRING 金曜日Friday 水曜日Wednesday 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0
pickup_hourpickup_hour FieldType.DECIMALFieldType.DECIMAL 00 2323 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 2.900472.90047 2.693552.69355 9.728899.72889 1616 19.371319.3713 22.697422.6974 2323 2323 14.273114.2731 6.592426.59242 43.4643.46 -0.693723-0.693723 -0.570403-0.570403
pickup_minutepickup_minute FieldType.DECIMALFieldType.DECIMAL 00 5959 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 4.997014.99701 4.958334.95833 14.152814.1528 29.383229.3832 44.682544.6825 56.444456.4444 58.990958.9909 5959 29.42729.427 17.433317.4333 303.921303.921 0.01209990.0120999 -1.20981-1.20981
pickup_secondpickup_second FieldType.DECIMALFieldType.DECIMAL 00 5959 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 5.281315.28131 55 14.783214.7832 29.929329.9293 44.72544.725 56.757356.7573 5959 5959 29.744329.7443 17.359517.3595 301.351301.351 -0.0252399-0.0252399 -1.19616-1.19616
dropoff_weekdaydropoff_weekday FieldType.STRINGFieldType.STRING 金曜日Friday 水曜日Wednesday 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0
dropoff_hourdropoff_hour FieldType.DECIMALFieldType.DECIMAL 00 2323 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 2.571532.57153 22 9.587959.58795 15.999415.9994 19.618419.6184 22.831722.8317 2323 2323 14.210514.2105 6.710936.71093 45.036545.0365 -0.687292-0.687292 -0.61951-0.61951
dropoff_minutedropoff_minute FieldType.DECIMALFieldType.DECIMAL 00 5959 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 5.443835.44383 4.846944.84694 14.103614.1036 28.836528.8365 44.310244.3102 56.689256.6892 5959 5959 29.290729.2907 17.410817.4108 303.136303.136 0.02225140.0222514 -1.2181-1.2181
dropoff_seconddropoff_second FieldType.DECIMALFieldType.DECIMAL 00 5959 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 00 5.078015.07801 55 14.575114.5751 29.597229.5972 45.464945.4649 56.272956.2729 5959 5959 29.77229.772 17.533717.5337 307.429307.429 -0.0212575-0.0212575 -1.226-1.226
store_forwardstore_forward FieldType.STRINGFieldType.STRING NN YY 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0
pickup_longitudepickup_longitude FieldType.DECIMALFieldType.DECIMAL -74.0781-74.0781 -73.7459-73.7459 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 -74.0578-74.0578 -73.9639-73.9639 -73.9656-73.9656 -73.9508-73.9508 -73.9255-73.9255 -73.8529-73.8529 -73.8302-73.8302 -73.8238-73.8238 -73.7697-73.7697 -73.9123-73.9123 0.05037570.0503757 0.002537710.00253771 0.3521720.352172 -0.923743-0.923743
pickup_latitudepickup_latitude FieldType.DECIMALFieldType.DECIMAL 40.575540.5755 40.879940.8799 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 40.63240.632 40.711740.7117 40.711540.7115 40.721340.7213 40.756540.7565 40.805840.8058 40.847840.8478 40.867640.8676 40.877840.8778 40.764940.7649 0.04946740.0494674 0.002447020.00244702 0.2059720.205972 -0.777945-0.777945
dropoff_longitudedropoff_longitude FieldType.DECIMALFieldType.DECIMAL -74.0857-74.0857 -73.7209-73.7209 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 -74.0775-74.0775 -73.9875-73.9875 -73.9882-73.9882 -73.9638-73.9638 -73.935-73.935 -73.8755-73.8755 -73.8125-73.8125 -73.7759-73.7759 -73.7327-73.7327 -73.9202-73.9202 0.05846270.0584627 0.003417890.00341789 0.6236220.623622 -0.262603-0.262603
dropoff_latitudedropoff_latitude FieldType.DECIMALFieldType.DECIMAL 40.583540.5835 40.879740.8797 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 40.597340.5973 40.692840.6928 40.691140.6911 40.722640.7226 40.756740.7567 40.791840.7918 40.849540.8495 40.86840.868 40.878740.8787 40.758340.7583 0.05173990.0517399 0.002677010.00267701 0.03904040.0390404 -0.203525-0.203525
passengerspassengers FieldType.DECIMALFieldType.DECIMAL 11 66 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 11 11 11 11 11 55 55 66 66 2.392492.39249 1.831971.83197 3.35613.3561 0.7631440.763144 -1.23467-1.23467
distancedistance FieldType.DECIMALFieldType.DECIMAL 0.010.01 32.3432.34 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 0.01087440.0108744 0.7438980.743898 0.7381940.738194 1.2431.243 2.401682.40168 4.744784.74478 10.513610.5136 14.901114.9011 21.803521.8035 3.54473.5447 3.29433.2943 10.852410.8524 1.915561.91556 4.998984.99898
costcost FieldType.DECIMALFieldType.DECIMAL 0.10.1 8888 6148.06148.0 0.00.0 6148.06148.0 0.00.0 0.00.0 0.00.0 2.338372.33837 5.004915.00491 55 6.931296.93129 10.52410.524 17.481117.4811 33.234333.2343 50.009350.0093 63.175363.1753 13.684313.6843 9.665719.66571 93.42693.426 1.785181.78518 4.139724.13972

モデル作成の機能となるように dflow_x に列を追加して、実験用のデータを準備します。You prepare the data for the experiment by adding columns to dflow_x to be features for our model creation. 予測値 cost になるように、dflow_y を定義します。You define dflow_y to be our prediction value, cost:

dflow_X = dflow_prepared.keep_columns(['pickup_weekday','pickup_hour', 'distance','passengers', 'vendor'])
dflow_y = dflow_prepared.keep_columns('cost')

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

次に、sklearn ライブラリの train_test_split 関数を使用して、トレーニング セットとテスト セットにデータを分割します。Now you split the data into training and test sets by using the train_test_split function in the sklearn library. この関数は、モデル トレーニング用の x (機能) データ セットとテスト用の y (予測する値) データ セットに、データを分割します。This function segregates the data into the x, features, dataset for model training and the y, values to predict, dataset 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 always deterministic:

from sklearn.model_selection import train_test_split

x_df = dflow_X.to_pandas_dataframe()
y_df = dflow_y.to_pandas_dataframe()

x_train, x_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=223)
# flatten y_train to 1d array
y_train.values.flatten()

この手順の目的は、正しい精度を測定するために、モデルのトレーニングに使用されたことのないデータ ポイントで完成モデルをテストすることです。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 the necessary packages and data ready for autotraining your 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 settings for autogeneration and tuning

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

プロパティProperty このチュートリアルの値Value in this tutorial 説明Description
iteration_timeout_minutesiteration_timeout_minutes 1010 各イテレーションの分単位での時間制限。Time limit in minutes for each iteration. 合計実行時間を短縮するには、この値を減らします。Reduce this value to decrease total runtime.
iterationsiterations 3030 イテレーションの回数。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.
automl_settings = {
    "iteration_timeout_minutes" : 10,
    "iterations" : 30,
    "primary_metric" : 'spearman_correlation',
    "preprocess" : True,
    "verbosity" : logging.INFO,
    "n_cross_validations": 5
}

定義済みのトレーニング設定を AutoMLConfig オブジェクトへのパラメーターとして使用します。Use your defined training settings as a 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

# local compute
automated_ml_config = AutoMLConfig(task = 'regression',
                             debug_log = 'automated_ml_errors.log',
                             path = project_folder,
                             X = x_train.values,
                             y = y_train.values.flatten(),
                             **automl_settings)

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

ローカルで実験の実行を開始します。Start the experiment to run locally. 定義済みの automated_ml_config オブジェクトを実験に渡します。Pass the defined automated_ml_config object to the experiment. 出力を True に設定して実験中の進行状況を表示します。Set the output to True to view progress during the experiment:

from azureml.core.experiment import Experiment
experiment=Experiment(ws, experiment_name)
local_run = experiment.submit(automated_ml_config, show_output=True)

表示される出力は、実験の実行中に随時更新されます。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.

Parent Run ID: AutoML_02778de3-3696-46e9-a71b-521c8fca0651
*******************************************************************************************
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   MaxAbsScaler ExtremeRandomTrees                0:00:08       0.9447    0.9447
         1   StandardScalerWrapper GradientBoosting         0:00:09       0.9536    0.9536
         2   StandardScalerWrapper ExtremeRandomTrees       0:00:09       0.8580    0.9536
         3   StandardScalerWrapper RandomForest             0:00:08       0.9147    0.9536
         4   StandardScalerWrapper ExtremeRandomTrees       0:00:45       0.9398    0.9536
         5   MaxAbsScaler LightGBM                          0:00:08       0.9562    0.9562
         6   StandardScalerWrapper ExtremeRandomTrees       0:00:27       0.8282    0.9562
         7   StandardScalerWrapper LightGBM                 0:00:07       0.9421    0.9562
         8   MaxAbsScaler DecisionTree                      0:00:08       0.9526    0.9562
         9   MaxAbsScaler RandomForest                      0:00:09       0.9355    0.9562
        10   MaxAbsScaler SGD                               0:00:09       0.9602    0.9602
        11   MaxAbsScaler LightGBM                          0:00:09       0.9553    0.9602
        12   MaxAbsScaler DecisionTree                      0:00:07       0.9484    0.9602
        13   MaxAbsScaler LightGBM                          0:00:08       0.9540    0.9602
        14   MaxAbsScaler RandomForest                      0:00:10       0.9365    0.9602
        15   MaxAbsScaler SGD                               0:00:09       0.9602    0.9602
        16   StandardScalerWrapper ExtremeRandomTrees       0:00:49       0.9171    0.9602
        17   SparseNormalizer LightGBM                      0:00:08       0.9191    0.9602
        18   MaxAbsScaler DecisionTree                      0:00:08       0.9402    0.9602
        19   StandardScalerWrapper ElasticNet               0:00:08       0.9603    0.9603
        20   MaxAbsScaler DecisionTree                      0:00:08       0.9513    0.9603
        21   MaxAbsScaler SGD                               0:00:08       0.9603    0.9603
        22   MaxAbsScaler SGD                               0:00:10       0.9602    0.9603
        23   StandardScalerWrapper ElasticNet               0:00:09       0.9603    0.9603
        24   StandardScalerWrapper ElasticNet               0:00:09       0.9603    0.9603
        25   MaxAbsScaler SGD                               0:00:09       0.9603    0.9603
        26   TruncatedSVDWrapper ElasticNet                 0:00:09       0.9602    0.9603
        27   MaxAbsScaler SGD                               0:00:12       0.9413    0.9603
        28   StandardScalerWrapper ElasticNet               0:00:07       0.9603    0.9603
        29    Ensemble                                      0:00:38       0.9622    0.9622

結果を検索するExplore the results

Jupyter ウィジェットを使用するか、実験の履歴を検証して、自動トレーニングの結果を探索します。Explore the results of automatic training with a Jupyter widget or by examining the experiment history.

方法 1: Jupyter ウィジェットを追加して結果を表示するOption 1: Add a Jupyter widget to see results

Jupyter Notebook を使用する場合は、この Jupyter Notebook ウィジェットを使ってすべての結果のグラフおよびテーブルを参照します。If you use a Jupyter notebook, use this Jupyter notebook widget to see a graph and a table of all results:

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

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

オプション 2:Python ですべての実行イテレーションを取得して調査するOption 2: Get and examine all run iterations in Python

各実験の履歴を取得して、各イテレーション実行の個々のメトリックを調べることもできます。You can also retrieve the history of each experiment and explore the individual metrics for each iteration run. 個々のモデル実行ごとに RMSE (root_mean_squared_error) を調べると、ほとんどのイテレーションで、妥当なマージン (3 から 4 ドル) 以内でタクシーの公正なコストが予測されていることがわかります。By examining RMSE (root_mean_squared_error) for each individual model run, you see that most iterations are predicting the taxi fair cost within a reasonable margin ($3-4).

children = list(local_run.get_children())
metricslist = {}
for run in children:
    properties = run.get_properties()
    metrics = {k: v for k, v in run.get_metrics().items() if isinstance(v, float)}
    metricslist[int(properties['iteration'])] = metrics

rundata = pd.DataFrame(metricslist).sort_index(1)
rundata
00 11 22 33 44 55 66 77 88 99 ...... 2020 2121 2222 2323 2424 2525 2626 2727 2828 2929
explained_varianceexplained_variance 0.8110370.811037 0.8805530.880553 0.3985820.398582 0.7760400.776040 0.6638690.663869 0.8759110.875911 0.1156320.115632 0.5869050.586905 0.8519110.851911 0.7939640.793964 ...... 0.8500230.850023 0.8836030.883603 0.8837040.883704 0.8807970.880797 0.8815640.881564 0.8837080.883708 0.8818260.881826 0.5853770.585377 0.8831230.883123 0.8868170.886817
mean_absolute_errormean_absolute_error 2.1894442.189444 1.5004121.500412 5.4805315.480531 2.6263162.626316 2.9730262.973026 1.5501991.550199 6.3838686.383868 4.4142414.414241 1.7433281.743328 2.2946012.294601 ...... 1.7974021.797402 1.4158151.415815 1.4181671.418167 1.5786171.578617 1.5594271.559427 1.4130421.413042 1.5516981.551698 4.0691964.069196 1.5057951.505795 1.4309571.430957
median_absolute_errormedian_absolute_error 1.4384171.438417 0.8508990.850899 4.5796624.579662 1.7652101.765210 1.5946001.594600 0.8698830.869883 4.2664504.266450 3.6273553.627355 0.9549920.954992 1.3610141.361014 ...... 0.9736340.973634 0.7748140.774814 0.7972690.797269 1.1472341.147234 1.1164241.116424 0.7839580.783958 1.0984641.098464 2.7090272.709027 1.0037281.003728 0.8517240.851724
normalized_mean_absolute_errornormalized_mean_absolute_error 0.0249080.024908 0.0170700.017070 0.0623500.062350 0.0298780.029878 0.0338230.033823 0.0176360.017636 0.0726260.072626 0.0502190.050219 0.0198330.019833 0.0261050.026105 ...... 0.0204480.020448 0.0161070.016107 0.0161340.016134 0.0179590.017959 0.0177410.017741 0.0160760.016076 0.0176530.017653 0.0462930.046293 0.0171310.017131 0.0162790.016279
normalized_median_absolute_errornormalized_median_absolute_error 0.0163640.016364 0.0096800.009680 0.0521010.052101 0.0200820.020082 0.0181410.018141 0.0098960.009896 0.0485380.048538 0.0412670.041267 0.0108650.010865 0.0154840.015484 ...... 0.0110770.011077 0.0088150.008815 0.0090700.009070 0.0130520.013052 0.0127010.012701 0.0089190.008919 0.0124970.012497 0.0308190.030819 0.0114190.011419 0.0096900.009690
normalized_root_mean_squared_errornormalized_root_mean_squared_error 0.0479680.047968 0.0378820.037882 0.0855720.085572 0.0522820.052282 0.0658090.065809 0.0386640.038664 0.1094010.109401 0.0711040.071104 0.0422940.042294 0.0499670.049967 ...... 0.0425650.042565 0.0376850.037685 0.0375570.037557 0.0376430.037643 0.0375130.037513 0.0375600.037560 0.0374650.037465 0.0720770.072077 0.0372490.037249 0.0367160.036716
normalized_root_mean_squared_log_errornormalized_root_mean_squared_log_error 0.0553530.055353 0.0450000.045000 0.1102190.110219 0.0656330.065633 0.0635890.063589 0.0444120.044412 0.1234330.123433 0.0923120.092312 0.0461300.046130 0.0552430.055243 ...... 0.0465400.046540 0.0418040.041804 0.0417710.041771 0.0451750.045175 0.0446280.044628 0.0416170.041617 0.0444050.044405 0.0796510.079651 0.0427990.042799 0.0415300.041530
r2_scorer2_score 0.8109000.810900 0.8803280.880328 0.3980760.398076 0.7759570.775957 0.6428120.642812 0.8757190.875719 0.0216030.021603 0.5865140.586514 0.8517670.851767 0.7936710.793671 ...... 0.8498090.849809 0.8801420.880142 0.8809520.880952 0.8805860.880586 0.8813470.881347 0.8808870.880887 0.8816130.881613 0.5481210.548121 0.8828830.882883 0.8863210.886321
root_mean_squared_errorroot_mean_squared_error 4.2163624.216362 3.3298103.329810 7.5217657.521765 4.5956044.595604 5.7846015.784601 3.3985403.398540 9.6163549.616354 6.2500116.250011 3.7176613.717661 4.3920724.392072 ...... 3.7414473.741447 3.3125333.312533 3.3012423.301242 3.3087953.308795 3.2973893.297389 3.3014853.301485 3.2931823.293182 6.3355816.335581 3.2742093.274209 3.2273653.227365
root_mean_squared_log_errorroot_mean_squared_log_error 0.2431840.243184 0.1977020.197702 0.4842270.484227 0.2883490.288349 0.2793670.279367 0.1951160.195116 0.5422810.542281 0.4055590.405559 0.2026660.202666 0.2427020.242702 ...... 0.2044640.204464 0.1836580.183658 0.1835140.183514 0.1984680.198468 0.1960670.196067 0.1828360.182836 0.1950870.195087 0.3499350.349935 0.1880310.188031 0.1824550.182455
spearman_correlationspearman_correlation 0.9447430.944743 0.9536180.953618 0.8579650.857965 0.9147030.914703 0.9398460.939846 0.9561590.956159 0.8281870.828187 0.9420690.942069 0.9525810.952581 0.9354770.935477 ...... 0.9512870.951287 0.9603350.960335 0.9601950.960195 0.9602790.960279 0.9602880.960288 0.9603230.960323 0.9601610.960161 0.9412540.941254 0.9602930.960293 0.9621580.962158
spearman_correlation_maxspearman_correlation_max 0.9447430.944743 0.9536180.953618 0.9536180.953618 0.9536180.953618 0.9536180.953618 0.9561590.956159 0.9561590.956159 0.9561590.956159 0.9561590.956159 0.9561590.956159 ...... 0.9603030.960303 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9603350.960335 0.9621580.962158

12 行 × 30 列12 rows × 30 columns

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

イテレーションから最適なパイプラインを選択します。Select the best pipeline from our iterations. automl_classifier 上の get_output メソッドは、最適な実行と、最後の fit の呼び出しで適合したモデルを返します。The get_output method on automl_classifier 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 dataset 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 dataset. 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])

散布図を作成して、実績コスト値と比較した予測コスト値を視覚化します。Create a scatter plot to visualize the predicted cost values compared to the actual cost values. 次のコードでは、特徴 (distance) が X 軸、交通費 (cost) が Y 軸として使用されています。The following code uses the distance feature as the x-axis and trip cost as the y-axis. 個々の乗車距離値における予測コストの差異を比較するために、最初の 100 個の予測コスト値と実績コスト値は別個の系列として作成されます。To compare the variance of predicted cost at each trip distance value, the first 100 predicted and actual cost values are created as separate series. このプロットを観察すると、距離とコストの関係がほぼ線形であり、同じ乗車距離であれば、ほとんどの場合、予測コスト値が実績コスト値にきわめて近いことがわかります。Examining the plot shows that the distance/cost relationship is nearly linear, and the predicted cost values are in most cases very close to the actual cost values for the same trip distance.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(14, 10))
ax1 = fig.add_subplot(111)

distance_vals = [x[4] for x in x_test.values]
y_actual = y_test.values.flatten().tolist()

ax1.scatter(distance_vals[:100], y_predict[:100], s=18, c='b', marker="s", label='Predicted')
ax1.scatter(distance_vals[:100], y_actual[:100], s=18, c='r', marker="o", label='Actual')

ax1.set_xlabel('distance (mi)')
ax1.set_title('Predicted and Actual Cost/Distance')
ax1.set_ylabel('Cost ($)')

plt.legend(loc='upper left', prop={'size': 12})
plt.rcParams.update({'font.size': 14})
plt.show()

予測散布図

結果の root mean squared error を計算します。Calculate the root mean squared error of the results. y_test データフレームを使用します。Use the y_test dataframe. 予測値と比較するために、これをリストに変換します。Convert it 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

rmse = sqrt(mean_squared_error(y_actual, y_predict))
rmse
3.2204936862688798

次のコードを実行し、完全な y_actualy_predict データセットを使用して平均絶対誤差率 (MAPE) を計算します。Run the following code to calculate mean absolute percent error (MAPE) by using the full y_actual and y_predict datasets. このメトリックでは、予測される各値と実際の値の間の絶対誤差が計算され、すべての差分が合計されます。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.10545153869569586

Model Accuracy:
0.8945484613043041

最終的な予測精度メトリックから、モデルでのデータ セットの機能によるタクシー料金の予測はかなり良好で、誤差は 3 ドル以内であることがわかります。From the final prediction accuracy metrics, you see that the model is fairly good at predicting taxi fares from the data set's features, typically within +- $3.00. 従来の機械学習モデルの開発プロセスでは、リソースが大量に消費され、数十個のモデルを実行して結果を比較するために、その領域に関する膨大な知識と時間の投資が必要とされます。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 サービスに関連したその他のチュートリアルおよびハウツー記事の前提条件として使用できます。The resources you created can be used as prerequisites to other Azure Machine Learning service tutorials and how-to articles.

作成したリソースを今後使用する予定がない場合は、課金が発生しないように削除します。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.

    Azure portal で削除する

  2. 作成したリソース グループを一覧から選択します。From the list, select the resource group you created.

  3. [リソース グループの削除] を選択します。Select Delete resource group.

  4. リソース グループ名を入力します。Enter the resource group name. 次に、[削除] を選択します。Then 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.