Tutorial: Usar aprendizado de máquina automatizado para prever tarifas de táxiTutorial: Use automated machine learning to predict taxi fares

APLICA-SE A: simedição Basic simedição Enterprise                    (Atualizar para a edição Enterprise)APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

Neste tutorial, você usará o machine learning automatizado no Azure Machine Learning para criar um modelo de regressão a fim de prever preços de tarifa de táxi na cidade de Nova York.In this tutorial, you use automated machine learning in Azure Machine Learning to create a regression model to predict NYC taxi fare prices. Esse processo aceita dados de treinamento e configurações e itera automaticamente por meio de combinações de configurações de hiperparâmetro, modelos e métodos de normalização/padronização de diferentes recursos para chegar ao melhor 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.

Fluxograma

Neste tutorial, você aprende as seguintes tarefas:In this tutorial you learn the following tasks:

  • Baixar, transformar e limpar dados usando Azure Open DatasetsDownload, transform, and clean data using Azure Open Datasets
  • Treinar um modelo de regressão com aprendizado de máquina automatizadoTrain an automated machine learning regression model
  • Calcular a precisão do modeloCalculate model accuracy

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.If you don’t have an Azure subscription, create a free account before you begin. Experimente hoje mesmo a versão gratuita ou paga do Azure Machine Learning.Try the free or paid version of Azure Machine Learning today.

Pré-requisitosPrerequisites

  • Conclua o tutorial de instalação caso ainda não tenha uma máquina virtual de notebook ou um Workspace do Azure Machine Learning.Complete the setup tutorial if you don't already have an Azure Machine Learning workspace or notebook virtual machine.
  • Depois de concluir o tutorial de instalação, abra o notebook tutorials/regression-automated-ml.ipynb usando o mesmo servidor de notebook.After you complete the setup tutorial, open the tutorials/regression-automated-ml.ipynb notebook using the same notebook server.

Este tutorial também está disponível no GitHub caso você deseje executá-lo em seu próprio ambiente local.This tutorial is also available on GitHub if you wish to run it in your own local environment. Execute pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets para obter os pacotes necessários.Run pip install azureml-sdk[automl] azureml-opendatasets azureml-widgets to get the required packages.

Baixar e preparar dadosDownload and prepare data

Importe os pacotes necessários.Import the necessary packages. O pacote de conjuntos de dados abertos contém uma classe que representa cada fonte de dados (NycTlcGreen, por exemplo) para filtrar facilmente os parâmetros de data antes de baixar.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

Comece criando um dataframe para manter os dados de táxis.Begin by creating a dataframe to hold the taxi data. Ao trabalhar em um ambiente que não seja Spark, os conjuntos de dados abertos só permitem baixar um mês de dados de cada vez com determinadas classes para evitar MemoryError com grandes conjuntos de dados.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 baixar dados de táxis, busque iterativamente um mês por vez e, antes de adicioná-los ao green_taxi_df, faça uma amostragem aleatória de dois mil registros de cada mês para evitar a sobrecarga do 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. Em seguida, visualize os dados.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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 linhas × 23 colunas10 rows × 23 columns

Agora que os dados iniciais foram carregados, defina uma função para criar vários recursos baseados em tempo usando o campo datetime de coleta.Now that the initial data is loaded, define a function to create various time-based features from the pickup datetime field. Isso criará novos campos para o número do mês, dia do mês, dia da semana e hora do dia e permitirá que o modelo considere a sazonalidade com base no tempo.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 a função apply() no dataframe para aplicar iterativamente a função build_time_features() a cada linha nos dados de táxis.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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 NenhumNone NenhumNone -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 linhas × 27 colunas10 rows × 27 columns

Remova algumas das colunas de que você não precisará para treinamento ou criação de recursos adicionais.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)

Limpar dadosCleanse data

Execute a função describe() no novo dataframe para ver estatísticas resumidas 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 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00 48.000,0048000.00
médiamean 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

A partir das estatísticas de resumo, você pode observar que há vários campos com valores discrepantes ou valores que reduzem a precisão do modelo.From the summary statistics, you see that there are several fields that have outliers or values that will reduce model accuracy. Primeiro, filtre os campos lat/long para que estejam dentro dos limites da área Manhattan.First filter the lat/long fields to be within the bounds of the Manhattan area. Isso filtrará viagens de táxi mais longas ou viagens que são exceções no que diz respeito à sua relação com outros recursos.This will filter out longer taxi trips or trips that are outliers in respect to their relationship with other features.

Além disso, filtre o campo tripDistance para que tenha mais que zero, mas menos que 31 milhas (a distância Haversine entre os dois 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). Isso elimina viagens mais longas que são exceção e que têm custo divergente.This eliminates long outlier trips that have inconsistent trip cost.

Por fim, o campo totalAmount tem valores negativos para as tarifas de táxi, o que não faz sentido no contexto de nosso modelo, e o campo passengerCount tem dados inválidos com os valores mínimos iguais a zero.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 essas anomalias usando funções de consulta e remova as últimas colunas desnecessárias para o treinamento.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)

Chame describe() novamente nos dados para garantir que a limpeza funcionou conforme o esperado.Call describe() again on the data to ensure cleansing worked as expected. Agora você tem um conjunto preparado e limpo de dados de táxis, feriados e clima para usar no treinamento de 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()

Configurar o workspaceConfigure workspace

Crie um objeto de workspace a partir do workspace existente.Create a workspace object from the existing workspace. Um Workspace é uma classe que aceita suas informações de recursos e assinatura do Azure.A Workspace is a class that accepts your Azure subscription and resource information. Ele também cria um recurso de nuvem para monitorar e acompanhar a execução do seu modelo.It also creates a cloud resource to monitor and track your model runs. Workspace.from_config() lê o arquivo config. json e carrega os detalhes de autenticação em um objeto chamado ws.Workspace.from_config() reads the file config.json and loads the authentication details into an object named ws. ws é usado em todo o restante do código neste tutorial.ws is used throughout the rest of the code in this tutorial.

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

Divida os dados em conjuntos de treinamento e testeSplit the data into train and test sets

Divida os dados em conjuntos de treinamento e teste usando a função train_test_split na biblioteca scikit-learn.Split the data into training and test sets by using the train_test_split function in the scikit-learn library. Essa função separa os dados no conjunto de dados X (recursos) para treinamento do modelo e no conjunto de dados Y (valores a serem previstos) para teste.This function segregates the data into the x (features) data set for model training and the y (values to predict) data set for testing.

O parâmetro test_size determina a porcentagem de dados a ser alocada para teste.The test_size parameter determines the percentage of data to allocate to testing. O parâmetro random_state define uma semente para o gerador aleatório, de modo que suas divisões de teste de treinamento sejam determinísticas.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)

A finalidade dessa etapa é ter pontos de dados para testar o modelo acabado que não foram usados para treinar o modelo a fim de medir a verdadeira precisão.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.

Em outras palavras, um modelo bem treinado deve ser capaz de fazer previsões com precisão por meio de dados que ainda não viu.In other words, a well-trained model should be able to accurately make predictions from data it hasn't already seen. Agora, você tem dados preparados para treinar automaticamente um modelo de machine learning.You now have data prepared for auto-training a machine learning model.

Treinar um modelo automaticamenteAutomatically train a model

Para treinar o modelo automaticamente, execute as seguintes etapas:To automatically train a model, take the following steps:

  1. Defina configurações para a execução do experimento.Define settings for the experiment run. Anexe seus dados de treinamento à configuração e modifique as configurações que controlam o processo de treinamento.Attach your training data to the configuration, and modify settings that control the training process.
  2. Envie o experimento para ajuste do modelo.Submit the experiment for model tuning. Depois de enviar o experimento, o processo itera diferentes algoritmos de aprendizado de máquina e configurações de hiperparâmetro, aderindo às restrições definidas.After submitting the experiment, the process iterates through different machine learning algorithms and hyperparameter settings, adhering to your defined constraints. Ele escolhe o modelo mais adequado otimizando uma métrica de precisão.It chooses the best-fit model by optimizing an accuracy metric.

Definir configurações de treinamentoDefine training settings

Defina as configurações de modelos e os parâmetros do experimento para o treinamento.Define the experiment parameter and model settings for training. Exiba a lista completa das configurações.View the full list of settings. O envio do experimento com essas configurações padrão demorará aproximadamente de 5 a 20 minutos; se quiser um tempo de execução menor, reduza o 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.

PropriedadeProperty Valor neste tutorialValue in this tutorial DESCRIÇÃODescription
iteration_timeout_minutesiteration_timeout_minutes 22 Limite de tempo em minutos para cada iteração.Time limit in minutes for each iteration. Reduza esse valor para diminuir o runtime total.Reduce this value to decrease total runtime.
experiment_timeout_minutesexperiment_timeout_minutes 2020 Quantidade máxima de tempo em minutos que todas as iterações combinadas podem levar antes que o experimento seja encerrado.Maximum amount of time in minutes that all iterations combined can take before the experiment terminates.
enable_early_stoppingenable_early_stopping TrueTrue Sinalizador para permitir o encerramento antecipado se a pontuação não estiver melhorando em curto prazo.Flag to enble early termination if the score is not improving in the short term.
primary_metricprimary_metric spearman_correlationspearman_correlation Métrica que você deseja otimizar.Metric that you want to optimize. O modelo mais adequado será escolhido com base nessa métrica.The best-fit model will be chosen based on this metric.
featurizationfeaturization autoauto Com o uso de True, o experimento pode pré-processar os dados de entrada (lidar com os dados ignorados, converter texto em 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 o nível de registro em log.Controls the level of logging.
n_cross_validationsn_cross_validations 55 Número de divisões de validação cruzada para executar quando os dados de validação não são especificados.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 as configurações de treinamento definidas como um parâmetro **kwargs para um objeto AutoMLConfig.Use your defined training settings as a **kwargs parameter to an AutoMLConfig object. Além disso, especifique os dados de treinamento e o tipo de modelo, que é regression, neste 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)

Observação

As etapas de pré-processamento automatizado de machine learning (normalização de recursos, manipulação de dados ausentes, conversão de texto em números etc.) tornam-se parte do modelo subjacente.Automated machine learning pre-processing steps (feature normalization, handling missing data, converting text to numeric, etc.) become part of the underlying model. Ao usar o modelo para previsões, as mesmas etapas de pré-processamento aplicadas durante o treinamento são aplicadas aos dados de entrada automaticamente.When using the model for predictions, the same pre-processing steps applied during training are applied to your input data automatically.

Treinar o modelo de regressão automáticaTrain the automatic regression model

Criar um objeto de experimento em seu workspace.Create an experiment object in your workspace. Um experimento atua como um contêiner para suas execuções individuais.An experiment acts as a container for your individual runs. Transmita o objeto automl_config definido para o experimento e defina a saída como True para exibir o andamento durante a execução.Pass the defined automl_config object to the experiment, and set the output to True to view progress during the run.

Após começar o experimento, a saída mostrada é atualizada em tempo real enquanto o experimento é executado.After starting the experiment, the output shown updates live as the experiment runs. Para cada iteração, você vê o tipo de modelo, a duração da execução e a precisão do treinamento.For each iteration, you see the model type, the run duration, and the training accuracy. O campo BEST monitora a melhor pontuação de treinamento em execução com base no 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

Explorar os resultadosExplore the results

Explore os resultados do treinamento automático com um widget do Jupyter.Explore the results of automatic training with a Jupyter widget. O widget permite que você veja um grafo e uma tabela de todas as iterações de execução individuais, em conjunto com metadados e métricas de precisão de treinamento.The widget allows you to see a graph and table of all individual run iterations, along with training accuracy metrics and metadata. Além disso, você pode filtrar em métricas de precisão diferentes da métrica primária com o seletor de lista suspensa.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()

Detalhes de execução do widget do Jupyter Gráfico do widget do JupyterJupyter widget run details Jupyter widget plot

Recuperar o melhor modeloRetrieve the best model

Selecione o melhor modelo entre suas iterações.Select the best model from your iterations. A função get_output retorna a melhor execução e o modelo ajustado para a última invocação de ajuste.The get_output function returns the best run and the fitted model for the last fit invocation. Ao usar as sobrecargas em get_output, você pode recuperar o modelo de melhor execução e ajuste para qualquer métrica registrada em log ou iteração em particular.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)

Testar a precisão do melhor modeloTest the best model accuracy

Use o melhor modelo para executar previsões no conjunto de dados de teste e prever as tarifas de táxi.Use the best model to run predictions on the test data set to predict taxi fares. A função predict usa o melhor modelo e prevê os valores de Y, custo da corrida, do conjunto de dados x_test.The function predict uses the best model and predicts the values of y, trip cost, from the x_test data set. Imprima os 10 primeiros valores de custo previstos 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 o root mean squared error dos resultados.Calculate the root mean squared error of the results. Converta o dataframe y_test em uma lista para comparar com os valores previstos.Convert the y_test dataframe to a list to compare to the predicted values. A função mean_squared_error usa duas matrizes de valores e calcula o erro médio ao quadrado entre elas.The function mean_squared_error takes two arrays of values and calculates the average squared error between them. Usar a raiz quadrada do resultado gera um erro nas mesmas unidades que a variável y, custo.Taking the square root of the result gives an error in the same units as the y variable, cost. Indica aproximadamente o quão distantes as previsões das tarifas de táxi estão das tarifas reais.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

Execute o código a seguir para calcular o MAPE (desvio percentual absoluto médio) usando os conjuntos de dados y_actual e 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. Essa métrica calcula uma diferença absoluta entre cada valor previsto e real e somas todas as diferenças.This metric calculates an absolute difference between each predicted and actual value and sums all the differences. Em seguida, expressa a soma como uma porcentagem do total de valores reais.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

Nas duas métricas de precisão da previsão, você vê que o modelo é razoavelmente bom em prever as tarifas de táxi por meio dos recursos do conjunto de dados, normalmente dentro de +- $ 4,00 e com erro de aproximadamente 15%.From the two prediction accuracy metrics, you see that the model is fairly good at predicting taxi fares from the data set's features, typically within +- $4.00, and approximately 15% error.

O processo de desenvolvimento do modelo de machine learning tradicional é altamente intensivo de recursos e requer conhecimento de domínio significativo e investimento de tempo para executar e comparar os resultados de dezenas 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. A utilização do aprendizado de máquina automatizado é uma ótima maneira de testar rapidamente muitos modelos diferentes para seu cenário.Using automated machine learning is a great way to rapidly test many different models for your scenario.

Limpar recursosClean up resources

Não conclua esta seção se você planeja executar outros tutoriais do Azure Machine Learning.Do not complete this section if you plan on running other Azure Machine Learning tutorials.

Interromper a VM do notebookStop the Notebook VM

Se você usou uma instância de computação ou VM de notebook, interrompa a VM quando não a estiver usando para reduzir o custo.If you used a compute instance or Notebook VM, stop the VM when you are not using it to reduce cost.

  1. No workspace, selecione Computação.In your workspace, select Compute.

  2. Selecione a VM na lista.From the list, select the VM.

  3. Selecione Interromper.Select Stop.

  4. Quando estiver pronto para usar o servidor novamente, selecione Iniciar.When you're ready to use the server again, select Start.

Excluir tudoDelete everything

Se você não pretende usar os recursos criados, exclua-os para não gerar encargos.If you don't plan to use the resources you created, delete them, so you don't incur any charges.

  1. No portal do Azure, selecione Grupos de recursos no canto esquerdo.In the Azure portal, select Resource groups on the far left.
  2. Selecione o grupo de recursos criado na lista.From the list, select the resource group you created.
  3. Selecione Excluir grupo de recursos.Select Delete resource group.
  4. Insira o nome do grupo de recursos.Enter the resource group name. Em seguida, selecione Excluir.Then select Delete.

Você também pode manter o grupo de recursos, mas excluir um único workspace.You can also keep the resource group but delete a single workspace. Exiba as propriedades do workspace e, em seguida, selecione Excluir.Display the workspace properties and select Delete.

Próximas etapasNext steps

Neste tutorial de aprendizado de máquina automatizado, você executou as seguintes tarefas:In this automated machine learning tutorial, you did the following tasks:

  • Configurou um workspace e preparou os dados para um experimento.Configured a workspace and prepared data for an experiment.
  • Treinou usando um modelo de regressão automatizado localmente com parâmetros personalizados.Trained by using an automated regression model locally with custom parameters.
  • Explorou e examinou os resultados do treinamento.Explored and reviewed training results.

Implantar seu modelo com o Azure Machine Learning.Deploy your model with Azure Machine Learning.