O Prophet é um modelo de previsão mantido pela Meta. Consulte o documento do Prophet para ver detalhes do algoritmo e a documentação para mais informações sobre a biblioteca.
Tal como o ARIMA_PLUS do BigQuery ML, o Prophet tenta decompor cada série cronológica em tendências, estações e feriados, produzindo uma previsão através da agregação das inferências destes modelos. No entanto, existe uma diferença importante: o ARIMA+ do BQML usa o ARIMA para modelar o componente de tendência, enquanto o Prophet tenta ajustar uma curva usando um modelo logístico ou linear segmentado.
Google Cloud oferece um pipeline para preparar um modelo Prophet e um pipeline para obter inferências em lote a partir de um modelo Prophet. Ambos os pipelines são instâncias do Vertex AI Pipelines dos Google Cloud componentes de pipeline (GCPC).
A integração do Prophet com o Vertex AI significa que pode fazer o seguinte:
- Use a divisão de dados e as estratégias de janelas do Vertex AI.
- Ler dados de tabelas do BigQuery ou de ficheiros CSV armazenados no Cloud Storage. O Vertex AI espera que cada linha tenha o mesmo formato que o Vertex AI Forecasting.
Embora o Prophet seja um modelo multivariável, o Vertex AI suporta apenas uma versão univariável do mesmo.
Para saber mais sobre as contas de serviço que este fluxo de trabalho usa, consulte o artigo Contas de serviço para fluxos de trabalho tabulares.
APIs Workflow
Este fluxo de trabalho usa as seguintes APIs:
- Vertex AI
- Dataflow
- BigQuery
- Cloud Storage
Prepare um modelo com o Prophet
O Prophet foi concebido para um único intervalo temporal. O Vertex AI agrega dados por ID de série cronológica e prepara um modelo Prophet para cada série cronológica. O pipeline de preparação de modelos realiza o ajuste de hiperparâmetros através da pesquisa de grelha e da lógica de testes retroativos incorporada do Prophet.
Para suportar várias séries cronológicas, o pipeline usa uma tarefa de preparação personalizada do Vertex AI e o Dataflow para preparar vários modelos do Prophet em paralelo. Em geral, o número de modelos preparados é o produto do número de séries cronológicas e do número de tentativas de ajuste de hiperparâmetros.
O seguinte exemplo de código demonstra como executar um pipeline de preparação do modelo Prophet:
job = aiplatform.PipelineJob(
...
template_path=train_job_spec_path,
parameter_values=train_parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
O parâmetro service_account
opcional em job.run()
permite-lhe definir a conta de serviço do Vertex AI Pipelines para uma conta à sua escolha.
O pipeline e os valores dos parâmetros são definidos pela seguinte função.
(
train_job_spec_path,
train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
...
)
Segue-se um subconjunto de parâmetros get_prophet_train_pipeline_and_parameters
:
Nome do parâmetro | Tipo | Definição |
---|---|---|
project |
String | O ID do seu projeto. |
location |
String | A sua região. |
root_dir |
String | A localização do Cloud Storage para armazenar o resultado. |
target_column |
String | A coluna (valor) que quer que este modelo preveja. |
time_column |
String | A coluna de tempo. Tem de especificar uma coluna de tempo e esta tem de ter um valor para cada linha. A coluna Hora indica a hora em que foi feita uma determinada observação. |
time_series_identifier_column |
String | A coluna do identificador de séries cronológicas. Tem de especificar uma coluna de identificador de série cronológica e esta tem de ter um valor para cada linha. Normalmente, os dados de preparação de previsão incluem vários intervalos temporais, e o identificador indica ao Vertex AI a que intervalo temporal pertence uma determinada observação nos dados de preparação. Todas as linhas numa determinada série cronológica têm o mesmo valor na coluna do identificador da série cronológica. Alguns identificadores de séries cronológicas comuns podem ser o ID do produto, o ID de uma loja ou uma região. É possível formar um modelo de previsão numa única série cronológica, com um valor idêntico para todas as linhas na coluna do identificador de série cronológica. No entanto, o Vertex AI é mais adequado para dados de preparação que contêm duas ou mais séries cronológicas. Para obter os melhores resultados, use, pelo menos, 10 séries cronológicas para cada coluna que usar para preparar o modelo. |
data_granularity_unit |
String | A unidade a usar para a granularidade dos dados de preparação e o horizonte de previsão e o período de contexto. Pode ser minute , hour , day , week , month ou year . Saiba como escolher o nível de detalhe dos dados. |
data_source_csv_filenames |
String | Um URI para um CSV armazenado no Cloud Storage. |
data_source_bigquery_table_path |
String | Um URI para uma tabela do BigQuery. |
forecast_horizon |
Número inteiro | 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 detalhe dos dados. Saiba mais. |
optimization_objective |
String | Objetivo de otimização do modelo. Saiba mais. |
max_num_trials |
Número inteiro | Número máximo de tentativas de otimização a realizar por série cronológica. |
Parâmetros do Dataflow
Segue-se um subconjunto de parâmetros get_prophet_train_pipeline_and_parameters
para a personalização do Dataflow:
Nome do parâmetro | Tipo | Definição |
---|---|---|
trainer_dataflow_machine_type |
String | O tipo de máquina do Dataflow a usar para a preparação. |
trainer_dataflow_max_num_workers |
Número inteiro | O número máximo de trabalhadores do Dataflow a usar para a preparação. |
evaluation_dataflow_machine_type |
String | O tipo de máquina do Dataflow a usar para a avaliação. |
evaluation_dataflow_max_num_workers |
Número inteiro | O número máximo de trabalhadores do Dataflow a usar para a avaliação. |
dataflow_service_account |
String | Conta de serviço personalizada para executar tarefas do Dataflow. Pode configurar a tarefa do Dataflow para usar IPs privados e uma sub-rede da VPC específica. Este parâmetro funciona como uma substituição da conta de serviço do trabalhador do Dataflow predefinida. |
Uma vez que as tarefas de preparação do Prophet são executadas no Dataflow, ocorre um tempo de arranque inicial de 5 a 7 minutos. Para reduzir o tempo de execução adicional, pode aumentar a escala vertical ou horizontalmente. Por exemplo, para aumentar a escala, altere o tipo de máquina de n1-standard-1
para e2-highcpu-8
. Para aumentar a escala,
aumente o número de trabalhadores de 1
para 200
.
Parâmetros de divisão de dados
O pipeline de preparação oferece as seguintes opções para dividir os seus dados:
Divisão de dados | Descrição | Parâmetros |
---|---|---|
Divisão predefinida | O Vertex AI seleciona aleatoriamente 80% das linhas de dados para o conjunto de preparação, 10% para o conjunto de validação e 10% para o conjunto de teste. A Vertex AI usa a coluna Hora para determinar a ordem cronológica das linhas de dados. | Nenhum |
Divisão de frações | O Vertex AI usa os valores que fornece para particionar os seus dados no conjunto de preparação, no conjunto de validação e no conjunto de teste. A Vertex AI usa a coluna Hora para determinar a ordem cronológica das linhas de dados. |
|
Divisão de data/hora | A Vertex AI usa os valores training_fraction , validation_fraction e test_fraction para particionar os seus dados no conjunto de preparação, no conjunto de validação e no conjunto de teste. O Vertex AI usa a coluna timestamp_split_key para determinar a ordem cronológica das linhas de dados. |
|
Divisão manual (predefinida) | O Vertex AI divide os dados usando os valores TRAIN, VALIDATE ou TEST na coluna predefined_split_key . |
|
Define os parâmetros de divisão de dados em get_prophet_train_pipeline_and_parameters
da seguinte forma:
Nome do parâmetro | Tipo | Definição |
---|---|---|
predefined_split_key |
String | O nome da coluna que contém os valores TRAIN, VALIDATE ou TEST. Defina este valor se estiver a usar uma divisão manual (predefinida). |
training_fraction |
Flutuante | A percentagem dos dados a atribuir ao conjunto de preparação. Defina este valor se estiver a usar uma divisão de fração ou uma divisão de data/hora. |
validation_fraction |
Flutuante | A percentagem dos dados a atribuir ao conjunto de validação. Defina este valor se estiver a usar uma divisão de fração ou uma divisão de data/hora. |
test_fraction |
Flutuante | A percentagem dos dados a atribuir ao conjunto de testes. Defina este valor se estiver a usar uma divisão de fração ou uma divisão de data/hora. |
timestamp_split_key |
String | O nome da coluna que contém as indicações de tempo para a divisão de dados. Defina este valor se estiver a usar uma divisão de data/hora. |
Parâmetros da janela
O Vertex AI gera intervalos de previsão a partir dos dados de entrada através de uma estratégia de intervalo contínuo. Se deixar os parâmetros da janela não definidos, o Vertex AI usa a estratégia de contagem com um valor máximo predefinido de 100,000,000
. O pipeline de
preparação oferece as seguintes estratégias de janela contínua:
Estratégia de janela móvel | Descrição | Parâmetros |
---|---|---|
Contagem |
O número de janelas geradas pela Vertex AI não pode exceder um máximo fornecido pelo utilizador. Se o número de linhas no conjunto de dados de entrada for inferior ao número máximo de janelas, todas as linhas são usadas para gerar uma janela.
Caso contrário, a Vertex AI realiza uma amostragem aleatória para selecionar as linhas.
O valor predefinido para o número máximo de janelas é 100,000,000 .
O número máximo de janelas não pode exceder 100,000,000 .
|
window_max_count |
Stride |
A Vertex AI usa uma de cada X linhas de entrada para gerar uma janela, até um máximo de 100 000 000 janelas. Esta opção é útil para inferências sazonais ou periódicas. Por exemplo, pode limitar a previsão a um único dia da semana definindo o valor do intervalo como 7 . O valor pode estar entre 1 e 1000 .
|
window_stride_length |
Coluna |
Pode adicionar uma coluna aos dados de entrada em que os valores são True ou False . O Vertex AI gera uma janela para cada linha de entrada em que o valor da coluna é True . Os valores True e False podem ser definidos em qualquer ordem, desde que a contagem total de linhas True seja inferior a 100,000,000 . São preferíveis os valores booleanos, mas também são aceites valores de string. Os valores das strings não são sensíveis a maiúsculas e minúsculas.
|
window_column |
Defina os parâmetros da janela em get_prophet_train_pipeline_and_parameters
da seguinte forma:
Nome do parâmetro | Tipo | Definição |
---|---|---|
window_column |
String | O nome da coluna com valores True e False . |
window_stride_length |
Número inteiro | O valor do comprimento da passada. |
window_max_count |
Número inteiro | O número máximo de janelas. |
Tire conclusões com o Prophet
O pipeline de preparação de modelos do Vertex AI para o Prophet cria um modelo do Prophet para cada série cronológica nos dados. O pipeline de inferência agrega os dados de entrada por ID de série cronológica e calcula as inferências separadamente para cada série cronológica. Em seguida, o pipeline desagrupa os resultados da inferência para corresponder ao formato do Vertex AI Forecasting.
O seguinte exemplo de código demonstra como executar um pipeline de inferência do Prophet:
job = aiplatform.PipelineJob(
...
template_path=prediction_job_spec_path,
parameter_values=prediction_parameter_values,
...
)
job.run(...)
O pipeline e os valores dos parâmetros são definidos pela seguinte função.
(
prediction_job_spec_path,
prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
...
)
Segue-se um subconjunto de parâmetros get_prophet_prediction_pipeline_and_parameters
:
Nome do parâmetro | Tipo | Definição |
---|---|---|
project |
String | O ID do seu projeto. |
location |
String | A sua região. |
model_name |
String | O nome do recurso do modelo. Formate a string da seguinte forma: projects/{project}/locations/{location}/models/{model} . |
time_column |
String | A coluna de tempo. Tem de especificar uma coluna de tempo e esta tem de ter um valor para cada linha. A coluna Hora indica a hora em que foi feita uma determinada observação. |
time_series_identifier_column |
String | A coluna do identificador de séries cronológicas. Tem de especificar uma coluna de identificador de série cronológica e esta tem de ter um valor para cada linha. Normalmente, os dados de preparação de previsão incluem vários intervalos temporais, e o identificador indica ao Vertex AI a que intervalo temporal pertence uma determinada observação nos dados de preparação. Todas as linhas numa determinada série cronológica têm o mesmo valor na coluna do identificador da série cronológica. Alguns identificadores de séries cronológicas comuns podem ser o ID do produto, o ID de uma loja ou uma região. É possível formar um modelo de previsão numa única série cronológica, com um valor idêntico para todas as linhas na coluna do identificador de série cronológica. No entanto, o Vertex AI é mais adequado para dados de preparação que contêm duas ou mais séries cronológicas. Para obter os melhores resultados, use, pelo menos, 10 séries cronológicas para cada coluna que usar para preparar o modelo. |
target_column |
String | A coluna (valor) que quer que este modelo preveja. |
data_source_csv_filenames |
String | Um URI para um CSV armazenado no Cloud Storage. |
data_source_bigquery_table_path |
String | Um URI para uma tabela do BigQuery. |
bigquery_destination_uri |
String | Um URI para o conjunto de dados de destino selecionado. Se este valor não for definido, os recursos são criados num novo conjunto de dados no projeto. |
machine_type |
String | O tipo de máquina a usar para a inferência em lote. |
max_num_workers |
Número inteiro | O número máximo de trabalhadores a usar para a inferência em lote. |