Tutorial: Uso del aprendizaje automático para crear predecir tarifas de taxiTutorial: Use automated machine learning to predict taxi fares

Se aplica a: síBasic Edition síEnterprise Edition                    (Actualización a Enterprise Edition)APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

En este tutorial, usará el aprendizaje automático automatizado de Azure Machine Learning para crear un modelo de regresión y predecir los precios de las tarifas de taxi de Nueva York.In this tutorial, you use automated machine learning in Azure Machine Learning to create a regression model to predict NYC taxi fare prices. Este proceso acepta valores de configuración y datos de entrenamiento y, después, itera automáticamente las combinaciones de diferentes métodos de estandarización o normalización de características, modelos y configuraciones de hiperparámetros para llegar al mejor modelo.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.

Diagrama de flujo

En este tutorial, aprenderá a realizar las tareas siguientes:In this tutorial you learn the following tasks:

  • Descargar, transformar y limpiar datos mediante Azure Open DatasetsDownload, transform, and clean data using Azure Open Datasets
  • Entrenar un modelo de regresión con aprendizaje automático automatizadoTrain an automated machine learning regression model
  • Calcular la precisión del modeloCalculate model accuracy

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don’t have an Azure subscription, create a free account before you begin. Pruebe hoy mismo la versión gratuita o de pago de Azure Machine Learning.Try the free or paid version of Azure Machine Learning today.

Requisitos previosPrerequisites

  • Complete el tutorial de instalación si aún no tiene un área de trabajo de Azure Machine Learning o una máquina virtual de cuadernos.Complete the setup tutorial if you don't already have an Azure Machine Learning workspace or notebook virtual machine.
  • Después de completar el tutorial de instalación, abra el cuaderno tutorials/regression-automated-ml.ipynb con el mismo servidor de cuadernos.After you complete the setup tutorial, open the tutorials/regression-automated-ml.ipynb notebook using the same notebook server.

Este tutorial también está disponible en GitHub si quiere ejecutarlo en su propio entorno local.This tutorial is also available on GitHub if you wish to run it in your own local environment. Ejecute pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets para obtener los paquetes requeridos.Run pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets to get the required packages.

Descargar y preparar los datosDownload and prepare data

Importe los paquetes necesarios.Import the necessary packages. El paquete de Open Datasets contiene una clase que representa cada origen de datos (por ejemplo, NycTlcGreen) para filtrar fácilmente los parámetros de fecha antes de la descarga.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

Empiece por crear una trama de datos para almacenar los datos de taxis.Begin by creating a dataframe to hold the taxi data. Cuando se trabaja en un entorno que no es de Spark, Open Datasets solo permite descargar un mes de datos a la vez con determinadas clases, para así evitar que se presenten errores MemoryError con grandes conjuntos de datos.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.

Para descargar los datos de los taxis, recupere de forma iterativa los datos de mes en mes y, antes de agregarlos a green_taxi_df, realice un muestreo aleatorio de 2000 registros de cada mes para evitar el sobredimensionamiento de la trama de datos.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. Después, obtenga una vista previa de los datos.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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 filas × 23 columnas10 rows × 23 columns

Ahora que se han cargado los datos iniciales, defina una función para crear diversas características basadas en tiempo a partir del campo de fecha y hora de recogida.Now that the initial data is loaded, define a function to create various time-based features from the pickup datetime field. Así, se crearán nuevos campos para el número de mes, día del mes, día de la semana y hora del día. Además, el modelo podrá descomponerse en factores según la estacionalidad basada en tiempo.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. Use la función apply() en la trama de datos para aplicar de forma iterativa la función build_time_features() a cada fila de los datos de 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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 NoneNone NoneNone -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 filas × 27 columnas10 rows × 27 columns

Quite algunas de las columnas que no necesite para realizar el entrenamiento o crear características adicionales.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)

Limpieza de datosCleanse data

Ejecute la función describe() en la nueva trama de datos para ver las estadísticas de resumen de cada campo.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

Desde las estadísticas de resumen, verá que hay varios campos que tienen valores atípicos o valores que reducirán la precisión del modelo.From the summary statistics, you see that there are several fields that have outliers or values that will reduce model accuracy. En primer lugar, filtre los campos lat/long para que estén dentro de los límites del área de Manhattan.First filter the lat/long fields to be within the bounds of the Manhattan area. De este modo, filtrará los trayectos o los trayectos en taxi más largos que sean valores atípicos en lo que respecta a su relación con otras características.This will filter out longer taxi trips or trips that are outliers in respect to their relationship with other features.

Además, filtre el campo tripDistance para que sea mayor que cero, pero menor que 31 millas (la distancia del semiverseno entre los dos pares lat/long).Additionally filter the tripDistance field to be greater than zero but less than 31 miles (the haversine distance between the two lat/long pairs). Así elimina los recorridos atípicos largos que tengan un costo de trayecto incoherente.This eliminates long outlier trips that have inconsistent trip cost.

Por último, el campo totalAmount tiene valores negativos para las tarifas de taxi, lo que no tiene sentido en el contexto de nuestro modelo, y el campo passengerCount tiene datos incorrectos y su valor mínimo es cero.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.

Filtre estas anomalías mediante funciones de consulta y, a continuación, quite las últimas columnas innecesarias para el entrenamiento.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)

Vuelva a llamar a la función describe() desde los datos para garantizar que la limpieza ha funcionado como se esperaba.Call describe() again on the data to ensure cleansing worked as expected. Ahora tiene un conjunto preparado y limpio de datos meteorológicos, de taxis y de días festivos que se utilizará para entrenar el modelo 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()

Configuración del área de trabajoConfigure workspace

Cree un objeto de área de trabajo desde el área de trabajo existente.Create a workspace object from the existing workspace. Un área de trabajo es una clase que acepta la información de recursos y suscripciones de Azure.A Workspace is a class that accepts your Azure subscription and resource information. También crea un recurso en la nube para supervisar y realizar un seguimiento de las ejecuciones del modelo.It also creates a cloud resource to monitor and track your model runs. Workspace.from_config() lee el archivo config.json y carga los detalles de autenticación en un objeto denominado ws.Workspace.from_config() reads the file config.json and loads the authentication details into an object named ws. En el resto del código de este tutorial se usa ws.ws is used throughout the rest of the code in this tutorial.

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

Dividir los datos en conjuntos de entrenamiento y pruebaSplit the data into train and test sets

Divida los datos en conjuntos de entrenamiento y prueba mediante la función train_test_split de la biblioteca scikit-learn.Split the data into training and test sets by using the train_test_split function in the scikit-learn library. Esta función segrega los datos entre el conjunto de datos "x" (características) para el entrenamiento del modelo y el conjunto de datos "y" (valores a predecir) para la realización de pruebas.This function segregates the data into the x (features) data set for model training and the y (values to predict) data set for testing.

El parámetro test_size determina el porcentaje de datos que se va a asignar a las pruebas.The test_size parameter determines the percentage of data to allocate to testing. El parámetro random_state establece un valor de inicialización para el generador de números aleatorios, de forma que las divisiones de entrenamiento o prueba son deterministas.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)

El propósito de este paso es tener puntos de datos para probar el modelo terminado que no se hayan usado para entrenar el modelo y así poder medir la precisión real.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 otras palabras, un modelo bien entrenado debe ser capaz predecir de manera precisa a partir de datos que aún no ha visto.In other words, a well-trained model should be able to accurately make predictions from data it hasn't already seen. Ahora tiene los datos preparados para entrenar automáticamente un modelo de aprendizaje automático.You now have data prepared for auto-training a machine learning model.

Entrenamiento automático de un modeloAutomatically train a model

Para entrenar automáticamente un modelo, realice los pasos siguientes:To automatically train a model, take the following steps:

  1. Defina la configuración de la ejecución del experimento.Define settings for the experiment run. Asocie los datos de entrenamiento a la configuración y modifíquela para controlar el entrenamiento.Attach your training data to the configuration, and modify settings that control the training process.
  2. Envíe el experimento para la optimización del modelo.Submit the experiment for model tuning. Después de enviar el experimento, el proceso se itera mediante distintos algoritmos de aprendizaje automático y configuraciones de hiperparámetros, de conformidad con las restricciones definidas.After submitting the experiment, the process iterates through different machine learning algorithms and hyperparameter settings, adhering to your defined constraints. Elige el modelo de ajuste perfecto mediante la optimización de una métrica de precisión.It chooses the best-fit model by optimizing an accuracy metric.

Definición de la configuración del entrenamientoDefine training settings

Defina los parámetros del experimento y la configuración de los modelos para el entrenamiento.Define the experiment parameter and model settings for training. Vea la lista completa de valores.View the full list of settings. El envío del experimento con esta configuración predeterminada tardará de 5 a 20 min, pero, si desea que la ejecución sea más breve, puede reducir el parámetro 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.

PropiedadProperty Valor en este tutorialValue in this tutorial DESCRIPCIÓNDescription
iteration_timeout_minutesiteration_timeout_minutes 22 Límite de tiempo en minutos para cada iteración.Time limit in minutes for each iteration. Reduzca este valor para reducir el tiempo de ejecución total.Reduce this value to decrease total runtime.
experiment_timeout_minutesexperiment_timeout_minutes 2020 Tiempo máximo en minutos que pueden llevar a cabo todas las iteraciones combinadas antes de que finalice el experimento.Maximum amount of time in minutes that all iterations combined can take before the experiment terminates.
enable_early_stoppingenable_early_stopping TrueTrue Marca para permitir la finalización prematura si la puntuación no mejora a corto plazo.Flag to enble early termination if the score is not improving in the short term.
primary_metricprimary_metric spearman_correlationspearman_correlation Métrica que desea optimizar.Metric that you want to optimize. El modelo de ajuste perfecto se elegirá según esta métrica.The best-fit model will be chosen based on this metric.
featurizationfeaturization autoauto Mediante el uso de auto, el experimento puede preprocesar los datos de entrada (administrar los datos que faltan, convertir texto a numérico, etc.).By using auto, the experiment can preprocess the input data (handling missing data, converting text to numeric, etc.)
verbosityverbosity logging.INFOlogging.INFO Controla el nivel de registro.Controls the level of logging.
n_cross_validationsn_cross_validations 55 Número de divisiones de la validación cruzada que se realizarán cuando no se especifiquen datos de validación.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
}

Use la configuración de entrenamiento definida como parámetro **kwargs en un objeto AutoMLConfig.Use your defined training settings as a **kwargs parameter to an AutoMLConfig object. Además, puede especificar los datos de entrenamiento y el tipo de modelo, regression en este caso.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)

Nota

Los pasos previos al procesamiento del aprendizaje automático (normalización de características, control de los datos que faltan, conversión de valores de texto a numéricos, etc.) se convierten en parte del modelo subyacente.Automated machine learning pre-processing steps (feature normalization, handling missing data, converting text to numeric, etc.) become part of the underlying model. Cuando se utiliza el modelo para las predicciones, se aplican automáticamente a los datos de entrada los mismos pasos previos al procesamiento que se aplican durante el entrenamiento.When using the model for predictions, the same pre-processing steps applied during training are applied to your input data automatically.

Entrenamiento del modelo de regresión automáticaTrain the automatic regression model

Cree un objeto de experimento en el área de trabajo.Create an experiment object in your workspace. Un experimento actúa como un contenedor para las ejecuciones individuales.An experiment acts as a container for your individual runs. Pase el objeto automl_config definido al experimento y establezca la salida en True para ver el progreso durante la ejecución.Pass the defined automl_config object to the experiment, and set the output to True to view progress during the run.

Tras iniciar el experimento, la salida que se muestra se actualiza en directo a medida que se ejecuta.After starting the experiment, the output shown updates live as the experiment runs. Para cada iteración, verá el tipo de modelo, la duración de la ejecución y la precisión del entrenamiento.For each iteration, you see the model type, the run duration, and the training accuracy. El campo BEST realiza el seguimiento de la mejor puntuación de entrenamiento en ejecución en función del tipo de métrica.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

Exploración de los resultadosExplore the results

Explore los resultados del entrenamiento automático con un widget de Jupyter.Explore the results of automatic training with a Jupyter widget. El widget le permite ver un grafo y una tabla de todas las iteraciones de ejecución individuales, junto con los metadatos y las métricas de precisión del entrenamiento.The widget allows you to see a graph and table of all individual run iterations, along with training accuracy metrics and metadata. Además, puede filtrar por métricas de precisión diferentes de la principal con el selector desplegable.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()

Detalles de la ejecución del widget de Jupyter Trazado del widget de JupyterJupyter widget run details Jupyter widget plot

Recuperación del mejor modeloRetrieve the best model

Seleccione el mejor modelo de las iteraciones.Select the best model from your iterations. La función get_output devuelve la mejor ejecución y el modelo ajustado de la última invocación de ajuste.The get_output function returns the best run and the fitted model for the last fit invocation. Mediante el uso de las sobrecargas en get_output, puede recuperar la mejor ejecución y el modelo ajustado para cualquier métrica registrada o para una iteración concreta.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)

Prueba de la precisión del mejor modeloTest the best model accuracy

Use el mejor modelo para ejecutar predicciones en el conjunto de datos de prueba para predecir las tarifas del taxi.Use the best model to run predictions on the test data set to predict taxi fares. La función predict usa el mejor modelo y predice los valores de "y", precio del recorrido, a partir del conjunto de datos x_test.The function predict uses the best model and predicts the values of y, trip cost, from the x_test data set. Imprima los 10 primeros valores de costo predichos a 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])

Calcule el valor root mean squared error de los resultados.Calculate the root mean squared error of the results. Convierta la trama de datos y_test en una lista para compararla con los valores predichos.Convert the y_test dataframe to a list to compare to the predicted values. La función mean_squared_error toma dos matrices de valores y calcula el error medio al cuadrado entre ellos.The function mean_squared_error takes two arrays of values and calculates the average squared error between them. Al tomar la raíz cuadrada del resultado, se produce un error en las mismas unidades que la variable y, costo.Taking the square root of the result gives an error in the same units as the y variable, cost. Indica aproximadamente cuánto se alejan las predicciones de la tarifa del taxi de las reales.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

Ejecute el siguiente código para calcular el error medio absoluto porcentual (MAPE) usando los conjuntos de datos y_actual y y_predict completos.Run the following code to calculate mean absolute percent error (MAPE) by using the full y_actual and y_predict data sets. Esta métrica calcula una diferencia absoluta entre cada valor predicho y real, y suma todas las diferencias.This metric calculates an absolute difference between each predicted and actual value and sums all the differences. A continuación, expresa esa suma como porcentaje del total de los valores reales.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

A partir de las dos métricas de precisión de la predicción, verá que el modelo es bastante bueno en la predicción de las tarifas de taxi a partir de las características del conjunto de datos, normalmente en un margen de +/-4,00 dólares estadounidenses y con un error del 15 %, aproximadamente.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.

El proceso tradicional de desarrollo de modelos de aprendizaje automático consume muchos recursos y requiere conocimiento del dominio y una inversión de tiempo significativa para ejecutar y comparar los resultados de docenas de modelos.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. El uso del aprendizaje automático automatizado es una manera estupenda de probar muchos modelos distintos para el escenario rápidamente.Using automated machine learning is a great way to rapidly test many different models for your scenario.

Limpieza de recursosClean up resources

No complete esta sección si planea ejecutar otros tutoriales de Azure Machine Learning.Do not complete this section if you plan on running other Azure Machine Learning tutorials.

Detención de la máquina virtual de NotebookStop the Notebook VM

Si usó una instancia de proceso o VM de cuadernos, detenga la máquina virtual cuando no la esté usando a fin de reducir el costo.If you used a compute instance or Notebook VM, stop the VM when you are not using it to reduce cost.

  1. En el área de trabajo, seleccione Compute.In your workspace, select Compute.

  2. En la lista, seleccione la máquina virtual.From the list, select the VM.

  3. Seleccione Detener.Select Stop.

  4. Cuando esté listo para volver a usar el servidor, seleccione Iniciar.When you're ready to use the server again, select Start.

Eliminar todo el contenidoDelete everything

Si no va a usar los recursos creados, elimínelos para no incurrir en cargos.If you don't plan to use the resources you created, delete them, so you don't incur any charges.

  1. En Azure Portal, seleccione Grupos de recursos a la izquierda del todo.In the Azure portal, select Resource groups on the far left.
  2. En la lista, seleccione el grupo de recursos que creó.From the list, select the resource group you created.
  3. Seleccione Eliminar grupo de recursos.Select Delete resource group.
  4. Escriba el nombre del grupo de recursos.Enter the resource group name. A continuación, seleccione Eliminar.Then select Delete.

También puede mantener el grupo de recursos pero eliminar una sola área de trabajo.You can also keep the resource group but delete a single workspace. Muestre las propiedades del área de trabajo y seleccione Eliminar.Display the workspace properties and select Delete.

Pasos siguientesNext steps

En este tutorial de aprendizaje automático, ha realizado las tareas siguientes:In this automated machine learning tutorial, you did the following tasks:

  • Ha configurado un área de trabajo y ha preparado datos para un experimento.Configured a workspace and prepared data for an experiment.
  • Ha realizado un entrenamiento mediante un modelo de regresión automatizado localmente con parámetros personalizados.Trained by using an automated regression model locally with custom parameters.
  • Ha explorado y revisado los resultados del entrenamiento.Explored and reviewed training results.

Implemente el modelo con Azure Machine Learning.Deploy your model with Azure Machine Learning.