Creación de un trabajo de AutoML para la previsión de serie temporal con la API - Amazon SageMaker

Creación de un trabajo de AutoML para la previsión de serie temporal con la API

En machine learning, la previsión se refiere al proceso de predecir los resultados o tendencias futuros en función de patrones y datos históricos. Al analizar datos de series temporales pasadas e identificar los patrones subyacentes, los algoritmos de machine learning pueden hacer predicciones y proporcionar información valiosa sobre el comportamiento futuro. Al pronosticar, el objetivo es desarrollar modelos que puedan capturar con precisión la relación entre las variables de entrada y la variable objetivo a lo largo del tiempo. Esto implica examinar varios factores, como las tendencias, la estacionalidad y otros patrones relevantes de los datos. La información recopilada se utiliza luego para entrenar un modelo de machine learning. El modelo entrenado es capaz de generar predicciones tomando nuevos datos de entrada y aplicando las relaciones y los patrones aprendidos. Puede proporcionar pronósticos para una amplia gama de casos de uso, como proyecciones de ventas, tendencias del mercado de valores, pronósticos meteorológicos, pronósticos de demanda y muchos más.

Las siguientes instrucciones muestran cómo crear un trabajo de Piloto automático de Amazon SageMaker como experimento piloto para tipos de problemas de previsión de series temporales mediante la documentación de referencia de las API de SageMaker.

nota

Las tareas como la clasificación de textos e imágenes, la previsión de series temporales y el afinamiento de modelos de lenguaje grandes están disponibles exclusivamente en la versión 2 de la API de REST de AutoML. Si el lenguaje de su elección es Python, puede hacer referencia a AWS SDK for Python (Boto3) o al objeto AutoMLV2 del Amazon SageMaker Python SDK directamente.

Los usuarios que prefieran la comodidad de una interfaz de usuario pueden usar Amazon SageMaker Canvas para acceder a modelos preentrenados y modelos fundacionales de IA generativa o para crear modelos personalizados y adaptados a necesidades específicas de texto, clasificación de imágenes, previsión o IA generativa.

Puede crear un experimento de predicción de series temporales en Piloto automático mediante programación llamando a la API CreateAutoMLJobV2 en cualquier lenguaje compatible con Piloto automático de Amazon SageMaker o la AWS CLI.

Para obtener información sobre cómo se traduce esta acción de API en una función en el lenguaje que usted prefiera, consulte la sección Véase también de CreateAutoMLJobV2 y seleccione un SDK. Como ejemplo, para los usuarios de Python, consulte la sintaxis de solicitud completa de create_auto_ml_job_v2 en AWS SDK for Python (Boto3).

Piloto automático entrena a varios modelos candidatos con su serie temporal objetivo y, a continuación, selecciona un modelo de pronóstico óptimo para una métrica objetivo determinada. Cuando los candidatos a modelo hayan recibido entrenamiento, podrá encontrar las mejores métricas candidatas en la respuesta a DescribeAutoMLJobV2 en BestCandidate.

En las siguientes secciones se definen los parámetros de solicitud de entrada obligatorios y opcionales para la API CreateAutoMLJobV2 utilizada en la previsión de series temporales.

nota

Consulte el cuaderno Time-Series Forecasting with Amazon SageMaker Autopilot para ver un ejemplo práctico de previsión de series temporales. En este cuaderno, utilizará Piloto automático de Amazon SageMaker para entrenar un modelo de series temporales y producir predicciones utilizando el modelo entrenado. El cuaderno proporciona instrucciones para recuperar un conjunto de datos históricos tabulares listo para usar en Amazon S3.

Requisitos previos

Antes de utilizar Piloto automático para crear un experimento de ajuste de series temporales en SageMaker, haga lo siguiente:

  • Prepare su conjunto de datos de series temporales. La preparación del conjunto de datos implica recopilar datos relevantes de diversas fuentes, limpiarlos y filtrarlos para eliminar el ruido y las incoherencias y organizarlos en un formato estructurado. Consulte Formato de conjuntos de datos de series temporales y métodos de relleno de valores faltantes para obtener más información sobre los requisitos de formato de series temporales en Piloto automático. Si lo desea, puede complementar su conjunto de datos con el calendario de días festivos del país que elija para capturar los patrones asociados. Para obtener más información sobre los calendarios de días festivos, consulte Calendarios de días festivos nacionales.

    nota

    Recomendamos proporcionar al menos de 3 a 5 puntos de datos históricos por cada punto de datos futuro que desee predecir. Por ejemplo, para prever con 7 días de antelación (horizonte de 1 semana) en función de los datos diarios, entrene el modelo con un mínimo de 21 a 35 días de datos históricos. Asegúrese de proporcionar datos suficientes para captar los patrones estacionales y recurrentes.

  • Coloque el conjunto de datos de serie temporal en un bucket de Amazon S3.

  • Otórguele acceso completo al bucket de Amazon S3 que contiene los datos de entrada para el rol de ejecución de SageMaker empleado en la ejecución del experimento. Una vez hecho esto, puede usar el ARN de este rol de ejecución en las solicitudes de la API de Piloto automático.

    • Para obtener información sobre cómo obtener el rol de ejecución de SageMaker, consulte Obtención del rol de ejecución.

    • Para obtener información sobre cómo concederle al rol de ejecución de SageMaker los permisos necesarios para acceder a uno o más buckets específicos en Amazon S3, consulte Add Additional Amazon S3 Permissions to a SageMaker Execution Role en Creación de un rol de ejecución.

Parámetros necesarios

Al llamar a CreateAutoMLJobV2 para crear un experimento de Piloto automático a fin de realizar una previsión de series temporales, debe proporcionar los siguientes valores:

  • Un AutoMLJobName para especificar el nombre del trabajo. El nombre debe ser del tipo string y tener una longitud de caracteres de entre 1 y 32.

  • Al menos un AutoMLJobChannel en AutoMLJobInputDataConfig, en el que usted especifique el nombre del bucket de Amazon S3 que contiene sus datos. Si lo desea, puede especificar el contenido (archivos CSV o Parquet) y los tipos de compresión (GZip).

  • Un AutoMLProblemTypeConfig del tipo TimeSeriesForecastingJobConfig para configurar los ajustes de su trabajo de previsión de series temporales. Es especialmente importante que especifique lo siguiente:

    • La frecuencia de las predicciones; es decir, la granularidad deseada (por hora, día, mes, etc.) de su previsión.

      Los intervalos válidos son un número entero seguido de Y (año), M (mes), W (semana), D (día), H (hora) y min (minuto). Por ejemplo, 1D indica todos los días y 15min indica cada 15 minutos. El valor de una frecuencia no debe superponerse con la siguiente frecuencia mayor. Por ejemplo, debe utilizar una frecuencia de 1H en lugar de 60min.

      Los valores válidos de cada frecuencia son los siguientes:

      • Minuto: de 1 a 59

      • Hora: de 1 a 23

      • Día: de 1 a 6

      • Semana: de 1 a 4

      • Mes: de 1 a 11

      • Año: 1

    • El horizonte de predicciones de su pronóstico; es decir, el número de intervalos de tiempo que predice el modelo. El horizonte de previsión también se denomina longitud de predicción. El horizonte máximo de previsión es 500 intervalos temporales o 1/4 de los intervalos temporales del conjunto de datos (el valor más pequeño).

    • Un TimeSeriesConfig en el que se define el esquema del conjunto de datos para asignar los encabezados de las columnas a la previsión especificando lo siguiente.

      • Un TargetAttributeName: la columna que contiene los datos históricos del campo objetivo que se va a pronosticar.

      • Un TimestampAttributeName: la columna que contiene un punto en el tiempo en el que se registra el valor objetivo de un elemento determinado.

      • Un ItemIdentifierAttributeName: la columna que contiene los identificadores de los elementos para los que desea predecir el valor objetivo.

    Lo que sigue es un ejemplo de estos parámetros de solicitud. En este ejemplo, está configurando una previsión diaria para la cantidad o el nivel de demanda esperados de artículos específicos durante un periodo de 20 días.

    "AutoMLProblemTypeConfig": { "ForecastFrequency": "D", "ForecastHorizon": 20, "TimeSeriesConfig": { "TargetAttributeName": "demand", "TimestampAttributeName": "timestamp", "ItemIdentifierAttributeName": "item_id" },
  • Una OutputDataConfig para especificar la ruta de salida de Amazon S3 a fin de almacenar los artefactos de su trabajo de AutoML.

  • Un RoleArn para especificar el ARN del rol utilizado para acceder a sus datos. Puede utilizar el ARN de la función de ejecución a la que ha concedido acceso a sus datos.

Todos los demás parámetros son opcionales. Por ejemplo, puede establecer cuantiles de previsión específicos, elegir un método de relleno para los valores que faltan en el conjunto de datos o definir cómo agregar los datos que no se ajustan a la frecuencia de la previsión. Para saber cómo configurar esos parámetros adicionales, consulte Parámetros opcionales.

Parámetros opcionales

En las siguientes secciones, se proporcionan detalles de algunos parámetros opcionales que puede pasar a la predicción de series temporales de AutoML.

De forma predeterminada, el trabajo de Piloto automático entrena una lista predefinida de algoritmos en su conjunto de datos. No obstante, puede proporcionar un subconjunto de la selección de algoritmos predeterminada.

Para la previsión de series temporales, debe elegir TimeSeriesForecastingJobConfig como tipo de AutoMLProblemTypeConfig.

A continuación, puede especificar una matriz de AutoMLAlgorithms seleccionados en el atributo AlgorithmsConfig de CandidateGenerationConfig.

A continuación se muestra un ejemplo de un atributo AlgorithmsConfig que enumera exactamente tres algoritmos ("cnn-qr", "prophet", "arima") en su campo AutoMLAlgorithms.

{ "AutoMLProblemTypeConfig": { "TimeSeriesForecastingJobConfig": { "CandidateGenerationConfig": { "AlgorithmsConfig":[ {"AutoMLAlgorithms":["cnn-qr", "prophet", "arima"]} ] }, }, }, }

Para ver la lista de algoritmos disponibles para la previsión de serie temporal, consulte AutoMLAlgorithms. Para obtener información sobre cada algoritmo, consulte Compatibilidad de algoritmos para la previsión de series temporales.

Piloto automático entrena a seis modelos candidatos con su serie temporal objetivo; luego, combina estos modelos con un método de conjunto de apilamiento a fin de crear un modelo de previsión óptimo para una métrica objetivo determinada. Cada modelo de pronóstico de Piloto automático genera un pronóstico probabilístico con pronósticos en cuantiles de entre P1 y P99. Estos cuantiles se utilizan para contabilizar la incertidumbre de las previsiones. De forma predeterminada, se generarán pronósticos para los valores 0,1 (p10), 0,5 (p50) y 0,9 (p90). Puede especificar sus propios cuantiles.

En Piloto automático, puede especificar hasta cinco cuantiles de previsión, desde 0,01 (p1) hasta 0,99 (p99), con incrementos de 0,01 o más en el atributo ForecastQuantiles de TimeSeriesForecastingJobConfig.

En este ejemplo, se configura una previsión diaria de los percentiles 10, 25, 50, 75 y 90 para la cantidad o el nivel de demanda esperados de artículos específicos durante un periodo de 20 días.

"AutoMLProblemTypeConfig": { "ForecastFrequency": "D", "ForecastHorizon": 20, "ForecastQuantiles": ["p10", "p25", "p50", "p75", "p90"], "TimeSeriesConfig": { "TargetAttributeName": "demand", "TimestampAttributeName": "timestamp", "ItemIdentifierAttributeName": "item_id" },

Para crear un modelo de previsión (también denominado el mejor modelo candidato del experimento), debe especificar una frecuencia de previsión. La frecuencia de previsión determina la frecuencia de las predicciones en sus previsiones. Por ejemplo, las previsiones de ventas mensuales. El mejor modelo de Piloto automático puede generar pronósticos para frecuencias de datos superiores a la frecuencia con la que se registran los datos.

Durante el entrenamiento, Piloto automático agrega cualquier dato que no se ajuste a la frecuencia de previsión que especifique. Por ejemplo, puede que tenga algunos datos diarios, pero que especifique una frecuencia de previsión semanal. Piloto automático ajusta los datos diarios en función de la semana a la que pertenecen. Luego, Piloto automático los combina en un solo registro para cada semana.

Durante la agregación, el método de transformación predeterminado consiste en sumar los datos. Puede configurar la agregación al crear su trabajo de AutoML en el atributo Transformations de TimeSeriesForecastingJobConfig. Los métodos de agregación compatibles son sum (predeterminado), avg, first, min y max. La agregación solo se admite en la columna de destino.

En el siguiente ejemplo, configura la agregación para calcular la media de las previsiones promocionales individuales y proporcionar los valores finales de las previsiones agregadas.

"Transformations": { "Aggregation": { "promo": "avg" } }

Piloto automático proporciona varios métodos de relleno para gestionar los valores que faltan en las columnas objetivo y otras columnas numéricas de sus conjuntos de datos de series temporales. Para obtener información sobre la lista de métodos de relleno compatibles y su lógica de relleno disponible, consulte Gestión de valores que faltan.

Puede configurar la estrategia de relleno en el atributo Transformations de TimeSeriesForecastingJobConfig al crear su trabajo de AutoML.

Para configurar un método de relleno, debe proporcionar un par clave-valor:

  • La clave es el nombre de la columna cuyo método de relleno quiera especificar.

  • El valor asociado a la clave es un objeto que define la estrategia de relleno de esa columna.

Puede especificar varios métodos de relleno para una sola columna.

Para establecer un valor específico para el método de relleno, debe establecer el parámetro de relleno según el valor del método de relleno deseado (por ejemplo, "backfill" : "value") y definir el valor de relleno real en un parámetro adicional con el sufijo “_value”. Por ejemplo, para establecer backfill a un valor de 2, debe incluir dos parámetros: "backfill": "value" y "backfill_value":"2".

En el siguiente ejemplo, se especifica la estrategia de relleno para la columna de datos incompleta (“precio”) de la siguiente manera: todos los valores faltantes entre el primer punto de datos de un artículo y el último se establecen en 0; después, todos los valores faltantes se rellenan con el valor 2 hasta la fecha de finalización del conjunto de datos.

"Transformations": { "Filling": { "price": { "middlefill" : "zero", "backfill" : "value", "backfill_value": "2" } } }

Piloto automático produce métricas de precisión para evaluar los modelos candidatos y ayudarlo a elegir cuál usar para generar pronósticos. Cuando ejecuta un experimento de previsión de series temporales, puede elegir AutoML para que Piloto automático optimice el predictor de forma automática, o puede elegir manualmente un algoritmo para su predictor.

De forma predeterminada, Piloto automático utiliza la pérdida de cuantil ponderada media. Sin embargo, puede configurar la métrica objetivo al crear su trabajo de AutoML en el atributo MetricName de AutoMLJobObjective.

Para ver la lista de algoritmos disponibles, consulte Compatibilidad de algoritmos para la previsión de series temporales.

En Piloto automático, puede incorporar a su serie temporal un conjunto de datos, con ingeniería de características, con información sobre los días festivos nacionales. Piloto automático proporciona soporte nativo para los calendarios de días festivos de más de 250 países. Después de elegir un país, Piloto automático aplica el calendario de días festivos de ese país a todos los elementos de su conjunto de datos durante el entrenamiento. Esto permite que el modelo identifique los patrones asociados a días festivos específicos.

Puede habilitar la característica para días festivos al crear su trabajo de AutoML pasando un objeto HolidayConfigAttributes al atributo HolidayConfig de TimeSeriesForecastingJobConfig. El objeto HolidayConfigAttributes contiene el atributo CountryCode de dos letras que determina el país del calendario festivo nacional público que se utiliza para aumentar el conjunto de datos de series temporales.

Consulte Códigos de país para obtener una lista de calendarios compatibles y su código de país correspondiente.

Piloto automático le permite implementar automáticamente su modelo de pronóstico en un punto de conexión. Para permitir la implementación automática del mejor candidato modelo para un trabajo de AutoML, incluya un ModelDeployConfig en la solicitud de trabajo de AutoML. Esto permite implementar el mejor modelo en un punto de conexión de SageMaker. A continuación, se muestran las configuraciones disponibles para la personalización.

Puede configurar su trabajo de AutoML V2 para iniciar automáticamente un trabajo remoto en Amazon EMR sin servidor cuando se necesiten recursos de computación adicionales para procesar conjuntos de datos de gran tamaño. Al realizar una transición sin problemas a EMR sin servidor cuando es necesario, el trabajo de AutoML puede gestionar conjuntos de datos que, de otro modo, superarían los recursos aprovisionados inicialmente, sin ninguna intervención manual por su parte. EMR sin servidor está disponible para los tipos de problemas tabulares y de series temporales. Recomendamos configurar esta opción para conjuntos de datos de series temporales de más de 30 GB.

Para permitir que el trabajo de AutoML V2 pase automáticamente a EMR sin servidor para conjuntos de datos grandes, debe proporcionar un objeto EmrServerlessComputeConfig, que incluya un campo ExecutionRoleARN, para el AutoMLComputeConfig de la solicitud de entrada del trabajo AutoML V2.

ExecutionRoleARN es el ARN del rol de IAM que otorga al trabajo de AutoML V2 los permisos necesarios para ejecutar los trabajos de EMR sin servidor.

Este rol debe tener la siguiente relación de confianza:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Y conceder los permisos para:

  • Crear, enumerar y actualizar aplicaciones de EMR sin servidor.

  • Iniciar, enumere, obtener o cancelar las ejecuciones de trabajos en una aplicación EMR sin servidor.

  • Etiquetar los recursos EMR sin servidor.

  • Pasar un rol de IAM al servicio de EMR sin servidor para su ejecución.

    Al conceder el permiso iam:PassRole, el trabajo de AutoML V2 puede asumir temporalmente el rol EMRServerlessRuntimeRole-* y pasarlo al servicio de EMR sin servidor. Estos son los roles de IAM utilizados por los entornos de ejecución de trabajos de EMR sin servidor para acceder a otros recursos servicios de AWS necesarios durante el tiempo de ejecución, como Amazon S3 para el acceso a los datos, CloudWatch para el registro, el acceso al Catálogo de datos de AWS Glue u otros servicios en función de sus requisitos de carga de trabajo.

    Consulte Roles en tiempo de ejecución de trabajo para Amazon EMR sin servidor para obtener más información sobre los permisos de este rol.

La política de IAM definida en el documento JSON proporcionado concede esos permisos:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "EMRServerlessCreateApplicationOperation", "Effect": "Allow", "Action": "emr-serverless:CreateApplication", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessListApplicationOperation", "Effect": "Allow", "Action": "emr-serverless:ListApplications", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessApplicationOperations", "Effect": "Allow", "Action": [ "emr-serverless:UpdateApplication", "emr-serverless:GetApplication" ], "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessStartJobRunOperation", "Effect": "Allow", "Action": "emr-serverless:StartJobRun", "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessListJobRunOperation", "Effect": "Allow", "Action": "emr-serverless:ListJobRuns", "Resource": "arn:aws:emr-serverless:*:*:/applications/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessJobRunOperations", "Effect": "Allow", "Action": [ "emr-serverless:GetJobRun", "emr-serverless:CancelJobRun" ], "Resource": "arn:aws:emr-serverless:*:*:/applications/*/jobruns/*", "Condition": { "StringEquals": { "aws:ResourceTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "EMRServerlessTagResourceOperation", "Effect": "Allow", "Action": "emr-serverless:TagResource", "Resource": "arn:aws:emr-serverless:*:*:/*", "Condition": { "StringEquals": { "aws:RequestTag/sagemaker:is-canvas-resource": "True", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "IAMPassOperationForEMRServerless", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/EMRServerlessRuntimeRole-*", "Condition": { "StringEquals": { "iam:PassedToService": "emr-serverless.amazonaws.com", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } } ] }