Prepare um modelo de previsão

Esta página mostra-lhe como preparar um modelo de previsão a partir de um conjunto de dados tabular usando a consola Google Cloud ou a API Vertex AI.

Antes de começar

Antes de preparar um modelo de previsão, conclua o seguinte:

Prepare um modelo

Google Cloud consola

  1. Na Google Cloud consola, na secção Vertex AI, aceda à página Conjuntos de dados.

    Aceda à página Conjuntos de dados

  2. Clique no nome do conjunto de dados que quer usar para formar o modelo e abrir a respetiva página de detalhes.

  3. Se o seu tipo de dados usar conjuntos de anotações, selecione o conjunto de anotações que quer usar para este modelo.

  4. Clique em Formar novo modelo.

  5. Selecione Outro.

  6. Na página Método de preparação, configure o seguinte:

    1. Selecione o método de preparação do modelo. Para saber mais, consulte o artigo Métodos de preparação de modelos.

    2. Clique em Continuar.

  7. Na página Detalhes do modelo, configure o seguinte:

    1. Introduza o nome a apresentar do novo modelo.

    2. Selecione a coluna de destino.

      A coluna de destino é o valor que o modelo vai prever. Saiba mais acerca dos requisitos da coluna de destino.

    3. Se não tiver definido as colunas Identificador da série e Data/hora no conjunto de dados, selecione-as agora.

    4. Selecione o Nível de detalhe dos dados. Selecione Daily se quiser usar a modelagem de efeitos de feriados. Saiba como escolher o nível de detalhe dos dados.

    5. Opcional: no menu pendente Regiões de feriados, escolha uma ou mais regiões geográficas para ativar a modelagem de efeitos de feriados. Durante a preparação, o Vertex AI cria funcionalidades categóricas de feriados no modelo com base na data da coluna Data/hora e nas regiões geográficas especificadas. Só pode selecionar esta opção quando a granularidade dos dados estiver definida como Daily. Por predefinição, a modelagem de efeitos de feriados está desativada. Para saber mais acerca das regiões geográficas usadas para a modelação do efeito de férias, consulte o artigo Regiões de férias.

    6. Introduza a janela de contexto e o horizonte de previsão.

      O horizonte de previsão determina até que ponto o modelo prevê o valor-alvo para cada linha de dados de inferência. O Horizonte de previsão é especificado em unidades de Nível de detalhe dos dados.

      O período de contexto define o intervalo de tempo passado que o modelo analisa durante a preparação (e para as previsões). Por outras palavras, para cada ponto de dados de preparação, o período de contexto determina o intervalo de tempo em que o modelo procura padrões preditivos. A capacidade de resposta é especificada em unidades de detalhe dos dados.

      Saiba mais.

    7. Se quiser exportar o seu conjunto de dados de teste para o BigQuery, selecione Exportar conjunto de dados de teste para o BigQuery e indique o nome da tabela.

    8. Se quiser controlar manualmente a divisão de dados ou configurar o período de previsão, abra as Opções avançadas.

    9. A divisão de dados predefinida é cronológica, com as percentagens padrão de 80/10/10. Se quiser especificar manualmente as linhas que são atribuídas a cada divisão, selecione Manual e especifique a coluna de divisão de dados.

      Saiba mais sobre as divisões de dados.

    10. Selecione uma estratégia de período contínuo para a geração do período de previsão. A estratégia predefinida é Count.

      • Contagem: defina o valor para o número máximo de janelas na caixa de texto fornecida.
      • Passada: defina o valor do comprimento da passada na caixa de texto fornecida.
      • Coluna: selecione o nome da coluna adequado no menu pendente apresentado.

      Para saber mais, consulte o artigo Estratégias de janela dinâmica.

    11. Clique em Continuar.

  8. Na página Opções de preparação, configure o seguinte:

    1. Se ainda não o fez, clique em Gerar estatísticas.

      A geração de estatísticas preenche os menus pendentes de Transformação.

    2. Reveja a lista de colunas e exclua todas as colunas da preparação que não devem ser usadas para preparar o modelo.

      Se estiver a usar uma coluna de divisão de dados, esta deve ser incluída.

    3. Reveja as transformações selecionadas para as funcionalidades incluídas e faça as atualizações necessárias.

      As linhas que contêm dados inválidos para a transformação selecionada são excluídas da preparação. Saiba mais acerca das transformações.

    4. Para cada coluna incluída para a preparação, especifique o Tipo de funcionalidade para saber como essa funcionalidade se relaciona com a respetiva série cronológica e se está disponível no momento da previsão. Saiba mais sobre o tipo e a disponibilidade das funcionalidades.

    5. Se quiser especificar uma coluna de ponderação, alterar o objetivo de otimização da predefinição ou ativar a previsão hierárquica, abra as Opções avançadas.

    6. Opcional. Se quiser especificar uma coluna de peso, selecione-a na lista pendente. Saiba mais sobre as colunas de ponderação.

    7. Opcional. Se quiser selecionar o objetivo de otimização, selecione-o na lista. Saiba mais acerca dos objetivos de otimização.

    8. Opcional. Se quiser usar a previsão hierárquica, selecione Ativar previsão hierárquica. Pode escolher entre três opções de agrupamento:

      • No grouping
      • Group by columns
      • Group all

      Também pode optar por definir as seguintes ponderações de perdas agregadas:

      • Group total weight. Este campo só pode ser definido se selecionar a opção Group by columns ou Group all.
      • Temporal total weight.
      • Group temporal total weight. Este campo só pode ser definido se selecionar a opção Group by columns ou Group all.

      Saiba mais sobre a previsão hierárquica.

    9. Clique em Continuar.

  9. Na página Cálculo e preços, configure o seguinte:

    1. Introduza o número máximo de horas durante as quais quer que o modelo seja preparado. Esta definição ajuda a limitar os custos de preparação. O tempo decorrido real pode ser superior a este valor, porque existem outras operações envolvidas na criação de um novo modelo.

      O tempo de preparação sugerido está relacionado com a dimensão do horizonte de previsão e os dados de preparação. A tabela abaixo apresenta alguns exemplos de execuções de preparação de previsões e o intervalo de tempo de preparação necessário para preparar um modelo de alta qualidade.

      Linhas Funcionalidades Horizonte de previsão Tempo de treino
      12 milhões 10 6 3 a 6 horas
      20 milhões 50 13 6 a 12 horas
      16 milhões 30 365 24 a 48 horas

      Para informações sobre os preços da preparação, consulte a página de preços.

    2. Clique em Iniciar preparação.

      A preparação do modelo pode demorar muitas horas, consoante a dimensão e a complexidade dos seus dados e o orçamento de preparação, se tiver especificado um. Pode fechar este separador e regressar a ele mais tarde. Vai receber um email quando o modelo tiver concluído o treino.

API

Selecione um separador para o seu idioma ou ambiente:

REST

Use o comando trainingPipelines.create para preparar um modelo.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION: a sua região.
  • PROJECT: o seu ID do projeto.
  • TRAINING_PIPELINE_DISPLAY_NAME: nome a apresentar para o pipeline de preparação criado para esta operação.
  • TRAINING_TASK_DEFINITION: o método de preparação do modelo.
    • Codificador denso de séries cronológicas (TiDE)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/time_series_dense_encoder_forecasting_1.0.0.yaml
    • Temporal Fusion Transformer (TFT)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/temporal_fusion_transformer_time_series_forecasting_1.0.0.yaml
    • AutoML (L2L)
      gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_forecasting_1.0.0.yaml
    • Seq2Seq+
      gs://google-cloud-aiplatform/schema/trainingjob/definition/seq2seq_plus_time_series_forecasting_1.0.0.yaml
    Para saber mais, consulte o artigo Métodos de preparação de modelos.
  • TARGET_COLUMN: a coluna (valor) que quer que este modelo preveja.
  • TIME_COLUMN: a coluna de tempo. Saiba mais.
  • TIME_SERIES_IDENTIFIER_COLUMN: a coluna do identificador da série cronológica. Saiba mais.
  • WEIGHT_COLUMN: (opcional) a coluna de ponderação. Saiba mais.
  • TRAINING_BUDGET: O período máximo durante o qual quer que o modelo seja preparado, em milissegundos de horas de nó (1000 milissegundos de horas de nó equivalem a uma hora de nó).
  • GRANULARITY_UNIT: a unidade a usar para a granularidade dos dados de preparação e o horizonte de previsão e a janela de contexto. Pode ser minute, hour, day, week, month ou year. Selecione day se quiser usar a modelagem de efeitos de feriados. Saiba como escolher o nível de detalhe dos dados.
  • GRANULARITY_QUANTITY: o número de unidades de detalhe que compõem o intervalo entre as observações nos dados de preparação. Tem de ser 1 para todas as unidades, exceto minutos, que podem ser 1, 5, 10, 15 ou 30. Saiba como escolher o nível de detalhe dos dados.
  • GROUP_COLUMNS: Nomes das colunas na tabela de entrada de dados de preparação que identificam o agrupamento para o nível da hierarquia. As colunas têm de ser `time_series_attribute_columns`. Saiba mais.
  • GROUP_TOTAL_WEIGHT: Peso da perda agregada do grupo relativamente à perda individual. Desativado se estiver definido como "0.0" ou não estiver definido. Se a coluna de grupo não estiver definida, todas as séries cronológicas são tratadas como parte do mesmo grupo e são agregadas em todas as séries cronológicas. Saiba mais.
  • TEMPORAL_TOTAL_WEIGHT: peso da perda agregada no tempo relativamente à perda individual. Desativado se estiver definido como "0.0" ou não estiver definido. Saiba mais.
  • GROUP_TEMPORAL_TOTAL_WEIGHT: Peso da perda agregada total (grupo x tempo) relativamente à perda individual. Desativado se estiver definido como "0.0" ou não estiver definido. Se a coluna de grupo não estiver definida, todas as séries cronológicas são tratadas como parte do mesmo grupo e são agregadas em todas as séries cronológicas. Saiba mais.
  • HOLIDAY_REGIONS: (Opcional) Pode selecionar uma ou mais regiões geográficas para ativar a modelagem do efeito de feriados. Durante a preparação, o Vertex AI cria caraterísticas categóricas de feriados no modelo com base na data de TIME_COLUMN e nas regiões geográficas especificadas. Para a ativar, defina GRANULARITY_UNIT como day e especifique uma ou mais regiões no campo HOLIDAY_REGIONS. Por predefinição, a modelagem de efeitos de feriados está desativada. Para saber mais, consulte o artigo Regiões de feriados.
  • FORECAST_HORIZON: O horizonte de previsão determina até que ponto o modelo prevê o valor alvo para cada linha de dados de inferência. O horizonte de previsão é especificado em unidades de granularidade dos dados (GRANULARITY_UNIT). Saiba mais.
  • CONTEXT_WINDOW: A janela de contexto define o intervalo de tempo passado que o modelo analisa durante a preparação (e para previsões). Por outras palavras, para cada ponto de dados de preparação, o período de contexto determina o intervalo de tempo em que o modelo procura padrões preditivos. A capacidade de resposta é especificada em unidades de detalhe dos dados (GRANULARITY_UNIT). Saiba mais.
  • OPTIMIZATION_OBJECTIVE: Por predefinição, o Vertex AI minimiza o erro quadrático médio (RMSE). Se quiser um objetivo de otimização diferente para o seu modelo de previsão, escolha uma das opções em Objetivos de otimização para modelos de previsão. Se optar por minimizar a perda de quantil, também tem de especificar um valor para QUANTILES.
  • PROBABILISTIC_INFERENCE: (Opcional) Se for definido como true, os modelos do Vertex AI modelam a distribuição de probabilidade da previsão. A inferência probabilística pode melhorar a qualidade do modelo ao processar dados ruidosos e quantificar a incerteza. Se forem especificados os valores QUANTILES, o Vertex AI também devolve os quantis da distribuição de probabilidade. A inferência probabilística só é compatível com os métodos de preparação Time series Dense Encoder (TiDE) e AutoML (L2L). É incompatível com a previsão hierárquica e o objetivo de otimização minimize-quantile-loss.
  • QUANTILES: Quantis a usar para o objetivo de otimização minimize-quantile-loss e a inferência probabilística. Forneça uma lista de até cinco números únicos entre 0 e 1, exclusivo.
  • TIME_SERIES_ATTRIBUTE_COL: o nome ou os nomes das colunas que são atributos de séries cronológicas. Saiba mais.
  • AVAILABLE_AT_FORECAST_COL: O nome ou os nomes das colunas de covariáveis cujo valor é conhecido no momento da previsão. Saiba mais.
  • UNAVAILABLE_AT_FORECAST_COL: o nome ou os nomes das colunas de covariáveis cujo valor é desconhecido no momento da previsão. Saiba mais.
  • TRANSFORMATION_TYPE: O tipo de transformação é fornecido para cada coluna usada para preparar o modelo. Saiba mais.
  • COLUMN_NAME: o nome da coluna com o tipo de transformação especificado. Todas as colunas usadas para preparar o modelo têm de ser especificadas.
  • MODEL_DISPLAY_NAME: nome a apresentar para o modelo recém-formado.
  • DATASET_ID: ID do conjunto de dados de preparação.
  • Pode fornecer um objeto Split para controlar a divisão dos dados. Para obter informações sobre como controlar a divisão de dados, consulte o artigo Controle a divisão de dados através de REST.
  • Pode fornecer um objeto windowConfig para configurar uma estratégia de período contínuo para a geração do período de previsão. Para mais informações, consulte o artigo Configure a estratégia de período dinâmico através da API REST.
  • PROJECT_NUMBER: o número do projeto gerado automaticamente do seu projeto

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines

Corpo JSON do pedido:

{
    "displayName": "TRAINING_PIPELINE_DISPLAY_NAME",
    "trainingTaskDefinition": "TRAINING_TASK_DEFINITION",
    "trainingTaskInputs": {
        "targetColumn": "TARGET_COLUMN",
        "timeColumn": "TIME_COLUMN",
        "timeSeriesIdentifierColumn": "TIME_SERIES_IDENTIFIER_COLUMN",
        "weightColumn": "WEIGHT_COLUMN",
        "trainBudgetMilliNodeHours": TRAINING_BUDGET,
        "dataGranularity": {"unit": "GRANULARITY_UNIT", "quantity": GRANULARITY_QUANTITY},
        "hierarchyConfig": {"groupColumns": GROUP_COLUMNS, "groupTotalWeight": GROUP_TOTAL_WEIGHT, "temporalTotalWeight": TEMPORAL_TOTAL_WEIGHT, "groupTemporalTotalWeight": GROUP_TEMPORAL_TOTAL_WEIGHT}
        "holidayRegions" : ["HOLIDAY_REGIONS_1", "HOLIDAY_REGIONS_2", ...]
        "forecast_horizon": FORECAST_HORIZON,
        "context_window": CONTEXT_WINDOW,
        "optimizationObjective": "OPTIMIZATION_OBJECTIVE",
        "quantiles": "QUANTILES",
        "enableProbabilisticInference": "PROBABILISTIC_INFERENCE",
        "time_series_attribute_columns": ["TIME_SERIES_ATTRIBUTE_COL_1", "TIME_SERIES_ATTRIBUTE_COL_2", ...]
        "available_at_forecast_columns": ["AVAILABLE_AT_FORECAST_COL_1", "AVAILABLE_AT_FORECAST_COL_2", ...]
        "unavailable_at_forecast_columns": ["UNAVAILABLE_AT_FORECAST_COL_1", "UNAVAILABLE_AT_FORECAST_COL_2", ...]
        "transformations": [
            {"TRANSFORMATION_TYPE_1":  {"column_name" : "COLUMN_NAME_1"} },
            {"TRANSFORMATION_TYPE_2":  {"column_name" : "COLUMN_NAME_2"} },
            ...
    },
    "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"},
    "inputDataConfig": {
      "datasetId": "DATASET_ID",
    }
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/trainingPipelines/TRAINING_PIPELINE_ID",
  "displayName": "myModelName",
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml",
  "modelToUpload": {
    "displayName": "myModelName"
  },
  "state": "PIPELINE_STATE_PENDING",
  "createTime": "2020-08-18T01:22:57.479336Z",
  "updateTime": "2020-08-18T01:22:57.479336Z"
}

Python

Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a Python documentação de referência da API.

def create_training_pipeline_forecasting_time_series_dense_encoder_sample(
    project: str,
    display_name: str,
    dataset_id: str,
    location: str = "us-central1",
    model_display_name: str = "my_model",
    target_column: str = "target_column",
    time_column: str = "date",
    time_series_identifier_column: str = "time_series_id",
    unavailable_at_forecast_columns: List[str] = [],
    available_at_forecast_columns: List[str] = [],
    forecast_horizon: int = 1,
    data_granularity_unit: str = "week",
    data_granularity_count: int = 1,
    training_fraction_split: float = 0.8,
    validation_fraction_split: float = 0.1,
    test_fraction_split: float = 0.1,
    budget_milli_node_hours: int = 8000,
    timestamp_split_column_name: str = "timestamp_split",
    weight_column: str = "weight",
    time_series_attribute_columns: List[str] = [],
    context_window: int = 0,
    export_evaluated_data_items: bool = False,
    export_evaluated_data_items_bigquery_destination_uri: Optional[str] = None,
    export_evaluated_data_items_override_destination: bool = False,
    quantiles: Optional[List[float]] = None,
    enable_probabilistic_inference: bool = False,
    validation_options: Optional[str] = None,
    predefined_split_column_name: Optional[str] = None,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    # Create training job
    forecasting_tide_job = aiplatform.TimeSeriesDenseEncoderForecastingTrainingJob(
        display_name=display_name,
        optimization_objective="minimize-rmse",
    )

    # Retrieve existing dataset
    dataset = aiplatform.TimeSeriesDataset(dataset_id)

    # Run training job
    model = forecasting_tide_job.run(
        dataset=dataset,
        target_column=target_column,
        time_column=time_column,
        time_series_identifier_column=time_series_identifier_column,
        unavailable_at_forecast_columns=unavailable_at_forecast_columns,
        available_at_forecast_columns=available_at_forecast_columns,
        forecast_horizon=forecast_horizon,
        data_granularity_unit=data_granularity_unit,
        data_granularity_count=data_granularity_count,
        training_fraction_split=training_fraction_split,
        validation_fraction_split=validation_fraction_split,
        test_fraction_split=test_fraction_split,
        predefined_split_column_name=predefined_split_column_name,
        timestamp_split_column_name=timestamp_split_column_name,
        weight_column=weight_column,
        time_series_attribute_columns=time_series_attribute_columns,
        context_window=context_window,
        export_evaluated_data_items=export_evaluated_data_items,
        export_evaluated_data_items_bigquery_destination_uri=export_evaluated_data_items_bigquery_destination_uri,
        export_evaluated_data_items_override_destination=export_evaluated_data_items_override_destination,
        quantiles=quantiles,
        enable_probabilistic_inference=enable_probabilistic_inference,
        validation_options=validation_options,
        budget_milli_node_hours=budget_milli_node_hours,
        model_display_name=model_display_name,
        sync=sync,
    )

    model.wait()

    print(model.display_name)
    print(model.resource_name)
    print(model.uri)
    return model

Controle a divisão de dados através de REST

Controla a forma como os dados de preparação são divididos entre os conjuntos de preparação, validação e teste. Use uma coluna dividida para especificar manualmente a divisão de dados para cada linha e fornecê-la como parte de um objeto PredefinedSplit Split no inputDataConfig do pedido JSON.

DATA_SPLIT_COLUMN é a coluna que contém os valores divididos dos dados (TRAIN, VALIDATION, TEST).

"predefinedSplit": {
  "key": DATA_SPLIT_COLUMN
},

Saiba mais acerca das divisões de dados.

Configure a estratégia de período flutuante através de REST

Forneça um objeto windowConfig para configurar uma estratégia de intervalo variável para a geração do intervalo de previsão. A estratégia predefinida é maxCount.

  • Para usar a opção maxCount, adicione o seguinte a trainingTaskInputs do pedido JSON. MAX_COUNT_VALUE refere-se ao número máximo de janelas.

      "windowConfig": {
        "maxCount": MAX_COUNT_VALUE
      },
      ```
    
  • Para usar a opção strideLength, adicione o seguinte a trainingTaskInputs do pedido JSON. STRIDE_LENGTH_VALUE refere-se ao valor do comprimento da passada.

      "windowConfig": {
        "strideLength": STRIDE_LENGTH_VALUE
      },
      ```
    
  • Para usar a opção column, adicione o seguinte a trainingTaskInputs do pedido JSON. COLUMN_NAME refere-se ao nome da coluna com valores True ou False.

      "windowConfig": {
        "column": "COLUMN_NAME"
      },
      ```
    

Para saber mais, consulte o artigo Estratégias de janela dinâmica.

O que se segue?