

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Previsión de un modelo de piloto automático implementado
<a name="timeseries-forecasting-deploy-models"></a>

Después de entrenar sus modelos con la API de AutoML, puede implementarlos para realizar previsiones en tiempo real o por lotes. 

La API de AutoML entrena a varios modelos candidatos con sus datos de serie temporal y selecciona un modelo de previsión óptimo en función de una métrica objetivo determinada. Una vez que los candidatos a su modelo estén capacitados, podrá encontrar al mejor candidato en el Response [DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html) en [BestCandidate](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-CandidateName).

Para obtener predicciones con este modelo de mejor rendimiento, puede configurar un punto de conexión para obtener las previsiones de forma interactiva o utilizar la previsión por lotes para realizar predicciones a partir de un lote de observaciones.

**Consideraciones**
+ Al proporcionar datos de entrada para la previsión, el esquema de datos debe seguir siendo el mismo que el utilizado para entrenar al modelo, lo que incluye el número de columnas, los encabezados de las columnas y los tipos de datos. Puede realizar pronósticos para un elemento nuevo o existente IDs dentro del mismo intervalo de tiempo o uno diferente para realizar predicciones para un período de tiempo diferente.
+ Los modelos de predicción pronostican los puntos del horizonte de previsión en el futuro especificados en la solicitud de entrada durante el entrenamiento; es decir, desde la *fecha de finalización objetivo* hasta la *fecha de finalización objetivo \$1 horizonte de previsión*. A fin de usar el modelo para predecir fechas específicas, debe proporcionar los datos en el mismo formato que los datos de entrada originales, hasta una *fecha de finalización objetivo* determinada. En este escenario, el modelo empezará a realizar predicciones a partir de la nueva fecha finalización objetivo.

  Por ejemplo, si su conjunto de datos tuviera datos mensuales de enero a junio con un horizonte de previsión de 2, el modelo predeciría el valor objetivo para los próximos 2 meses, que serían julio y agosto. Si en agosto desea realizar una predicción para los próximos 2 meses, esta vez los datos de entrada deberían ser de enero a agosto, y el modelo realizará una predicción para los próximos 2 meses (septiembre y octubre).
+ Al prever puntos de datos futuros, no hay un mínimo establecido para la cantidad de datos históricos que se deben proporcionar. Incluya datos suficientes para captar los patrones estacionales y recurrentes en sus series temporales.

**Topics**
+ [Previsión en tiempo real](timeseries-forecasting-realtime.md)
+ [Previsión por lotes](timeseries-forecasting-batch.md)

# Previsión en tiempo real
<a name="timeseries-forecasting-realtime"></a>

La previsión en tiempo real resulta útil cuando se necesitan generar predicciones on-the-fly, como en el caso de aplicaciones que requieren respuestas inmediatas o cuando se realizan previsiones para puntos de datos individuales.

Al implementar su modelo AutoML como un punto de conexión en tiempo real, puede generar pronósticos bajo demanda y minimizar la latencia entre la recepción de nuevos datos y la obtención de predicciones. Esto hace que la previsión en tiempo real sea adecuada para aplicaciones que requieren capacidades de previsión inmediatas, personalizadas o basadas en eventos.

Para la previsión en tiempo real, el conjunto de datos debe ser un subconjunto del conjunto de datos de entrada. El punto de conexión en tiempo real tiene un tamaño de datos de entrada de aproximadamente 6 MB y un límite de tiempo de respuesta de 60 segundos. Recomendamos incluir uno o varios artículos a la vez.

Se puede utilizar SageMaker APIs para recuperar al mejor candidato de un trabajo de AutoML y, a continuación, crear un punto final de SageMaker IA con ese candidato.

También puede elegir la opción de implementación automática al crear el experimento de Piloto automático. Para obtener más información sobre cómo configurar la implementación automática de modelos, consulte [Cómo habilitar la implementación automática](autopilot-create-experiment-timeseries-forecasting.md#timeseries-forecasting-auto-model-deployment).

**Para crear un punto final de SageMaker IA utilizando tu mejor modelo candidato:**

1. 

**Recuperación de los detalles del trabajo de AutoML.**

   El siguiente ejemplo de AWS CLI comando utiliza la API [DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html) para obtener detalles del trabajo de AutoML, incluida la información sobre el mejor modelo candidato.

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
   ```

1. 

**Extraiga la definición del [InferenceContainers](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-InferenceContainers)contenedor del mejor modelo candidato.**

   Una definición de contenedor es el entorno contenerizado que se utiliza para alojar el modelo de SageMaker IA entrenado para realizar predicciones.

   ```
   BEST_CANDIDATE=$(aws sagemaker describe-auto-ml-job-v2 \
     --auto-ml-job-name job-name 
     --region region \
     --query 'BestCandidate.InferenceContainers[0]' \
     --output json
   ```

   Este comando extrae la definición del contenedor para el mejor modelo candidato y la almacena en la variable `BEST_CANDIDATE`.

1. 

**Cree un modelo de SageMaker IA utilizando la mejor definición de contenedor candidata.**

   Usa las definiciones de contenedor de los pasos anteriores para crear un modelo de SageMaker IA mediante la [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API.

   ```
   aws sagemaker create-model \
               --model-name 'your-candidate-name>' \
               --primary-container "$BEST_CANDIDATE"
               --execution-role-arn 'execution-role-arn>' \
               --region 'region>
   ```

   El `--execution-role-arn` parámetro especifica la función de IAM que asume la SageMaker IA al utilizar el modelo para la inferencia. Para obtener más información sobre los permisos necesarios para este rol, consulte [CreateModel API: Permisos del rol de ejecución](https://docs.aws.amazon.com/).

1. 

**Cree una configuración de punto final de SageMaker IA utilizando el modelo.**

   El siguiente AWS CLI comando usa la [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API para crear una configuración de punto final.

   ```
   aws sagemaker create-endpoint-config \
     --production-variants file://production-variants.json \
     --region 'region'
   ```

   Donde el archivo `production-variants.json` contiene la configuración del modelo, incluidos el nombre del modelo y el tipo de instancia.
**nota**  
Se recomienda utilizar instancias [m5.12xlarge](https://aws.amazon.com/ec2/instance-types/m5/) para la previsión en tiempo real.

   ```
   [
       {
         "VariantName": "variant-name",
         "ModelName": "model-name",
         "InitialInstanceCount": 1,
         "InstanceType": "m5.12xlarge"
       }
     ]
   }
   ```

1. 

**Cree el punto final de SageMaker IA mediante la configuración del punto final.**

   En el siguiente AWS CLI ejemplo, se utiliza la [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API para crear el punto final.

   ```
   aws sagemaker create-endpoint \
               --endpoint-name 'endpoint-name>' \
               --endpoint-config-name 'endpoint-config-name' \
               --region 'region'
   ```

   Compruebe el progreso de la implementación de su punto final de inferencia en tiempo real mediante la [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API. Consulte el siguiente AWS CLI comando como ejemplo.

   ```
   aws sagemaker describe-endpoint \
               --endpoint-name 'endpoint-name' \
               --region 'region'
   ```

   Cuando `EndpointStatus` cambie a `InService`, el punto de conexión estará listo para usarse en la inferencia en tiempo real.

1. 

**Invoca el punto final de la SageMaker IA para hacer predicciones.**

   ```
   aws sagemaker invoke-endpoint \
               --endpoint-name 'endpoint-name' \ 
               --region 'region' \
               --body file://input-data-in-bytes.json \
               --content-type 'application/json' outfile
   ```

   Donde el archivo `input-data-in-bytes.json` contiene los datos de entrada para la predicción.

# Previsión por lotes
<a name="timeseries-forecasting-batch"></a>

La previsión por lotes, también conocida como inferencia fuera de línea, genera predicciones de modelos a partir de un lote de observaciones. La inferencia por lotes es una buena opción para conjuntos de datos grandes o si no necesita una respuesta inmediata a una solicitud de predicción del modelo.

Por el contrario, la inferencia en línea (inferencia en tiempo real) genera predicciones en tiempo real. 

Se puede utilizar SageMaker APIs para recuperar al mejor candidato de un trabajo de AutoML y, a continuación, enviar un lote de datos de entrada para su inferencia con ese candidato.

1. 

**Recuperación de los detalles del trabajo de AutoML.**

   El siguiente ejemplo de AWS CLI comando utiliza la API [DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html) para obtener detalles del trabajo de AutoML, incluida la información sobre el mejor modelo candidato.

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
   ```

1. 

**Extraiga la definición del [InferenceContainers](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-InferenceContainers)contenedor del mejor modelo candidato.**

   Una definición de contenedor es el entorno contenerizado que se utiliza para alojar el modelo de SageMaker IA entrenado para realizar predicciones.

   ```
   BEST_CANDIDATE=$(aws sagemaker describe-auto-ml-job-v2 \
         --auto-ml-job-name job-name 
         --region region \
         --query 'BestCandidate.InferenceContainers[0]' \
         --output json
   ```

   Este comando extrae la definición del contenedor para el mejor modelo candidato y la almacena en la variable `BEST_CANDIDATE`.

1. 

**Cree un modelo de SageMaker IA utilizando la mejor definición de contenedor candidata.**

   Usa las definiciones de contenedor de los pasos anteriores para crear un modelo de SageMaker IA mediante la [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API.

   ```
   aws sagemaker create-model \
         --model-name 'model-name' \
         --primary-container "$BEST_CANDIDATE"
         --execution-role-arn 'execution-role-arn>' \
         --region 'region>
   ```

   El `--execution-role-arn` parámetro especifica la función de IAM que asume la SageMaker IA al utilizar el modelo para la inferencia. Para obtener más información sobre los permisos necesarios para este rol, consulte [CreateModel API: Permisos del rol de ejecución](https://docs.aws.amazon.com/).

1. 

**Creación de trabajos de transformación por lotes.**

   En el siguiente ejemplo, se crea un trabajo de transformación mediante la [CreateTransformJob](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-transform-job.html)API. 

   ```
   aws sagemaker create-transform-job \ 
          --transform-job-name 'transform-job-name' \
          --model-name 'model-name'\
          --transform-input file://transform-input.json \
          --transform-output file://transform-output.json \
          --transform-resources file://transform-resources.json \
          --region 'region'
   ```

   Los detalles de entrada, salida y recursos se definen en archivos JSON independientes:
   + `transform-input.json`:

     ```
     {
       "DataSource": {
         "S3DataSource": {
           "S3DataType": "S3Prefix",
           "S3Uri": "s3://my-input-data-bucket/path/to/input/data"
         }
       },
       "ContentType": "text/csv",
       "SplitType": "None"
     }
     ```
   + `transform-output.json`:

     ```
     {
       "S3OutputPath": "s3://my-output-bucket/path/to/output",
       "AssembleWith": "Line"
     }
     ```
   + `transform-resources.json`:
**nota**  
Recomendamos el uso de instancias [m5.12xlarge](https://aws.amazon.com/ec2/instance-types/m5/) para cargas de trabajo de uso general e instancias `m5.24xlarge` para tareas de previsión de macrodatos.

     ```
     {
       "InstanceType": "instance-type",
       "InstanceCount": 1
     }
     ```

1. 

**Supervisa el progreso de tu trabajo de transformación mediante la [DescribeTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTransformJob.html)API.**

   Consulte el siguiente AWS CLI comando como ejemplo.

   ```
   aws sagemaker describe-transform-job \
         --transform-job-name 'transform-job-name' \
         --region region
   ```

1. 

**Recuperación del resultado de la transformación por lotes.**

   Una vez finalizado el trabajo, el resultado previsto estará disponible en `S3OutputPath`. 

   El nombre de archivo de salida tiene el siguiente formato: `input_data_file_name.out`. Por ejemplo, si el archivo de entrada es `text_x.csv`, el nombre de la salida será `text_x.csv.out`.

   ```
   aws s3 ls s3://my-output-bucket/path/to/output/
   ```

Los siguientes ejemplos de código ilustran el uso del AWS SDK para Python (boto3) y AWS CLI para la previsión por lotes.

------
#### [ AWS SDK for Python (boto3) ]

 El siguiente ejemplo usa el **SDK de AWS para Python (boto3)** a fin de hacer predicciones por lotes.

```
import sagemaker 
import boto3

session = sagemaker.session.Session()

sm_client = boto3.client('sagemaker', region_name='us-west-2')
role = 'arn:aws:iam::1234567890:role/sagemaker-execution-role'
output_path = 's3://test-auto-ml-job/output'
input_data = 's3://test-auto-ml-job/test_X.csv'

best_candidate = sm_client.describe_auto_ml_job_v2(AutoMLJobName=job_name)['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['CandidateName']

# create model
reponse = sm_client.create_model(
    ModelName = best_candidate_name,
    ExecutionRoleArn = role,
    Containers = best_candidate_containers 
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName=f'{best_candidate_name}-transform-job',
    ModelName=model_name,
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': 'S3Prefix',
                'S3Uri': input_data
            }
        },
        'ContentType': "text/csv",
        'SplitType': 'None'
    },
    TransformOutput={
        'S3OutputPath': output_path,
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': 'ml.m5.2xlarge',
        'InstanceCount': 1,
    },
)
```

El trabajo de inferencia por lotes devuelve una respuesta con el siguiente formato.

```
{'TransformJobArn': 'arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-transform-job',
 'ResponseMetadata': {'RequestId': '659f97fc-28c4-440b-b957-a49733f7c2f2',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'x-amzn-requestid': '659f97fc-28c4-440b-b957-a49733f7c2f2',
   'content-type': 'application/x-amz-json-1.1',
   'content-length': '96',
   'date': 'Thu, 11 Aug 2022 22:23:49 GMT'},
  'RetryAttempts': 0}}
```

------
#### [ AWS Command Line Interface (AWS CLI) ]

1. **Obtenga las definiciones del contenedor del mejor candidato**.

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name 'test-automl-job' --region us-west-2
   ```

1. **Cree el modelo**.

   ```
   aws sagemaker create-model --model-name 'test-sagemaker-model'
   --containers '[{
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3",
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz",
       "Environment": {
           "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1",
           "AUTOML_TRANSFORM_MODE": "feature-transform",
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf",
           "SAGEMAKER_PROGRAM": "sagemaker_serve",
           "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code"
       }
   }, {
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3",
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/tuning/flicdf10v2-dpp0-xgb/test-job1E9-244-7490a1c0/output/model.tar.gz",
       "Environment": {
           "MAX_CONTENT_LENGTH": "20971520",
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv",
           "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" 
       }
   }, {
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", 
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz", 
       "Environment": { 
           "AUTOML_TRANSFORM_MODE": "inverse-label-transform", 
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", 
           "SAGEMAKER_INFERENCE_INPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", 
           "SAGEMAKER_PROGRAM": "sagemaker_serve", 
           "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" 
       } 
   }]' \
   --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \
   --region 'us-west-2'
   ```

1. **Cree un trabajo de transformación**.

   ```
   aws sagemaker create-transform-job --transform-job-name 'test-tranform-job'\
    --model-name 'test-sagemaker-model'\
    --transform-input '{
           "DataSource": {
               "S3DataSource": {
                   "S3DataType": "S3Prefix",
                   "S3Uri": "s3://amzn-s3-demo-bucket/data.csv"
               }
           },
           "ContentType": "text/csv",
           "SplitType": "None"
       }'\
   --transform-output '{
           "S3OutputPath": "s3://amzn-s3-demo-bucket/output/",
           "AssembleWith": "Line"
       }'\
   --transform-resources '{
           "InstanceType": "ml.m5.2xlarge",
           "InstanceCount": 1
       }'\
   --region 'us-west-2'
   ```

1. **Compruebe el progreso del trabajo de transformación**. 

   ```
   aws sagemaker describe-transform-job --transform-job-name  'test-tranform-job' --region us-west-2
   ```

   Lo que sigue es la respuesta del trabajo de transformación.

   ```
   {
       "TransformJobName": "test-tranform-job",
       "TransformJobArn": "arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-tranform-job",
       "TransformJobStatus": "InProgress",
       "ModelName": "test-model",
       "TransformInput": {
           "DataSource": {
               "S3DataSource": {
                   "S3DataType": "S3Prefix",
                   "S3Uri": "s3://amzn-s3-demo-bucket/data.csv"
               }
           },
           "ContentType": "text/csv",
           "CompressionType": "None",
           "SplitType": "None"
       },
       "TransformOutput": {
           "S3OutputPath": "s3://amzn-s3-demo-bucket/output/",
           "AssembleWith": "Line",
           "KmsKeyId": ""
       },
       "TransformResources": {
           "InstanceType": "ml.m5.2xlarge",
           "InstanceCount": 1
       },
       "CreationTime": 1662495635.679,
       "TransformStartTime": 1662495847.496,
       "DataProcessing": {
           "InputFilter": "$",
           "OutputFilter": "$",
           "JoinSource": "None"
       }
   }
   ```

   Después de que `TransformJobStatus` cambie a `Completed`, puede comprobar el resultado de la inferencia en `S3OutputPath`.

------