Didacticiel : Utiliser le machine learning automatisé pour prédire le prix des courses de taxiTutorial: Use automated machine learning to predict taxi fares

S’APPLIQUE À : ouiÉdition de base ouiÉdition Entreprise                    (Mise à niveau vers l’édition Entreprise)APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

Dans ce tutoriel, vous utilisez le machine learning automatisé d’Azure Machine Learning pour créer un modèle de régression permettant de prédire les prix des courses de taxi à New York.In this tutorial, you use automated machine learning in Azure Machine Learning to create a regression model to predict NYC taxi fare prices. Ce processus accepte les données d'apprentissage et les paramètres de configuration, et itère automatiquement via des combinaisons de méthodes et de modèles de normalisation/standardisation de fonctionnalités et des paramètres hyperparamètres afin d'obtenir le meilleur modèle.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.

Diagramme de flux

Dans ce didacticiel, vous avez appris à effectuer les tâches suivantes :In this tutorial you learn the following tasks:

  • Télécharger, transformer et nettoyer des données avec Azure Open DatasetsDownload, transform, and clean data using Azure Open Datasets
  • Effectuer l'apprentissage d'un modèle de régression Machine Learning automatiséTrain an automated machine learning regression model
  • Calculer la précision du modèleCalculate model accuracy

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.If you don’t have an Azure subscription, create a free account before you begin. Essayez la version gratuite ou payante d’Azure Machine Learning dès aujourd’hui.Try the free or paid version of Azure Machine Learning today.

PrérequisPrerequisites

  • Effectuez le tutoriel d’installation si vous n’avez pas encore d’espace de travail Azure Machine Learning ou de machine virtuelle de notebook.Complete the setup tutorial if you don't already have an Azure Machine Learning workspace or notebook virtual machine.
  • Une fois le tutoriel d’installation terminé, ouvrez le notebook tutorials/regression-automated-ml.ipynb à l’aide du même serveur de notebook.After you complete the setup tutorial, open the tutorials/regression-automated-ml.ipynb notebook using the same notebook server.

Vous trouverez également ce tutoriel sur GitHub si vous souhaitez l’exécuter dans votre propre environnement local.This tutorial is also available on GitHub if you wish to run it in your own local environment. Exécutez pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets pour vous procurer les packages requis.Run pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets to get the required packages.

Télécharger et préparer les donnéesDownload and prepare data

Importez les packages nécessaires.Import the necessary packages. Le package Open Datasets contient une classe représentant chaque source de données (NycTlcGreen, par exemple) afin de facilement filtrer les paramètres de date avant le téléchargement.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

Commencez par créer un dataframe pour contenir les données des taxis.Begin by creating a dataframe to hold the taxi data. Dans un environnement autre que Spark, Azure Open Datasets permet de télécharger un seul mois de données à la fois, avec certaines classes, afin d’éviter MemoryError avec les jeux de données volumineux.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.

Pour charger les données de taxi, extrayez de façon itérative un mois à la fois et, avant de l’ajouter à green_taxi_df, échantillonnez de manière aléatoire 2 000 enregistrements de chaque mois pour éviter d’encombrer le dataframe.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. Prévisualisez ensuite les données.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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 lignes × 23 colonnes10 rows × 23 columns

Maintenant que les données initiales sont chargées, définissez une fonction pour créer différentes fonctionnalités basées sur le temps à partir du champ d'horodatage.Now that the initial data is loaded, define a function to create various time-based features from the pickup datetime field. De nouveaux champs seront ainsi créés pour le numéro du mois, le jour du mois, le jour de la semaine et l'heure de la journée, et permettront au modèle de prendre en charge la saisonnalité.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. Utilisez la fonction apply() du dataframe pour appliquer de façon itérative la fonction build_time_features() à chaque ligne des données des taxis.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 AucunNone AucunNone -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 5\.5
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 AucunNone AucunNone -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 AucunNone AucunNone -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 5\.5
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 AucunNone AucunNone -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 5\.5 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 AucunNone AucunNone -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 5\.5
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 AucunNone AucunNone -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 AucunNone AucunNone -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 5\.5 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 AucunNone AucunNone -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 AucunNone AucunNone -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 AucunNone AucunNone -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 lignes × 27 colonnes10 rows × 27 columns

Supprimez certaines colonnes dont vous n’aurez pas besoin pour l’entraînement ou la création de caractéristiques supplémentaires.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)

Nettoyer les donnéesCleanse data

Exécutez la fonction describe() sur le nouveau dataframe pour afficher un résumé des statistiques de chaque champ.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

Depuis le résumé des statistiques, vous constatez que plusieurs champs présentent des valeurs hors norme ou des valeurs susceptibles de réduire la précision du modèle.From the summary statistics, you see that there are several fields that have outliers or values that will reduce model accuracy. Tout d’abord, filtrez les champs lat/long pour qu’ils figurent dans les limites de la zone Manhattan.First filter the lat/long fields to be within the bounds of the Manhattan area. Cela permet de filtrer les courses de taxi plus longues ou les trajets ayant des valeurs hors norme en ce qui concerne leur relation avec les autres caractéristiques.This will filter out longer taxi trips or trips that are outliers in respect to their relationship with other features.

Filtrez aussi le champ tripDistance pour qu’il soit supérieur à zéro, mais inférieur à 31 kilomètres (distance Haversine entre les deux paires de latitude/longitude).Additionally filter the tripDistance field to be greater than zero but less than 31 miles (the haversine distance between the two lat/long pairs). Cela élimine les longs trajets hors norme qui présentent un coût de trajet inégal.This eliminates long outlier trips that have inconsistent trip cost.

Enfin, le champ totalAmount contient des valeurs négatives pour les tarifs des taxis, ce qui n’est pas pertinent dans le contexte de notre modèle, et le champ passengerCount contient des données incorrectes avec des valeurs minimales égales à zéro.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.

Excluez ces anomalies à l'aide des fonctions de requête, puis supprimez les dernières colonnes inutiles à des fins de formation.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)

Appelez une nouvelle fois describe() sur les données pour vérifier que le nettoyage a bien fonctionné.Call describe() again on the data to ensure cleansing worked as expected. Vous disposez maintenant d’un jeu préparé et nettoyé de données de taxis, congés et météorologiques à des fins d'apprentissage du modèle de Machine Learning.You now have a prepared and cleansed set of taxi, holiday, and weather data to use for machine learning model training.

final_df.describe()

Configurer l’espace de travailConfigure workspace

Créez un objet d’espace de travail à partir de l’espace de travail existant.Create a workspace object from the existing workspace. Un espace de travail est une classe qui accepte les informations concernant vos abonnements et vos ressources Azure.A Workspace is a class that accepts your Azure subscription and resource information. Il crée également une ressource cloud pour superviser et suivre les exécutions de votre modèle.It also creates a cloud resource to monitor and track your model runs. Workspace.from_config() lit le fichier config.json et charge les détails d’authentification dans un objet nommé ws.Workspace.from_config() reads the file config.json and loads the authentication details into an object named ws. ws est utilisé dans tout le reste du code de ce didacticiel.ws is used throughout the rest of the code in this tutorial.

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

Diviser les données entre un jeu d’entraînement et un jeu de testSplit the data into train and test sets

Divisez les données en jeu d’entraînement et en jeu de test à l’aide de la fonction train_test_split de la bibliothèque scikit-learn.Split the data into training and test sets by using the train_test_split function in the scikit-learn library. Cette fonction sépare les données entre le jeu de données x (caractéristiques) pour l’entraînement du modèle, et le jeu de données y (valeurs à prédire) pour les tests.This function segregates the data into the x (features) data set for model training and the y (values to predict) data set for testing.

Le paramètre test_size détermine le pourcentage de données à allouer pour les tests.The test_size parameter determines the percentage of data to allocate to testing. Le paramètre random_state définit une valeur initiale pour le générateur aléatoire, afin que les deux jeux de données soient déterministes.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)

L’objectif de cette étape est d’obtenir des points de données qui n’ont pas été utilisés pour entraîner le modèle, afin de mesurer la véritable précision en testant le modèle terminé.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.

En d’autres termes, un modèle bien entraîné doit être en mesure d’établir avec précision des prédictions à partir de données qu’il n’a pas encore vues.In other words, a well-trained model should be able to accurately make predictions from data it hasn't already seen. Vous disposez maintenant de données préparées pour l’entraînement automatique d’un modèle Machine Learning.You now have data prepared for auto-training a machine learning model.

Entraîner automatiquement un modèleAutomatically train a model

Pour entraîner automatiquement un modèle, effectuez les étapes suivantes :To automatically train a model, take the following steps:

  1. Définissez des paramètres pour l’exécution de l’expérience.Define settings for the experiment run. Attachez vos données d’entraînement à la configuration et modifiez les paramètres qui contrôlent le processus d’entraînement.Attach your training data to the configuration, and modify settings that control the training process.
  2. Soumettez l’expérience pour l’optimisation du modèle.Submit the experiment for model tuning. Une fois l’expérience envoyée, le processus itère dans différents algorithmes et paramètres hyperparamètres de Machine Learning tout en respectant vos contraintes définies.After submitting the experiment, the process iterates through different machine learning algorithms and hyperparameter settings, adhering to your defined constraints. Il choisit le modèle le mieux adapté en optimisant une métrique de précision.It chooses the best-fit model by optimizing an accuracy metric.

Définir les paramètres d’entraînementDefine training settings

Définissez les paramètres du modèle et de l’expérience pour l’entraînement.Define the experiment parameter and model settings for training. Affichez la liste complète des paramètres.View the full list of settings. La soumission de l’expérience avec ces paramètres par défaut peut prendre entre 5 et 20 min, mais si vous souhaitez raccourcir la durée d’exécution, diminuez le paramètre experiment_timeout_minutes.Submitting the experiment with these default settings will take approximately 5-20 min, but if you want a shorter run time, reduce the experiment_timeout_minutes parameter.

PropriétéProperty Valeur dans ce didacticielValue in this tutorial DescriptionDescription
iteration_timeout_minutesiteration_timeout_minutes 22 Limite de temps (en minutes) pour chaque itération.Time limit in minutes for each iteration. Diminuez cette valeur afin de réduire le runtime total.Reduce this value to decrease total runtime.
experiment_timeout_minutesexperiment_timeout_minutes 2020 Durée maximale en minutes pendant laquelle toutes les itérations combinées peuvent être effectuées avant que l’expérience ne se termine.Maximum amount of time in minutes that all iterations combined can take before the experiment terminates.
enable_early_stoppingenable_early_stopping TrueTrue Marquez pour permettre une fin anticipée si le score ne s’améliore pas à terme.Flag to enble early termination if the score is not improving in the short term.
primary_metricprimary_metric spearman_correlationspearman_correlation Métrique que vous souhaitez optimiser.Metric that you want to optimize. Le modèle le mieux adapté est choisi en fonction de cette métrique.The best-fit model will be chosen based on this metric.
featurizationfeaturization autoauto En utilisant auto, l’expérience peut traiter les données d’entrée au préalable (gestion des données manquantes, conversion du texte en caractères numériques, etc.)By using auto, the experiment can preprocess the input data (handling missing data, converting text to numeric, etc.)
verbosityverbosity logging.INFOlogging.INFO Contrôle le niveau de journalisation.Controls the level of logging.
n_cross_validationsn_cross_validations 5.5 Nombre de divisions de validation croisée à effectuer lorsque les données de validation ne sont pas spécifiées.Number of cross-validation splits to perform when validation data is not specified.
import logging

automl_settings = {
    "iteration_timeout_minutes": 2,
    "experiment_timeout_minutes": 20,
    "enable_early_stopping": True,
    "primary_metric": 'spearman_correlation',
    "featurization": 'auto',
    "verbosity": logging.INFO,
    "n_cross_validations": 5
}

Utilisez vos paramètres d’entraînement définis en tant que paramètre **kwargs sur un objet AutoMLConfig.Use your defined training settings as a **kwargs parameter to an AutoMLConfig object. De plus, spécifiez vos données d’entraînement et le type de modèle, c’est-à-dire regression dans ce cas.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)

Notes

Les étapes de prétraitement du Machine Learning automatisé (normalisation des fonctionnalités, gestion des données manquantes, conversion de texte en valeurs numériques, etc.) font partie du modèle sous-jacent.Automated machine learning pre-processing steps (feature normalization, handling missing data, converting text to numeric, etc.) become part of the underlying model. Lorsque vous utilisez le modèle pour des prédictions, les étapes de prétraitement qui sont appliquées pendant l’entraînement sont appliquées automatiquement à vos données d’entrée.When using the model for predictions, the same pre-processing steps applied during training are applied to your input data automatically.

Entraîner le modèle de régression automatiqueTrain the automatic regression model

Créez un objet d’expérience dans votre espace de travail.Create an experiment object in your workspace. Une expérience fait office de conteneur pour vos exécutions individuelles.An experiment acts as a container for your individual runs. Passez l’objet automl_config défini à l’expérience et définissez la sortie sur True pour voir la progression de l’exécution.Pass the defined automl_config object to the experiment, and set the output to True to view progress during the run.

Une fois l’expérience démarrée, la sortie illustrée est mise à jour en temps réel à mesure que l’expérience s’exécute.After starting the experiment, the output shown updates live as the experiment runs. Pour chaque itération, vous voyez le type de modèle, la durée d’exécution et la précision de l’entraînement.For each iteration, you see the model type, the run duration, and the training accuracy. Le champ BEST effectue un suivi du meilleur score d’entraînement en cours d’exécution, en fonction de votre type de métrique.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

Lire les résultatsExplore the results

Explorez les résultats de l’entraînement automatique à l’aide d’un widget Jupyter.Explore the results of automatic training with a Jupyter widget. Le widget vous permet de voir un graphique et un tableau de toutes les itérations d’exécution individuelles, ainsi que des métriques et des métadonnées de précision d’entraînement.The widget allows you to see a graph and table of all individual run iterations, along with training accuracy metrics and metadata. Vous pouvez aussi filtrer sur des métriques de précision différentes de votre métrique principale avec le sélecteur de liste déroulante.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()

Détails de l’exécution du widget Jupyter Tracé du widget JupyterJupyter widget run details Jupyter widget plot

Récupérer le meilleur modèleRetrieve the best model

Sélectionnez le meilleur modèle dans vos itérations.Select the best model from your iterations. La fonction get_output retourne la meilleure exécution ainsi que le modèle ajusté pour le dernier appel d’ajustement.The get_output function returns the best run and the fitted model for the last fit invocation. En utilisant des surcharges sur get_output, vous pouvez récupérer la meilleure exécution et le modèle ajusté pour toute métrique consignée ou itération.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)

Tester la précision du meilleur modèleTest the best model accuracy

Utilisez le meilleur modèle pour exécuter des prédictions sur le jeu de données de test et prédire les tarifs des courses de taxi.Use the best model to run predictions on the test data set to predict taxi fares. La fonction predict utilise le meilleur modèle et prédit les valeurs de y, coût du trajet, à partir du jeu de données x_test.The function predict uses the best model and predicts the values of y, trip cost, from the x_test data set. Affichez les 10 premières valeurs de coût à partir de y_predict.Print the first 10 predicted cost values from y_predict.

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

Calculez le(la) root mean squared error des résultats.Calculate the root mean squared error of the results. Convertissez le dataframe y_test en liste à comparer aux valeurs prédites.Convert the y_test dataframe to a list to compare to the predicted values. La fonction mean_squared_error accepte deux tableaux de valeurs et calcule l’erreur au carré moyenne entre ces tableaux.The function mean_squared_error takes two arrays of values and calculates the average squared error between them. En prenant la racine carrée du résultat, vous obtenez une erreur dans les mêmes unités que la variable y, cost.Taking the square root of the result gives an error in the same units as the y variable, cost. Elle indique l’écart approximatif entre les prédictions de tarifs de taxi et les tarifs réels.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

Exécutez le code suivant pour calculer le pourcentage d’erreur absolue moyenne (MAPE) à l’aide des jeux de données y_actual et y_predict complets.Run the following code to calculate mean absolute percent error (MAPE) by using the full y_actual and y_predict data sets. Cette métrique calcule une différence absolue entre chaque valeur prédite et réelle et additionne toutes les différences.This metric calculates an absolute difference between each predicted and actual value and sums all the differences. Ensuite, elle exprime cette somme sous forme de pourcentage du total des valeurs réelles.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

Les deux métriques de précision de la prédiction montrent que le modèle est assez bon pour prédire les tarifs de taxi à partir des caractéristiques du jeu de données, en général à ± 4,00 dollars US et environ 15 % d’erreur.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.

Le processus traditionnel de développement des modèles d’entraînement est très gourmand en ressources, et nécessite des investissements importants en temps et en connaissances pour exécuter et comparer les résultats de dizaines de modèles.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. Le machine learning automatisé se révèle un excellent moyen de tester rapidement de nombreux modèles pour votre scénario.Using automated machine learning is a great way to rapidly test many different models for your scenario.

Supprimer des ressourcesClean up resources

Sautez cette section si vous prévoyez d’exécuter d’autres tutoriels Azure Machine Learning.Do not complete this section if you plan on running other Azure Machine Learning tutorials.

Arrêter la machine virtuelle NotebookStop the Notebook VM

Si vous avez utilisé une instance de calcul ou une machine virtuelle Notebook, arrêtez la machine virtuelle lorsque vous ne l’utilisez pas afin de réduire les coûts.If you used a compute instance or Notebook VM, stop the VM when you are not using it to reduce cost.

  1. Dans votre espace de travail, sélectionnez Capacité de calcul.In your workspace, select Compute.

  2. Sélectionnez la machine virtuelle dans la liste.From the list, select the VM.

  3. Sélectionnez Arrêter.Select Stop.

  4. Quand vous êtes prêt à utiliser à nouveau le serveur, sélectionnez Démarrer.When you're ready to use the server again, select Start.

Tout supprimerDelete everything

Si vous n’avez pas l’intention d’utiliser les ressources que vous avez créées, supprimez-les pour éviter des frais.If you don't plan to use the resources you created, delete them, so you don't incur any charges.

  1. Dans le portail Azure, sélectionnez Groupes de ressources tout à gauche.In the Azure portal, select Resource groups on the far left.
  2. À partir de la liste, sélectionnez le groupe de ressources créé.From the list, select the resource group you created.
  3. Sélectionnez Supprimer le groupe de ressources.Select Delete resource group.
  4. Entrez le nom du groupe de ressources.Enter the resource group name. Puis sélectionnez Supprimer.Then select Delete.

Vous pouvez également conserver le groupe de ressources mais supprimer un espace de travail unique.You can also keep the resource group but delete a single workspace. Affichez les propriétés de l’espace de travail, puis sélectionnez Supprimer.Display the workspace properties and select Delete.

Étapes suivantesNext steps

Dans ce tutoriel sur le machine learning automatisé, vous avez effectué les tâches suivantes :In this automated machine learning tutorial, you did the following tasks:

  • Configuration d’un espace de travail et préparation des données pour une expérienceConfigured a workspace and prepared data for an experiment.
  • Entraînement à l’aide d’un modèle de régression automatisé local avec des paramètres personnalisésTrained by using an automated regression model locally with custom parameters.
  • Exploration et analyse des résultats de l’entraînementExplored and reviewed training results.

Déployez votre modèle avec Azure Machine Learning.Deploy your model with Azure Machine Learning.