Compartilhar via


Configurar o AutoML para treinar um modelo de previsão de séries temporais com o Python (SDKv1)

APLICA-SE A: SDK do Python azureml v1

Neste artigo, você aprenderá a configurar o treinamento de AutoML para modelos de previsão de séries temporais com o AutoML do Azure Machine Learning automatizado no SDK do Python do Azure Machine Learning.

Para fazer isso, você deve:

  • Preparar dados para o modelo de série temporal.
  • Configurar parâmetros de série temporal específicos em um objeto AutoMLConfig.
  • Executar previsões com dados de série temporal.

Para uma experiência com pouco código, consulte o Tutorial: Prever a demanda com o machine learning automatizado para conhecer um exemplo de previsão de série temporal usando o AutoML no Estúdio do Azure Machine Learning.

Ao contrário dos métodos de série temporal clássicos, no machine learning automatizado, os valores de série temporal passada são “dinamizados” para se tornarem dimensões adicionais para o regressor junto com outros preditores. Essa abordagem incorpora várias variáveis contextuais e sua relação entre si durante o treinamento. Como vários fatores podem influenciar uma previsão, esse método se alinha bem com os cenários reais de previsão. Por exemplo, em uma previsão de vendas, as interações de tendências históricas, a taxa de câmbio, e o preço orientam o resultado das vendas.

Pré-requisitos

Para este artigo, você precisa,

Dados de treinamento e validação

A diferença mais importante entre um tipo de tarefa de regressão de previsão e o tipo de tarefa de regressão no AutoML é a inclusão de um recurso nos seus dados de treinamento que representa uma série temporal válida. Uma série temporal regular tem uma frequência bem definida e consistente e um valor em cada ponto de amostra em um período de tempo contínuo.

Importante

Ao treinar um modelo para prever valores futuros, verifique se todos os recursos usados no treinamento podem ser usados ao executar previsões para o horizonte pretendido. Por exemplo, ao criar uma previsão de demanda, incluir um recurso para o preço de ações atual poderia aumentar imensamente a precisão do treinamento. No entanto, se você pretende fazer uma previsão com horizonte longo, talvez não seja possível prever com precisão valores de ações futuros correspondentes a pontos de série temporal futuros, e a precisão do modelo poderá ser prejudicada.

Você pode especificar dados de validação e de treinamento separados diretamente no objeto AutoMLConfig. Saiba mais sobre o AutoMLConfig.

Para a previsão de séries temporais, somente a ROCV (validação cruzada de origem) é usada para validação por padrão. O ROCV divide a série em dados de treinamento e de validação usando um ponto de tempo de origem. Deslizar a origem no tempo gera as dobras de validação cruzada. Essa estratégia preserva a integridade dos dados da série temporal e elimina o risco de vazamento de dados.

Diagrama mostrando dobras de validação cruzada separa os conjuntos de treinamento e validação com base no tamanho da etapa de validação cruzada.

Passe os dados de treinamento e validação como um conjunto de dados para o parâmetro training_data. Defina o número de dobras de validação cruzada com o parâmetro n_cross_validations e defina o número de períodos entre duas dobras de validação cruzada consecutivas com cv_step_size. Você também pode deixar um ou ambos os parâmetros vazios e o AutoML os definirá automaticamente.

APLICA-SE A: SDK do Python azureml v1

automl_config = AutoMLConfig(task='forecasting',
                             training_data= training_data,
                             n_cross_validations="auto", # Could be customized as an integer
                             cv_step_size = "auto", # Could be customized as an integer
                             ...
                             **time_series_settings)

Você também pode trazer seus próprios dados de validação, saiba mais em configurar divisões de dados e validação cruzada no AutoML.

Saiba mais sobre como o autoML aplica a validação cruzada para evitar os modelos com sobreajuste.

Configurar o experimento

O objeto AutoMLConfig define as configurações e os dados necessários para uma tarefa de machine learning automatizado. A configuração de um modelo de previsão é semelhante à configuração de um modelo de regressão padrão, mas determinados modelos, opções de configuração e etapas de personalização existem especificamente para dados de série temporal.

Modelos com suporte

O aprendizado de máquina automatizado tenta automaticamente modelos e algoritmos diferentes como parte do processo de criação e ajuste do modelo. Como usuário, não há necessidade de especificar o algoritmo. Para prever experimentos, os modelos de série temporal nativa e de aprendizado profundo fazem parte do sistema de recomendação.

Dica

Os modelos de regressão tradicionais também são testados como parte do sistema de recomendação para prever experimentos. Confira uma lista completa de modelos com suporte na documentação de referência de SDK.

Definições de configuração

Como em um problema de regressão, você define parâmetros de treinamento padrão, como tipo de tarefa, número de iterações, dados de treinamento e número de validações cruzadas. Tarefas de previsão exigem os parâmetros time_column_name e forecast_horizon para configurar seu experimento. Se os dados incluíram várias séries time_series_id_column_names temporais, como dados de vendas para vários armazenamentos ou dados de energia em diferentes estados, o ML automatizado detecta isso automaticamente e define o parâmetro time_series_id_column_names (versão prévia) para você. Você também pode incluir parâmetros adicionais para configurar melhor sua execução. Confira a seção de Configurações opcionais para obter mais detalhes sobre o que pode ser incluído.

Importante

A identificação automática de séries temporais está atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Nome do parâmetro Descrição
time_column_name Usado para especificar a coluna datetime nos dados de entrada usados para criar a série temporal e inferir sua frequência.
forecast_horizon Define quantos períodos encaminhar você gostaria de prever. O horizonte está em unidades da frequência da série temporal. As unidades são baseadas no intervalo de tempo dos seus dados de treinamento (por exemplo, mensalmente, semanalmente) em que o forecaster deve prever.

O código a seguir,

  • Usa a classe ForecastingParameters para definir os parâmetros de previsão para o treinamento do experimento
  • Define o time_column_name para o campo day_datetime no conjunto de dados.
  • Define o forecast_horizon como 50 para prever todo o conjunto de testes.
from azureml.automl.core.forecasting_parameters import ForecastingParameters

forecasting_parameters = ForecastingParameters(time_column_name='day_datetime', 
                                               forecast_horizon=50,
                                               freq='W')
                                              

Elas forecasting_parameters são passadas para o AutoMLConfig objeto padrão junto com o forecasting tipo de tarefa, a métrica primária, os critérios de saída e os dados de treinamento.

from azureml.core.workspace import Workspace
from azureml.core.experiment import Experiment
from azureml.train.automl import AutoMLConfig
import logging

automl_config = AutoMLConfig(task='forecasting',
                             primary_metric='normalized_root_mean_squared_error',
                             experiment_timeout_minutes=15,
                             enable_early_stopping=True,
                             training_data=train_data,
                             label_column_name=label,
                             n_cross_validations="auto", # Could be customized as an integer
                             cv_step_size = "auto", # Could be customized as an integer
                             enable_ensembling=False,
                             verbosity=logging.INFO,
                             forecasting_parameters=forecasting_parameters)

A quantidade de dados necessária para treinamento com êxito um modelo de previsão com ML automatizado é influenciada forecast_horizon pelos n_cross_validations valores, e target_lags ou target_rolling_window_size especificados quando você configura o AutoMLConfig.

A fórmula a seguir calcula a quantidade de dados históricos que seriam necessários para construir recursos de série temporal.

Dados históricos mínimos necessários: (2x forecast_horizon ) + # n_cross_validations + Max (Max ( target_lags ), target_rolling_window_size )

Uma Error exception será gerada para qualquer série no conjunto de dados que não atenda à quantidade necessária de dados históricos para as configurações relevantes especificadas.

Etapas de personalização

Em cada experimento automatizado de aprendizado de máquina, técnicas de dimensionamento automático e de normalização são aplicadas aos seus dados por padrão. Essas técnicas são tipos de definição de recursos que ajudamcertos algoritmos que são sensíveis a recursos em escalas diferentes. Saiba mais sobre as etapas de personalização padrão no personalização no AutoML

No entanto, as etapas a seguir são executadas somente para tipos de tarefa forecasting:

  • Detectar a frequência de amostragem da série temporal (por exemplo, por hora, diária, semanal) e criar registros novos para pontos de tempo ausentes para tornar a série contínua.
  • Imputar valores ausentes no destino (via preenchimento à frente) e colunas de recurso (usando valor mediano de coluna)
  • Criar recursos com base em identificadores de série temporal para habilitar efeitos fixos em diferentes séries
  • Criar recursos baseados em tempo para ajudar no aprendizado de padrões sazonais
  • Codificar variáveis categóricas em quantidades numéricas
  • Detecte as séries temporais não estacionárias e diferencie-as automaticamente para mitigar o impacto das raízes de unidade.

Para exibir a lista completa de possíveis recursos de engenharia gerados a partir de dados de séries temporais, consulte Classe TimeIndexFeaturizer.

Observação

As etapas de definição de recursos de machine learning automatizado (normalização de recursos, manipulação de dados ausentes, conversão de texto em números, etc.) tornam-se parte do modelo subjacente. Ao usar o modelo para previsões, as mesmas etapas de definição de recursos aplicadas durante o treinamento são aplicadas aos dados de entrada automaticamente.

Personalizar a definição de recursos

Você também tem a opção de personalizar suas configurações de definição de recursos para garantir que os dados e recursos usados para treinar seu modelo de ML resultem em previsões relevantes.

As personalizações com suporte para forecasting as tarefas incluem:

Personalização Definição
Atualização de finalidade de coluna Substituir o tipo de recurso de autodetecção para a coluna especificada.
Atualização de parâmetro do transformador Atualizar os parâmetros para o transformador especificado. Atualmente dá suporte a imputer (fill_value e mediana).
Remover colunas Especifica colunas a serem removidas da definição de recursos.

Para personalizar definições de recursos, especifique "featurization": FeaturizationConfig em seu objetoAutoMLConfig. Saiba mais sobre a definição de recursos personalizado.

Observação

A funcionalidade remover colunas foi preterida a partir da versão 1.19 do SDK. Remova as colunas do conjunto de dados como parte da limpeza, antes de consumi-la em seu experimento de ML automatizado.

featurization_config = FeaturizationConfig()

# `logQuantity` is a leaky feature, so we remove it.
featurization_config.drop_columns = ['logQuantitity']

# Force the CPWVOL5 feature to be of numeric type.
featurization_config.add_column_purpose('CPWVOL5', 'Numeric')

# Fill missing values in the target column, Quantity, with zeroes.
featurization_config.add_transformer_params('Imputer', ['Quantity'], {"strategy": "constant", "fill_value": 0})

# Fill mising values in the `INCOME` column with median value.
featurization_config.add_transformer_params('Imputer', ['INCOME'], {"strategy": "median"})

Se você estiver usando o Estúdio do Azure Machine Learning para seu experimento, confira como personalizar a personalização de recursos no estúdio.

Configurações opcionais

Mais configurações opcionais estão disponíveis para tarefas de previsão, como habilitar o aprendizado profundo e especificar uma agregação de janelas sem interrupção como destino. Uma lista completa de mais parâmetros está disponível na documentação de referência do SDK ForecastingParameters.

Frequência & agregação de dados de destino

Use a frequência, freq, o parâmetro para ajudar a evitar falhas causadas por dados irregulares. Dados irregulares incluem dados que não seguem uma cadência definida, como dados diários ou por hora.

Para dados altamente irregulares ou para diferentes necessidades de negócios, os usuários podem, opcionalmente, definir a frequência de previsão desejada freq, e especificar target_aggregation_function o para agregar a coluna de destino da série temporária. Usar essas duas configurações em seu objeto AutoMLConfig pode ajudar a economizar algum tempo na preparação de dados.

As operações de agregação com suporte para valores de coluna de destino incluem:

Função Descrição
sum  Soma dos valores de destino
mean  Média ou média de valores de destino
min Valor mínimo de um destino
max Valor máximo de um destino

Habilitar o aprendizado profundo

Observação

O suporte do DNN para previsão em machine learning automatizado está em versão prévia e não tem suporte para execuções locais ou execuções iniciadas no Databricks.

Você também pode aplicar o aprendizado profundo com redes neurais profundas, DNNs, para melhorar as pontuações do seu modelo. O aprendizado profundo do machine learning automatizado possibilita a previsão de dados de série temporal monovariável e multivariada.

Os modelos de aprendizado profundo têm três recursos intrínsecos:

  1. Eles podem aprender com mapeamentos arbitrários de entradas para saídas
  2. Eles tem suporte a várias entradas e saídas
  3. Eles podem extrair automaticamente padrões em dados de entrada que se estendem por longas sequências.

Para habilitar o aprendizado profundo, de definir o enable_dnn=True no objeto AutoMLConfig.

automl_config = AutoMLConfig(task='forecasting',
                             enable_dnn=True,
                             ...
                             forecasting_parameters=forecasting_parameters)

Aviso

Quando você habilita o DNN para experimentos criados com o SDK, as melhores explicações de modelo são desabilitadas.

Para habilitar o DNN para um experimento do AutoML criado no Azure Machine Learning Studio, confira as configurações de tipo de tarefa nas instruções da interface do usuário do estúdio.

Agregações de janelas sem interrupção como destino

Frequentemente, a melhor informação que um preditor pode ter é um valor recente no destino. Ter agregações de janelas sem interrupção como destino permitem adicionar uma agregação sem interrupção de valores de dados como recursos. Gerar e usar esses recursos como dados contextuais extras ajuda a tornar o modelo de treinamento mais preciso.

Por exemplo, digamos que você deseja prever a demanda de energia. Você pode desejar adicionar um recurso de janela sem interrupção de três dias para levar em consideração as alterações térmicas de espaços aquecidos. Neste exemplo, crie essa janela definindo target_rolling_window_size= 3 no construtor AutoMLConfig.

A tabela mostra a engenharia de recursos resultante que ocorre quando a agregação de janela é aplicada. Colunas para mínimo, máximo e soma são geradas em uma janela deslizante de três com base nas configurações definidas. Cada linha tem um novo recurso calculado, no caso do carimbo de data/hora de 8 de setembro de 2017 4:00, os valores máximo, mínimo e soma são calculados usando os valores de demanda em 8 de setembro de 2017 1:00–3:00. Essa janela de três se desloca para preencher os dados das linhas restantes.

Janelas sem interrupção como destino

Veja um exemplo de código Python que aplica o recurso de agregação de janela sem interrupção.

Manipulação de séries curtas

O ML automatizado considera uma série temporal uma pequena sequência se não houver pontos de dados suficientes para conduzir as fases de treinamento e validação do desenvolvimento de modelo. O número de pontos de dados varia para cada experimento e depende do max_horizon, do número de divisões de validação cruzada e do comprimento do modelo lookback, que é o máximo do histórico necessário para construir os recursos da série temporal.

O ML automatizado oferece manipulação de série curta por padrão com o short_series_handling_configuration parâmetro no objetoForecastingParameters.

Para habilitar o tratamento de séries curtas, o parâmetro freq também deve ser definido. Para definir uma frequência por hora, definiremos freq='H'. Veja as opções de cadeia de caracteres de frequência visitando a seção objetos DataOffset da página Séries temporais de pandas. Para alterar o comportamento padrão, short_series_handling_configuration = 'auto' atualize o parâmetro short_series_handling_configuration em seu objeto ForecastingParameter.

from azureml.automl.core.forecasting_parameters import ForecastingParameters

forecast_parameters = ForecastingParameters(time_column_name='day_datetime', 
                                            forecast_horizon=50,
                                            short_series_handling_configuration='auto',
                                            freq = 'H',
                                            target_lags='auto')

A tabela a seguir resume as configurações disponíveis para short_series_handling_config.

Configuração Descrição
auto O valor padrão para tratamento de série curta.
- Se todas as séries forem curtas, preencha os dados.
- Se nem todas as séries forem curtas, descarte as séries curtas.
pad Se short_series_handling_config = pad, o ML automatizado adiciona valores aleatórios a cada série curta encontrada. A seguir, a lista dos tipos de colunas e com o que são preenchidas:
- Colunas de objeto com NaNs
- Colunas numéricas com 0
- Colunas boolianas/lógicas com False
A coluna de destino é preenchida com valores aleatórios com média de zero e desvio padrão de 1.
drop Se short_series_handling_config = drop, o ML automatizado descarta a série curta e não será usado para treinamento ou previsão. As previsões para essas séries retornarão as de NaN.
None Nenhuma série é preenchimento ou descartado

Aviso

O preenchimento pode afetar a precisão do modelo resultante, pois estamos introduzindo dados artificiais apenas para passar do treinamento sem falhas. Se muitas das séries são curtas, você também poderá ver algum impacto nos resultados da explicabilidade

Detecção e processamento de séries temporais não estacionárias

Uma série temporal cujos momentos (média e variância) mudam ao longo do tempo é chamada de não estacionária. Por exemplo, as séries temporais que exibem tendências estocásticas são não estacionárias por natureza. Para visualizar isso, a imagem abaixo plota uma série que geralmente é uma tendência ascendente. Agora, calcule e compare os valores médios da primeira e da segunda metade da série. Elas são a mesma coisa? Aqui, a média da série na primeira metade do gráfico é significativamente menor do que na segunda metade. O fato de que a média da série depende do intervalo de tempo que está sendo observado é um exemplo dos momentos de variação de tempo. Aqui, a média de uma série é o primeiro momento.

Diagrama que mostra as vendas de varejo para uma série temporal não estacionária.

Em seguida, vamos examinar a imagem, que exibe em gráfico a série original nas primeiras diferenças, $x_t = y_t - y_{t-1}$ onde $x_t$ é a alteração nas vendas de varejo e $y_t$ e $y_{t-1}$ representam a série original e o primeiro retardo dela, respectivamente. A média da série é praticamente constante, independentemente do período que está sendo observado. Este é um exemplo de uma série temporal estacionária de primeira ordem. O motivo pelo qual adicionamos o termo da primeira ordem é porque o primeiro momento (média) não muda com o intervalo de tempo. E o mesmo não pode ser dito sobre a variância, que é um segundo momento.

Diagrama que mostra as vendas de varejo para uma série temporal fracamente estacionária.

Os modelos de machine learning do AutoML não podem processar inerentemente tendências estocásticas ou outros problemas conhecidos associados a séries temporais não estacionárias. Como resultado, a exatidão da previsão fora da amostra será "inadequada" se essas tendências estiverem presentes.

O AutoML analisa automaticamente o conjunto de dados da série temporal para verificar se ela é estacionária ou não. Quando séries temporais não estacionárias são detectadas, o AutoML aplica automaticamente uma transformação de diferenciação para mitigar o efeito da série temporal não estacionária.

Execute o experimento

Quando o objeto AutoMLConfig estiver pronto, você poderá enviar o experimento. Após a conclusão do modelo, recupere a melhor iteração de execução.

ws = Workspace.from_config()
experiment = Experiment(ws, "Tutorial-automl-forecasting")
local_run = experiment.submit(automl_config, show_output=True)
best_run, fitted_model = local_run.get_output()

Previsões com o melhor modelo

Use a melhor iteração de modelo para prever valores de dados que não foram usados para treinar o modelo.

Avaliar a precisão do modelo com uma previsão sem interrupção

Antes de colocar um modelo em produção, você deve avaliar sua precisão em um conjunto de testes conduzido fora dos dados de treinamento. Um procedimento de melhor prática é a chamada avaliação sem interrupção, que encaminha o preditor treinado no tempo ao longo do conjunto de testes, com média de métricas de erro em várias janelas de previsão para obter estimativas estatisticamente robustas para algum conjunto de métricas escolhidas. O ideal é que o conjunto de testes para a avaliação seja longo em relação ao horizonte de previsão do modelo. Caso contrário, as estimativas de erro de previsão podem apresentar ruído estatístico e, portanto, ser menos confiáveis.

Por exemplo, suponha que você treine um modelo sobre vendas diárias para prever a demanda futura de até duas semanas (14 dias). Se houver dados históricos suficientes disponíveis, você poderá reservar os últimos meses e até mesmo um ano dos dados para o conjunto de testes. A avaliação sem interrupção começa gerando uma previsão de 14 dias à frente para as duas primeiras semanas do conjunto de testes. Em seguida, o forecaster avança alguns dias no conjunto de testes, e você gera outra previsão de 14 dias à frente da nova posição. O processo continua até você chegar ao final do conjunto de testes.

Para fazer uma avaliação sem interrupção, chame o método rolling_forecast do fitted_model e, em seguida, compute as métricas desejadas no resultado. Por exemplo, suponha que você tenha recursos de conjunto de testes em um DataFrame do Pandas chamado test_features_df, e que o conjunto de testes defina valores reais do destino em uma matriz numpy chamada test_target. Uma avaliação sem interrupção usando o erro quadrado médio é mostrada no seguinte exemplo de código:

from sklearn.metrics import mean_squared_error
rolling_forecast_df = fitted_model.rolling_forecast(
    test_features_df, test_target, step=1)
mse = mean_squared_error(
    rolling_forecast_df[fitted_model.actual_column_name], rolling_forecast_df[fitted_model.forecast_column_name])

Na amostra acima, o tamanho da etapa para a previsão sem interrupção é definido como um, o que significa que a previsão é adiantada em um período, ou um dia em nosso exemplo de previsão de demanda, em cada iteração. O número total de previsões retornadas por rolling_forecast, portanto, depende do comprimento do conjunto de testes e do tamanho dessa etapa. Para obter mais detalhes e exemplos, confira a documentação de rolling_forecast() e o notebook de previsão a partir de dados de treinamento.

Previsão para o futuro

A função forecast_quantiles() permite especificações de quando as previsões devem começar, ao contrário do método predict(), que normalmente é usado para tarefas de classificação e regressão. Por padrão, o método forecast_quantiles () gera uma previsão de ponto ou uma previsão média/mediana sobre a qual não há um cone de incerteza. Saiba mais no notebook sobre previsão com dados de treinamento.

No exemplo a seguir, você primeiro substitui todos os valores em y_pred por NaN. Nesse caso, a origem da previsão está no final dos dados de treinamento. No entanto, se você substituiu apenas a segunda metade de y_pred por NaN, a função manterá os valores numéricos na primeira metade sem modificações, mas preverá os valores de NaN na segunda metade. A função retorna os valores previstos e os recursos alinhados.

Você também pode usar o parâmetro forecast_destination na função forecast_quantiles() para prever valores até uma data especificada.

label_query = test_labels.copy().astype(np.float)
label_query.fill(np.nan)
label_fcst, data_trans = fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8))

Muitas vezes, os clientes querem entender as previsões em um quantil específico da distribuição. Por exemplo, quando a previsão é usada para controlar o inventário, como itens de supermercado ou máquinas virtuais para um serviço de nuvem. Nesses casos, o ponto de controle é geralmente algo como "queremos que o item esteja em estoque e não execute 99% do tempo". O exemplo a seguir demonstra como especificar quais quantis você gostaria de ver em suas previsões, como 50º ou 95º percentil. Se você não especificar um quantil, como no exemplo de código mencionado anteriormente, somente as previsões do 50º percentil serão geradas.

# specify which quantiles you would like 
fitted_model.quantiles = [0.05,0.5, 0.9]
fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8))

É possível calcular as métricas do modelo, como RMSE (raiz do erro quadrático médio) ou MAPE (erro percentual absoluto médio) para fazer uma estimativa do desempenho dos modelos. Confira a seção Avaliar do notebook de exigência de compartilhamento de bicicleta para obter um exemplo.

Após a definição da precisão geral do modelo, a próxima etapa mais realista é usar o modelo para prever valores futuros desconhecidos.

Forneça um conjunto de dados no mesmo formato do conjunto de teste test_dataset, mas com datetimes futuros, e o conjunto de previsão resultante será os valores previstos para cada etapa da série temporal. Suponha que os últimos registros de série temporal no conjunto de dados eram de 31/12/2018. Para prever a demanda do dia seguinte (ou quantos períodos forem necessários prever, <= forecast_horizon), crie um único registro de série temporal para cada loja para 01/01/2019.

day_datetime,store,week_of_year
01/01/2019,A,1
01/01/2019,A,1

Repita as etapas necessárias para carregar esses dados futuros em um dataframe e, em seguida, execute best_run.forecast_quantiles(test_dataset) para prever valores futuros.

Observação

Previsões em amostra não têm suporte para previsão com ML automatizado quando target_lags e/ou target_rolling_window_size estão habilitados.

Previsão em escala

Há cenários em que um único modelo de machine learning é insuficiente e vários modelos de machine learning são necessários. Por exemplo, prever as vendas de cada loja individual para uma marca ou adaptar uma experiência a usuários individuais. Criar um modelo para cada instância pode levar a resultados aprimorados em vários problemas de aprendizado de máquina.

O agrupamento é um conceito na previsão de série temporal que permite que a série temporal seja combinada para treinar um modelo individual por grupo. Essa abordagem pode ser particularmente útil se você tiver uma série temporal que exija suavização, preenchimento ou entidades no grupo que podem se beneficiar do histórico ou das tendências de outras entidades. Muitos modelos e a previsão de série temporal hierárquica são soluções da plataforma de machine learning automatizado para esses cenários de previsão de grande escala.

Muitos modelos

A solução Azure Machine Learning de muitos modelos com o machine learning automatizado permite que os usuários treinem e gerenciem milhões de modelos em paralelo. O acelerador de solução de vários modelos utiliza pipelines do Azure Machine Learning para treinar o modelo. Especificamente, um objeto Pipeline e ParalleRunStep são usados e exigem parâmetros de configuração específicos definidos por meio do ParallelRunConfig.

O diagrama a seguir mostra o fluxo de trabalho para a solução de muitos modelos.

Diagrama de conceito de muitos modelos

O código a seguir demonstra os principais parâmetros que os usuários precisam para configurar a execução de seus vários modelos. Confira o notebook Muitos modelos – ML Automatizado para obter muitos exemplos de previsão de modelos

from azureml.train.automl.runtime._many_models.many_models_parameters import ManyModelsTrainParameters

partition_column_names = ['Store', 'Brand']
automl_settings = {"task" : 'forecasting',
                   "primary_metric" : 'normalized_root_mean_squared_error',
                   "iteration_timeout_minutes" : 10, #This needs to be changed based on the dataset. Explore how long training is taking before setting this value 
                   "iterations" : 15,
                   "experiment_timeout_hours" : 1,
                   "label_column_name" : 'Quantity',
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   "time_column_name": 'WeekStarting',
                   "max_horizon" : 6,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,}

mm_paramters = ManyModelsTrainParameters(automl_settings=automl_settings, partition_column_names=partition_column_names)

Previsão de série temporal hierárquica

Na maioria dos aplicativos, os clientes precisam entender suas previsões em um nível macro e micro da empresa. As previsões podem prever as vendas de produtos em diferentes localizações geográficas ou entender a demanda esperada da força de trabalho para diferentes organizações em uma empresa. A capacidade de treinar um modelo de machine learning para prever de forma inteligente os dados de hierarquia é essencial.

Uma série temporal hierárquica é uma estrutura na qual cada uma das séries exclusivas é organizada em uma hierarquia com base em dimensões como geografia ou tipo de produto. O exemplo a seguir mostra dados com atributos exclusivos que formam uma hierarquia. Nossa hierarquia é definida por: tipo de produto, como fones de ouvido ou tablets, categoria do produto, que divide os tipos de produtos em acessórios e dispositivos, e a região em que os produtos são vendidos.

Exemplo de tabela de dados brutos para dados hierárquicos

Para visualizar ainda mais isso, os níveis folha da hierarquia contêm toda a série temporal com combinações exclusivas de valores de atributo. Cada nível mais alto na hierarquia considera uma dimensão a menos para definir a série temporal e agrega cada conjunto de nós filho do nível inferior em um nó pai.

Visual de hierarquia para dados

A solução de série temporal hierárquica é criada sobre a solução de muitos modelos e compartilha uma configuração semelhante.

O código a seguir demonstra os principais parâmetros para configurar as execuções de previsão de série temporal hierárquica. Confira o notebook Série temporal hierárquica – ML Automatizado para obter um exemplo de ponta a ponta.


from azureml.train.automl.runtime._hts.hts_parameters import HTSTrainParameters

model_explainability = True

engineered_explanations = False # Define your hierarchy. Adjust the settings below based on your dataset.
hierarchy = ["state", "store_id", "product_category", "SKU"]
training_level = "SKU"# Set your forecast parameters. Adjust the settings below based on your dataset.
time_column_name = "date"
label_column_name = "quantity"
forecast_horizon = 7


automl_settings = {"task" : "forecasting",
                   "primary_metric" : "normalized_root_mean_squared_error",
                   "label_column_name": label_column_name,
                   "time_column_name": time_column_name,
                   "forecast_horizon": forecast_horizon,
                   "hierarchy_column_names": hierarchy,
                   "hierarchy_training_level": training_level,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,
                   "model_explainability": model_explainability,# The following settings are specific to this sample and should be adjusted according to your own needs.
                   "iteration_timeout_minutes" : 10,
                   "iterations" : 10,
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   }

hts_parameters = HTSTrainParameters(
    automl_settings=automl_settings,
    hierarchy_column_names=hierarchy,
    training_level=training_level,
    enable_engineered_explanations=engineered_explanations
)

Blocos de anotações de exemplo

Consulte os notebooks de amostra de previsão para ver exemplos de código detalhados de configuração de previsão avançada, incluindo:

Próximas etapas