Prophet es un modelo de previsión mantenido por Meta. Consulta el informe de Prophet para obtener detalles sobre los algoritmos y la documentación para obtener más información sobre la biblioteca.
Al igual que ARIMA_PLUS de BigQuery ML, Prophet intenta descomponer cada serie temporal en tendencias, temporadas y días feriados, y produce una previsión mediante la agregación de las predicciones de estos modelos. Sin embargo, una diferencia importante es que ARIMA+ de BQML usa ARIMA para modelar el componente de tendencia, mientras que Prophet intenta ajustar una curva mediante un modelo logístico o lineal por partes.
Google Cloud ofrece una canalización para entrenar un modelo de Prophet y una canalización para obtener predicciones por lotes a partir de un modelo de Prophet. Ambas canalizaciones son instancias de Vertex AI Pipelines de componentes de canalización de Google Cloud (GCPC).
La integración de Prophet en Vertex AI significa que puedes hacer lo siguiente:
- Usa la división de datos y las estrategias del sistema de ventanas de Vertex AI.
- Lee datos de tablas de BigQuery o archivos CSV almacenados en Cloud Storage. Vertex AI espera que cada fila tenga el mismo formato que Previsión de Vertex AI.
Aunque Prophet es un modelo multivariable, Vertex AI solo admite una versión de una variable.
Para obtener información sobre las cuentas de servicio que usa este flujo de trabajo, consulta Cuentas de servicio para flujos de trabajo tabulares.
APIs de flujo de trabajo
En este flujo de trabajo, se usan las siguientes APIs:
- Vertex AI
- Dataflow
- BigQuery
- Cloud Storage
Entrena un modelo con Prophet
Prophet está diseñado para una sola serie temporal. Vertex AI agrega datos por ID de serie temporal y entrena un modelo de Prophet para cada serie temporal. La canalización de entrenamiento de modelos realiza el ajuste de hiperparámetros a través de la búsqueda en cuadrícula y la lógica de prueba posterior integrada de Prophet.
Para admitir varias series temporales, la canalización usa un trabajo de entrenamiento personalizado de Vertex AI y Dataflow para entrenar varios modelos de Prophet en paralelo. En general, la cantidad de modelos entrenados es el producto de la cantidad de series temporales y la cantidad de pruebas de ajuste de hiperparámetros.
En el siguiente código de muestra, se ilustra cómo puedes ejecutar una canalización de entrenamiento de modelos de Prophet:
job = aiplatform.PipelineJob(
...
template_path=train_job_spec_path,
parameter_values=train_parameter_values,
...
)
job.run(service_account=SERVICE_ACCOUNT)
El parámetro service_account
opcional en job.run()
te permite configurar la cuenta de servicio de Vertex AI Pipelines en una cuenta que elijas.
La canalización y los valores de los parámetros se definen mediante la siguiente función.
(
train_job_spec_path,
train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
...
)
El siguiente es un subconjunto de parámetros get_prophet_train_pipeline_and_parameters
:
Nombre del parámetro | Tipo | Definición |
---|---|---|
project |
String | El ID de tu proyecto |
location |
String | Su región |
root_dir |
String | La ubicación de Cloud Storage para almacenar el resultado. |
target_column |
String | La columna (valor) que deseas que prediga este modelo. |
time_column |
String | La columna de tiempo. Debes especificar una columna de tiempo y debe tener un valor para cada fila. La columna de tiempo indica la hora en la que se realizó una observación determinada. |
time_series_identifier_column |
String | La columna de identificador de serie temporal. Debes especificar una columna de identificador de serie temporal y debe tener un valor para cada fila. Por lo general, los datos de entrenamiento para previsiones incluyen varias series temporales, y el identificador le indica a Vertex AI de qué serie temporal forma parte una observación determinada en los datos de entrenamiento. Todas las filas de una serie temporal determinada tienen el mismo valor en la columna de identificador de serie temporal. Algunos identificadores de series temporales comunes pueden ser el ID del producto, el ID de una tienda o una región. Es posible entrenar un modelo de previsión en una sola serie temporal, con un valor idéntico para todas las filas de la columna de identificador de serie temporal. Sin embargo, Vertex AI es más adecuada para los datos de entrenamiento que contienen dos o más series temporales. A fin de obtener mejores resultados, usa al menos 10 series temporales para cada columna que uses a fin de entrenar el modelo. |
data_granularity_unit |
String | La unidad que se usará para el nivel de detalle de tus datos de entrenamiento y el horizonte de previsión y la ventana contextual. Puede ser minute , hour , day , week , month o year . Obtén información sobre cómo elegir el nivel de detalle de los datos. |
data_source_csv_filenames |
String | Un URI para un archivo CSV almacenado en Cloud Storage. |
data_source_bigquery_table_path |
String | Un URI para una tabla de BigQuery. |
forecast_horizon |
Número entero | El horizonte de previsión determina hasta qué punto del futuro el modelo predice el valor objetivo de cada fila de datos de predicción. El horizonte de previsión se especifica en unidades de nivel de detalle de datos. Obtén más información. |
optimization_objective |
String | Objetivo de optimización del modelo. Obtén más información. |
max_num_trials |
Número entero | Cantidad máxima de pruebas de ajuste que se realizarán por serie temporal. |
Parámetros de Dataflow
El siguiente es un subconjunto de parámetros de get_prophet_train_pipeline_and_parameters
para la personalización de Dataflow:
Nombre del parámetro | Tipo | Definición |
---|---|---|
trainer_dataflow_machine_type |
String | El tipo de máquina de Dataflow que se usará para el entrenamiento. |
trainer_dataflow_max_num_workers |
Número entero | La cantidad máxima de trabajadores de Dataflow que se usarán para el entrenamiento. |
evaluation_dataflow_machine_type |
String | El tipo de máquina de Dataflow que se usará para la evaluación. |
evaluation_dataflow_max_num_workers |
Número entero | La cantidad máxima de trabajadores de Dataflow que se usarán para la evaluación. |
dataflow_service_account |
String | La cuenta de servicio personalizada para ejecutar trabajos de Dataflow. El trabajo de Dataflow se puede configurar para usar IP privadas y una subred de VPC específica. Este parámetro actúa como una anulación para la cuenta de servicio predeterminada del trabajador de Dataflow. |
Debido a que los trabajos de entrenamiento de Prophet se ejecutan en Dataflow, el tiempo de inicio inicial es de 5 a 7 minutos. Para reducir el entorno de ejecución adicional, puedes escalar horizontalmente o verticalmente. Por ejemplo, para escalar verticalmente, puedes cambiar el tipo de máquina de n1-standard-1
a e2-highcpu-8
. Para escalar horizontalmente, puedes aumentar la cantidad de trabajadores de 1
a 200
.
Parámetros de división de datos
La canalización de entrenamiento ofrece las siguientes opciones para dividir los datos:
División de datos | Descripción | Parámetros |
---|---|---|
División predeterminada | Vertex AI selecciona de forma aleatoria el 80% de tus filas de datos para el conjunto de entrenamiento, el 10% para el conjunto de validación y el 10% para el conjunto de prueba. Vertex AI usa la columna de tiempo para determinar el orden cronológico de las filas de datos. | Ninguno |
División de fracciones | Vertex AI usa los valores que proporcionas para particionar los datos en el conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba. Vertex AI usa la columna de tiempo para determinar el orden cronológico de las filas de datos. |
|
División de marca de tiempo | Vertex AI usa los valores training_fraction , validation_fraction y test_fraction para particionar tus datos en el conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba. Vertex AI usa la columna timestamp_split_key para determinar el orden cronológico de las filas de datos. |
|
División manual (predefinida) | Vertex AI divide los datos usando los valores TRAIN, VALIDATE o TEST en la columna predefined_split_key . |
|
Debes definir los parámetros de división de datos en get_prophet_train_pipeline_and_parameters
de la siguiente manera:
Nombre del parámetro | Tipo | Definición |
---|---|---|
predefined_split_key |
String | El nombre de la columna que contiene los valores TRAIN, VALIDATE o TEST. Establece este valor si usas una división manual (predefinida). |
training_fraction |
Número de punto flotante | El porcentaje de los datos que se asignarán al conjunto de entrenamiento. Establece este valor si usas una división de fracciones o una división de marca de tiempo. |
validation_fraction |
Número de punto flotante | El porcentaje de los datos que se asignarán al conjunto de validación. Establece este valor si usas una división de fracciones o una división de marca de tiempo. |
test_fraction |
Número de punto flotante | El porcentaje de los datos que se asignarán al conjunto de prueba. Establece este valor si usas una división de fracciones o una división de marca de tiempo. |
timestamp_split_key |
String | El nombre de la columna que contiene las marcas de tiempo de la división de datos. Establece este valor si usas una división por marca de tiempo. |
Parámetros de ventana
Vertex AI genera ventanas de previsión a partir de los datos de entrada usando una estrategia de ventana progresiva. Si dejas los parámetros de la ventana sin configurar, Vertex AI usa la estrategia de recuento con un valor máximo predeterminado de 100,000,000
. La canalización de entrenamiento ofrece las siguientes estrategias de ventana progresiva:
Estrategia de ventana móvil | Descripción | Parámetros |
---|---|---|
Recuento |
La cantidad de ventanas que genera Vertex AI no debe exceder el máximo proporcionado por el usuario. Si la cantidad de filas en el conjunto de datos de entrada es menor que la cantidad de ventanas, cada fila se usará para generar una ventana.
De lo contrario, Vertex AI realiza un muestreo aleatorio para seleccionar las filas.
El valor predeterminado para la cantidad máxima de ventanas es 100,000,000 .
La cantidad máxima de ventanas no puede ser superior a 100,000,000 .
|
window_max_count |
Segmento |
Vertex AI usa una de cada filas de entrada X para generar una ventana, hasta un máximo de 100,000,000 ventanas. Esta opción es útil para predicciones estacionales o periódicas. Por ejemplo, puedes limitar la previsión a un solo día de la semana si configuras el valor de la longitud del segmento a 7 . El valor puede ser de 1 a 1000 .
|
window_stride_length |
Columna |
Puedes agregar una columna a los datos de entrada en los que los valores sean True o False . Vertex AI genera una ventana para cada fila de entrada en la que el valor de la columna es True . Los valores True y False se pueden establecer en cualquier orden, siempre que el recuento total de filas True sea inferior a 100,000,000 . Se prefieren los valores booleanos, pero también se aceptan valores de string. Los valores de string no distinguen mayúsculas de minúsculas.
|
window_column |
Debes definir los parámetros de la ventana en get_prophet_train_pipeline_and_parameters
de la siguiente manera:
Nombre del parámetro | Tipo | Definición |
---|---|---|
window_column |
String | El nombre de la columna con los valores True y False . |
window_stride_length |
Número entero | El valor de la longitud de la segmentación. |
window_max_count |
Número entero | La cantidad máxima de ventanas. |
Haz predicciones con Prophet
La canalización de entrenamiento de modelos de Vertex AI para Prophet crea un modelo de Prophet para cada serie temporal de los datos. La canalización de predicción agrega datos de entrada por ID de serie temporal y calcula las predicciones por separado para cada serie temporal. Luego, la canalización desagrega los resultados de la predicción para que coincidan con el formato de Previsión de Vertex AI.
En el siguiente código de muestra, se ilustra cómo puedes ejecutar una canalización de predicción de Prophet:
job = aiplatform.PipelineJob(
...
template_path=prediction_job_spec_path,
parameter_values=prediction_parameter_values,
...
)
job.run(...)
La canalización y los valores de los parámetros se definen mediante la siguiente función.
(
prediction_job_spec_path,
prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
...
)
El siguiente es un subconjunto de parámetros get_prophet_prediction_pipeline_and_parameters
:
Nombre del parámetro | Tipo | Definición |
---|---|---|
project |
String | El ID de tu proyecto |
location |
String | Su región |
model_name |
String | El nombre del recurso Modelo. Da formato a la cadena de la siguiente manera: projects/{project}/locations/{location}/models/{model} . |
time_column |
String | La columna de tiempo. Debes especificar una columna de tiempo y debe tener un valor para cada fila. La columna de tiempo indica la hora en la que se realizó una observación determinada. |
time_series_identifier_column |
String | La columna de identificador de serie temporal. Debes especificar una columna de identificador de serie temporal y debe tener un valor para cada fila. Por lo general, los datos de entrenamiento para previsiones incluyen varias series temporales, y el identificador le indica a Vertex AI de qué serie temporal forma parte una observación determinada en los datos de entrenamiento. Todas las filas de una serie temporal determinada tienen el mismo valor en la columna de identificador de serie temporal. Algunos identificadores de series temporales comunes pueden ser el ID del producto, el ID de una tienda o una región. Es posible entrenar un modelo de previsión en una sola serie temporal, con un valor idéntico para todas las filas de la columna de identificador de serie temporal. Sin embargo, Vertex AI es más adecuada para los datos de entrenamiento que contienen dos o más series temporales. A fin de obtener mejores resultados, usa al menos 10 series temporales para cada columna que uses a fin de entrenar el modelo. |
target_column |
String | La columna (valor) que deseas que prediga este modelo. |
data_source_csv_filenames |
String | Un URI para un archivo CSV almacenado en Cloud Storage. |
data_source_bigquery_table_path |
String | Un URI para una tabla de BigQuery. |
bigquery_destination_uri |
String | Es un URI para el conjunto de datos de destino deseado. Si no se configura este valor, los recursos se crean en un conjunto de datos nuevo del proyecto. |
machine_type |
String | Es el tipo de máquina que se usará para la predicción por lotes. |
max_num_workers |
Número entero | Es la cantidad máxima de trabajadores que se usarán para la predicción por lotes. |