

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.

# Supervisión de la calidad de los datos y los modelos con Amazon SageMaker Model Monitor
<a name="model-monitor"></a>

Amazon SageMaker Model Monitor supervisa la calidad de los modelos de aprendizaje automático de Amazon SageMaker AI en producción. Con el Monitor de modelos, puede configurar lo siguiente:
+ Supervisión continua con un punto de conexión en tiempo real.
+ Supervisión continua con un trabajo de transformación por lotes que se ejecuta con regularidad.
+ Supervisión programada para trabajos de transformación por lotes asíncronos.

Con el monitor de modelos, puede configurar alertas que le notifiquen cuando haya desviaciones en la calidad del modelo. La detección temprana y proactiva de estas desviaciones le permite tomar medidas correctivas. Puede tomar medidas como volver a entrenar los modelos, auditar los sistemas ascendentes o solucionar problemas de calidad sin tener que supervisar los modelos manualmente ni crear herramientas adicionales. Puede utilizar las capacidades de supervisión prediseñadas del monitor de modelos que no requieran codificación. También tiene la flexibilidad de monitorizar modelos mediante la codificación para proporcionar análisis personalizados.

El monitor de modelos proporciona los siguientes tipos de supervisión:
+ [Calidad de datos](model-monitor-data-quality.md): supervise la desviación en la calidad de los datos.
+ [Calidad de modelo](model-monitor-model-quality.md): supervise la desviación de las métricas de calidad del modelo, como la precisión.
+ [Desviación de sesgo de modelos en producción](clarify-model-monitor-bias-drift.md): supervise el sesgo en las predicciones de su modelo.
+ [Desviación en la atribución de características de los modelos en producción](clarify-model-monitor-feature-attribution-drift.md): supervise la desviación en la atribución de características.

**Topics**
+ [Monitorización de un modelo en producción](how-it-works-model-monitor.md)
+ [Cómo funciona Amazon SageMaker Model Monitor](#model-monitor-how-it-works)
+ [Captura de datos](model-monitor-data-capture.md)
+ [Calidad de datos](model-monitor-data-quality.md)
+ [Calidad de modelo](model-monitor-model-quality.md)
+ [Desviación de sesgo de modelos en producción](clarify-model-monitor-bias-drift.md)
+ [Desviación en la atribución de características de los modelos en producción](clarify-model-monitor-feature-attribution-drift.md)
+ [Programe trabajos de supervisión](model-monitor-scheduling.md)
+ [Contenedor prediseñado de Amazon SageMaker Model Monitor](model-monitor-pre-built-container.md)
+ [Interpretación de los resultados](model-monitor-interpreting-results.md)
+ [Visualice los resultados de los puntos de enlace en tiempo real en Amazon Studio SageMaker](model-monitor-interpreting-visualize-results.md)
+ [Temas avanzados](model-monitor-advanced-topics.md)
+ [Monitor de modelo FAQs](model-monitor-faqs.md)

# Monitorización de un modelo en producción
<a name="how-it-works-model-monitor"></a>

Tras implementar un modelo en su entorno de producción, utilice Amazon SageMaker Model Monitor para supervisar de forma continua la calidad de los modelos de aprendizaje automático en tiempo real. Amazon SageMaker Model Monitor le permite configurar un sistema automático de activación de alertas cuando hay desviaciones en la calidad del modelo, como desviaciones de datos o anomalías. Amazon CloudWatch Logs recopila archivos de registro sobre la supervisión del estado del modelo y notifica cuando la calidad del modelo alcanza ciertos umbrales que usted preestableció. CloudWatch almacena los archivos de registro en un bucket de Amazon S3 que especifique. La detección temprana y proactiva de las desviaciones del AWS modelo mediante productos de monitorización de modelos le permite tomar medidas rápidas para mantener y mejorar la calidad del modelo implementado. 

Para obtener más información sobre los productos de monitoreo de SageMaker modelos, consulte[Supervisión de la calidad de los datos y los modelos con Amazon SageMaker Model Monitor](model-monitor.md).

Para iniciar su viaje de aprendizaje automático con la SageMaker IA, registre una AWS cuenta en [Set Up SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-set-up.html). 

## Cómo funciona Amazon SageMaker Model Monitor
<a name="model-monitor-how-it-works"></a>

Amazon SageMaker Model Monitor supervisa automáticamente los modelos de aprendizaje automático (ML) en producción y le notifica cuando se producen problemas de calidad. El monitor de modelos utiliza reglas para detectar desviaciones en sus modelos y le avisa cuando se producen. La siguiente figura muestra cómo funciona este proceso en el caso de que el modelo se implemente en un punto de conexión en tiempo real.

![\[El proceso de supervisión de modelos con Amazon SageMaker Model Monitor.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mmv2-architecture.png)


También puede usar el monitor de modelos para supervisar un trabajo de transformación por lotes en lugar de un punto de conexión en tiempo real. En este caso, en lugar de recibir solicitudes a un punto de conexión y realizar un seguimiento de las predicciones, el Monitor de modelos supervisará las entradas y salidas de las inferencias. En la siguiente figura se muestra un diagrama del proceso de supervisión de un trabajo de transformación por lotes.

![\[El proceso de supervisión de modelos con Amazon SageMaker Model Monitor.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mmv2-architecture-batch.png)


Para habilitar la supervisión de los modelos, siga estos pasos. Estos pasos siguen la ruta de los datos a través de los distintos procesos de recopilación, supervisión y análisis de datos.
+ Para un punto de conexión en tiempo real, habilite el punto de conexión para capturar datos de las solicitudes entrantes a un modelo ML entrenado y las predicciones de modelo resultantes.
+ Para un trabajo de transformación por lotes, habilite la captura de datos de las entradas y salidas de la transformación por lotes.
+ Cree una referencia a partir del conjunto de datos que se utilizó para entrenar el modelo. La referencia calcula las métricas y sugiere las limitaciones de las métricas. Las predicciones en tiempo real o por lotes del modelo se comparan con las restricciones. Se consideran infracciones si están fuera de los valores restringidos.
+ Cree una programación de supervisión que especifique qué datos se recopilarán, con qué frecuencia se recopilarán, cómo analizarlos y qué informes se producirán. 
+ Inspeccione los informes, que comparan los datos más recientes con la referencia. Esté atento a las infracciones denunciadas, las estadísticas y las notificaciones de Amazon CloudWatch.

**Notas**  
El monitor de modelos calcula las métricas y estadísticas del modelo únicamente a partir de datos tabulares. Por ejemplo, aún se puede supervisar un modelo de clasificación de imágenes que toma imágenes como entrada y genera una etiqueta basada en esa imagen. El monitor de modelos podría calcular métricas y estadísticas para la salida, no para la entrada.
Actualmente, el monitor de modelos admite solo puntos de conexión que alojan un solo modelo y no admite la supervisión de puntos de conexión multimodelo. Para obtener información sobre el uso de puntos de enlace de varios modelos, consulte [Puntos de conexión multimodelo](multi-model-endpoints.md).
El Monitor de modelos admite la supervisión de los canales de inferencia. Sin embargo, la captura y el análisis de datos se realiza para toda la canalización, no para contenedores individuales en la canalización.
Para evitar que las solicitudes de inferencia se vean afectadas, la captura de datos deja de capturar solicitudes con niveles altos de uso de disco. Se recomienda mantener la utilización del disco por debajo del 75 % para garantizar que la captura de datos siga capturando las solicitudes.
Si lanza SageMaker Studio en una Amazon VPC personalizada, debe crear puntos de enlace de VPC para permitir que Model Monitor se comunique con Amazon S3 y. CloudWatch Para obtener información sobre los puntos de conexión de VPC, consulte [Puntos de conexión de VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html) en la *Guía del usuario de Amazon Virtual Private Cloud*. Para obtener información sobre cómo lanzar SageMaker Studio en una VPC personalizada, consulte. [Conexión de cuadernos de Studio en una VPC a recursos externos](studio-notebooks-and-internet-access.md)

### Cuadernos de ejemplo del Monitor de modelos
<a name="model-monitor-sample-notebooks"></a>

Para ver un ejemplo de bloc de notas que explica el end-to-end flujo de trabajo con Model Monitor con su punto de conexión en tiempo real, consulte [Introducción a Amazon SageMaker Model Monitor](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/introduction/SageMaker-ModelMonitoring.html).

Para ver un bloc de notas de ejemplo que visualiza el archivo statistics.json para una ejecución seleccionada en una programación de monitorización, consulte [Visualización del monitor de modelos](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/visualization/SageMaker-Model-Monitor-Visualize.html). 

Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar el ejemplo en SageMaker IA, consulte. [Instancias de Amazon SageMaker Notebook](nbi.md) Tras crear una instancia de bloc de notas y abrirla, selecciona la pestaña **Ejemplos de SageMaker IA** para ver una lista de todos los ejemplos de SageMaker IA. Para abrir un cuaderno, elija la pestaña **Usar** del cuaderno y elija **Crear copia**.

# Captura de datos
<a name="model-monitor-data-capture"></a>

Para registrar las entradas de su punto de conexión y las salidas de inferencia del modelo implementado en Amazon S3, puede habilitar una característica llamada *captura de datos*. La *captura de datos* se suele utilizar para registrar información que se puede utilizar para el entrenamiento, la depuración y la supervisión. Amazon SageMaker Model Monitor analiza automáticamente los datos capturados y compara las métricas de estos datos con una línea base que usted cree para el modelo. Para obtener más información acerca del monitor de modelos, consulte [Supervisión de la calidad de los datos y los modelos con Amazon SageMaker Model Monitor](model-monitor.md).

Puede implementar la *captura de datos* para los modos de monitor de modelos en tiempo real y por lotes mediante el AWS SDK para Python (Boto) SDK de SageMaker Python. En el caso de un punto de conexión en tiempo real, especificará la configuración de *captura de datos* al crear el punto de conexión. Debido a la naturaleza persistente de su punto de conexión en tiempo real, puede configurar opciones adicionales para activar o desactivar la captura de datos en determinados momentos, o cambiar la frecuencia de muestreo. También puede optar por cifrar los datos de inferencia.

En el caso de un trabajo de transformación por lotes, puede habilitar la *captura de datos* si desea ejecutar una supervisión del modelo según lo programado o una supervisión continua del modelo para los trabajos de transformación por lotes periódicos y regulares. Especificará la configuración de *captura de datos* al crear el trabajo de transformación por lotes. Dentro de esta configuración, tiene la opción de activar el cifrado o generar el ID de inferencia con el resultado, lo que le ayuda a cotejar los datos capturados con los datos de Ground Truth.

# Captura de datos del punto de conexión en tiempo real
<a name="model-monitor-data-capture-endpoint"></a>

**nota**  
Para evitar que las solicitudes de inferencia se vean afectadas, la captura de datos deja de capturar solicitudes con niveles altos de uso de disco. Se recomienda mantener la utilización del disco por debajo del 75 % para garantizar que la captura de datos siga capturando las solicitudes.

Para capturar datos para su punto final en tiempo real, debe implementar un modelo mediante servicios de alojamiento de SageMaker IA. Esto requiere que cree un modelo de SageMaker IA, defina una configuración de punto final y cree un punto final HTTPS.

Los pasos necesarios para activar la captura de datos son similares tanto si utilizas el SDK de SageMaker Python como AWS SDK para Python (Boto) si lo utilizas. Si utilizas el AWS SDK, define el [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)diccionario, junto con los campos obligatorios, en el [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)método para activar la captura de datos. Si utilizas el SDK de SageMaker Python, importa la [DataCaptureConfig](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.data_capture_config.DataCaptureConfig)clase e inicializa una instancia de esta clase. A continuación, pase este objeto al parámetro `DataCaptureConfig` del método `sagemaker.model.Model.deploy()`.

Para usar los fragmentos de código siguientes, reemplaza el código del *italicized placeholder text* ejemplo por tu propia información.

## Cómo establecer la captura de datos
<a name="model-monitor-data-capture-defing.title"></a>

Especifique una configuración de captura de datos. Puede capturar la carga útil de solicitud, la carga útil de respuesta o ambas con esta configuración. El fragmento de código siguiente muestra cómo habilitar la captura de datos mediante el SDK de SageMaker Python para AWS SDK para Python (Boto) IA y el AI.

**nota**  
No necesita usar el monitor de modelos para capturar las cargas de solicitud o respuesta.

------
#### [ AWS SDK para Python (Boto) ]

Configure los datos que desea capturar con el [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)diccionario al crear un punto final mediante el `CreateEndpointConfig` método. Establezca `EnableCapture` en el valor booleano True. Además, proporcione los siguientes parámetros obligatorios:
+ `EndpointConfigName`: el nombre de la configuración del punto de conexión. Utilizará este nombre cuando haga una solicitud `CreateEndpoint`.
+ `ProductionVariants`: una lista de modelos que desea alojar en este punto de conexión. Defina un tipo de datos de diccionario para cada modelo.
+ `DataCaptureConfig`: tipo de datos de diccionario en el que se especifica un valor entero que corresponde al porcentaje inicial de datos que se van a muestrear (`InitialSamplingPercentage`), el URI de Amazon S3 en el que desea que se almacenen los datos capturados y una lista de opciones de captura (`CaptureOptions`). Especifique `Input` o `Output` para `CaptureMode` en la lista `CaptureOptions`. 

Si lo desea, puede especificar cómo debe codificar la SageMaker IA los datos capturados pasando los argumentos del par clave-valor al diccionario. `CaptureContentTypeHeader`

```
# Create an endpoint config name.
endpoint_config_name = '<endpoint-config-name>'

# The name of the production variant.
variant_name = '<name-of-production-variant>'                   
  
# The name of the model that you want to host. 
# This is the name that you specified when creating the model.
model_name = '<The_name_of_your_model>'

instance_type = '<instance-type>'
#instance_type='ml.m5.xlarge' # Example    

# Number of instances to launch initially.
initial_instance_count = <integer>

# Sampling percentage. Choose an integer value between 0 and 100
initial_sampling_percentage = <integer>                                                                                                                                                                                                                        

# The S3 URI containing the captured data
s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>'

# Specify either Input, Output, or both
capture_modes = [ "Input",  "Output" ] 
#capture_mode = [ "Input"] # Example - If you want to capture input only
                            
endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name, 
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": variant_name, 
            "ModelName": model_name, 
            "InstanceType": instance_type, # Specify the compute instance type.
            "InitialInstanceCount": initial_instance_count # Number of instances to launch initially.
        }
    ],
    DataCaptureConfig= {
        'EnableCapture': True, # Whether data should be captured or not.
        'InitialSamplingPercentage' : initial_sampling_percentage,
        'DestinationS3Uri': s3_capture_upload_path,
        'CaptureOptions': [{"CaptureMode" : capture_mode} for capture_mode in capture_modes] # Example - Use list comprehension to capture both Input and Output
    }
)
```

Para obtener más información sobre otras opciones de configuración de puntos finales, consulta la [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API en la [Guía de referencia de API de Amazon SageMaker AI Service](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

------
#### [ SageMaker Python SDK ]

Importe la clase `DataCaptureConfig` del módulo [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). Habilite la captura de datos al configurar `EnableCapture` en el valor booleano `True`.

Si lo desea, proporcione argumentos para los siguientes parámetros:
+ `SamplingPercentage`: un valor entero que corresponde al porcentaje de datos que se van a muestrear. Si no proporciona un porcentaje de muestreo, SageMaker AI tomará una muestra predeterminada del 20 (20%) de sus datos.
+ `DestinationS3Uri`: el URI de Amazon S3 que la SageMaker IA utilizará para almacenar los datos capturados. Si no lo proporciona, la SageMaker IA almacenará los datos capturados`"s3://<default-session-bucket>/ model-monitor/data-capture"`.

```
from sagemaker.model_monitor import DataCaptureConfig

# Set to True to enable data capture
enable_capture = True

# Optional - Sampling percentage. Choose an integer value between 0 and 100
sampling_percentage = <int> 
# sampling_percentage = 30 # Example 30%

# Optional - The S3 URI of stored captured-data location
s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>'

# Specify either Input, Output or both. 
capture_modes = ['REQUEST','RESPONSE'] # In this example, we specify both
# capture_mode = ['REQUEST'] # Example - If you want to only capture input.

# Configuration object passed in when deploying Models to SM endpoints
data_capture_config = DataCaptureConfig(
    enable_capture = enable_capture, 
    sampling_percentage = sampling_percentage, # Optional
    destination_s3_uri = s3_capture_upload_path, # Optional
    capture_options = ["REQUEST", "RESPONSE"],
)
```

------

## Implementación del modelo
<a name="model-monitor-data-capture-deploy"></a>

Implemente el modelo y cree un punto de conexión HTTPS con `DataCapture` habilitado.

------
#### [ AWS SDK para Python (Boto3) ]

Proporcione la configuración del punto final a la SageMaker IA. El servicio inicia las instancias de cómputo de ML e implementa el modelo o los modelos según se especifica en la configuración.

Una vez que tenga su configuración de modelo y punto de conexión, utilice la API de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) para crear su punto de conexión. El nombre del punto final debe ser único en una AWS región de su AWS cuenta. 

Siga estas instrucciones para crear un punto de conexión utilizando la configuración especificada en la solicitud. Amazon SageMaker AI usa el punto final para aprovisionar recursos e implementar modelos.

```
# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name = '<endpoint-name>' 

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

create_endpoint_response = sagemaker_client.create_endpoint(
                                            EndpointName=endpoint_name, 
                                            EndpointConfigName=endpoint_config_name)
```

Para obtener más información, consulte la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html).

------
#### [ SageMaker Python SDK ]

Defina un nombre para el punto de conexión. Este paso es opcional. Si no proporciona uno, SageMaker AI creará un nombre único para usted:

```
from datetime import datetime

endpoint_name = f"DEMO-{datetime.utcnow():%Y-%m-%d-%H%M}"
print("EndpointName =", endpoint_name)
```

Implemente el modelo en un punto de conexión HTTPS en tiempo real con el método `deploy()` integrado del objeto de modelo. Proporcione el nombre del tipo de instancia de Amazon EC2 en el que se va a implementar este modelo en el campo `instance_type` junto con el número inicial de instancias en las que se ejecutará el punto de conexión para el campo `initial_instance_count`:

```
initial_instance_count=<integer>
# initial_instance_count=1 # Example

instance_type='<instance-type>'
# instance_type='ml.m4.xlarge' # Example

# Uncomment if you did not define this variable in the previous step
#data_capture_config = <name-of-data-capture-configuration>

model.deploy(
    initial_instance_count=initial_instance_count,
    instance_type=instance_type,
    endpoint_name=endpoint_name,
    data_capture_config=data_capture_config
)
```

------

## Ver datos capturados
<a name="model-monitor-data-capture-view"></a>

Cree un objeto predictor a partir de la clase [predictor](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html) del SDK de SageMaker Python. Utilizará el objeto devuelto por la clase `Predictor` para invocar su punto de conexión en un futuro. Proporcione el nombre de su punto de conexión (definido anteriormente como `endpoint_name`), junto con los objetos serializadores y deserializadores para el serializador y el deserializador, respectivamente. [Para obtener información sobre los tipos de serializadores, consulta la clase [Serializers](https://sagemaker.readthedocs.io/en/stable/api/inference/serializers.html) en el SDK de Python para IASageMaker .](https://sagemaker.readthedocs.io/en/stable/index.html)

```
from sagemaker.predictor import Predictor
from sagemaker.serializers import <Serializer>
from sagemaker.deserializers import <Deserializers>

predictor = Predictor(endpoint_name=endpoint_name,
                      serializer = <Serializer_Class>,
                      deserializer = <Deserializer_Class>)

# Example
#from sagemaker.predictor import Predictor
#from sagemaker.serializers import CSVSerializer
#from sagemaker.deserializers import JSONDeserializer

#predictor = Predictor(endpoint_name=endpoint_name,
#                      serializer=CSVSerializer(),
#                      deserializer=JSONDeserializer())
```

En el siguiente escenario de ejemplo de código, se invoca el punto de conexión con los datos de validación de muestra que se almacenaron localmente en un archivo CSV denominado `validation_with_predictions`. El conjunto de validación de muestras contiene etiquetas para cada entrada.

Las primeras líneas de la instrucción with abren primero el archivo CSV del conjunto de validación, luego dividen cada fila del archivo por un carácter de coma `","` y, a continuación, almacenan los dos objetos devueltos en una etiqueta y en las variables input\$1cols. Para cada fila, la entrada (`input_cols`) se pasa al método integrado `Predictor.predict()` de los objetos de la variable de predicción (`predictor`).

Suponga que el modelo devuelve una probabilidad. Las probabilidades oscilan entre valores enteros de 0 y 1,0. Si la probabilidad devuelta por el modelo es superior al 80 % (0,8), se asigna a la predicción una etiqueta de valor entero de 1. De lo contrario, se asigna a la predicción una etiqueta de valor entero de 0.

```
from time import sleep

validate_dataset = "validation_with_predictions.csv"

# Cut off threshold of 80%
cutoff = 0.8

limit = 200  # Need at least 200 samples to compute standard deviations
i = 0
with open(f"test_data/{validate_dataset}", "w") as validation_file:
    validation_file.write("probability,prediction,label\n")  # CSV header
    with open("test_data/validation.csv", "r") as f:
        for row in f:
            (label, input_cols) = row.split(",", 1)
            probability = float(predictor.predict(input_cols))
            prediction = "1" if probability > cutoff else "0"
            baseline_file.write(f"{probability},{prediction},{label}\n")
            i += 1
            if i > limit:
                break
            print(".", end="", flush=True)
            sleep(0.5)
print()
print("Done!")
```

Dado que habilitó la captura de datos en los pasos anteriores, la carga de solicitud y respuesta, junto con algunos metadatos adicionales, se guarda en la ubicación de Amazon S3 especificada en `DataCaptureConfig`. La entrega de los datos de captura a Amazon S3 puede tardar un par de minutos.

Para ve la fecha de captura, enumere los archivos de captura de datos almacenados en Amazon S3. El formato de la ruta de Amazon S3 es: `s3:///{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl`.

Espere ver archivos diferentes de distintos períodos de tiempo, organizados en función de la hora en que se produjo la invocación. Ejecute lo siguiente para imprimir el contenido de un único archivo de captura:

```
print("\n".join(capture_file[-3:-1]))
```

Esto devolverá un archivo con formato JSONline específico de SageMaker AI. Lo siguiente es un ejemplo de respuesta tomado de un punto de conexión en tiempo real que se invocó con los datos `csv/text`:

```
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT",
"data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n",
"encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}},
"eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT",
"data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n",
"encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}},
"eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}
```

En el ejemplo anterior, el objeto `capture_file` es un tipo de lista. Indexe el primer elemento de la lista para ver una única solicitud de inferencia.

```
# The capture_file object is a list. Index the first element to view a single inference request  
print(json.dumps(json.loads(capture_file[0]), indent=2))
```

Esto devolverá una respuesta similar a la siguiente. Los valores devueltos variarán en función de la configuración del punto final, el modelo de SageMaker IA y los datos capturados:

```
{
  "captureData": {
    "endpointInput": {
      "observedContentType": "text/csv", # data MIME type
      "mode": "INPUT",
      "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n",
      "encoding": "CSV"
    },
    "endpointOutput": {
      "observedContentType": "text/csv; charset=character-encoding",
      "mode": "OUTPUT",
      "data": "0.023190177977085114",
      "encoding": "CSV"
    }
  },
  "eventMetadata": {
    "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "inferenceTime": "2022-02-14T17:25:06Z"
  },
  "eventVersion": "0"
}
```

# Captura de datos del trabajo de transformación por lotes
<a name="model-monitor-data-capture-batch"></a>

 Los pasos necesarios para activar la captura de datos para su trabajo de transformación por lotes son similares tanto si utiliza el SDK de Python como si lo AWS SDK para Python (Boto) hace con el de SageMaker Python. Si utilizas el AWS SDK, define el [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)diccionario, junto con los campos obligatorios, en el `CreateTransformJob` método para activar la captura de datos. Si utilizas el SDK de Python para SageMaker IA, importa la `BatchDataCaptureConfig` clase e inicializa una instancia desde esta clase. A continuación, pase este objeto al parámetro `batch_data_capture_config` de la instancia de trabajo de transformación. 

 Para usar los siguientes fragmentos de código, reemplaza el código del *italicized placeholder text* ejemplo por tu propia información. 

## Cómo establecer la captura de datos
<a name="data-capture-batch-enable"></a>

 Especifique una configuración de captura de datos al lanzar un trabajo de transformación. Ya sea que utilice el SDK de SageMaker Python AWS SDK para Python (Boto3) o el de Python, debe proporcionar el `DestinationS3Uri` argumento, que es el directorio en el que desea que el trabajo de transformación registre los datos capturados. Si lo desea, también puede especificar los siguientes parámetros: 
+  `KmsKeyId`: la AWS KMS clave utilizada para cifrar los datos capturados. 
+  `GenerateInferenceId`: un indicador booleano que, al capturar los datos, indica si desea que el trabajo de transformación anexe el identificador de inferencia y la hora a la salida. Esto es útil para la supervisión de la calidad del modelo, donde es necesario ingerir los datos de Ground Truth. El ID de inferencia y la hora ayudan a cotejar los datos capturados con sus datos de Ground Truth. 

------
#### [ AWS SDK para Python (Boto3) ]

 Configure los datos que desee capturar con el [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)diccionario al crear un trabajo de transformación mediante el `CreateTransformJob` método. 

```
input_data_s3_uri = "s3://input_S3_uri"
output_data_s3_uri = "s3://output_S3_uri"
data_capture_destination = "s3://captured_data_S3_uri"

model_name = "model_name"

sm_client.create_transform_job(
    TransformJobName="transform_job_name",
    MaxConcurrentTransforms=2,
    ModelName=model_name,
    TransformInput={
        "DataSource": {
            "S3DataSource": {
                "S3DataType": "S3Prefix",
                "S3Uri": input_data_s3_uri,
            }
        },
        "ContentType": "text/csv",
        "CompressionType": "None",
        "SplitType": "Line",
    },
    TransformOutput={
        "S3OutputPath": output_data_s3_uri,
        "Accept": "text/csv",
        "AssembleWith": "Line",
    },
    TransformResources={
        "InstanceType": "ml.m4.xlarge",
        "InstanceCount": 1,
    },
    DataCaptureConfig={
       "DestinationS3Uri": data_capture_destination,
       "KmsKeyId": "kms_key",
       "GenerateInferenceId": True,
    }
    )
```

------
#### [ SageMaker Python SDK ]

 Importe la clase `BatchDataCaptureConfig` del [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). 

```
from sagemaker.transformer import Transformer
from sagemaker.inputs import BatchDataCaptureConfig

# Optional - The S3 URI of where to store captured data in S3
data_capture_destination = "s3://captured_data_S3_uri"

model_name = "model_name"

transformer = Transformer(model_name=model_name, ...)
transform_arg = transformer.transform(
    batch_data_capture_config=BatchDataCaptureConfig(
        destination_s3_uri=data_capture_destination,
        kms_key_id="kms_key",
        generate_inference_id=True,
    ),
    ...
)
```

------

## Cómo ver los datos capturados
<a name="data-capture-batch-view"></a>

 Una vez que se completa el trabajo de transformación, los datos capturados se registran bajo el `DestinationS3Uri` que proporcionó en la configuración de captura de datos. Hay dos subdirectorios en `DestinationS3Uri`, `/input` y `/output`. Si `DestinationS3Uri` es `s3://my-data-capture`, el trabajo de transformación crea los siguientes directorios: 
+  `s3://my-data-capture/input`: los datos de entrada capturados para el trabajo de transformación. 
+  `s3://my-data-capture/output`: los datos de salida capturados para el trabajo de transformación. 

 Para evitar la duplicación de datos, los datos capturados en los dos directorios anteriores son manifiestos. Cada manifiesto es un archivo JSONL que contiene las ubicaciones de Amazon S3 de los objetos de origen. Un archivo de manifiesto puede verse como el siguiente ejemplo: 

```
# under "/input" directory
[
    {"prefix":"s3://input_S3_uri/"},
    "dummy_0.csv",
    "dummy_1.csv",
    "dummy_2.csv",
    ...
]

# under "/output" directory
[
    {"prefix":"s3://output_S3_uri/"},
    "dummy_0.csv.out",
    "dummy_1.csv.out",
    "dummy_2.csv.out",
    ...
]
```

 La tarea de transformación organiza y etiqueta estos manifiestos con un prefijo *yyyy/mm/dd/hh* S3 para indicar cuándo se capturaron. Esto ayuda al monitor de modelos a determinar la parte de datos adecuada que debe analizarse. Por ejemplo, si comienza el trabajo de transformación el 26 de agosto de 2022 a las 13:00 UTC, los datos capturados se etiquetan con una cadena de prefijo `2022/08/26/13/`. 

## InferenceId Generación
<a name="data-capture-batch-inferenceid"></a>

 Al configurar `DataCaptureConfig` para un trabajo de transformación, puede activar el indicador booleano `GenerateInferenceId`. Esto es particularmente útil cuando necesita ejecutar trabajos de supervisión de la calidad y el sesgo del modelo, para lo cual necesita datos de Ground Truth ingeridos por los usuarios. El monitor de modelos se basa en un ID de inferencia para cotejar los datos capturados y los datos de Ground Truth. Para obtener más información sobre la ingestión de Ground Truth, consulte [Ingestión de etiquetas de Ground Truth y combinación con predicciones](model-monitor-model-quality-merge.md). Cuando `GenerateInferenceId` está activado, el resultado de la transformación anexa un ID de inferencia (un UUID asignado al azar), así como la hora de inicio del trabajo de transformación en UTC para cada registro. Necesita estos dos valores para ejecutar la supervisión de la calidad y el sesgo del modelo. Cuando construye los datos de Ground Truth, debe proporcionar el mismo ID de inferencia para cotejar los datos de salida. Actualmente, esta característica admite la transformación de las salidas en los formatos CSV, JSON y JSONL. 

 Si el resultado de la transformación está en formato CSV, el archivo de salida tiene el siguiente aspecto: 

```
0, 1f1d57b1-2e6f-488c-8c30-db4e6d757861,2022-08-30T00:49:15Z
1, 22445434-0c67-45e9-bb4d-bd1bf26561e6,2022-08-30T00:49:15Z
...
```

 Las dos últimas columnas son el identificador de inferencia y la hora de inicio del trabajo de transformación. No los modifique. Las columnas restantes son los resultados del trabajo de transformación. 

 Si el resultado de la transformación está en formato JSON o JSONL, el archivo de salida tiene el siguiente aspecto: 

```
{"output": 0, "SageMakerInferenceId": "1f1d57b1-2e6f-488c-8c30-db4e6d757861", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"}
{"output": 1, "SageMakerInferenceId": "22445434-0c67-45e9-bb4d-bd1bf26561e6", "SageMakerInferenceTime": "2022-08-30T00:49:15Z"}
...
```

 Hay dos campos anexados que están reservados, `SageMakerInferenceId` y `SageMakerInferenceTime`. No modifique estos campos si necesita supervisar la calidad del modelo o el sesgo del modelo; los necesita para los trabajos de fusión. 

# Calidad de datos
<a name="model-monitor-data-quality"></a>

La supervisión de la calidad de los datos supervisa automáticamente los modelos de machine learning (ML) en producción y le avisa cuando surgen problemas de calidad de datos. Los modelos de ML en producción tienen que hacer predicciones sobre datos del mundo real que no están cuidadosamente seleccionados como la mayoría de los conjuntos de datos de entrenamiento. Si la naturaleza estadística de los datos que recibe el modelo mientras está en producción se desvía de la naturaleza de los datos de referencia en los que se realizó el entrenamiento, el modelo comienza a perder precisión en sus predicciones. Amazon SageMaker Model Monitor utiliza reglas para detectar la desviación de datos y le avisa cuando ocurre. Para supervisar la calidad de los datos, siga estos pasos:
+ Habilite la captura de datos. Esto captura las entradas y salidas de inferencias de un punto de conexión de inferencia en tiempo real o de un trabajo de transformación por lotes y almacena los datos en Amazon S3. Para obtener más información, consulte [Captura de datos](model-monitor-data-capture.md).
+ Cree una referencia. En este paso, ejecutará un trabajo de referencia que analiza un conjunto de datos de entrada que usted proporciona. La referencia calcula las restricciones de esquema de referencia y las estadísticas para cada característica utilizando [Deequ](https://github.com/awslabs/deequ), una biblioteca de código abierto creada en Apache Spark, que se utiliza para medir la calidad de los datos en grandes conjuntos de datos. Para obtener más información, consulte [Crear una referencia](model-monitor-create-baseline.md).
+ Defina y programe los trabajos de supervisión de la calidad de los datos. Para obtener información específica y ejemplos de códigos de trabajos de supervisión de la calidad de los datos, consulte [Programe trabajos de supervisión de la calidad de los datos](model-monitor-schedule-data-monitor.md). Para obtener información general sobre los trabajos de supervisión, consulte [Programe trabajos de supervisión](model-monitor-scheduling.md).
  + Si lo desea, utilice scripts de preprocesamiento y postprocesamiento para transformar los datos que salen del análisis de calidad de los datos. Para obtener más información, consulte [Preprocesamiento y postprocesamiento](model-monitor-pre-and-post-processing.md).
+ Vea las métricas de calidad de los datos. Para obtener más información, consulte [Esquema para estadísticas (archivo statistics.json)](model-monitor-interpreting-statistics.md).
+ Integre la supervisión de la calidad de los datos con Amazon CloudWatch. Para obtener más información, consulte [CloudWatch Métricas](model-monitor-interpreting-cloudwatch.md).
+ Interprete los resultados de un trabajo de supervisión. Para obtener más información, consulte [Interpretación de los resultados](model-monitor-interpreting-results.md).
+ Utilice SageMaker Studio para permitir la supervisión de la calidad de los datos y visualizar los resultados si utiliza un punto final en tiempo real. Para obtener más información, consulte [Visualice los resultados de los puntos de enlace en tiempo real en Amazon Studio SageMaker](model-monitor-interpreting-visualize-results.md).

**nota**  
El monitor de modelos calcula las métricas y estadísticas del modelo únicamente a partir de datos tabulares. Por ejemplo, aún se puede supervisar un modelo de clasificación de imágenes que toma imágenes como entrada y genera una etiqueta basada en esa imagen. El monitor de modelos podría calcular métricas y estadísticas para la salida, no para la entrada.

**Topics**
+ [Crear una referencia](model-monitor-create-baseline.md)
+ [Programe trabajos de supervisión de la calidad de los datos](model-monitor-schedule-data-monitor.md)
+ [Esquema para estadísticas (archivo statistics.json)](model-monitor-interpreting-statistics.md)
+ [CloudWatch Métricas](model-monitor-interpreting-cloudwatch.md)
+ [Esquema para infracciones (archivo constraint\$1violations.json)](model-monitor-interpreting-violations.md)

# Crear una referencia
<a name="model-monitor-create-baseline"></a>

Los cálculos de referencia de las estadísticas y las restricciones son necesarios como norma para detectar la deriva de los datos y otros problemas de calidad de los datos. El monitor de modelos proporciona un contenedor integrado que brinda la capacidad de sugerir las restricciones automáticamente para la entrada CSV y JSON plana. Este *sagemaker-model-monitor-analyzer*contenedor también le proporciona una gama de capacidades de monitoreo de modelos, incluida la validación de restricciones con respecto a una línea base y la emisión de métricas de Amazon CloudWatch . Este contenedor se basa en la versión 3.3.0 de Spark y se crea con la versión 2.0.2 de [Deequ](https://github.com/awslabs/deequ). Todos los nombres de las columnas de su conjunto de datos de referencia deben cumplir con Spark. Para los nombres de las columnas, usa solo caracteres en minúscula y `_` como único carácter especial.

El conjunto de datos de entrenamiento que utilizó para entrenar al modelo suele ser un buen conjunto de datos de referencia. El esquema de datos del conjunto de datos de entrenamiento y el esquema de conjunto de datos de inferencia deben coincidir exactamente (el número y el orden de las características). Ten en cuenta que se supone que las prediction/output columnas son las primeras columnas del conjunto de datos de entrenamiento. A partir del conjunto de datos de entrenamiento, puedes pedirle a la SageMaker IA que sugiera un conjunto de restricciones de referencia y que genere estadísticas descriptivas para explorar los datos. Para este ejemplo, cargue el conjunto de datos de entrenamiento que se utilizó para entrenar el modelo preentrenado incluido en este ejemplo. Si ya ha almacenado el conjunto de datos de entrenamiento en Amazon S3, puede apuntar a él directamente.

**Para crear una referencia a partir de un conjunto de datos de entrenamiento** 

Cuando tenga los datos de entrenamiento listos y almacenados en Amazon S3, inicie un trabajo de procesamiento básico con el `DefaultModelMonitor.suggest_baseline(..)` [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable). Esto utiliza un [Contenedor prediseñado de Amazon SageMaker Model Monitor](model-monitor-pre-built-container.md) que genera estadísticas de referencia y sugiere restricciones de referencia para el conjunto de datos y las escribe en la ubicación `output_s3_uri` que especifique.

```
from sagemaker.model_monitor import DefaultModelMonitor
from sagemaker.model_monitor.dataset_format import DatasetFormat

my_default_monitor = DefaultModelMonitor(
    role=role,
    instance_count=1,
    instance_type='ml.m5.xlarge',
    volume_size_in_gb=20,
    max_runtime_in_seconds=3600,
)

my_default_monitor.suggest_baseline(
    baseline_dataset=baseline_data_uri+'/training-dataset-with-header.csv',
    dataset_format=DatasetFormat.csv(header=True),
    output_s3_uri=baseline_results_uri,
    wait=True
)
```

**nota**  
Si proporciona feature/column los nombres del conjunto de datos de entrenamiento en la primera fila y establece la `header=True` opción como se muestra en el ejemplo de código anterior, SageMaker AI utilizará el nombre de la función en el archivo de restricciones y estadísticas.

Las estadísticas de referencia para el conjunto de datos están contenidas en el archivo statistics.json y las restricciones de referencia sugeridas están contenidas en el archivo constraints.json en la ubicación que especifique con `output_s3_uri`.

Archivos de salida para estadísticas y restricciones de conjunto de datos tabular


| Nombre de archivo | Description (Descripción) | 
| --- | --- | 
| statistics.json |  Se espera que este archivo tenga estadísticas en columnas para cada característica en el conjunto de datos que se analiza. Para obtener más información acerca del esquema para este archivo, consulte [Esquema para estadísticas (archivo statistics.json)](model-monitor-byoc-statistics.md).  | 
| constraints.json |  Se espera que este archivo tenga las restricciones en las características observadas. Para obtener más información acerca del esquema para este archivo, consulte [Esquema para restricciones (archivo constraints.json)](model-monitor-byoc-constraints.md).  | 

El [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) proporciona funciones prácticas que se describen para generar las restricciones y las estadísticas de referencia. Pero si desea llamar al trabajo de procesamiento directamente para este fin en su lugar, debe establecer el mapa `Environment` como se muestra en el siguiente ejemplo:

```
"Environment": {
    "dataset_format": "{\"csv\”: { \”header\”: true}",
    "dataset_source": "/opt/ml/processing/sm_input",
    "output_path": "/opt/ml/processing/sm_output",
    "publish_cloudwatch_metrics": "Disabled",
}
```

# Programe trabajos de supervisión de la calidad de los datos
<a name="model-monitor-schedule-data-monitor"></a>

Una vez que haya creado su referencia, puede utilizar el método `create_monitoring_schedule()` de la instancia de clase `DefaultModelMonitor` para programar una supervisión de calidad de los datos cada hora. En las siguientes secciones, se muestra cómo crear un monitor de calidad de datos para un modelo implementado en un punto de conexión en tiempo real, así como para un trabajo de transformación por lotes.

**importante**  
Puede especificar una entrada de transformación por lotes o una entrada de punto de conexión, pero no ambas, al crear su programa de supervisión.

## Supervisión de la calidad de los datos para los modelos implementados en puntos de conexión en tiempo real
<a name="model-monitor-data-quality-rt"></a>

Para programar un monitor de calidad de datos para un punto de conexión en tiempo real, pase la instancia `EndpointInput` al argumento `endpoint_input` de la instancia `DefaultModelMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator
                
data_quality_model_monitor = DefaultModelMonitor(
   role=sagemaker.get_execution_role(),
   ...
)

schedule = data_quality_model_monitor.create_monitoring_schedule(
   monitor_schedule_name=schedule_name,
   post_analytics_processor_script=s3_code_postprocessor_uri,
   output_s3_uri=s3_report_path,
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   statistics=data_quality_model_monitor.baseline_statistics(),
   constraints=data_quality_model_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint",
   )
)
```

## Supervisión de la calidad de los datos para trabajos de transformación por lotes
<a name="model-monitor-data-quality-bt"></a>

Para programar un monitor de calidad de datos para un trabajo de transformación por lotes, pase la instancia `BatchTransformInput` al argumento `batch_transform_input` de la instancia `DefaultModelMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator
                
data_quality_model_monitor = DefaultModelMonitor(
   role=sagemaker.get_execution_role(),
   ...
)

schedule = data_quality_model_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    batch_transform_input=BatchTransformInput(
        data_captured_destination_s3_uri=s3_capture_upload_path,
        destination="/opt/ml/processing/input",
        dataset_format=MonitoringDatasetFormat.csv(header=False),
    ),
    output_s3_uri=s3_report_path,
    statistics= statistics_path,
    constraints = constraints_path,
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

# Esquema para estadísticas (archivo statistics.json)
<a name="model-monitor-interpreting-statistics"></a>

El contenedor prediseñado de Amazon SageMaker Model Monitor calcula según las estadísticas. column/feature Las estadísticas se calculan para el conjunto de datos de referencia y también para el conjunto de datos actual que se está analizando.

```
{
    "version": 0,
    # dataset level stats
    "dataset": {
        "item_count": number
    },
    # feature level stats
    "features": [
        {
            "name": "feature-name",
            "inferred_type": "Fractional" | "Integral",
            "numerical_statistics": {
                "common": {
                    "num_present": number,
                    "num_missing": number
                },
                "mean": number,
                "sum": number,
                "std_dev": number,
                "min": number,
                "max": number,
                "distribution": {
                    "kll": {
                        "buckets": [
                            {
                                "lower_bound": number,
                                "upper_bound": number,
                                "count": number
                            }
                        ],
                        "sketch": {
                            "parameters": {
                                "c": number,
                                "k": number
                            },
                            "data": [
                                [
                                    num,
                                    num,
                                    num,
                                    num
                                ],
                                [
                                    num,
                                    num
                                ][
                                    num,
                                    num
                                ]
                            ]
                        }#sketch
                    }#KLL
                }#distribution
            }#num_stats
        },
        {
            "name": "feature-name",
            "inferred_type": "String",
            "string_statistics": {
                "common": {
                    "num_present": number,
                    "num_missing": number
                },
                "distinct_count": number,
                "distribution": {
                    "categorical": {
                         "buckets": [
                                {
                                    "value": "string",
                                    "count": number
                                }
                          ]
                     }
                }
            },
            #provision for custom stats
        }
    ]
}
```

Tenga en cuenta lo siguiente:
+ Los contenedores prediseñados calculan el [boceto KLL](https://datasketches.apache.org/docs/KLL/KLLSketch.html) que es un boceto compacto de cuantiles.
+ Por defecto, materializamos la distribución en 10 buckets. Esto no se puede configurar actualmente.

# CloudWatch Métricas
<a name="model-monitor-interpreting-cloudwatch"></a>

Puede usar el contenedor integrado de Amazon SageMaker Model Monitor para CloudWatch las métricas. Cuando la `emit_metrics` opción está `Enabled` en el archivo de restricciones de referencia, SageMaker AI emite estas métricas para cada una de las feature/column observadas en el conjunto de datos en el siguiente espacio de nombres:
+ Espacio de nombres `For real-time endpoints: /aws/sagemaker/Endpoints/data-metric` con dimensiones `EndpointName` y `ScheduleName`.
+ Espacio de nombres `For batch transform jobs: /aws/sagemaker/ModelMonitoring/data-metric` con dimensión `MonitoringSchedule`.

En el caso de los campos numéricos, el contenedor integrado emite las siguientes métricas: CloudWatch
+ Métrica: Máx → consulta para `MetricName: feature_data_{feature_name}, Stat: Max`
+ Métrica: Mín → consulta para `MetricName: feature_data_{feature_name}, Stat: Min`
+ Métrica: Suma → consulta para `MetricName: feature_data_{feature_name}, Stat: Sum`
+ Métrica: SampleCount → consulta para `MetricName: feature_data_{feature_name}, Stat: SampleCount`
+ Métrica: Promedio → consulta para `MetricName: feature_data_{feature_name}, Stat: Average`

Tanto para los campos numéricos como para los de cadena, el contenedor integrado emite las siguientes CloudWatch métricas:
+ Métrica: Integridad → consulta para `MetricName: feature_non_null_{feature_name}, Stat: Sum`
+ Métrica: Desviación de la referencia → consulta para `MetricName: feature_baseline_drift_{feature_name}, Stat: Sum`

# Esquema para infracciones (archivo constraint\$1violations.json)
<a name="model-monitor-interpreting-violations"></a>

El archivo de infracciones se genera como la salida de a `MonitoringExecution`, que enumera los resultados de la evaluación de las infracciones (especificadas en el archivo constraints.json) respecto al conjunto de datos actual que se analizó. El contenedor prediseñado de Amazon SageMaker Model Monitor proporciona las siguientes comprobaciones de infracciones.

```
{
    "violations": [{
      "feature_name" : "string",
      "constraint_check_type" :
              "data_type_check",
            | "completeness_check",
            | "baseline_drift_check",
            | "missing_column_check",
            | "extra_column_check",
            | "categorical_values_check"
      "description" : "string"
    }]
}
```

Tipos de infracciones supervisadas 


| Tipo de comprobación de infracción | Description (Descripción)  | 
| --- | --- | 
| data\$1type\$1check | Si los tipos de datos de la ejecución actual no son los mismos que en el conjunto de datos de referencia, se marca esta infracción. Durante el paso de línea base, las restricciones generadas sugieren el tipo de datos inferido para cada columna. El parámetro `monitoring_config.datatype_check_threshold` se puede modificar para ajustar el umbral cuando se marca como infracción.  | 
| completeness\$1check | Si la integridad (% de elementos no nulos) observada en la ejecución actual supera el umbral especificado en el umbral de integridad especificado por característica, se marca esta infracción. Durante el paso de referencia, las restricciones generadas sugieren un valor de integridad.   | 
| baseline\$1drift\$1check | Si la distancia de distribución calculada entre los conjuntos de datos actual y de referencia es mayor que el umbral especificado en `monitoring_config.comparison_threshold`, se marca esta infracción.  | 
| missing\$1column\$1check | Si el número de columnas en el conjunto de datos actual es menor que el número en el conjunto de datos de referencia, se marca esta infracción.  | 
| extra\$1column\$1check | Si el número de columnas del conjunto de datos actual es mayor que el número en la referencia, se marca esta infracción.  | 
| categorical\$1values\$1check | Si hay más valores desconocidos en el conjunto de datos actual que en el conjunto de datos de referencia, se marca esta infracción. Este valor viene dictado por el umbral de `monitoring_config.domain_content_threshold`.  | 

# Calidad de modelo
<a name="model-monitor-model-quality"></a>

Los trabajos de supervisión de la calidad del modelo supervisan el rendimiento de un modelo comparando las predicciones que hace el modelo con las etiquetas Ground Truth reales que el modelo intenta predecir. Para ello, la supervisión de la calidad del modelo combina los datos capturados a partir de inferencias en tiempo real o por lotes con etiquetas reales que se almacenan en un bucket de Amazon S3 y, a continuación, compara las predicciones con las etiquetas reales.

Para medir la calidad del modelo, el monitor de modelos utiliza métricas que dependen del tipo de problema de ML. Por ejemplo, si el modelo es para un problema de regresión, una de las métricas evaluadas es el error cuadrático medio (mse). Para obtener información sobre todas las métricas utilizadas para los distintos tipos de problemas de ML, consulte [Métricas de calidad de modelos y CloudWatch monitoreo de Amazon](model-monitor-model-quality-metrics.md). 

La supervisión de la calidad del modelo sigue los mismos pasos que la supervisión de la calidad de los datos, pero agrega el paso adicional de combinar las etiquetas reales de Amazon S3 con las predicciones capturadas del punto de conexión de inferencia en tiempo real o del trabajo de transformación por lotes. Para supervisar la calidad del modelo, siga estos pasos:
+ Habilite la captura de datos. Esto captura las entradas y salidas de inferencias de un punto de conexión de inferencia en tiempo real o de un trabajo de transformación por lotes y almacena los datos en Amazon S3. Para obtener más información, consulte [Captura de datos](model-monitor-data-capture.md).
+ Cree una referencia. En este paso, ejecuta un trabajo de referencia que compara las predicciones del modelo con las etiquetas de Ground Truth en un conjunto de datos de referencia. El trabajo de referencia crea automáticamente reglas y restricciones estadísticas de referencia que definen los umbrales con los que se evalúa el rendimiento del modelo. Para obtener más información, consulte [Creación de una referencia de calidad del modelo](model-monitor-model-quality-baseline.md).
+ Defina y programe los trabajos de supervisión de la calidad del modelo. Para obtener información específica y ejemplos de códigos de trabajos de supervisión de la calidad de los modelos, consulte [Programación de trabajos de supervisión de la calidad del modelo](model-monitor-model-quality-schedule.md). Para obtener información general sobre los trabajos de supervisión, consulte [Programe trabajos de supervisión](model-monitor-scheduling.md).
+ Ingiera etiquetas de Ground Truth que el monitor de modelos fusiona con los datos de predicción capturados de un punto de conexión de inferencia en tiempo real o de un trabajo de transformación por lotes. Para obtener más información, consulte [Ingestión de etiquetas de Ground Truth y combinación con predicciones](model-monitor-model-quality-merge.md).
+ Integre la supervisión de la calidad de los modelos con Amazon CloudWatch. Para obtener más información, consulte [Supervise las métricas de calidad del modelo con CloudWatch](model-monitor-model-quality-metrics.md#model-monitor-model-quality-cw).
+ Interprete los resultados de un trabajo de supervisión. Para obtener más información, consulte [Interpretación de los resultados](model-monitor-interpreting-results.md).
+ Use SageMaker Studio para permitir el monitoreo de la calidad del modelo y visualizar los resultados. Para obtener más información, consulte [Visualice los resultados de los puntos de enlace en tiempo real en Amazon Studio SageMaker](model-monitor-interpreting-visualize-results.md).

**Topics**
+ [Creación de una referencia de calidad del modelo](model-monitor-model-quality-baseline.md)
+ [Programación de trabajos de supervisión de la calidad del modelo](model-monitor-model-quality-schedule.md)
+ [Ingestión de etiquetas de Ground Truth y combinación con predicciones](model-monitor-model-quality-merge.md)
+ [Métricas de calidad de modelos y CloudWatch monitoreo de Amazon](model-monitor-model-quality-metrics.md)

# Creación de una referencia de calidad del modelo
<a name="model-monitor-model-quality-baseline"></a>

Cree un trabajo de referencia que compare las predicciones de su modelo con las etiquetas de Ground Truth de un conjunto de datos de referencia que haya almacenado en Amazon S3. Por lo general, utiliza un conjunto de datos de entrenamiento como conjunto de datos de referencia. El trabajo de referencia calcula las métricas del modelo y sugiere las restricciones que se utilizarán para supervisar la desviación de calidad del modelo.

Para crear un trabajo de referencia, debe tener un conjunto de datos que contenga las predicciones de su modelo junto con etiquetas que representen la Ground Truth de sus datos.

Para crear un trabajo de referencia, utilice la `ModelQualityMonitor` clase proporcionada por el SDK de SageMaker Python y complete los siguientes pasos.

**Par crear una referencia de calidad del modelo**

1.  Primero, cree una instancia de la clase `ModelQualityMonitor`. En el siguiente fragmento de código se muestra cómo hacerlo.

   ```
   from sagemaker import get_execution_role, session, Session
   from sagemaker.model_monitor import ModelQualityMonitor
                   
   role = get_execution_role()
   session = Session()
   
   model_quality_monitor = ModelQualityMonitor(
       role=role,
       instance_count=1,
       instance_type='ml.m5.xlarge',
       volume_size_in_gb=20,
       max_runtime_in_seconds=1800,
       sagemaker_session=session
   )
   ```

1. Ahora llame al método `suggest_baseline` del objeto `ModelQualityMonitor` para ejecutar un trabajo de referencia. En el siguiente fragmento de código se supone que tiene un conjunto de datos de referencia que contiene predicciones y etiquetas almacenadas en Amazon S3.

   ```
   baseline_job_name = "MyBaseLineJob"
   job = model_quality_monitor.suggest_baseline(
       job_name=baseline_job_name,
       baseline_dataset=baseline_dataset_uri, # The S3 location of the validation dataset.
       dataset_format=DatasetFormat.csv(header=True),
       output_s3_uri = baseline_results_uri, # The S3 location to store the results.
       problem_type='BinaryClassification',
       inference_attribute= "prediction", # The column in the dataset that contains predictions.
       probability_attribute= "probability", # The column in the dataset that contains probabilities.
       ground_truth_attribute= "label" # The column in the dataset that contains ground truth labels.
   )
   job.wait(logs=False)
   ```

1. Una vez que finalice el trabajo de referencia, puede ver las restricciones que ha generado el trabajo. En primer lugar, obtenga los resultados del trabajo de referencia llamando al método `latest_baselining_job` del objeto `ModelQualityMonitor`.

   ```
   baseline_job = model_quality_monitor.latest_baselining_job
   ```

1. El trabajo de referencia sugiere restricciones, que son umbrales para las métricas que modelan las medidas del monitor. Si una métrica supera el umbral sugerido, el monitor de modelos informa de una infracción. Para ver las restricciones que generó el trabajo de referencia, llame al método `suggested_constraints` del trabajo de referencia. El siguiente fragmento de código carga las restricciones de un modelo de clasificación binaria en un marco de datos de Pandas.

   ```
   import pandas as pd
   pd.DataFrame(baseline_job.suggested_constraints().body_dict["binary_classification_constraints"]).T
   ```

   Se recomienda consultar las restricciones generadas y modificarlas según sea necesario antes de utilizarlas para la supervisión. Por ejemplo, si una restricción es demasiado agresiva, es posible que reciba más alertas de infracciones de las que desearía.

   Si la restricción contiene números expresados en notación científica, tendrá que convertirlos en números flotantes. En el siguiente ejemplo de secuencia de [script de preprocesamiento](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-pre-and-post-processing.html#model-monitor-pre-processing-script) de Python, se muestra cómo convertir números en notación científica en números flotantes. 

   ```
   import csv
   
   def fix_scientific_notation(col):
       try:
           return format(float(col), "f")
       except:
           return col
   
   def preprocess_handler(csv_line):
       reader = csv.reader([csv_line])
       csv_record = next(reader)
       #skip baseline header, change HEADER_NAME to the first column's name
       if csv_record[0] == “HEADER_NAME”:
          return []
       return { str(i).zfill(20) : fix_scientific_notation(d) for i, d in enumerate(csv_record)}
   ```

   Puede agregar el script de preprocesamiento a una referencia o a una programación de supervisión como un `record_preprocessor_script` tal y como se define en la documentación del [Monitor de modelos](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html).

1. Cuando esté satisfecho con las restricciones, páselas como el parámetro `constraints` al crear un programa de supervisión. Para obtener más información, consulte [Programación de trabajos de supervisión de la calidad del modelo](model-monitor-model-quality-schedule.md).

Las restricciones de referencia sugeridas se incluyen en el archivo constraints.json, en la ubicación que especifique con `output_s3_uri`. Puede obtener información sobre el esquema de este archivo en [Esquema para restricciones (archivo constraints.json)](model-monitor-byoc-constraints.md).

# Programación de trabajos de supervisión de la calidad del modelo
<a name="model-monitor-model-quality-schedule"></a>

Una vez que haya creado su referencia, puede utilizar el método `create_monitoring_schedule()` de la instancia de clase `ModelQualityMonitor` para programar una supervisión de calidad del modelo cada hora. En las siguientes secciones, se muestra cómo crear un monitor de calidad del modelo para un modelo implementado en un punto de conexión en tiempo real, así como para un trabajo de transformación por lotes.

**importante**  
Puede especificar una entrada de transformación por lotes o una entrada de punto de conexión, pero no ambas, al crear su programa de supervisión.

A diferencia de la supervisión de la calidad de los datos, debe suministrar etiquetas Ground Truth si desea supervisar la calidad del modelo. Sin embargo, las etiquetas de Ground Truth podrían retrasarse. Para solucionar este problema, especifique los desplazamientos al crear su programa de supervisión. 

## Desplazamientos del monitor de modelos
<a name="model-monitor-model-quality-schedule-offsets"></a>

Los trabajos de calidad del modelo incluyen `StartTimeOffset` y `EndTimeOffset`, que son campos del parámetro `ModelQualityJobInput` del método `create_model_quality_job_definition` que funcionan de la siguiente manera:
+ `StartTimeOffset`: si se especifica, los trabajos restan este tiempo de la hora de inicio.
+ `EndTimeOffset`: si se especifica, los trabajos restan este tiempo de la hora de finalización.

El formato de las compensaciones es, por ejemplo, - PT7 H, donde 7H son 7 horas. Puede usar -PT\$1H o -P\$1D, donde H=horas, D=días y M=minutos, y \$1 es el número. Además, el desplazamiento debe tener el [formato de duración ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations).

Por ejemplo, si Ground Truth comienza a llegar después de 1 día, pero no se completa hasta dentro de una semana, establezca `StartTimeOffset` en `-P8D` y `EndTimeOffset` en `-P1D`. Luego, si programa un trabajo para que se ejecute el `2020-01-09T13:00`, analizará los datos entre `2020-01-01T13:00` y`2020-01-08T13:00`.

**importante**  
La cadencia de la programación debe ser tal que una ejecución finalice antes de que comience la siguiente, lo que permite que Ground Truth combine el trabajo y supervise el trabajo desde la ejecución hasta que se complete. El tiempo de ejecución máximo de una ejecución se divide entre los dos trabajos, por lo que, en el caso de un trabajo de supervisión de la calidad del modelo cada hora, el valor de `MaxRuntimeInSeconds` especificado como parte de `StoppingCondition` no debe ser superior a 1800.

## Supervisión de la calidad del modelo para los modelos implementados en puntos de conexión en tiempo real
<a name="model-monitor-data-quality-schedule-rt"></a>

Para programar un monitor de calidad del modelo para un punto de conexión en tiempo real, pase la instancia `EndpointInput` al argumento `endpoint_input` de la instancia `ModelQualityMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator
                    
model_quality_model_monitor = ModelQualityMonitor(
   role=sagemaker.get_execution_role(),
   ...
)

schedule = model_quality_model_monitor.create_monitoring_schedule(
   monitor_schedule_name=schedule_name,
   post_analytics_processor_script=s3_code_postprocessor_uri,
   output_s3_uri=s3_report_path,
   schedule_cron_expression=CronExpressionGenerator.hourly(),    
   statistics=model_quality_model_monitor.baseline_statistics(),
   constraints=model_quality_model_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint",
        start_time_offset="-PT2D",
        end_time_offset="-PT1D",
    )
)
```

## Supervisión de la calidad del modelo para trabajos de transformación por lotes
<a name="model-monitor-data-quality-schedule-tt"></a>

Para programar un monitor de calidad del modelo para un trabajo de transformación por lotes, pase la instancia `BatchTransformInput` al argumento `batch_transform_input` de la instancia `ModelQualityMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator

model_quality_model_monitor = ModelQualityMonitor(
   role=sagemaker.get_execution_role(),
   ...
)

schedule = model_quality_model_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    batch_transform_input=BatchTransformInput(
        data_captured_destination_s3_uri=s3_capture_upload_path,
        destination="/opt/ml/processing/input",
        dataset_format=MonitoringDatasetFormat.csv(header=False),
        # the column index of the output representing the inference probablity
        probability_attribute="0",
        # the threshold to classify the inference probablity to class 0 or 1 in 
        # binary classification problem
        probability_threshold_attribute=0.5,
        # look back 6 hour for transform job outputs.
        start_time_offset="-PT6H",
        end_time_offset="-PT0H"
    ),
    ground_truth_input=gt_s3_uri,
    output_s3_uri=s3_report_path,
    problem_type="BinaryClassification",
    constraints = constraints_path,
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

# Ingestión de etiquetas de Ground Truth y combinación con predicciones
<a name="model-monitor-model-quality-merge"></a>

La supervisión de la calidad del modelo compara las predicciones que hace su modelo con las etiquetas de Ground Truth para medir la calidad del modelo. Para que esto funcione, debe etiquetar periódicamente los datos capturados por su punto de conexión o trabajo de transformación por lotes y cargarlos en Amazon S3.

Para cotejar las etiquetas de Ground Truth con los datos de predicción capturados, debe haber un identificador único para cada registro del conjunto de datos. La estructura de cada registro para los datos de verdad fundamental es la siguiente:

```
{
  "groundTruthData": {
    "data": "1",
    "encoding": "CSV"
  },
  "eventMetadata": {
    "eventId": "aaaa-bbbb-cccc"
  },
  "eventVersion": "0"
}
```

En la estructura `groundTruthData`, `eventId` puede ser una de las siguientes:
+ `eventId`: este ID se genera automáticamente cuando un usuario invoca el punto de conexión.
+ `inferenceId`: el intermediario proporciona este ID cuando invoca el punto de conexión.

Si `inferenceId` está presente en los registros de datos capturados, el monitor de modelos lo usa para combinar los datos capturados con los registros de Ground Truth. Usted es responsable de asegurarse de que el `inferenceId` en los registros de Ground Truth coincidan con los `inferenceId` de los registros capturados. Si `inferenceId` no está presente en los registros de datos capturados, el monitor de modelos usa el `eventId` de los datos capturados para combinarlos con los registros de Ground Truth.

Debe cargar los datos de Ground Truth a un bucket de Amazon S3 que tenga el mismo formato de ruta que los datos capturados. 

**Requisitos del formato de los datos**  
Al guardar los datos en Amazon S3, estos deben usar el formato jsonlines (.jsonl) y guardarse con la siguiente estructura de nomenclatura. Para obtener más información sobre los requisitos de jsonline, consulte [Uso de datos de entrada y salida](sms-data.md). 

```
s3://amzn-s3-demo-bucket1/prefix/yyyy/mm/dd/hh
```

La fecha de esta ruta es la fecha en que se recopiló la etiqueta de Ground Truth y no tiene por qué coincidir con la fecha en que se generó la inferencia.

Después de crear y cargar las etiquetas de Ground Truth, incluya la ubicación de las etiquetas como parámetro al crear el trabajo de supervisión. Si lo está utilizando AWS SDK para Python (Boto3), especifique la ubicación de las etiquetas de Ground Truth como el `S3Uri` campo del `GroundTruthS3Input` parámetro en una llamada al `create_model_quality_job_definition` método. Si utilizas el SDK de SageMaker Python, especifica la ubicación de las etiquetas de Ground Truth como `ground_truth_input` parámetro en `create_monitoring_schedule` la llamada al `ModelQualityMonitor` objeto.

# Métricas de calidad de modelos y CloudWatch monitoreo de Amazon
<a name="model-monitor-model-quality-metrics"></a>

Los trabajos de supervisión de la calidad de los modelos calculan diferentes métricas para evaluar la calidad y el rendimiento de sus modelos de machine learning. Las métricas específicas calculadas dependen del tipo de problema de ML: regresión, clasificación binaria o clasificación multiclase. La supervisión de estas métricas es crucial para detectar la desviación del modelo a lo largo del tiempo. En las siguientes secciones se explican las principales métricas de calidad del modelo para cada tipo de problema, así como la forma de configurar la supervisión y las alertas automatizadas CloudWatch para realizar un seguimiento continuo del rendimiento del modelo.

**nota**  
La desviación estándar de las métricas se proporciona solo cuando hay al menos 200 muestras disponibles. El Monitor de modelos calcula la desviación estándar tomando muestras aleatorias del 80 % de los datos cinco veces, calculando la métrica y tomando la desviación estándar de esos resultados.

## Métricas de regresión
<a name="model-monitor-model-quality-metrics-regression"></a>

A continuación, se muestra un ejemplo de las métricas que el monitor de calidad del modelo calcula para un problema de regresión.

```
"regression_metrics" : {
    "mae" : {
      "value" : 0.3711832061068702,
      "standard_deviation" : 0.0037566388129940394
    },
    "mse" : {
      "value" : 0.3711832061068702,
      "standard_deviation" : 0.0037566388129940524
    },
    "rmse" : {
      "value" : 0.609248066149471,
      "standard_deviation" : 0.003079253267651125
    },
    "r2" : {
      "value" : -1.3766111872212665,
      "standard_deviation" : 0.022653980022771227
    }
  }
```

## Métricas de clasificación binaria
<a name="model-monitor-model-quality-metrics-binary"></a>

A continuación, se muestra un ejemplo de las métricas que el monitor de calidad del modelo calcula para un problema de clasificación binaria.

```
"binary_classification_metrics" : {
    "confusion_matrix" : {
      "0" : {
        "0" : 1,
        "1" : 2
      },
      "1" : {
        "0" : 0,
        "1" : 1
      }
    },
    "recall" : {
      "value" : 1.0,
      "standard_deviation" : "NaN"
    },
    "precision" : {
      "value" : 0.3333333333333333,
      "standard_deviation" : "NaN"
    },
    "accuracy" : {
      "value" : 0.5,
      "standard_deviation" : "NaN"
    },
    "recall_best_constant_classifier" : {
      "value" : 1.0,
      "standard_deviation" : "NaN"
    },
    "precision_best_constant_classifier" : {
      "value" : 0.25,
      "standard_deviation" : "NaN"
    },
    "accuracy_best_constant_classifier" : {
      "value" : 0.25,
      "standard_deviation" : "NaN"
    },
    "true_positive_rate" : {
      "value" : 1.0,
      "standard_deviation" : "NaN"
    },
    "true_negative_rate" : {
      "value" : 0.33333333333333337,
      "standard_deviation" : "NaN"
    },
    "false_positive_rate" : {
      "value" : 0.6666666666666666,
      "standard_deviation" : "NaN"
    },
    "false_negative_rate" : {
      "value" : 0.0,
      "standard_deviation" : "NaN"
    },
    "receiver_operating_characteristic_curve" : {
      "false_positive_rates" : [ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ],
      "true_positive_rates" : [ 0.0, 0.25, 0.5, 0.75, 1.0, 1.0 ]
    },
    "precision_recall_curve" : {
      "precisions" : [ 1.0, 1.0, 1.0, 1.0, 1.0 ],
      "recalls" : [ 0.0, 0.25, 0.5, 0.75, 1.0 ]
    },
    "auc" : {
      "value" : 1.0,
      "standard_deviation" : "NaN"
    },
    "f0_5" : {
      "value" : 0.3846153846153846,
      "standard_deviation" : "NaN"
    },
    "f1" : {
      "value" : 0.5,
      "standard_deviation" : "NaN"
    },
    "f2" : {
      "value" : 0.7142857142857143,
      "standard_deviation" : "NaN"
    },
    "f0_5_best_constant_classifier" : {
      "value" : 0.29411764705882354,
      "standard_deviation" : "NaN"
    },
    "f1_best_constant_classifier" : {
      "value" : 0.4,
      "standard_deviation" : "NaN"
    },
    "f2_best_constant_classifier" : {
      "value" : 0.625,
      "standard_deviation" : "NaN"
    }
  }
```

## Métricas multiclase
<a name="model-monitor-model-quality-metrics-multi"></a>

A continuación, se muestra un ejemplo de las métricas que el monitor de calidad del modelo calcula para un problema de clasificación multiclase.

```
"multiclass_classification_metrics" : {
    "confusion_matrix" : {
      "0" : {
        "0" : 1180,
        "1" : 510
      },
      "1" : {
        "0" : 268,
        "1" : 138
      }
    },
    "accuracy" : {
      "value" : 0.6288167938931297,
      "standard_deviation" : 0.00375663881299405
    },
    "weighted_recall" : {
      "value" : 0.6288167938931297,
      "standard_deviation" : 0.003756638812994008
    },
    "weighted_precision" : {
      "value" : 0.6983172269629505,
      "standard_deviation" : 0.006195912915307507
    },
    "weighted_f0_5" : {
      "value" : 0.6803947317178771,
      "standard_deviation" : 0.005328406973561699
    },
    "weighted_f1" : {
      "value" : 0.6571162346664904,
      "standard_deviation" : 0.004385008075019733
    },
    "weighted_f2" : {
      "value" : 0.6384024354394601,
      "standard_deviation" : 0.003867109755267757
    },
    "accuracy_best_constant_classifier" : {
      "value" : 0.19370229007633588,
      "standard_deviation" : 0.0032049848450732355
    },
    "weighted_recall_best_constant_classifier" : {
      "value" : 0.19370229007633588,
      "standard_deviation" : 0.0032049848450732355
    },
    "weighted_precision_best_constant_classifier" : {
      "value" : 0.03752057718081697,
      "standard_deviation" : 0.001241536088657851
    },
    "weighted_f0_5_best_constant_classifier" : {
      "value" : 0.04473443104152011,
      "standard_deviation" : 0.0014460485504284792
    },
    "weighted_f1_best_constant_classifier" : {
      "value" : 0.06286421244683643,
      "standard_deviation" : 0.0019113576884608862
    },
    "weighted_f2_best_constant_classifier" : {
      "value" : 0.10570313141262414,
      "standard_deviation" : 0.002734216826748117
    }
  }
```

## Supervise las métricas de calidad del modelo con CloudWatch
<a name="model-monitor-model-quality-cw"></a>

Si establece el valor de t `enable_cloudwatch_metrics` `True` al crear el programa de monitoreo, los trabajos de monitoreo de la calidad del modelo envían todas las métricas a CloudWatch.

Las métricas de calidad del modelo aparecen en el siguiente espacio de nombres:
+ Para puntos de conexión en tiempo real: `aws/sagemaker/Endpoints/model-metrics`
+ Para trabajos de transformación por lotes: `aws/sagemaker/ModelMonitoring/model-metrics`

Para obtener una lista de las métricas que se emiten, consulte las secciones anteriores de esta página.

Puede usar CloudWatch las métricas para crear una alarma cuando una métrica específica no alcance el umbral que especifique. Para obtener instrucciones sobre cómo crear CloudWatch alarmas, consulte [Crear una CloudWatch alarma basada en un umbral estático](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html) en la *Guía del CloudWatch usuario*.

# Desviación de sesgo de modelos en producción
<a name="clarify-model-monitor-bias-drift"></a>

La supervisión SageMaker de sesgos de Amazon Clarify ayuda a los científicos de datos y a los ingenieros de aprendizaje automático a supervisar las predicciones de sesgo de forma regular. A medida que se supervisa el modelo, los clientes pueden ver informes y gráficos exportables que detallan los sesgos en SageMaker Studio y configurar alertas en Amazon CloudWatch para recibir notificaciones si se detecta un sesgo que supere un umbral determinado. El sesgo puede introducirse o agravarse en los modelos de ML implementados cuando los datos de entrenamiento difieren de los datos que el modelo ve durante la implementación (es decir, los datos en tiempo real). Estos tipos de cambios en la distribución de los datos en tiempo real pueden ser temporales (por ejemplo, debido a algunos eventos efímeros del mundo real) o permanentes. En cualquier caso, podría ser importante detectar estos cambios. Por ejemplo, los resultados de un modelo para predecir los precios de las viviendas pueden sesgarse si las tasas hipotecarias utilizadas para elaborar el modelo difieren de las tasas hipotecarias actuales del mundo real. Con las funciones de detección de sesgos de Model Monitor, cuando la SageMaker IA detecta sesgos por encima de un determinado umbral, genera automáticamente métricas que puedes ver en SageMaker Studio y a través de las CloudWatch alertas de Amazon. 

En general, medir el sesgo solo durante la train-and-deploy fase puede no ser suficiente. Es posible que, una vez implementado el modelo, la distribución de los datos que ve el modelo implementado (es decir, los datos en tiempo real) sea diferente de la distribución de los datos en el conjunto de datos de entrenamiento. Este cambio podría introducir sesgos en un modelo a lo largo del tiempo. El cambio en la distribución de los datos en tiempo real puede ser temporal (por ejemplo, debido a algún comportamiento efímero, como la temporada navideña) o permanente. En cualquier caso, puede ser importante detectar estos cambios y tomar medidas para reducir el sesgo cuando sea apropiado.

Para detectar estos cambios, SageMaker Clarify proporciona la funcionalidad de monitorear continuamente las métricas de sesgo de un modelo implementado y emitir alertas automatizadas si las métricas superan un umbral. Por ejemplo, considere la métrica de sesgo DPPL. Especifique un rango de valores permitido A=(amin​,amax​), por ejemplo, un intervalo de (-0,1, 0,1), al que debe pertenecer DPPL durante la implementación. Cualquier desviación de este rango debería generar una alerta de *sesgo detectado*. Con SageMaker Clarify, puede realizar estas comprobaciones a intervalos regulares.

Por ejemplo, puede establecer la frecuencia de las comprobaciones en 2 días. Esto significa que SageMaker Clarify calcula la métrica DPPL a partir de los datos recopilados durante un período de 2 días. En este ejemplo, Dwin son los datos que el modelo procesó durante el último período de 2 días. Se emite una alerta si el valor bwin​ de DPPL calculado en Dwin​ se encuentra fuera del rango permitido A. Este enfoque para comprobar si bwin está fuera de A puede resultar algo confuso. Dwin​ puede constar de muy pocas muestras y puede no ser representativo de la distribución de datos en tiempo real. El tamaño pequeño de la muestra significa que el valor del sesgo bwin​ calculado sobre Dwin​ podría no ser una estimación muy sólida. De hecho, se pueden observar valores de bwin muy altos (o bajos) por pura casualidad. Para garantizar que las conclusiones extraídas de los datos observados D win sean estadísticamente significativas, SageMaker Clarify utiliza intervalos de confianza. En concreto, utiliza el método del intervalo de arranque normal para construir un intervalo C = (cmin, cmax) de forma que SageMaker Clarify esté seguro de que el valor de sesgo real calculado sobre todos los datos en tiempo real está contenido en C, con una alta probabilidad. Ahora, si el intervalo de confianza C se superpone con el rango permitido A, SageMaker Clarify lo interpreta de la siguiente manera: «es probable que el valor métrico de sesgo de la distribución de datos en tiempo real se encuentre dentro del rango permitido». Si C y A están disjuntos, SageMaker Clarify está seguro de que la métrica de sesgo no se encuentra en A y genera una alerta.

## Cuaderno de ejemplo del monitor de modelos
<a name="clarify-model-monitor-sample-notebooks-bias-drift"></a>

Amazon SageMaker Clarify proporciona el siguiente ejemplo de cuaderno en el que se muestra cómo capturar datos de inferencia para un punto final en tiempo real, crear una línea base para monitorear la evolución del sesgo e inspeccionar los resultados: 
+ [Supervisión de la desviación de sesgo y la desviación de la atribución de características Amazon SageMaker Clarify](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/fairness_and_explainability/SageMaker-Model-Monitor-Fairness-and-Explainability.html): utilice Amazon SageMaker Model Monitor para supervisar la desviación de sesgo y la desviación de la atribución de características a lo largo del tiempo.

Se ha verificado que este portátil solo funciona en Amazon SageMaker Studio. Si necesitas instrucciones sobre cómo abrir un bloc de notas en Amazon SageMaker Studio, consulta[Crear o abrir un bloc de notas Amazon SageMaker Studio Classic](notebooks-create-open.md). Si se le pide que elija un kernel, elija **Python 3 (ciencia de datos)**. Los siguientes temas contienen los aspectos más destacados de los dos últimos pasos y contienen ejemplos de código del cuaderno de ejemplos. 

**Topics**
+ [Cuaderno de ejemplo del monitor de modelos](#clarify-model-monitor-sample-notebooks-bias-drift)
+ [Creación de una referencia de desviación de sesgo](clarify-model-monitor-bias-drift-baseline.md)
+ [Infracciones de sesgo y desviación](clarify-model-monitor-bias-drift-violations.md)
+ [Parámetros para supervisar la desviación de sesgo](clarify-config-json-monitor-bias-parameters.md)
+ [Programe trabajos de supervisión de desviaciones de sesgo](clarify-model-monitor-bias-drift-schedule.md)
+ [Inspección de informes para detectar la desviación de sesgo de los datos](clarify-model-monitor-bias-drift-report.md)
+ [CloudWatch Métricas para el análisis de la desviación de sesgo](clarify-model-monitor-bias-drift-cw.md)

# Creación de una referencia de desviación de sesgo
<a name="clarify-model-monitor-bias-drift-baseline"></a>

Una vez que haya configurado la aplicación para capturar datos de inferencia de transformación por lotes o en tiempo real, la primera tarea para supervisar la desviación de sesgo es crear una referencia. Esto implica configurar las entradas de datos, qué grupos son sensibles, cómo se capturan las predicciones y el modelo y sus métricas de sesgo posteriores al entrenamiento. Luego hay que empezar con el trabajo de referencia.

El monitor de sesgo del modelo puede detectar la desviación de sesgo de los modelos ML de forma regular. Al igual que con otros tipos de supervisión, el procedimiento estándar para crear un monitor de sesgo del modelo consiste primero en establecer una referencia y luego establecer una programación de supervisión.

```
model_bias_monitor = ModelBiasMonitor(
    role=role,
    sagemaker_session=sagemaker_session,
    max_runtime_in_seconds=1800,
)
```

`DataConfig` almacena información sobre el conjunto de datos que se va a analizar (por ejemplo, el archivo del conjunto de datos), su formato (es decir, CSV o JSON Lines), los encabezados (si los hay) y la etiqueta.

```
model_bias_baselining_job_result_uri = f"{baseline_results_uri}/model_bias"
model_bias_data_config = DataConfig(
    s3_data_input_path=validation_dataset,
    s3_output_path=model_bias_baselining_job_result_uri,
    label=label_header,
    headers=all_headers,
    dataset_type=dataset_type,
)
```

`BiasConfig` es la configuración de los grupos sensibles del conjunto de datos. Por lo general, el sesgo se mide calculando una métrica y comparándola entre grupos. El grupo de interés se denomina *faceta*. Para el sesgo posterior al entrenamiento, también debe tener en cuenta la etiqueta positiva.

```
model_bias_config = BiasConfig(
    label_values_or_threshold=[1],
    facet_name="Account Length",
    facet_values_or_threshold=[100],
)
```

`ModelPredictedLabelConfig` especifica cómo extraer una etiqueta predicha de la salida del modelo. En este ejemplo, se ha elegido el límite de 0,8 en previsión de que los clientes cambien con frecuencia. Para obtener resultados más complicados, hay algunas opciones más, como «etiqueta» para indicar el índice, el nombre o JMESPath localizar la etiqueta prevista en la carga útil de respuesta del punto final.

```
model_predicted_label_config = ModelPredictedLabelConfig(
    probability_threshold=0.8,
)
```

`ModelConfig` es la configuración relacionada con el modelo que se utilizará para la inferencia. Para calcular las métricas de sesgo posteriores al entrenamiento, el cálculo debe obtener inferencias para el nombre del modelo proporcionado. Para ello, el trabajo de procesamiento utiliza el modelo para crear un punto de conexión efímero (también conocido como *punto de conexión de sombra*). El trabajo de procesamiento elimina el punto de conexión de sombra una vez finalizados los cálculos. El monitor de explicabilidad también utiliza esta configuración.

```
model_config = ModelConfig(
    model_name=model_name,
    instance_count=endpoint_instance_count,
    instance_type=endpoint_instance_type,
    content_type=dataset_type,
    accept_type=dataset_type,
)
```

Ahora puede iniciar el trabajo de referencia.

```
model_bias_monitor.suggest_baseline(
    model_config=model_config,
    data_config=model_bias_data_config,
    bias_config=model_bias_config,
    model_predicted_label_config=model_predicted_label_config,
)
print(f"ModelBiasMonitor baselining job: {model_bias_monitor.latest_baselining_job_name}")
```

El monitor programado recoge automáticamente el nombre del trabajo de referencia y lo espera antes de que comience la supervisión.

# Infracciones de sesgo y desviación
<a name="clarify-model-monitor-bias-drift-violations"></a>

Los trabajos de desviación de sesgo evalúan las restricciones de referencia proporcionadas por la [configuración de referencia](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html#sagemaker-CreateModelBiasJobDefinition-request-ModelBiasBaselineConfig) en comparación con los resultados del análisis de la `MonitoringExecution` actual. Si se detectan infracciones, el trabajo las incluye en el archivo *constraint\$1violations.json* de la ubicación de salida de la ejecución y marca el estado de la ejecución como [Interpretación de los resultados](model-monitor-interpreting-results.md).

Este es el esquema del archivo de infracciones por desviación de sesgo.
+ `facet`: el nombre de la faceta, proporcionado por la faceta de configuración del análisis del trabajo de supervisión `name_or_index`. 
+ `facet_value`: el valor de la faceta, proporcionado por la faceta de configuración del análisis del trabajo de supervisión `value_or_threshold`.
+ `metric_name`: el nombre abreviado de la métrica de sesgo. Por ejemplo, “CI” para el desequilibrio de clases. Consulte [Métricas de sesgo previas al entrenamiento](clarify-measure-data-bias.md) para los nombres abreviados de cada una de las métricas de sesgo preentrenamiento y [Métricas del sesgo de los datos y el modelo posterior al entrenamiento](clarify-measure-post-training-bias.md) para los nombres abreviados de cada una de las métricas de sesgo posteriores al entrenamiento.
+ `constraint_check_type`: el tipo de infracción supervisada. En la actualidad, solo se admite `bias_drift_check`.
+ `description`: un mensaje descriptivo para explicar la infracción.

```
{
    "version": "1.0",
    "violations": [{
        "facet": "string",
        "facet_value": "string",
        "metric_name": "string",
        "constraint_check_type": "string",
        "description": "string"
    }]
}
```

Se utiliza una métrica de sesgo para medir el nivel de igualdad en una distribución. Un valor cercano a cero indica que la distribución es más equilibrada. Si el valor de una métrica de sesgo en el archivo de resultados del análisis del trabajo (analysis.json) es peor que su valor correspondiente en el archivo de restricciones de referencia, se registra una infracción. Por ejemplo, si la restricción de referencia de la métrica de sesgo de DPPL es `0.2`, y el resultado del análisis es `0.1`, no se registra ninguna infracción porque `0.1` está más cerca de `0` que de `0.2`. Sin embargo, si el resultado del análisis es `-0.3`, se registra una infracción porque `0` está más lejos de la restricción de referencia de `0.2`.

```
{
    "version": "1.0",
    "violations": [{
        "facet": "Age",
        "facet_value": "40",
        "metric_name": "CI",
        "constraint_check_type": "bias_drift_check",
        "description": "Value 0.0751544567666083 does not meet the constraint requirement"
    }, {
        "facet": "Age",
        "facet_value": "40",
        "metric_name": "DPPL",
        "constraint_check_type": "bias_drift_check",
        "description": "Value -0.0791244970125596 does not meet the constraint requirement"
    }]
}
```

# Parámetros para supervisar la desviación de sesgo
<a name="clarify-config-json-monitor-bias-parameters"></a>

La monitorización SageMaker de sesgos de Amazon Clarify reutiliza un subconjunto de los parámetros utilizados en la configuración de análisis de. [Archivos de configuración del análisis](clarify-processing-job-configure-analysis.md) Tras describir los parámetros de configuración, en este tema se proporcionan ejemplos de archivos JSON. Estos archivos se utilizan para configurar conjuntos de datos de CSV y JSON Lines con el fin de supervisarlo para detectar desviaciones de sesgo cuando los modelos de machine learning están en producción.

Los siguientes parámetros deben proporcionarse en un archivo JSON. La ruta a este archivo JSON debe proporcionarse en el parámetro `ConfigUri` de la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasAppSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasAppSpecification).
+ `"version"`: versión esquemática (opcional) del archivo de configuración. Si no se proporciona, se utiliza la versión más reciente compatible.
+ `"headers"`: una lista de nombres de columnas del conjunto de datos (opcional). Si `dataset_type` es `"application/jsonlines"` y se especifica `"label"`, el último encabezado pasa a ser el encabezado de la columna de etiquetas. 
+ `"label"`: atributo objetivo del modelo que se utilizará para las *métricas de sesgo* (opcional). Se especifica como nombre de columna o índice (si el formato del conjunto de datos es CSV) o como JMESPath (si el formato del conjunto de datos es líneas JSON).
+ `"label_values_or_threshold"`: lista de valores o umbrales de etiquetas (opcional). Indica un resultado positivo utilizado para las métricas de sesgo.
+ `"facet"`: una lista de características que son atributos sensibles, que se denominan facetas (opcional). Las *métricas de sesgo* utilizan las facetas en forma de pares e incluyen lo siguiente:
  + `"name_or_index"`: nombre o índice de la columna de facetas.
  + `"value_or_threshold"`: lista de valores o umbrales que puede adoptar la columna de facetas (opcional). Indica el grupo sensible, como el grupo que se utiliza para medir el sesgo. Si no se proporcionan, las métricas de sesgo se calculan como un grupo para cada valor único (en lugar de todos los valores). Si la columna de facetas es numérica, este valor umbral se aplica como límite inferior para seleccionar el grupo sensible.
+ `"group_variable"`: (opcional) un nombre de columna o un índice para indicar la variable de grupo que se utilizará para la *métrica de sesgo* *disparidad demográfica condicional*.

Los demás parámetros deben proporcionarse en `EndpointInput` (para los puntos de conexión en tiempo real) o `BatchTransformInput` (para los trabajos de transformación por lotes) de la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasJobInput](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasJobInput).
+ `FeaturesAttribute`: este parámetro es obligatorio si el formato de los datos de entrada del punto de conexión es `"application/jsonlines"`. Se JMESPath utiliza para localizar las columnas de entidades si el formato del conjunto de datos es JSON Lines.
+ `InferenceAttribute`— Índice o JMESPath ubicación en la salida del modelo del atributo objetivo que se va a utilizar para monitorizar el sesgo mediante métricas de sesgo. Si no se proporciona en el caso de CSV `accept_type`, se supone que el resultado del modelo es un único valor numérico correspondiente a una puntuación o probabilidad.
+ `ProbabilityAttribute`— Índice o JMESPath ubicación en la salida del modelo para las probabilidades. Si la salida del modelo son JSON Lines con una lista de etiquetas y probabilidades, por ejemplo, se selecciona la etiqueta que corresponde a la probabilidad máxima para los cálculos de sesgo.
+ `ProbabilityThresholdAttribute`: (opcional) un valor flotante para indicar el umbral para seleccionar la etiqueta binaria, en el caso de la clasificación binaria. El valor predeterminado es 0,5.

## Ejemplo de archivos de configuración JSON para conjuntos de datos de CSV y JSON Lines
<a name="clarify-config-json-monitor-bias-parameters-examples"></a>

A continuación, se muestran ejemplos de los archivos JSON que se utilizan para configurar el conjuntos de datos de CSV y JSON Lines con el fin de supervisar la desviación de sesgo.

**Topics**
+ [Conjuntos de datos CSV](#clarify-config-json-monitor-bias-parameters-example-csv)
+ [Conjuntos de datos JSON Lines](#clarify-config-json-monitor-bias-parameters-example-jsonlines)

### Conjuntos de datos CSV
<a name="clarify-config-json-monitor-bias-parameters-example-csv"></a>

Considere un conjunto de datos que tiene cuatro columnas de características y una columna de etiquetas, donde la primera característica y etiqueta son binarias, como en el siguiente ejemplo.

```
0, 0.5814568701544718, 0.6651538910132964, 0.3138080342665499, 0
1, 0.6711642728531724, 0.7466687034026017, 0.1215477472819713, 1
0, 0.0453256543003371, 0.6377430803264152, 0.3558625219713576, 1
1, 0.4785191813363956, 0.0265841045263860, 0.0376935084990697, 1
```

Suponga que la salida del modelo tiene dos columnas, donde la primera es la etiqueta predicha y la segunda es la probabilidad, como en el siguiente ejemplo.

```
1, 0.5385257417814224
```

A continuación, el siguiente archivo de configuración JSON muestra un ejemplo de cómo se puede configurar este conjunto de datos CSV.

```
{
    "headers": [
        "feature_0",
        "feature_1",
        "feature_2",
        "feature_3",
        "target"
    ],
    "label": "target",
    "label_values_or_threshold": [1],
    "facet": [{
        "name_or_index": "feature_1",
        "value_or_threshold": [1]
    }]
}
```

La etiqueta predicha se selecciona mediante el parámetro `"InferenceAttribute"`. Se utiliza una numeración basada en cero, por lo que 0 indica la primera columna de la salida del modelo.

```
"EndpointInput": {
    ...
    "InferenceAttribute": 0
    ...
}
```

Como alternativa, puede usar diferentes parámetros para convertir los valores de probabilidad en etiquetas predichas binarias. Se utiliza una numeración basada en cero: 1 indica la segunda columna; el valor de `ProbabilityThresholdAttribute` de 0,6 indica que una probabilidad superior a 0,6 predice la etiqueta binaria como 1.

```
"EndpointInput": {
    ...
    "ProbabilityAttribute": 1,
    "ProbabilityThresholdAttribute": 0.6
    ...
}
```

### Conjuntos de datos JSON Lines
<a name="clarify-config-json-monitor-bias-parameters-example-jsonlines"></a>

Considere un conjunto de datos que tiene cuatro columnas de características y una columna de etiquetas, donde la primera característica y etiqueta son binarias, como en el siguiente ejemplo.

```
{"features":[0, 0.5814568701544718, 0.6651538910132964, 0.3138080342665499], "label":0}
{"features":[1, 0.6711642728531724, 0.7466687034026017, 0.1215477472819713], "label":1}
{"features":[0, 0.0453256543003371, 0.6377430803264152, 0.3558625219713576], "label":1}
{"features":[1, 0.4785191813363956, 0.0265841045263860, 0.0376935084990697], "label":1}
```

Suponga que la salida del modelo tiene dos columnas, donde la primera es la etiqueta predicha y la segunda es una probabilidad.

```
{"predicted_label":1, "probability":0.5385257417814224}
```

El siguiente archivo de configuración JSON muestra un ejemplo de cómo se puede configurar este conjunto de datos JSON Lines.

```
{
    "headers": [
        "feature_0",
        "feature_1",
        "feature_2",
        "feature_3",
        "target"
    ],
    "label": "label",
    "label_values_or_threshold": [1],
    "facet": [{
        "name_or_index": "feature_1",
        "value_or_threshold": [1]
    }]
}
```

A continuación, el valor del parámetro `"features"` en `EndpointInput` (para los puntos de conexión en tiempo real) o `BatchTransformInput` (para los trabajos de transformación por lotes) se utiliza para localizar las características en el conjunto de datos, y el valor del parámetro `"predicted_label"` selecciona la etiqueta predicha de la salida del modelo. 

```
"EndpointInput": {
    ...
    "FeaturesAttribute": "features",
    "InferenceAttribute": "predicted_label"
    ...
}
```

Como alternativa, puede convertir los valores de probabilidad en etiquetas binarias predichas utilizando el valor del parámetro `ProbabilityThresholdAttribute`. Un valor de 0,6, por ejemplo, indica que una probabilidad superior a 0,6 predice la etiqueta binaria como 1.

```
"EndpointInput": {
    ...
    "FeaturesAttribute": "features",
    "ProbabilityAttribute": "probability",
    "ProbabilityThresholdAttribute": 0.6
    ...
}
```

# Programe trabajos de supervisión de desviaciones de sesgo
<a name="clarify-model-monitor-bias-drift-schedule"></a>

Una vez que haya creado su referencia, puede utilizar el método `create_monitoring_schedule()` de la instancia de clase `ModelBiasModelMonitor` para programar una supervisión de la desviación de sesgo cada hora. En las siguientes secciones, se muestra cómo crear un monitor de desviación de sesgo para un modelo implementado en un punto de conexión en tiempo real, así como para un trabajo de transformación por lotes.

**importante**  
Puede especificar una entrada de transformación por lotes o una entrada de punto de conexión, pero no ambas, al crear su programa de supervisión.

A diferencia de la supervisión de la calidad de los datos, debe suministrar etiquetas Ground Truth si desea supervisar la calidad del modelo. Sin embargo, las etiquetas de Ground Truth podrían retrasarse. Para solucionar este problema, especifique los desplazamientos al crear su programa de supervisión. Para obtener más información acerca de cómo crear desplazamientos de tiempo, consulte [Desplazamientos del monitor de modelos](model-monitor-model-quality-schedule.md#model-monitor-model-quality-schedule-offsets). 

Si ha enviado un trabajo de referencia, el monitor recoge automáticamente la configuración de análisis del trabajo de referencia. Si omite el paso de referencia o el conjunto de datos de captura tiene una naturaleza diferente a la del conjunto de datos de entrenamiento, debe proporcionar la configuración de análisis.

## Supervisión de la desviación de sesgo para los modelos implementados en puntos de conexión en tiempo real
<a name="model-monitor-bias-quality-rt"></a>

Para programar un monitor de desviación de sesgo para un punto de conexión en tiempo real, pase la instancia `EndpointInput` al argumento `endpoint_input` de la instancia `ModelBiasModelMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator
            
model_bias_monitor = ModelBiasModelMonitor(
    role=sagemaker.get_execution_role(),
    ...
)

model_bias_analysis_config = None
if not model_bias_monitor.latest_baselining_job:
    model_bias_analysis_config = BiasAnalysisConfig(
        model_bias_config,
        headers=all_headers,
        label=label_header,
    )

model_bias_monitor.create_monitoring_schedule(
    monitor_schedule_name=schedule_name,
    post_analytics_processor_script=s3_code_postprocessor_uri,
    output_s3_uri=s3_report_path,
    statistics=model_bias_monitor.baseline_statistics(),
    constraints=model_bias_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
    analysis_config=model_bias_analysis_config,
    endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint",
        start_time_offset="-PT1H",
        end_time_offset="-PT0H",
        probability_threshold_attribute=0.8,
    ),
)
```

## Supervisión de la desviación de sesgo para trabajos de transformación por lotes
<a name="model-monitor-bias-quality-bt"></a>

Para programar un monitor de desviación de sesgo para un trabajo de transformación por lotes, pase la instancia `BatchTransformInput` al argumento `batch_transform_input` de la instancia `ModelBiasModelMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator
                
model_bias_monitor = ModelBiasModelMonitor(
    role=sagemaker.get_execution_role(),
    ...
)

model_bias_analysis_config = None
if not model_bias_monitor.latest_baselining_job:
    model_bias_analysis_config = BiasAnalysisConfig(
        model_bias_config,
        headers=all_headers,
        label=label_header,
    )
    
schedule = model_bias_monitor.create_monitoring_schedule(
   monitor_schedule_name=schedule_name,
   post_analytics_processor_script=s3_code_postprocessor_uri,
   output_s3_uri=s3_report_path,
   statistics=model_bias_monitor.baseline_statistics(),
   constraints=model_bias_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   analysis_config=model_bias_analysis_config,
   batch_transform_input=BatchTransformInput(
        destination="opt/ml/processing/input",
        data_captured_destination_s3_uri=s3_capture_path,
        start_time_offset="-PT1H",
        end_time_offset="-PT0H",
        probability_threshold_attribute=0.8
   ),
)
```

# Inspección de informes para detectar la desviación de sesgo de los datos
<a name="clarify-model-monitor-bias-drift-report"></a>

Si no puede inspeccionar los resultados de la supervisión en los informes generados en SageMaker Studio, puede imprimirlos de la siguiente manera:

```
schedule_desc = model_bias_monitor.describe_schedule()
execution_summary = schedule_desc.get("LastMonitoringExecutionSummary")
if execution_summary and execution_summary["MonitoringExecutionStatus"] in ["Completed", "CompletedWithViolations"]:
    last_model_bias_monitor_execution = model_bias_monitor.list_executions()[-1]
    last_model_bias_monitor_execution_report_uri = last_model_bias_monitor_execution.output.destination
    print(f'Report URI: {last_model_bias_monitor_execution_report_uri}')
    last_model_bias_monitor_execution_report_files = sorted(S3Downloader.list(last_model_bias_monitor_execution_report_uri))
    print("Found Report Files:")
    print("\n ".join(last_model_bias_monitor_execution_report_files))
else:
    last_model_bias_monitor_execution = None
    print("====STOP==== \n No completed executions to inspect further. Please wait till an execution completes or investigate previously reported failures.")
```

 Si hay infracciones en comparación con la referencia, se muestran aquí:

```
if last_model_bias_monitor_execution:
    model_bias_violations = last_model_bias_monitor_execution.constraint_violations()
    if model_bias_violations:
        print(model_bias_violations.body_dict)
```

Si tu modelo se implementa en un punto final en tiempo real, puedes ver las visualizaciones en SageMaker AI Studio de los resultados y las CloudWatch métricas del análisis seleccionando la pestaña **Puntos finales** y, a continuación, haciendo doble clic en el punto final.

# CloudWatch Métricas para el análisis de la desviación de sesgo
<a name="clarify-model-monitor-bias-drift-cw"></a>

Esta guía muestra CloudWatch las métricas y sus propiedades que puede utilizar para el análisis de la desviación de sesgo en SageMaker Clarify. Los trabajos de monitoreo de la desviación de sesgo calculan tanto [las métricas de sesgo previas](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-measure-data-bias.html) [al entrenamiento como las métricas de sesgo posteriores](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-measure-post-training-bias.html) al entrenamiento, y las publican en el siguiente CloudWatch espacio de nombres:
+ Para puntos de conexión en tiempo real: `aws/sagemaker/Endpoints/bias-metrics`
+ Para trabajos de transformación por lotes: `aws/sagemaker/ModelMonitoring/bias-metrics` 

El nombre de la CloudWatch métrica agrega el nombre abreviado de la métrica a. `bias_metric`

Por ejemplo, `bias_metric_CI` es la métrica de sesgo para el desequilibrio de clases (CI).

**nota**  
`+/- infinity` se publica como el número de coma flotante `+/- 2.348543e108`, y los errores que incluyen valores nulos no se publican.

Cada métrica tiene las siguientes propiedades:
+ `Endpoint`: el nombre del punto de conexión supervisado, si corresponde.
+ `MonitoringSchedule`: el nombre de la programación del trabajo de supervisión. 
+ `BiasStage`: el nombre de la fase del trabajo de supervisión de la desviación de sesgo. Elija `Pre-training` o `Post-Training`.
+ `Label`: el nombre de la característica objetivo, proporcionado por la configuración del análisis del trabajo de supervisión `label`.
+ `LabelValue`: el valor de la característica objetivo, proporcionado por la configuración del análisis del trabajo de supervisión `label_values_or_threshold`.
+ `Facet`: el nombre de la faceta, proporcionado por la faceta de configuración del análisis del trabajo de supervisión `name_of_index`.
+ `FacetValue`: el valor de la faceta, proporcionado por la faceta de configuración del análisis del trabajo de supervisión `nvalue_or_threshold`.

Para evitar que los trabajos de supervisión publiquen métricas, establezca `publish_cloudwatch_metrics` en `Disabled` en el mapa `Environment` de definición del [trabajo de sesgo del modelo](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html).

# Desviación en la atribución de características de los modelos en producción
<a name="clarify-model-monitor-feature-attribution-drift"></a>

Una desviación en la distribución de los datos en tiempo real para los modelos en producción puede provocar una desviación correspondiente en los valores de atribución de las características, del mismo modo que podría provocar una desviación en el sesgo al supervisar las métricas de sesgo. La supervisión de la atribución de funciones de Amazon SageMaker Clarify ayuda a los científicos de datos y a los ingenieros de aprendizaje automático a supervisar las predicciones sobre la desviación de la atribución de funciones de forma regular. A medida que se monitorea el modelo, los clientes pueden ver informes y gráficos exportables que detallan las atribuciones de funciones en SageMaker Studio y configurar alertas en Amazon CloudWatch para recibir notificaciones si se detecta que los valores de atribución sobrepasan un umbral determinado. 

Para ilustrar esto con una situación específica, considere un escenario hipotético de admisión a la universidad. Suponga que observa los siguientes valores de atribución de características (agregados) en los datos de entrenamiento y en los datos en tiempo real:

Escenario hipotético de admisión a la universidad


| Característica | Atribución en los datos de entrenamiento | Atribución en datos en tiempo real | 
| --- | --- | --- | 
| Puntuación del SAT | 0.70 | 0.10 | 
| GPA | 0.50 | 0.20 | 
| Clasificación de clase | 0,05 | 0,70 | 

El cambio de los datos de entrenamiento a los datos en tiempo real parece significativo. La clasificación de características se ha invertido por completo. Al igual que ocurre con la desviación de sesgo, las desviaciones en la atribución de las características pueden deberse a un cambio en la distribución de los datos en tiempo real y justifican un análisis más detallado del comportamiento del modelo con los datos en tiempo real. Una vez más, el primer paso en estos escenarios es dar la alarma de que se ha producido una desviación.

Podemos detectar la desviación al comparar la forma en que la clasificación de las características individuales cambió de los datos de entrenamiento a los datos en tiempo real. Además de ser sensibles a los cambios en el orden de clasificación, también hay que tener en cuenta la puntuación bruta de atribución de las características. Por ejemplo, dado que dos características se sitúan en la clasificación en el mismo número de posiciones, pasando del entrenamiento a los datos en tiempo real, queremos ser más sensibles a la característica que tenga una puntuación de atribución más alta en los datos de entrenamiento. Teniendo en cuenta estas propiedades, se utiliza la puntuación de ganancia acumulada descontada normalizada (NDCG) para comparar las clasificaciones de las atribuciones de las características de los datos de entrenamiento y en tiempo real.

En concreto, suponga que tenemos lo siguiente:
+ *F=[f1​,…,fm​] * es la lista de características ordenadas según sus puntuaciones de atribución en los datos de entrenamiento, donde *m* es el número total de características. Por ejemplo, en nuestro caso *F*=[puntuación SAT, GPA, clasificación de clase].
+ *a(f)* es una función que devuelve la puntuación de atribución de la característica en los datos de entrenamiento de una característica *f*. Por ejemplo, *a*(puntuación SAT) = 0,70.
+ *F′=[f′​1​, …, f′​m​] *es la lista de características ordenadas según sus puntuaciones de atribución en los datos en tiempo real. Por ejemplo, *F*′= [clasificación de clase, GPA, puntuación SAT].

Luego, se puede calcular la NDCG de la siguiente manera:

        NDCG=DCG/iDCG​

por 
+ DCG = ∑1m*a*(*f'i*)/log2​(*i*\$11)
+ iDCG = ∑1m*a*(*fi*)/log2​(*i*\$11)

La DCG cuantitativa mide si las características con una alta atribución en los datos de entrenamiento también ocupan un lugar más alto en la atribución de características calculada a partir de los datos en tiempo real. La cantidad iDCG mide la *puntuación ideal* y es solo un factor de normalización para garantizar que la cantidad final se encuentre dentro del rango [0, 1], siendo 1 el mejor valor posible. Un valor NDCG igual a 1 significa que la clasificación de atribución de características en los datos en tiempo real es la misma que en los datos de entrenamiento. En este ejemplo concreto, dado que la clasificación ha cambiado bastante, el valor de NDCG es 0,69.

En SageMaker Clarify, si el valor del NDCG es inferior a 0,90, emitimos automáticamente una alerta.

## Cuaderno de ejemplo del monitor de modelos
<a name="clarify-model-monitor-sample-notebooks-feature-drift"></a>

SageMaker Clarify proporciona el siguiente cuaderno de ejemplo que muestra cómo capturar datos de inferencia para un punto final en tiempo real, crear una línea base para monitorear la evolución del sesgo e inspeccionar los resultados: 
+ [Supervisión de la desviación de sesgo y la desviación de la atribución de características Amazon SageMaker Clarify](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/fairness_and_explainability/SageMaker-Model-Monitor-Fairness-and-Explainability.html): utilice Amazon SageMaker Model Monitor para supervisar la desviación de sesgo y la desviación de la atribución de características a lo largo del tiempo.

Se ha comprobado que este portátil solo funciona en SageMaker Studio. Si necesita instrucciones sobre cómo abrir un bloc de notas en SageMaker Studio, consulte[Crear o abrir un bloc de notas Amazon SageMaker Studio Classic](notebooks-create-open.md). Si se le pide que elija un kernel, elija **Python 3 (ciencia de datos)**. Los siguientes temas contienen los aspectos más destacados de los dos últimos pasos y contienen ejemplos de código del cuaderno de ejemplos. 

**Topics**
+ [Cuaderno de ejemplo del monitor de modelos](#clarify-model-monitor-sample-notebooks-feature-drift)
+ [Creación de una referencia SHAP para los modelos en producción](clarify-model-monitor-shap-baseline.md)
+ [Infracciones de desviación de atribución de características del modelo](clarify-model-monitor-model-attribution-drift-violations.md)
+ [Parámetros para supervisar la desviación de atribución](clarify-config-json-monitor-model-explainability-parameters.md)
+ [Programe trabajos de supervisión de desviación de atributos de características](clarify-model-monitor-feature-attribute-drift-schedule.md)
+ [Inspección de informes de supervisión de la desviación en la atribución de características de los modelos en producción](clarify-feature-attribute-drift-report.md)
+ [CloudWatch Métricas para el análisis de la desviación de características](clarify-feature-attribute-drift-cw.md)

# Creación de una referencia SHAP para los modelos en producción
<a name="clarify-model-monitor-shap-baseline"></a>

Las explicaciones suelen ser de contraste, es decir, tienen en cuenta las desviaciones con respecto a una referencia. Para obtener información sobre las referencias de explicabilidad, consulte [Referencias SHAP para la explicabilidad](clarify-feature-attribute-shap-baselines.md).

Además de proporcionar explicaciones para las inferencias por instancia, SageMaker Clarify también ofrece una explicación global de los modelos de aprendizaje automático, lo que ayuda a comprender el comportamiento de un modelo en su conjunto en términos de sus características. SageMaker Clarify genera una explicación global de un modelo de aprendizaje automático al agregar los valores de Shapley en varias instancias. SageMaker Clarify admite las siguientes formas diferentes de agregación, que puede usar para definir líneas de base:
+ `mean_abs`: media de los valores SHAP absolutos para todas las instancias.
+ `median`: mediana de los valores SHAP para todas las instancias.
+ `mean_sq`: media de los valores SHAP cuadrados para todas las instancias.

Una vez que haya configurado la aplicación para capturar datos de inferencia de transformación por lotes o en tiempo real, la primera tarea para supervisar la desviación en la atribución de características es crear una referencia que sirva para comparar. Esto implica configurar las entradas de datos, qué grupos son sensibles, cómo se capturan las predicciones y el modelo y sus métricas de sesgo posteriores al entrenamiento. Luego hay que empezar con el trabajo de referencia. El monitor de explicabilidad de modelos puede explicar las predicciones de un modelo implementado, ya que produce inferencias y detecta desviaciones en la atribución de características de forma regular.

```
model_explainability_monitor = ModelExplainabilityMonitor(
    role=role,
    sagemaker_session=sagemaker_session,
    max_runtime_in_seconds=1800,
)
```

En este ejemplo, el trabajo de referencia de explicabilidad comparte el conjunto de datos de prueba con el trabajo de referencia de sesgo, por lo que utiliza la misma `DataConfig` y la única diferencia es el URI de salida del trabajo.

```
model_explainability_baselining_job_result_uri = f"{baseline_results_uri}/model_explainability"
model_explainability_data_config = DataConfig(
    s3_data_input_path=validation_dataset,
    s3_output_path=model_explainability_baselining_job_result_uri,
    label=label_header,
    headers=all_headers,
    dataset_type=dataset_type,
)
```

Actualmente, la SageMaker explicación de Clarify ofrece una implementación escalable y eficiente de SHAP, por lo que la configuración de explicabilidad incluye lo siguiente: SHAPConfig
+ `baseline`: una lista de filas (al menos una) o el URI del objeto S3 que se utilizará como conjunto de datos de referencia en el algoritmo Kernel SHAP. El formato debe ser el mismo que el del conjunto de datos. Cada fila debe contener solo la función columns/values y omitir la columna o los valores de la etiqueta.
+ `num_samples`: número de muestras que se utilizarán en el algoritmo Kernel SHAP. Este número determina el tamaño del conjunto de datos sintéticos generado para calcular los valores SHAP.
+ agg\$1method: método de agregación para valores SHAP globales. Los siguientes valores son válidos:
  + `mean_abs`: media de los valores SHAP absolutos para todas las instancias.
  + `median`: mediana de los valores SHAP para todas las instancias.
  + `mean_sq`: media de los valores SHAP cuadrados para todas las instancias.
+ `use_logit`: Indicador de si la función logit se debe aplicar a las predicciones del modelo. El valor predeterminado es `False`. Si `use_logit` es `True`, los valores SHAP tendrán unidades logarítmicas de probabilidades.
+ `save_local_shap_values` (bool): indicador de si se deben guardar los valores SHAP locales en la ubicación de salida. El valor predeterminado es `False`.

```
# Here use the mean value of test dataset as SHAP baseline
test_dataframe = pd.read_csv(test_dataset, header=None)
shap_baseline = [list(test_dataframe.mean())]

shap_config = SHAPConfig(
    baseline=shap_baseline,
    num_samples=100,
    agg_method="mean_abs",
    save_local_shap_values=False,
)
```

Inicie un trabajo de referencia. Se requiere la misma `model_config` porque el trabajo de referencia básico de la explicabilidad necesita crear un punto de conexión de sombra para obtener predicciones para el conjunto de datos sintéticos generado.

```
model_explainability_monitor.suggest_baseline(
    data_config=model_explainability_data_config,
    model_config=model_config,
    explainability_config=shap_config,
)
print(f"ModelExplainabilityMonitor baselining job: {model_explainability_monitor.latest_baselining_job_name}")
```

# Infracciones de desviación de atribución de características del modelo
<a name="clarify-model-monitor-model-attribution-drift-violations"></a>

Los trabajos de desviación de atribución de características evalúan las restricciones de referencia proporcionadas por la [configuración de referencia](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html#sagemaker-CreateModelExplainabilityJobDefinition-request-ModelExplainabilityBaselineConfig) en comparación con los resultados del análisis de la `MonitoringExecution` actual. Si se detectan infracciones, el trabajo las incluye en el archivo *constraint\$1violations.json* de la ubicación de salida de la ejecución y marca el estado de la ejecución como [Interpretación de los resultados](model-monitor-interpreting-results.md).

Este es el esquema del archivo de infracciones por desviación de la atribución de características.
+ `label`: el nombre de la etiqueta, la configuración del análisis del trabajo `label_headers` o un marcador de posición, por ejemplo `"label0"`.
+ `metric_name`: el nombre del método de análisis de explicabilidad. En la actualidad, solo se admite `shap`.
+ `constraint_check_type`: el tipo de infracción supervisada. En la actualidad, solo se admite `feature_attribution_drift_check`.
+ `description`: un mensaje descriptivo para explicar la infracción.

```
{
    "version": "1.0",
    "violations": [{
        "label": "string",
        "metric_name": "string",
        "constraint_check_type": "string",
        "description": "string"
    }]
}
```

Para cada etiqueta de la sección `explanations`, los trabajos de supervisión calculan la [puntuación nDCG](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ndcg_score.html) de sus valores SHAP globales en el archivo de restricciones de referencia y en el archivo de resultados del análisis del trabajo (*analysis.json*). Si la puntuación es inferior a 0,9, se registra una infracción. Se evalúa el valor SHAP global combinado, por lo que no hay campos `“feature”` en la entrada de infracción. El siguiente resultado proporciona un ejemplo de varias infracciones registradas.

```
{
    "version": "1.0",
    "violations": [{
        "label": "label0",
        "metric_name": "shap",
        "constraint_check_type": "feature_attribution_drift_check",
        "description": "Feature attribution drift 0.7639720923277322 exceeds threshold 0.9"
    }, {
        "label": "label1",
        "metric_name": "shap",
        "constraint_check_type": "feature_attribution_drift_check",
        "description": "Feature attribution drift 0.7323763972092327 exceeds threshold 0.9"
    }]
}
```

# Parámetros para supervisar la desviación de atribución
<a name="clarify-config-json-monitor-model-explainability-parameters"></a>

El monitor SageMaker de explicabilidad de Amazon Clarify reutiliza un subconjunto de los parámetros utilizados en la configuración de análisis de. [Archivos de configuración del análisis](clarify-processing-job-configure-analysis.md) Los siguientes parámetros deben proporcionarse en un archivo JSON y la ruta debe proporcionarse en el parámetro `ConfigUri` de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityAppSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityAppSpecification).
+ `"version"`: versión esquemática (opcional) del archivo de configuración. Si no se proporciona, se utiliza la versión más reciente compatible.
+ `"headers"`: una lista de nombres de características del conjunto de datos (opcional). El análisis de explicabilidad no requiere etiquetas. 
+ `"methods"`: una lista de métodos y sus parámetros para los análisis e informes. Si se omite alguna sección, no se computará.
  + `"shap"`: sección sobre la computación de los valores SHAP (opcional).
    + `"baseline"`: (opcional) una lista de filas (al menos una) o un URI de objeto de Amazon Simple Storage Service (Amazon S3). Se utilizará como conjunto de datos de referencia (también conocido como conjunto de datos de fondo) en el algoritmo Kernel SHAP. El formato debe ser el mismo que el del conjunto de datos. Cada fila debe contener solo las columnas de características (o valores). Antes de enviar cada fila al modelo, omita cualquier columna que deba excluirse.
    + `"num_samples"`: número de muestras que se utilizarán en el algoritmo Kernel SHAP. Este número determina el tamaño del conjunto de datos sintéticos generado para calcular los valores SHAP. Si no se proporciona, un trabajo de SageMaker Clarify elige el valor en función del número de características.
    + `"agg_method"`: método de agregación para valores SHAP globales. Los valores válidos son los siguientes:
      + `"mean_abs"`: media de los valores SHAP absolutos para todas las instancias.
      + `"median"`: mediana de los valores SHAP para todas las instancias.
      + `"mean_sq"`: media de los valores SHAP cuadrados para todas las instancias.
    + `"use_logit"`: (opcional) valor booleano para indicar si la función logit se va a aplicar a las predicciones del modelo. Si `"use_logit"` es `true`, los valores SHAP tienen unidades logarítmicas de probabilidades. El valor predeterminado es `false`. 
    + `"save_local_shap_values"`: (opcional) valor booleano para indicar si los valores SHAP locales deben guardarse en la ubicación de salida. Use `true` para guardarlos. Use `false` para no guardarlos. El valor predeterminado es `false`.
+ `"predictor"`: (opcional para el punto de conexión en tiempo real, necesario para la transformación por lotes). Sección sobre los parámetros del modelo, obligatoria si las secciones `"shap"` y `"post_training_bias"` están presentes.
  + `"model_name"`: nombre del modelo creado por la API `CreateModel`, con el modo contenedor como `SingleModel`.
  + `"instance_type"`: tipo de instancia para el punto de conexión de sombra.
  + `"initial_instance_count"`: recuento de instancia para el punto de conexión de sombra.
  + `"content_type"`: (opcional) El formato de entrada del modelo que se utilizará para obtener inferencias con el punto de conexión de sombra. Los valores válidos son `"text/csv"` para CSV, `"application/jsonlines"` para JSON Lines, `application/x-parquet` para Apache Parquet y `application/x-image` para habilitar la explicabilidad mediante visión artificial. El valor predeterminado es el mismo que el formato `dataset_type`.
  + `"accept_type"`: (opcional) El formato de *salida* del modelo que se utilizará para obtener inferencias con el punto de conexión de sombra. Los valores válidos son `"text/csv"` para CSV y `"application/jsonlines"` para JSON Lines. Si se omite, SageMaker Clarify utiliza el tipo de datos de respuesta de los datos capturados.
  + `"content_template"`: (opcional) una cadena de plantilla utilizada para construir la entrada del modelo a partir de instancias del conjunto de datos. Se utiliza solo cuando `"content_type"` es `"application/jsonlines"`. La plantilla debe tener solo un marcador de posición, `$features`, que se sustituye por la lista de características en tiempo de ejecución. Por ejemplo. dado `"content_template":"{\"myfeatures\":$features}"`, si una instancia (sin etiqueta) es`1,2,3`, la entrada del modelo se convierte en JSON Lines `'{"myfeatures":[1,2,3]}'`.
  + `"label_headers"`: (opcional) Una lista de valores que la `"label"` incluye en el conjunto de datos. Asocia las puntuaciones devueltas por el punto de conexión del modelo o el trabajo de transformación por lotes a sus valores de etiqueta correspondientes. Si se proporciona, el informe de análisis utiliza los encabezados en lugar de marcadores de posición, por ejemplo `“label0”`.

Los demás parámetros deben proporcionarse en `EndpointInput` (para los puntos de conexión en tiempo real) o `BatchTransformInput` (para los trabajos de transformación por lotes) de la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput).
+ `FeaturesAttribute`: este parámetro es obligatorio si el formato de los datos de entrada del trabajo por lotes o punto de conexión es `"application/jsonlines"`. Se JMESPath utiliza para localizar las columnas de entidades si el formato del conjunto de datos es JSON Lines.
+ `ProbabilityAttribute`— Índice o JMESPath ubicación en la salida del modelo para las probabilidades. Si la salida del modelo son JSON Lines con una lista de etiquetas y probabilidades, por ejemplo, se selecciona la etiqueta que corresponde a la probabilidad máxima para los cálculos de sesgo.

## Ejemplo de archivos de configuración JSON para conjuntos de datos de CSV y JSON Lines
<a name="clarify-config-json-monitor-model-explainability-parameters-examples"></a>

A continuación, se muestran ejemplos de los archivos JSON que se utilizan para configurar el conjuntos de datos de CSV y JSON Lines con el fin de supervisar la desviación de la atribución de características.

**Topics**
+ [Conjuntos de datos CSV](#clarify-config-json-monitor-model-explainability-parameters-example-csv)
+ [Conjuntos de datos JSON Lines](#clarify-config-json-monitor-model-explainability-parameters-example-jsonlines)

### Conjuntos de datos CSV
<a name="clarify-config-json-monitor-model-explainability-parameters-example-csv"></a>

Considere un conjunto de datos que tenga tres columnas de características numéricas, como en el siguiente ejemplo.

```
0.5814568701544718, 0.6651538910132964, 0.3138080342665499
0.6711642728531724, 0.7466687034026017, 0.1215477472819713
0.0453256543003371, 0.6377430803264152, 0.3558625219713576
0.4785191813363956, 0.0265841045263860, 0.0376935084990697
```

Suponga que la salida del modelo tiene dos columnas, donde la primera es la etiqueta predicha y la segunda es la probabilidad, como en el siguiente ejemplo.

```
1, 0.5385257417814224
```

El siguiente archivo de configuración JSON muestra cómo se puede configurar este conjunto de datos CSV.

```
{
                    
    "headers": [
        "feature_1",
        "feature_2",
        "feature_3"
    ],
    "methods": {
        "shap": {
            "baseline": [
                [0.4441164946610942, 0.5190374448171748, 0.20722795300473712]
            ],
            "num_samples": 100,
            "agg_method": "mean_abs"
        }
    },
    "predictor": {
        "model_name": "my_model",
        "instance_type": "ml.m5.xlarge",
        "initial_instance_count": 1
    }
}
```

La etiqueta predicha se selecciona mediante el parámetro `"ProbabilityAttribute"`. Se utiliza una numeración basada en cero, por lo que 1 indica la segunda columna de la salida del modelo.

```
"EndpointInput": {
    ...
    "ProbabilityAttribute": 1
    ...
}
```

### Conjuntos de datos JSON Lines
<a name="clarify-config-json-monitor-model-explainability-parameters-example-jsonlines"></a>

Considere un conjunto de datos que tiene cuatro columnas de características y una columna de etiquetas, donde la primera característica y etiqueta son binarias, como en el siguiente ejemplo.

```
{"features":[0, 0.5814568701544718, 0.6651538910132964, 0.3138080342665499], "label":0}
{"features":[1, 0.6711642728531724, 0.7466687034026017, 0.1215477472819713], "label":1}
{"features":[0, 0.0453256543003371, 0.6377430803264152, 0.3558625219713576], "label":1}
{"features":[1, 0.4785191813363956, 0.0265841045263860, 0.0376935084990697], "label":1}
```

La entrada del modelo es la misma que el formato del conjunto de datos y la salida del modelo son JSON Lines, como en el siguiente ejemplo.

```
{"predicted_label":1, "probability":0.5385257417814224}
```

En el siguiente archivo, el archivo de configuración JSON muestra cómo se puede configurar este conjunto de datos JSON Lines.

```
{
    "headers": [
        "feature_1",
        "feature_2",
        "feature_3"
    ],
    "methods": {
        "shap": {
            "baseline": [
                {"features":[0.4441164946610942, 0.5190374448171748, 0.20722795300473712]}
            ],
            "num_samples": 100,
            "agg_method": "mean_abs"
        }
    },
    "predictor": {
        "model_name": "my_model",
        "instance_type": "ml.m5.xlarge",
        "initial_instance_count": 1,
        "content_template":"{\"features\":$features}"
    }
}
```

A continuación, el valor del parámetro `"features"` en `EndpointInput` (para los puntos de conexión en tiempo real) o `BatchTransformInput` (para los trabajos de transformación por lotes) se utiliza para localizar las características en el conjunto de datos, y el valor del parámetro `"probability"` selecciona el valor de probabilidad de la salida del modelo.

```
"EndpointInput": {
    ...
    "FeaturesAttribute": "features",
    "ProbabilityAttribute": "probability",
    ...
}
```

# Programe trabajos de supervisión de desviación de atributos de características
<a name="clarify-model-monitor-feature-attribute-drift-schedule"></a>

Una vez que haya creado su referencia SHAP, puede llamar al método `create_monitoring_schedule()` de la instancia de clase `ModelExplainabilityMonitor` para programar una supervisión de la explicabilidad del modelo cada hora. En las siguientes secciones, se muestra cómo crear un monitor de explicabilidad del modelo para un modelo implementado en un punto de conexión en tiempo real, así como para un trabajo de transformación por lotes.

**importante**  
Puede especificar una entrada de transformación por lotes o una entrada de punto de conexión, pero no ambas, al crear su programa de supervisión.

Si se ha enviado un trabajo de referencia, el monitor recoge automáticamente la configuración de análisis del trabajo de referencia. Sin embargo, si omite el paso de referencia o si el conjunto de datos de captura tiene una naturaleza diferente a la del conjunto de datos de entrenamiento, debe proporcionar la configuración del análisis. `ExplainabilityAnalysisConfig` requiere `ModelConfig` por la misma razón por la que se requiere para el trabajo de referencia. Tenga en cuenta que solo se requieren características para calcular la atribución de características, por lo que debe excluir el etiquetado Ground Truth.

## Supervisión de la desviación de atribución de características para los modelos implementados en puntos de conexión en tiempo real
<a name="model-monitor-explain-quality-rt"></a>

Para programar un monitor de explicabilidad del modelo para un punto de conexión en tiempo real, pase la instancia `EndpointInput` al argumento `endpoint_input` de la instancia `ModelExplainabilityMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator

model_exp_model_monitor = ModelExplainabilityMonitor(
   role=sagemaker.get_execution_role(),
   ... 
)

schedule = model_exp_model_monitor.create_monitoring_schedule(
   monitor_schedule_name=schedule_name,
   post_analytics_processor_script=s3_code_postprocessor_uri,
   output_s3_uri=s3_report_path,
   statistics=model_exp_model_monitor.baseline_statistics(),
   constraints=model_exp_model_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint",
    )
)
```

## Supervisión de la desviación de atribución de características para trabajos de transformación por lotes
<a name="model-monitor-explain-quality-bt"></a>

Para programar un monitor de explicabilidad del modelo para un trabajo de transformación por lotes, pase la instancia `BatchTransformInput` al argumento `batch_transform_input` de la instancia `ModelExplainabilityMonitor`, como se muestra en el siguiente ejemplo de código:

```
from sagemaker.model_monitor import CronExpressionGenerator

model_exp_model_monitor = ModelExplainabilityMonitor(
   role=sagemaker.get_execution_role(),
   ... 
)

schedule = model_exp_model_monitor.create_monitoring_schedule(
   monitor_schedule_name=schedule_name,
   post_analytics_processor_script=s3_code_postprocessor_uri,
   output_s3_uri=s3_report_path,
   statistics=model_exp_model_monitor.baseline_statistics(),
   constraints=model_exp_model_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   batch_transform_input=BatchTransformInput(
        destination="opt/ml/processing/data",
        model_name="batch-fraud-detection-model",
        input_manifests_s3_uri="s3://amzn-s3-demo-bucket/batch-fraud-detection/on-schedule-monitoring/in/",
        excludeFeatures="0",
   )
)
```

# Inspección de informes de supervisión de la desviación en la atribución de características de los modelos en producción
<a name="clarify-feature-attribute-drift-report"></a>

Una vez iniciada la programación que configuró de forma predeterminada, tendrá que esperar a que comience su primera ejecución y, a continuación, detener la programación para evitar incurrir en cargos.

Para inspeccionar los informes, use el siguiente código:

```
schedule_desc = model_explainability_monitor.describe_schedule()
execution_summary = schedule_desc.get("LastMonitoringExecutionSummary")
if execution_summary and execution_summary["MonitoringExecutionStatus"] in ["Completed", "CompletedWithViolations"]:
    last_model_explainability_monitor_execution = model_explainability_monitor.list_executions()[-1]
    last_model_explainability_monitor_execution_report_uri = last_model_explainability_monitor_execution.output.destination
    print(f'Report URI: {last_model_explainability_monitor_execution_report_uri}')
    last_model_explainability_monitor_execution_report_files = sorted(S3Downloader.list(last_model_explainability_monitor_execution_report_uri))
    print("Found Report Files:")
    print("\n ".join(last_model_explainability_monitor_execution_report_files))
else:
    last_model_explainability_monitor_execution = None
    print("====STOP==== \n No completed executions to inspect further. Please wait till an execution completes or investigate previously reported failures.")
```

 Si hay alguna infracción en comparación con la referencia, se muestra aquí:

```
if last_model_explainability_monitor_execution:
    model_explainability_violations = last_model_explainability_monitor_execution.constraint_violations()
    if model_explainability_violations:
        print(model_explainability_violations.body_dict)
```

Si su modelo se implementa en un punto final en tiempo real, puede ver las visualizaciones en SageMaker Studio de los resultados y las CloudWatch métricas del análisis seleccionando la pestaña **Puntos de enlace y, a continuación, haciendo doble clic en el punto final**.

# CloudWatch Métricas para el análisis de la desviación de características
<a name="clarify-feature-attribute-drift-cw"></a>

En esta guía, se muestran CloudWatch las métricas y sus propiedades que puede utilizar para analizar la desviación de los atributos de las entidades en SageMaker Clarify. Los trabajos de supervisión de la desviación de atributos de características calculan y publican dos tipos de métricas:
+ El valor SHAP global de cada característica.
**nota**  
El nombre de esta métrica anexa el nombre de la característica proporcionado por la configuración del análisis del trabajo a `feature_`. Por ejemplo, `feature_X` es el valor SHAP global de la característica `X`.
+ El `ExpectedValue` de la métrica.

Estas métricas se publican en el siguiente espacio de CloudWatch nombres:
+ Para puntos de conexión en tiempo real: `aws/sagemaker/Endpoints/explainability-metrics`
+ Para trabajos de transformación por lotes: `aws/sagemaker/ModelMonitoring/explainability-metrics`

Cada métrica tiene las siguientes propiedades:
+ `Endpoint`: el nombre del punto de conexión supervisado, si corresponde.
+ `MonitoringSchedule`: el nombre de la programación del trabajo de supervisión. 
+ `ExplainabilityMethod`: el método utilizado para calcular los valores Shapley. Elija `KernelShap`.
+ `Label`: el nombre proporcionado por la configuración del análisis del trabajo `label_headers` o un marcador de posición similar como `label0`.
+ `ValueType`: el tipo de valor devuelto por la métrica. Elija `GlobalShapValues` o `ExpectedValue`.

Para evitar que los trabajos de supervisión publiquen métricas, establezca `publish_cloudwatch_metrics` en `Disabled` en el mapa `Environment` de definición del [trabajo de explicabilidad del modelo](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html).

# Programe trabajos de supervisión
<a name="model-monitor-scheduling"></a>

Amazon SageMaker Model Monitor le permite supervisar los datos recopilados en sus puntos de conexión en tiempo real. Puede supervisar sus datos de forma periódica o puede supervisarlos una vez, de forma inmediata. Puede crear una programación de supervisión con la API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html).

Con un cronograma de monitoreo, la SageMaker IA puede comenzar a procesar trabajos para analizar los datos recopilados durante un período determinado. En el trabajo de procesamiento, la SageMaker IA compara el conjunto de datos del análisis actual con las estadísticas y restricciones de referencia que usted proporciona. A continuación, la SageMaker IA genera un informe de infracciones. Además, se emiten CloudWatch métricas para cada función que se analiza.

SageMaker La IA proporciona un contenedor prediseñado para realizar análisis en conjuntos de datos tabulares. Como alternativa, puede elegir utilizar su propio contenedor como se describe en el tema [Support para sus propios contenedores con Amazon SageMaker Model Monitor](model-monitor-byoc-containers.md).

Puede crear una programación de supervisión modelo para su trabajo de transformación por lotes o de punto de conexión en tiempo real. Utilice los recursos de referencia (restricciones y estadísticas) para comparar con las entradas del trabajo por lotes o el tráfico en tiempo real. 

**Example asignaciones de referencia**  
En el siguiente ejemplo, el conjunto de datos de entrenamiento utilizado para entrenar el modelo se cargó en Amazon S3. Si ya lo tiene en Amazon S3, puede apuntar a él directamente.  

```
# copy over the training dataset to Amazon S3 (if you already have it in Amazon S3, you could reuse it)
baseline_prefix = prefix + '/baselining'
baseline_data_prefix = baseline_prefix + '/data'
baseline_results_prefix = baseline_prefix + '/results'

baseline_data_uri = 's3://{}/{}'.format(bucket,baseline_data_prefix)
baseline_results_uri = 's3://{}/{}'.format(bucket, baseline_results_prefix)
print('Baseline data uri: {}'.format(baseline_data_uri))
print('Baseline results uri: {}'.format(baseline_results_uri))
```

```
training_data_file = open("test_data/training-dataset-with-header.csv", 'rb')
s3_key = os.path.join(baseline_prefix, 'data', 'training-dataset-with-header.csv')
boto3.Session().resource('s3').Bucket(bucket).Object(s3_key).upload_fileobj(training_data_file)
```

**Example programación de análisis periódico**  
Si va a programar un monitor de modelos para un punto de conexión en tiempo real, utilice las restricciones y las estadísticas de referencia para comparar con el tráfico en tiempo real. El siguiente fragmento de código muestra el formato general que se utiliza para programar un monitor de modelos para un punto de conexión en tiempo real. En este ejemplo, se programa el monitor de modelos para que se ejecute cada hora.  

```
from sagemaker.model_monitor import CronExpressionGenerator
from time import gmtime, strftime

mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
my_default_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint"
    ),
    post_analytics_processor_script=s3_code_postprocessor_uri,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

**Example programación de un análisis único**  
También puede programar el análisis para que se ejecute una vez sin que se repita pasando argumentos como los siguientes al método `create_monitoring_schedule`:  

```
    schedule_cron_expression=CronExpressionGenerator.now(),
    data_analysis_start_time="-PT1H",
    data_analysis_end_time="-PT0H",
```
En estos argumentos, el parámetro `schedule_cron_expression` programa el análisis para que se ejecute una vez, inmediatamente, con el valor`CronExpressionGenerator.now()`. Para cualquier programación con esta configuración, se requieren los parámetros `data_analysis_start_time` y `data_analysis_end_time`. Estos parámetros establecen la hora de inicio y la hora de finalización de una ventana de análisis. Defina estos tiempos como desplazamientos relativos a la hora actual y utilice el formato de duración ISO 8601. En este ejemplo, las horas `-PT1H` y `-PT0H` defina un intervalo entre una hora pasada y la hora actual. Con esta programación, el análisis evalúa solo los datos que se recopilaron durante el período especificado.

**Example programación de un trabajo de transformación por lotes**  
El siguiente fragmento de código muestra el formato general que se utiliza para programar un monitor de modelos para un trabajo de transformación por lotes.  

```
from sagemaker.model_monitor import (
    CronExpressionGenerator,
    BatchTransformInput, 
    MonitoringDatasetFormat, 
)
from time import gmtime, strftime

mon_schedule_name = 'my-model-monitor-schedule-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
my_default_monitor.create_monitoring_schedule(
    monitor_schedule_name=mon_schedule_name,
    batch_transform_input=BatchTransformInput(
        destination="opt/ml/processing/input",
        data_captured_destination_s3_uri=s3_capture_upload_path,
        dataset_format=MonitoringDatasetFormat.csv(header=False),
    ),
    post_analytics_processor_script=s3_code_postprocessor_uri,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

```
desc_schedule_result = my_default_monitor.describe_schedule()
print('Schedule status: {}'.format(desc_schedule_result['MonitoringScheduleStatus']))
```

# Expresión cron para la programación de supervisión
<a name="model-monitor-schedule-expression"></a>

Para proporcionar detalles de la programación de monitorización, utilice [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ScheduleConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ScheduleConfig.html), que es una expresión `cron` que describe detalles sobre la programación de monitorización.

Amazon SageMaker Model Monitor admite las siguientes `cron` expresiones:
+ Para configurar el trabajo para que comience cada hora, utilice lo siguiente:

  `Hourly: cron(0 * ? * * *)`
+ Para ejecutar el trabajo a diario, utilice lo siguiente:

  `cron(0 [00-23] ? * * *)`
+ Para ejecutar el trabajo una vez, inmediatamente, utilice la siguiente palabra clave:

  `NOW`

Por ejemplo, las siguientes expresiones `cron` son válidas:
+ Todos los días a las 12 PM UTC: `cron(0 12 ? * * *)`
+ Todos los días a las 12 AM UTC: `cron(0 0 ? * * *)`

Para admitir la ejecución cada 6, 12 horas, el monitor de modelos admite la siguiente expresión:

`cron(0 [00-23]/[01-24] ? * * *)`

Por ejemplo, las siguientes expresiones `cron` son válidas:
+ Cada 12 horas, a partir de las 5 PM UTC: `cron(0 17/12 ? * * *)`
+ Cada dos horas, a partir de las 12 AM UTC: `cron(0 0/2 ? * * *)`

**Notas**  
Aunque la expresión `cron` está configurada para comenzar a las 5 PM UTC, tenga en cuenta que podría haber un retraso de 0 a 20 minutos respecto a la hora solicitada real para ejecutar la ejecución.
Si desea ejecutar en un horario diario, no proporcione este parámetro. SageMaker La IA elige una hora para correr todos los días.
Actualmente, la SageMaker IA solo admite tasas de enteros por hora entre 1 y 24 horas.

# Configuración de políticas de control de servicio para programaciones de supervisión
<a name="model-monitor-scp-rules"></a>

 Debe especificar los parámetros de un trabajo de monitoreo al crear o actualizar su programación con la [CreateMonitoringSchedule](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateMonitoringSchedule.html)API o la [UpdateMonitoringSchedule](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateMonitoringSchedule.html)API, respectivamente. En función de su caso de uso, puede hacer esto de una de las siguientes formas: 
+  Puede especificar el [MonitoringJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MonitoringJobDefinition.html)campo de [MonitoringScheduleConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MonitoringScheduleConfig.html), al invocar `CreateMonitoringSchedule` o`UpdateMonitoringSchedule`. Puede usar esto solo para crear o actualizar una programación para un trabajo de supervisión de la calidad de los datos. 
+  Puede especificar el nombre de una definición de trabajo de supervisión, que ya haya creado, para el campo `MonitoringJobDefinitionName` de `MonitoringScheduleConfig` cuando invoca `CreateMonitoringSchedule` o `UpdateMonitoringSchedule`. Puede usarlo para cualquier definición de trabajo que cree con una de las siguientes opciones: APIs 
  +  [CreateDataQualityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDataQualityJobDefinition.html) 
  +  [CreateModelQualityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelQualityJobDefinition.html) 
  +  [CreateModelBiasJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html) 
  +  [CreateModelExplainabilityJobDefinition](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html) 

   Si quieres usar el SDK de SageMaker Python para crear o actualizar planificaciones, debes usar este proceso. 

 Los procesos antes mencionados se excluyen mutuamente, es decir, puede especificar el campo `MonitoringJobDefinition` o el campo `MonitoringJobDefinitionName` al crear o actualizar las programaciones de supervisión. 

 Al crear una definición de trabajo de supervisión o al especificar una en el campo `MonitoringJobDefinition`, puede establecer parámetros de seguridad, como `NetworkConfig` y `VolumeKmsKeyId`. Como administrador, es posible que desee que estos parámetros estén siempre establecidos en determinados valores, de modo que los trabajos de supervisión se ejecuten siempre en un entorno seguro. Para garantizar esto, configure [las políticas de control de servicios](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) adecuadas (SCPs). SCPs son un tipo de política organizacional que puede usar para administrar los permisos en su organización. 

 El siguiente ejemplo muestra una SCP que puede utilizar para asegurarse de que los parámetros de la infraestructura estén configurados correctamente al crear o actualizar los programas de supervisión de los trabajos. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateDataQualityJobDefinition",
                "sagemaker:CreateModelBiasJobDefinition",
                "sagemaker:CreateModelExplainabilityJobDefinition",
                "sagemaker:CreateModelQualityJobDefinition"
            ],
            "Resource": "arn:*:sagemaker:*:*:*",
            "Condition": {
                "Null": {
                    "sagemaker:VolumeKmsKey":"true",
                    "sagemaker:VpcSubnets": "true",
                    "sagemaker:VpcSecurityGroupIds": "true"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateDataQualityJobDefinition",
                "sagemaker:CreateModelBiasJobDefinition",
                "sagemaker:CreateModelExplainabilityJobDefinition",
                "sagemaker:CreateModelQualityJobDefinition"
            ],
            "Resource": "arn:*:sagemaker:*:*:*",
            "Condition": {
                "Bool": {
                    "sagemaker:InterContainerTrafficEncryption": "false"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreateMonitoringSchedule",
                "sagemaker:UpdateMonitoringSchedule"
            ],
            "Resource": "arn:*:sagemaker:*:*:monitoring-schedule/*",
            "Condition": {
                "Null": {
                    "sagemaker:ModelMonitorJobDefinitionName": "true"
                }
            }
        }
    ]
}
```

------

 Las dos primeras reglas del ejemplo garantizan que los parámetros de seguridad estén siempre configurados para supervisar las definiciones de los trabajos. La regla final exige que cualquier persona de su organización que cree o actualice una programación tenga que especificar siempre el campo `MonitoringJobDefinitionName`. Esto garantiza que nadie de su organización pueda establecer valores inseguros para los parámetros de seguridad al especificar el campo `MonitoringJobDefinition` al crear o actualizar las programaciones. 

# Contenedor prediseñado de Amazon SageMaker Model Monitor
<a name="model-monitor-pre-built-container"></a>

SageMaker La IA proporciona una imagen integrada llamada `sagemaker-model-monitor-analyzer` que le proporciona una gama de capacidades de monitoreo de modelos, que incluyen la sugerencia de restricciones, la generación de estadísticas, la validación de restricciones con respecto a una línea base y la emisión de métricas de Amazon CloudWatch. Esta imagen se basa en la versión 3.3.0 de Spark y se crea con la versión 2.0.2 de [Deequ](https://github.com/awslabs/deequ).

**nota**  
No puede extraer directamente la imagen integrada `sagemaker-model-monitor-analyzer`. Puede usar la `sagemaker-model-monitor-analyzer` imagen cuando envíe un trabajo de procesamiento o monitoreo de referencia utilizando uno de los. AWS SDKs

 Usa el SDK de SageMaker Python (consulta `image_uris.retrieve` la [guía de referencia del SDK de Python para SageMaker IA](https://sagemaker.readthedocs.io/en/stable/api/utility/image_uris.html)) para generar el URI de la imagen de ECR por ti, o bien especifica el URI de la imagen de ECR directamente. Se puede acceder a la imagen prediseñada de SageMaker Model Monitor de la siguiente manera:

`<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-model-monitor-analyzer`

Por ejemplo: `159807026194.dkr.ecr.us-west-2.amazonaws.com/sagemaker-model-monitor-analyzer`

Si se encuentra en una AWS región de China, puede acceder a las imágenes prediseñadas de SageMaker Model Monitor de la siguiente manera: 

`<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com.rproxy.govskope.us.cn/sagemaker-model-monitor-analyzer`

Para ver los nombres de cuentas IDs y AWS regiones, consulte las [rutas de registro de Docker y el código de ejemplo](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths).

Para escribir su propio contenedor de análisis, consulte el contrato de contenedor descrito en [Programaciones de supervisión personalizadas](model-monitor-custom-monitoring-schedules.md).

# Interpretación de los resultados
<a name="model-monitor-interpreting-results"></a>

Una vez que haya ejecutado un trabajo de procesamiento de referencia y haya obtenido estadísticas y restricciones para el conjunto de datos, puede ejecutar trabajos de supervisión que calculen estadísticas y enumeren las infracciones encontradas en relación con las restricciones de referencia. CloudWatch Las estadísticas de Amazon también se muestran en tu cuenta de forma predeterminada. Para obtener información sobre cómo ver los resultados de la supervisión en Amazon SageMaker Studio, consulte[Visualice los resultados de los puntos de enlace en tiempo real en Amazon Studio SageMaker](model-monitor-interpreting-visualize-results.md).

## Enumerar ejecuciones
<a name="model-monitor-interpreting-results-list-executions"></a>

La programación inicia trabajos de supervisión en los intervalos especificados. El siguiente código enumera las últimas cinco ejecuciones. Si ejecuta este código después de crear la programación horaria, es posible que las ejecuciones estén vacías y que tenga que esperar hasta cruzar el límite de hora (en UTC) para ver el inicio de las ejecuciones. El siguiente código incluye la lógica de espera.

```
mon_executions = my_default_monitor.list_executions()
print("We created a hourly schedule above and it will kick off executions ON the hour (plus 0 - 20 min buffer.\nWe will have to wait till we hit the hour...")

while len(mon_executions) == 0:
    print("Waiting for the 1st execution to happen...")
    time.sleep(60)
    mon_executions = my_default_monitor.list_executions()
```

## Inspeccionar una ejecución específica
<a name="model-monitor-interpreting-results-inspect-specific-execution"></a>

 

En el paso anterior, recogió la última ejecución programada completada o errónea. Puede explorar lo que salió bien o mal. Los estados terminales son:
+ `Completed`: se ha completado la ejecución de supervisión y no se encontraron problemas en el informe de infracciones.
+ `CompletedWithViolations`: se ha completado la ejecución, pero se han detectado infracciones de restricciones.
+ `Failed`: se ha producido un error en la ejecución de supervisión, posiblemente debido a un error de cliente (por ejemplo, problemas de rol) o problemas de infraestructura. Para identificar la causa, consulte `FailureReason` y `ExitMessage`.

```
latest_execution = mon_executions[-1] # latest execution's index is -1, previous is -2 and so on..
time.sleep(60)
latest_execution.wait(logs=False)

print("Latest execution status: {}".format(latest_execution.describe()['ProcessingJobStatus']))
print("Latest execution result: {}".format(latest_execution.describe()['ExitMessage']))

latest_job = latest_execution.describe()
if (latest_job['ProcessingJobStatus'] != 'Completed'):
        print("====STOP==== \n No completed executions to inspect further. Please wait till an execution completes or investigate previously reported failures.")
```

```
report_uri=latest_execution.output.destination
print('Report Uri: {}'.format(report_uri))
```

## Enumerar los informes generados
<a name="model-monitor-interpreting-results-list-generated-reports"></a>

Utilice el siguiente código para enumerar los informes generados. 

```
from urllib.parse import urlparse
s3uri = urlparse(report_uri)
report_bucket = s3uri.netloc
report_key = s3uri.path.lstrip('/')
print('Report bucket: {}'.format(report_bucket))
print('Report key: {}'.format(report_key))

s3_client = boto3.Session().client('s3')
result = s3_client.list_objects(Bucket=report_bucket, Prefix=report_key)
report_files = [report_file.get("Key") for report_file in result.get('Contents')]
print("Found Report Files:")
print("\n ".join(report_files))
```

## Informe de infracciones
<a name="model-monitor-interpreting-results-violations-report"></a>

Si hay infracciones en comparación con la referencia, se generan en el informe de infracciones. Utilice el siguiente código para enumerar las infracciones.

```
violations = my_default_monitor.latest_monitoring_constraint_violations()
pd.set_option('display.max_colwidth', -1)
constraints_df = pd.io.json.json_normalize(violations.body_dict["violations"])
constraints_df.head(10)
```

Esto solo se aplica a los conjuntos de datos que contienen datos tabulares. Los siguientes archivos de esquema especifican las estadísticas calculadas y las infracciones monitorizadas.

Archivos de salida para conjuntos de datos tabulares


| Nombre de archivo | Description (Descripción) | 
| --- | --- | 
| statistics.json |  Contiene estadísticas en columnas para cada característica del conjunto de datos que se analiza. Consulte el esquema de este archivo en el tema siguiente.  Este archivo se crea únicamente para supervisar la calidad de los datos.   | 
| constraint\$1violations.json |  Contiene una lista de infracciones que se encuentran en este conjunto de datos actual en comparación con el archivo de estadísticas de referencia y restricciones especificado en las rutas de acceso `baseline_constaints` y `baseline_statistics`.  | 

[Contenedor prediseñado de Amazon SageMaker Model Monitor](model-monitor-pre-built-container.md)Guarda un conjunto de CloudWatch métricas de Amazon para cada función de forma predeterminada. 

El código del contenedor puede emitir CloudWatch métricas en esta ubicación:`/opt/ml/output/metrics/cloudwatch`. 

# Visualice los resultados de los puntos de enlace en tiempo real en Amazon Studio SageMaker
<a name="model-monitor-interpreting-visualize-results"></a>

Si monitoriza un punto final en tiempo real, también puede visualizar los resultados en Amazon SageMaker Studio. Puede ver los detalles de la ejecución de cualquier trabajo de supervisión y puede crear gráficos que muestren la referencia y los valores capturados de cualquier métrica que calcule el trabajo de supervisión.

**Para ver los resultados detallados de un trabajo de supervisión**

1. Inicie sesión en Studio. Para obtener más información, consulte [Descripción general del dominio Amazon SageMaker AI](gs-studio-onboard.md).

1. En el panel de navegación izquierdo, elija el icono de **Componentes y registros** (![\[Orange paper airplane icon representing email or message sending functionality.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/icons/Components_registries.png)).

1. Elija **Puntos de conexión** en el menú desplegable.  
![\[Ubicación del menú desplegable Puntos de conexión en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-endpoints.png)

1. En la pestaña de punto de conexión, elija el tipo de supervisión para el que desea ver los detalles del trabajo.  
![\[La ubicación de la pestaña Calidad del modelo en la sección SUPERVISIÓN DEL MODELO.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-model-quality.png)

1. Elija el nombre de la ejecución del trabajo de supervisión del que quiere ver los detalles de la lista de trabajos de supervisión.  
![\[La pestaña Calidad del modelo de la sección SUPERVISIÓN DEL MODELO.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-job-history.png)

1. La pestaña **DETALLES DEL TRABAJO DE SUPERVISIÓN** se abre con un informe detallado del trabajo de supervisión.  
![\[La pestaña DETALLES DEL TRABAJO DE SUPERVISIÓN.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-job-details.png)

Puede crear un gráfico que muestre las métricas de referencia y capturadas durante un período de tiempo.

**Para crear un gráfico en SageMaker Studio para visualizar los resultados de la monitorización**

1. Inicie sesión en Studio. Para obtener más información, consulte [Descripción general del dominio Amazon SageMaker AI](gs-studio-onboard.md).

1. En el panel de navegación izquierdo, elija el icono de **Componentes y registros** (![\[Orange paper airplane icon representing email or message sending functionality.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/icons/Components_registries.png)).

1. Elija **Puntos de conexión** en el menú desplegable.  
![\[Ubicación del menú desplegable Puntos de conexión en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-endpoints.png)

1. En la pestaña **Punto de conexión**, elija el tipo de supervisión para el que desea crear un gráfico. En este ejemplo, se muestra un gráfico para el tipo de supervisión de **Calidad del modelo**.  
![\[La ubicación de la pestaña Calidad del modelo en la sección SUPERVISIÓN DEL MODELO.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-model-quality.png)

1. Elija **Agregar gráfico**.  
![\[Ubicación de Agregar gráfico en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-add-chart.png)

1. En la pestaña **PROPIEDADES DEL GRÁFICO**, elija el período de tiempo, la estadística y la métrica que desee representar gráficamente. En este ejemplo, se muestra un gráfico para una **Línea temporal** de **1 semana**, la **Estadística** **Promedio** y la **Métrica** **F1**.  
![\[Ubicación donde se selecciona una métrica en la consola.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-chart-properties.png)

1. El gráfico que muestra la estadística de la métrica de referencia y actual que eligió en el paso anterior aparece en la pestaña **Punto de conexión**.  
![\[Ejemplo de gráfico que muestra la métrica de referencia y la métrica media actual elegidas en el paso anterior.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model_monitor/mm-studio-f1-chart.png)

# Temas avanzados
<a name="model-monitor-advanced-topics"></a>

Las siguientes secciones contienen tareas más avanzadas que explican cómo personalizar la supervisión mediante scripts de preprocesamiento y posprocesamiento, cómo crear su propio contenedor y cómo utilizarlos CloudFormation para crear un programa de monitoreo.

**Topics**
+ [Programaciones de supervisión personalizadas](model-monitor-custom-monitoring-schedules.md)
+ [Cree un programa de monitoreo para un punto final en tiempo real con un recurso CloudFormation personalizado](model-monitor-cloudformation-monitoring-schedules.md)

# Programaciones de supervisión personalizadas
<a name="model-monitor-custom-monitoring-schedules"></a>

Además de utilizar los mecanismos de monitorización integrados, puede crear sus propios programas y procedimientos de monitorización personalizados mediante scripts de preprocesamiento y postprocesamiento o mediante el uso o la creación de su propio contenedor.

**Topics**
+ [Preprocesamiento y postprocesamiento](model-monitor-pre-and-post-processing.md)
+ [Support para sus propios contenedores con Amazon SageMaker Model Monitor](model-monitor-byoc-containers.md)

# Preprocesamiento y postprocesamiento
<a name="model-monitor-pre-and-post-processing"></a>

Puede usar scripts de Python personalizados de preprocesamiento y postprocesamiento para transformar la entrada en el monitor de modelos o extender el código después de una ejecución de supervisión correcta. Cargue estos scripts en Amazon S3 y haga referencia a ellos cuando cree su monitor de modelos.

En el ejemplo siguiente se muestra cómo personalizar los programas de supervisión con scripts de preprocesamiento y postprocesamiento. *user placeholder text*Sustitúyalo por tu propia información.

```
import boto3, os
from sagemaker import get_execution_role, Session
from sagemaker.model_monitor import CronExpressionGenerator, DefaultModelMonitor

# Upload pre and postprocessor scripts
session = Session()
bucket = boto3.Session().resource("s3").Bucket(session.default_bucket())
prefix = "demo-sagemaker-model-monitor"
pre_processor_script = bucket.Object(os.path.join(prefix, "preprocessor.py")).upload_file("preprocessor.py")
post_processor_script = bucket.Object(os.path.join(prefix, "postprocessor.py")).upload_file("postprocessor.py")

# Get execution role
role = get_execution_role() # can be an empty string

# Instance type
instance_type = "instance-type"
# instance_type = "ml.m5.xlarge" # Example

# Create a monitoring schedule with pre and postprocessing
my_default_monitor = DefaultModelMonitor(
    role=role,
    instance_count=1,
    instance_type=instance_type,
    volume_size_in_gb=20,
    max_runtime_in_seconds=3600,
)

s3_report_path = "s3://{}/{}".format(bucket, "reports")
monitor_schedule_name = "monitor-schedule-name"
endpoint_name = "endpoint-name"
my_default_monitor.create_monitoring_schedule(
    post_analytics_processor_script=post_processor_script,
    record_preprocessor_script=pre_processor_script,
    monitor_schedule_name=monitor_schedule_name,
    # use endpoint_input for real-time endpoint
    endpoint_input=endpoint_name,
    # or use batch_transform_input for batch transform jobs
    # batch_transform_input=batch_transform_name,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

**Topics**
+ [Archivo de comandos de preprocesamiento](#model-monitor-pre-processing-script)
+ [Muestreo personalizado](#model-monitor-pre-processing-custom-sampling)
+ [Archivo de comandos de postprocesamiento](#model-monitor-post-processing-script)

## Archivo de comandos de preprocesamiento
<a name="model-monitor-pre-processing-script"></a>

Utilice scripts de preprocesamiento cuando necesite transformar las entradas del monitor de modelos.

Por ejemplo, suponga que la salida de su modelo es una matriz `[1.0, 2.1]`. El contenedor Amazon SageMaker Model Monitor solo funciona con estructuras JSON tabulares o aplanadas, como. `{“prediction0”: 1.0, “prediction1” : 2.1}` Puede utilizar un script de preprocesamiento como el siguiente para transformar la matriz en la estructura JSON correcta.

```
def preprocess_handler(inference_record):
    input_data = inference_record.endpoint_input.data
    output_data = inference_record.endpoint_output.data.rstrip("\n")
    data = output_data + "," + input_data
    return { str(i).zfill(20) : d for i, d in enumerate(data.split(",")) }
```

En otro ejemplo, suponga que el modelo tiene características opcionales y que utiliza `-1` para indicar que a la característica opcional le falta un valor. Si tiene un monitor de calidad de datos, es posible que desee eliminar el `-1` de la matriz de valores de entrada para que no se incluya en los cálculos de métricas del monitor. Puede utilizar un script como el siguiente para eliminar esos valores.

```
def preprocess_handler(inference_record):
    input_data = inference_record.endpoint_input.data
    return {i : None if x == -1 else x for i, x in enumerate(input_data.split(","))}
```

El script de preprocesamiento recibe un `inference_record` como única entrada. El siguiente fragmento de código muestra un ejemplo de `inference_record`.

```
{
  "captureData": {
    "endpointInput": {
      "observedContentType": "text/csv",
      "mode": "INPUT",
      "data": "132,25,113.2,96,269.9,107,,0,0,0,0,0,0,1,0,1,0,0,1",
      "encoding": "CSV"
    },
    "endpointOutput": {
      "observedContentType": "text/csv; charset=utf-8",
      "mode": "OUTPUT",
      "data": "0.01076381653547287",
      "encoding": "CSV"
    }
  },
  "eventMetadata": {
    "eventId": "feca1ab1-8025-47e3-8f6a-99e3fdd7b8d9",
    "inferenceTime": "2019-11-20T23:33:12Z"
  },
  "eventVersion": "0"
}
```

El siguiente fragmento de código muestra la estructura de clases completa de un `inference_record`.

```
KEY_EVENT_METADATA = "eventMetadata"
KEY_EVENT_METADATA_EVENT_ID = "eventId"
KEY_EVENT_METADATA_EVENT_TIME = "inferenceTime"
KEY_EVENT_METADATA_CUSTOM_ATTR = "customAttributes"

KEY_EVENTDATA_ENCODING = "encoding"
KEY_EVENTDATA_DATA = "data"

KEY_GROUND_TRUTH_DATA = "groundTruthData"

KEY_EVENTDATA = "captureData"
KEY_EVENTDATA_ENDPOINT_INPUT = "endpointInput"
KEY_EVENTDATA_ENDPOINT_OUTPUT = "endpointOutput"

KEY_EVENTDATA_BATCH_OUTPUT = "batchTransformOutput"
KEY_EVENTDATA_OBSERVED_CONTENT_TYPE = "observedContentType"
KEY_EVENTDATA_MODE = "mode"

KEY_EVENT_VERSION = "eventVersion"

class EventConfig:
    def __init__(self, endpoint, variant, start_time, end_time):
        self.endpoint = endpoint
        self.variant = variant
        self.start_time = start_time
        self.end_time = end_time


class EventMetadata:
    def __init__(self, event_metadata_dict):
        self.event_id = event_metadata_dict.get(KEY_EVENT_METADATA_EVENT_ID, None)
        self.event_time = event_metadata_dict.get(KEY_EVENT_METADATA_EVENT_TIME, None)
        self.custom_attribute = event_metadata_dict.get(KEY_EVENT_METADATA_CUSTOM_ATTR, None)


class EventData:
    def __init__(self, data_dict):
        self.encoding = data_dict.get(KEY_EVENTDATA_ENCODING, None)
        self.data = data_dict.get(KEY_EVENTDATA_DATA, None)
        self.observedContentType = data_dict.get(KEY_EVENTDATA_OBSERVED_CONTENT_TYPE, None)
        self.mode = data_dict.get(KEY_EVENTDATA_MODE, None)

    def as_dict(self):
        ret = {
            KEY_EVENTDATA_ENCODING: self.encoding,
            KEY_EVENTDATA_DATA: self.data,
            KEY_EVENTDATA_OBSERVED_CONTENT_TYPE: self.observedContentType,
        }
        return ret


class CapturedData:
    def __init__(self, event_dict):
        self.event_metadata = None
        self.endpoint_input = None
        self.endpoint_output = None
        self.batch_transform_output = None
        self.ground_truth = None
        self.event_version = None
        self.event_dict = event_dict
        self._event_dict_postprocessed = False
        
        if KEY_EVENT_METADATA in event_dict:
            self.event_metadata = EventMetadata(event_dict[KEY_EVENT_METADATA])
        if KEY_EVENTDATA in event_dict:
            if KEY_EVENTDATA_ENDPOINT_INPUT in event_dict[KEY_EVENTDATA]:
                self.endpoint_input = EventData(event_dict[KEY_EVENTDATA][KEY_EVENTDATA_ENDPOINT_INPUT])
            if KEY_EVENTDATA_ENDPOINT_OUTPUT in event_dict[KEY_EVENTDATA]:
                self.endpoint_output = EventData(event_dict[KEY_EVENTDATA][KEY_EVENTDATA_ENDPOINT_OUTPUT])
            if KEY_EVENTDATA_BATCH_OUTPUT in event_dict[KEY_EVENTDATA]:
                self.batch_transform_output = EventData(event_dict[KEY_EVENTDATA][KEY_EVENTDATA_BATCH_OUTPUT])

        if KEY_GROUND_TRUTH_DATA in event_dict:
            self.ground_truth = EventData(event_dict[KEY_GROUND_TRUTH_DATA])
        if KEY_EVENT_VERSION in event_dict:
            self.event_version = event_dict[KEY_EVENT_VERSION]

    def as_dict(self):
        if self._event_dict_postprocessed is True:
            return self.event_dict
        if KEY_EVENTDATA in self.event_dict:
            if KEY_EVENTDATA_ENDPOINT_INPUT in self.event_dict[KEY_EVENTDATA]:
                self.event_dict[KEY_EVENTDATA][KEY_EVENTDATA_ENDPOINT_INPUT] = self.endpoint_input.as_dict()
            if KEY_EVENTDATA_ENDPOINT_OUTPUT in self.event_dict[KEY_EVENTDATA]:
                self.event_dict[KEY_EVENTDATA][
                    KEY_EVENTDATA_ENDPOINT_OUTPUT
                ] = self.endpoint_output.as_dict()
            if KEY_EVENTDATA_BATCH_OUTPUT in self.event_dict[KEY_EVENTDATA]:
                self.event_dict[KEY_EVENTDATA][KEY_EVENTDATA_BATCH_OUTPUT] = self.batch_transform_output.as_dict()
        
        self._event_dict_postprocessed = True
        return self.event_dict

    def __str__(self):
        return str(self.as_dict())
```

## Muestreo personalizado
<a name="model-monitor-pre-processing-custom-sampling"></a>

También puede aplicar una estrategia de muestreo personalizada en su script de preprocesamiento. Para ello, configure el contenedor propio y prediseñado del monitor de modelos para que haga caso omiso de un porcentaje de los registros de acuerdo con la frecuencia de muestreo especificada. En el siguiente ejemplo, el controlador muestrea el 10 % de los registros devolviendo el registro del 10 % de las llamadas al controlador y, en caso contrario, devuelve una lista vacía.

```
import random

def preprocess_handler(inference_record):
    # we set up a sampling rate of 0.1
    if random.random() > 0.1:
        # return an empty list
        return []
    input_data = inference_record.endpoint_input.data
    return {i : None if x == -1 else x for i, x in enumerate(input_data.split(","))}
```

### Registro personalizado de script de preprocesamiento
<a name="model-monitor-pre-processing-custom-logging"></a>

 Si el script de preprocesamiento devuelve un error, compruebe los mensajes de excepción registrados para realizar la depuración. CloudWatch Puede acceder al registrador a CloudWatch través de la interfaz. `preprocess_handler` Puede registrar cualquier información que necesite de su script en. CloudWatch Esto puede resultar útil a la hora de depurar el script de preprocesamiento. El siguiente ejemplo muestra cómo puede utilizar la `preprocess_handler` interfaz para iniciar sesión en CloudWatch 

```
def preprocess_handler(inference_record, logger):
    logger.info(f"I'm a processing record: {inference_record}")
    logger.debug(f"I'm debugging a processing record: {inference_record}")
    logger.warning(f"I'm processing record with missing value: {inference_record}")
    logger.error(f"I'm a processing record with bad value: {inference_record}")
    return inference_record
```

## Archivo de comandos de postprocesamiento
<a name="model-monitor-post-processing-script"></a>

Utilice un script de postprocesamiento cuando desee extender el código después de una ejecución de supervisión correcta.

```
def postprocess_handler():
    print("Hello from post-proc script!")
```

# Support para sus propios contenedores con Amazon SageMaker Model Monitor
<a name="model-monitor-byoc-containers"></a>

Amazon SageMaker Model Monitor proporciona un contenedor prediseñado con la capacidad de analizar los datos capturados desde puntos de enlace o trabajos de transformación por lotes para conjuntos de datos tabulares. Si desea traer su propio contenedor, el monitor de modelos proporciona puntos de extensión que puede utilizar.

Desde dentro del sistema, cuando se crea una `MonitoringSchedule`, el monitor de modelos inicia en última instancia los trabajos de procesamiento. Por lo tanto, el contenedor debe estar al tanto del contrato de trabajo de procesamiento documentado en el tema [Cómo crear su propio contenedor de procesamiento (escenario avanzado)](build-your-own-processing-container.md). Tenga en cuenta que el monitor de modelos inicia el trabajo de procesamiento en su nombre según la programación. Al invocar, el monitor de modelos configura variables de entorno adicionales para que su contenedor tenga suficiente contexto para procesar los datos para esa ejecución particular de la supervisión programada. Para obtener información adicional sobre las entradas de contenedores, consulte [Entradas de contrato de contenedor](model-monitor-byoc-contract-inputs.md).

En el contenedor, utilizando las variables de entorno/contexto anteriores, ahora puede analizar el conjunto de datos para el período actual en su código personalizado. Una vez completado este análisis, puede optar por emitir sus informes para que se carguen en buckets de S3. Los informes que genera el contenedor prediseñado se documentan en [Salidas del contrato de contenedor](model-monitor-byoc-contract-outputs.md). Si desea que la visualización de los informes funcione en SageMaker Studio, debe utilizar el mismo formato. También puede optar por emitir informes completamente personalizados.

También puede emitir CloudWatch métricas desde el contenedor siguiendo las instrucciones que se indican en[CloudWatch Métricas de Bring Your Own Containers](model-monitor-byoc-cloudwatch.md).

**Topics**
+ [Entradas de contrato de contenedor](model-monitor-byoc-contract-inputs.md)
+ [Salidas del contrato de contenedor](model-monitor-byoc-contract-outputs.md)
+ [CloudWatch Métricas de Bring Your Own Containers](model-monitor-byoc-cloudwatch.md)

# Entradas de contrato de contenedor
<a name="model-monitor-byoc-contract-inputs"></a>

La plataforma Amazon SageMaker Model Monitor invoca tu código de contenedor según un cronograma específico. Si elige escribir su propio código de contenedor, están disponibles las siguientes variables de entorno. En este contexto, puede analizar el conjunto de datos actual o evaluar las restricciones si decide emitir métricas, si procede.

Las variables de entorno disponibles son las mismas para los puntos de conexión en tiempo real y los trabajos de transformación por lotes, excepto para la variable `dataset_format`. Si utiliza un punto de conexión en tiempo real, la variable `dataset_format` admite las siguientes opciones:

```
{\"sagemakerCaptureJson\": {\"captureIndexNames\": [\"endpointInput\",\"endpointOutput\"]}}
```

Si utiliza un trabajo de transformación por lotes, `dataset_format` admite las siguientes opciones:

```
{\"csv\": {\"header\": [\"true\",\"false\"]}}
```

```
{\"json\": {\"line\": [\"true\",\"false\"]}}
```

```
{\"parquet\": {}}
```

El siguiente ejemplo de código muestra el conjunto completo de variables de entorno disponibles para el código de contenedor (y utiliza el formato `dataset_format` para un punto de conexión en tiempo real).

```
"Environment": {
 "dataset_format": "{\"sagemakerCaptureJson\": {\"captureIndexNames\": [\"endpointInput\",\"endpointOutput\"]}}",
 "dataset_source": "/opt/ml/processing/endpointdata",
 "end_time": "2019-12-01T16: 20: 00Z",
 "output_path": "/opt/ml/processing/resultdata",
 "publish_cloudwatch_metrics": "Disabled",
 "sagemaker_endpoint_name": "endpoint-name",
 "sagemaker_monitoring_schedule_name": "schedule-name",
 "start_time": "2019-12-01T15: 20: 00Z"
}
```

Parameters 


| Nombre del parámetro | Description (Descripción) | 
| --- | --- | 
| dataset\$1format |  Para un trabajo iniciado a partir de un `MonitoringSchedule` respaldado por un `Endpoint`, esto es `sageMakerCaptureJson` con los índices de captura `endpointInput` o `endpointOutput`, o ambos. Para un trabajo de transformación por lotes, esto especifica el formato de los datos, ya sea CSV, JSON o Parquet.  | 
| dataset\$1source |  S usa un punto de conexión en tiempo real, la ruta local en la que están disponibles los datos correspondientes al período de supervisión, según lo especificado por `start_time` y `end_time`. En esta ruta, los datos están disponibles en ` /{endpoint-name}/{variant-name}/yyyy/mm/dd/hh`. A veces descargamos más de lo que especifican las horas de inicio y fin. Depende del código contenedor analizar los datos según sea necesario.  | 
| output\$1path |  La ruta local para escribir informes de salida y otros archivos. Debe especificar este parámetro en la solicitud `CreateMonitoringSchedule` como `MonitoringOutputConfig.MonitoringOutput[0].LocalPath`. Se carga en la ruta de `S3Uri` especificada en `MonitoringOutputConfig.MonitoringOutput[0].S3Uri`.  | 
| publish\$1cloudwatch\$1metrics |  Para un trabajo iniciado por `CreateMonitoringSchedule`, este parámetro se establece en `Enabled`. El contenedor puede elegir escribir el archivo de CloudWatch salida de Amazon en`[filepath]`.  | 
| sagemaker\$1endpoint\$1name |  Si utiliza un punto de conexión en tiempo real, el nombre del `Endpoint` para el que se lanzó este trabajo programado.  | 
| sagemaker\$1monitoring\$1schedule\$1name |  El nombre de la `MonitoringSchedule` que lanzó este trabajo.  | 
| \$1sagemaker\$1endpoint\$1datacapture\$1prefix\$1 |  Si utiliza un punto de conexión en tiempo real, el prefijo especificado en el parámetro `DataCaptureConfig` del `Endpoint`. El contenedor puede usarlo si necesita acceder directamente a más datos de los que ya ha descargado la SageMaker IA en la `dataset_source` ruta.  | 
| start\$1time, end\$1time |  Se ejecuta la ventana de tiempo para este análisis. Por ejemplo, para un trabajo programado para ejecutarse a las 05:00 UTC y un trabajo que se ejecuta el 20/02/2020, `start_time`: es 2020-02-19T06:00:00Z y `end_time`: es 2020-02-20T05:00:00Z  | 
| baseline\$1constraints: |  La ruta local del archivo de restricción de referencia especificado en ` BaselineConfig.ConstraintResource.S3Uri`. Esto solo está disponible si este parámetro se especificó en la solicitud `CreateMonitoringSchedule`.  | 
| baseline\$1statistics |  La ruta de acceso local al archivo de estadísticas de referencia especificado en `BaselineConfig.StatisticsResource.S3Uri`. Esto solo está disponible si este parámetro se especificó en la solicitud `CreateMonitoringSchedule`:   | 

# Salidas del contrato de contenedor
<a name="model-monitor-byoc-contract-outputs"></a>

El contenedor puede analizar los datos disponibles en la ruta `*dataset_source*` y escribir informes en la ruta en `*output_path*.` El código de contenedor puede escribir cualquier informe que se adapte a sus necesidades.

Si utiliza la estructura y el contrato siguientes, la SageMaker IA trata de forma especial algunos archivos de salida en la visualización y la API. Esto solo se aplica a los conjuntos de datos tabulares.

Archivos de salida para conjuntos de datos tabulares


| Nombre de archivo | Description (Descripción) | 
| --- | --- | 
| statistics.json |  Se espera que este archivo tenga estadísticas en columnas para cada característica en el conjunto de datos que se analiza. El esquema de este archivo está disponible en la siguiente sección.  | 
| constraints.json |  Se espera que este archivo tenga las restricciones en las características observadas. El esquema de este archivo está disponible en la siguiente sección.  | 
| constraints\$1violations.json |  Se espera que este archivo tenga la lista de infracciones encontradas en este conjunto de datos actual en comparación con el archivo de estadísticas de referencia y restricciones especificado en la ruta `baseline_constaints` y `baseline_statistics`.  | 

Además, si el `publish_cloudwatch_metrics` valor es código `"Enabled"` contenedor puede emitir CloudWatch métricas de Amazon en esta ubicación:`/opt/ml/output/metrics/cloudwatch`. El esquema de estos archivos se describe en las secciones siguientes.

**Topics**
+ [Esquema para estadísticas (archivo statistics.json)](model-monitor-byoc-statistics.md)
+ [Esquema para restricciones (archivo constraints.json)](model-monitor-byoc-constraints.md)

# Esquema para estadísticas (archivo statistics.json)
<a name="model-monitor-byoc-statistics"></a>

El esquema definido en el archivo `statistics.json` especifica los parámetros estadísticos que se van a calcular para la referencia y los datos que se capturan. También configura el bucket que debe utilizar [KLL](https://datasketches.apache.org/docs/KLL/KLLSketch.html), un boceto de cuantiles muy compacto con esquema de compactación diferido.

```
{
    "version": 0,
    # dataset level stats
    "dataset": {
        "item_count": number
    },
    # feature level stats
    "features": [
        {
            "name": "feature-name",
            "inferred_type": "Fractional" | "Integral",
            "numerical_statistics": {
                "common": {
                    "num_present": number,
                    "num_missing": number
                },
                "mean": number,
                "sum": number,
                "std_dev": number,
                "min": number,
                "max": number,
                "distribution": {
                    "kll": {
                        "buckets": [
                            {
                                "lower_bound": number,
                                "upper_bound": number,
                                "count": number
                            }
                        ],
                        "sketch": {
                            "parameters": {
                                "c": number,
                                "k": number
                            },
                            "data": [
                                [
                                    num,
                                    num,
                                    num,
                                    num
                                ],
                                [
                                    num,
                                    num
                                ][
                                    num,
                                    num
                                ]
                            ]
                        }#sketch
                    }#KLL
                }#distribution
            }#num_stats
        },
        {
            "name": "feature-name",
            "inferred_type": "String",
            "string_statistics": {
                "common": {
                    "num_present": number,
                    "num_missing": number
                },
                "distinct_count": number,
                "distribution": {
                    "categorical": {
                         "buckets": [
                                {
                                    "value": "string",
                                    "count": number
                                }
                          ]
                     }
                }
            },
            #provision for custom stats
        }
    ]
}
```

**Notas**  
La SageMaker IA reconoce las métricas especificadas en cambios de visualización posteriores. El contenedor puede emitir más métricas en caso necesario.
El [boceto KLL](https://datasketches.apache.org/docs/KLL/KLLSketch.html) es el boceto reconocido. Los contenedores personalizados pueden escribir su propia representación, pero la SageMaker IA no los reconocerá en las visualizaciones.
Por defecto, la distribución se materializa en 10 buckets. No puede cambiar este valor.

# Esquema para restricciones (archivo constraints.json)
<a name="model-monitor-byoc-constraints"></a>

Se utiliza un archivo constraints.json para expresar las restricciones que debe cumplir un conjunto de datos. Los contenedores de Amazon SageMaker Model Monitor pueden usar el archivo constraints.json para evaluar los conjuntos de datos. Los contenedores prediseñados proporcionan la capacidad de generar automáticamente el archivo constraints.json para un conjunto de datos de referencia. Si utiliza su propio contenedor, puede proporcionarle habilidades similares o puede crear el archivo constraints.json de otra manera. Aquí está el esquema para el archivo de restricciones que utiliza el contenedor prediseñado. Al utilizar sus propios contenedores puede adoptar el mismo formato o mejorarlo según sea necesario.

```
{
    "version": 0,
    "features":
    [
        {
            "name": "string",
            "inferred_type": "Integral" | "Fractional" | 
                    | "String" | "Unknown",
            "completeness": number,
            "num_constraints":
            {
                "is_non_negative": boolean
            },
            "string_constraints":
            {
                "domains":
                [
                    "list of",
                    "observed values",
                    "for small cardinality"
                ]
            },
            "monitoringConfigOverrides":
            {}
        }
    ],
    "monitoring_config":
    {
        "evaluate_constraints": "Enabled",
        "emit_metrics": "Enabled",
        "datatype_check_threshold": 0.1,
        "domain_content_threshold": 0.1,
        "distribution_constraints":
        {
            "perform_comparison": "Enabled",
            "comparison_threshold": 0.1,
            "comparison_method": "Simple"||"Robust",
            "categorical_comparison_threshold": 0.1,
            "categorical_drift_method": "LInfinity"||"ChiSquared"
        }
    }
}
```

El objeto `monitoring_config` contiene opciones para el trabajo de supervisión de la característica. En la tabla siguiente se describe cada opción.

Supervisión de restricciones

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/model-monitor-byoc-constraints.html)

# CloudWatch Métricas de Bring Your Own Containers
<a name="model-monitor-byoc-cloudwatch"></a>

Si el `publish_cloudwatch_metrics` valor está `Enabled` en el `Environment` mapa del `/opt/ml/processing/processingjobconfig.json` archivo, el código del contenedor emite CloudWatch las métricas de Amazon en esta ubicación:`/opt/ml/output/metrics/cloudwatch`. 

El esquema de este archivo se basa estrechamente en la CloudWatch `PutMetrics` API. El espacio de nombres no se especifica aquí. De forma predeterminada, es lo siguiente:
+ `For real-time endpoints: /aws/sagemaker/Endpoint/data-metrics`
+ `For batch transform jobs: /aws/sagemaker/ModelMonitoring/data-metrics`

Sin embargo, puede especificar dimensiones. Se recomienda agregar las siguientes dimensiones como mínimo:
+ `Endpoint` y `MonitoringSchedule` para puntos de conexión en tiempo real
+ `MonitoringSchedule` para trabajos de transformación por lotes 

En los siguientes fragmentos de código JSON, se muestra cómo configurar las dimensiones.

Para un punto de conexión en tiempo real, consulte el siguiente fragmento de código JSON, que incluye las dimensiones `Endpoint` y `MonitoringSchedule`:

```
{ 
    "MetricName": "", # Required
    "Timestamp": "2019-11-26T03:00:00Z", # Required
    "Dimensions" : [{"Name":"Endpoint","Value":"endpoint_0"},{"Name":"MonitoringSchedule","Value":"schedule_0"}]
    "Value": Float,
    # Either the Value or the StatisticValues field can be populated and not both.
    "StatisticValues": {
        "SampleCount": Float,
        "Sum": Float,
        "Minimum": Float,
        "Maximum": Float
    },
    "Unit": "Count", # Optional
}
```

Para un trabajo de transformación por lotes, consulte el siguiente fragmento de JSON, que incluye la dimensión `MonitoringSchedule`:

```
{ 
    "MetricName": "", # Required
    "Timestamp": "2019-11-26T03:00:00Z", # Required
    "Dimensions" : [{"Name":"MonitoringSchedule","Value":"schedule_0"}]
    "Value": Float,
    # Either the Value or the StatisticValues field can be populated and not both.
    "StatisticValues": {
        "SampleCount": Float,
        "Sum": Float,
        "Minimum": Float,
        "Maximum": Float
    },
    "Unit": "Count", # Optional
}
```

# Cree un programa de monitoreo para un punto final en tiempo real con un recurso CloudFormation personalizado
<a name="model-monitor-cloudformation-monitoring-schedules"></a>

Si utiliza un punto final en tiempo real, puede utilizar un recurso CloudFormation personalizado para crear un cronograma de monitoreo. El recurso personalizado está en Python. Para implementarlo, consulte la [implementación de Python Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html).

## Recurso personalizado
<a name="model-monitor-cloudformation-custom-resource"></a>

Comience por añadir un recurso personalizado a su CloudFormation plantilla. Esto apunta a una función de AWS Lambda que creará en el siguiente paso. 

Este recurso le permite personalizar los parámetros de la programación de supervisión. Puede añadir o eliminar más parámetros modificando el CloudFormation recurso y la función Lambda en el siguiente recurso de ejemplo.

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "MonitoringSchedule": {
            "Type": "Custom::MonitoringSchedule",
            "Version": "1.0",
            "Properties": {
                "ServiceToken": "arn:aws:lambda:us-west-2:111111111111:function:lambda-name",
                "ScheduleName": "YourScheduleName",
                "EndpointName": "YourEndpointName",
                "BaselineConstraintsUri": "s3://your-baseline-constraints/constraints.json",
                "BaselineStatisticsUri": "s3://your-baseline-stats/statistics.json",
                "PostAnalyticsProcessorSourceUri": "s3://your-post-processor/postprocessor.py",
                "RecordPreprocessorSourceUri": "s3://your-preprocessor/preprocessor.py",
                "InputLocalPath": "/opt/ml/processing/endpointdata",
                "OutputLocalPath": "/opt/ml/processing/localpath",
                "OutputS3URI": "s3://your-output-uri",
                "ImageURI": "111111111111.dkr.ecr.us-west-2.amazonaws.com/your-image",
                "ScheduleExpression": "cron(0 * ? * * *)",
                "PassRoleArn": "arn:aws:iam::111111111111:role/AmazonSageMaker-ExecutionRole"
            }
        }
    }
}
```

## Código de recurso personalizado de Lambda
<a name="model-monitor-cloudformation-lambda-custom-resource-code"></a>

Este recurso CloudFormation personalizado utiliza la AWS biblioteca [Custom Resource Helper](https://github.com/aws-cloudformation/custom-resource-helper), que puede instalar con pip mediante. `pip install crhelper` 

Esta función Lambda se invoca CloudFormation durante la creación y eliminación de la pila. Esta función Lambda es responsable de crear y eliminar la programación de monitorización y utilizar los parámetros definidos en el recurso personalizado descrito en la sección anterior.

```
import boto3
import botocore
import logging

from crhelper import CfnResource
from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
sm = boto3.client('sagemaker')

# cfnhelper makes it easier to implement a CloudFormation custom resource
helper = CfnResource()

# CFN Handlers

def handler(event, context):
    helper(event, context)


@helper.create
def create_handler(event, context):
    """
    Called when CloudFormation custom resource sends the create event
    """
    create_monitoring_schedule(event)


@helper.delete
def delete_handler(event, context):
    """
    Called when CloudFormation custom resource sends the delete event
    """
    schedule_name = get_schedule_name(event)
    delete_monitoring_schedule(schedule_name)


@helper.poll_create
def poll_create(event, context):
    """
    Return true if the resource has been created and false otherwise so
    CloudFormation polls again.
    """
    schedule_name = get_schedule_name(event)
    logger.info('Polling for creation of schedule: %s', schedule_name)
    return is_schedule_ready(schedule_name)

@helper.update
def noop():
    """
    Not currently implemented but crhelper will throw an error if it isn't added
    """
    pass

# Helper Functions

def get_schedule_name(event):
    return event['ResourceProperties']['ScheduleName']

def create_monitoring_schedule(event):
    schedule_name = get_schedule_name(event)
    monitoring_schedule_config = create_monitoring_schedule_config(event)

    logger.info('Creating monitoring schedule with name: %s', schedule_name)

    sm.create_monitoring_schedule(
        MonitoringScheduleName=schedule_name,
        MonitoringScheduleConfig=monitoring_schedule_config)

def is_schedule_ready(schedule_name):
    is_ready = False

    schedule = sm.describe_monitoring_schedule(MonitoringScheduleName=schedule_name)
    status = schedule['MonitoringScheduleStatus']

    if status == 'Scheduled':
        logger.info('Monitoring schedule (%s) is ready', schedule_name)
        is_ready = True
    elif status == 'Pending':
        logger.info('Monitoring schedule (%s) still creating, waiting and polling again...', schedule_name)
    else:
        raise Exception('Monitoring schedule ({}) has unexpected status: {}'.format(schedule_name, status))

    return is_ready

def create_monitoring_schedule_config(event):
    props = event['ResourceProperties']

    return {
        "ScheduleConfig": {
            "ScheduleExpression": props["ScheduleExpression"],
        },
        "MonitoringJobDefinition": {
            "BaselineConfig": {
                "ConstraintsResource": {
                    "S3Uri": props['BaselineConstraintsUri'],
                },
                "StatisticsResource": {
                    "S3Uri": props['BaselineStatisticsUri'],
                }
            },
            "MonitoringInputs": [
                {
                    "EndpointInput": {
                        "EndpointName": props["EndpointName"],
                        "LocalPath": props["InputLocalPath"],
                    }
                }
            ],
            "MonitoringOutputConfig": {
                "MonitoringOutputs": [
                    {
                        "S3Output": {
                            "S3Uri": props["OutputS3URI"],
                            "LocalPath": props["OutputLocalPath"],
                        }
                    }
                ],
            },
            "MonitoringResources": {
                "ClusterConfig": {
                    "InstanceCount": 1,
                    "InstanceType": "ml.t3.medium",
                    "VolumeSizeInGB": 50,
                }
            },
            "MonitoringAppSpecification": {
                "ImageUri": props["ImageURI"],
                "RecordPreprocessorSourceUri": props['PostAnalyticsProcessorSourceUri'],
                "PostAnalyticsProcessorSourceUri": props['PostAnalyticsProcessorSourceUri'],
            },
            "StoppingCondition": {
                "MaxRuntimeInSeconds": 300
            },
            "RoleArn": props["PassRoleArn"],
        }
    }


def delete_monitoring_schedule(schedule_name):
    logger.info('Deleting schedule: %s', schedule_name)
    try:
        sm.delete_monitoring_schedule(MonitoringScheduleName=schedule_name)
    except ClientError as e:
        if e.response['Error']['Code'] == 'ResourceNotFound':
            logger.info('Resource not found, nothing to delete')
        else:
            logger.error('Unexpected error while trying to delete monitoring schedule')
            raise e
```

# Monitor de modelo FAQs
<a name="model-monitor-faqs"></a>

Consulta lo siguiente FAQs para obtener más información sobre Amazon SageMaker Model Monitor.

**P: ¿Cómo ayudan Model Monitor y SageMaker Clarify a los clientes a monitorear el comportamiento de los modelos?**

Los clientes pueden monitorear el comportamiento del modelo en cuatro dimensiones: calidad de [los datos, calidad](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-quality.html) del [modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality.html), desviación de [sesgo y desviación](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-model-monitor-bias-drift.html) de [atribución de características](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-model-monitor-feature-attribution-drift.html) a través de Amazon SageMaker Model Monitor y SageMaker Clarify. [Model Monitor](https://aws.amazon.com/sagemaker/model-monitor/) supervisa continuamente la calidad de los modelos de aprendizaje automático de Amazon SageMaker AI en producción. Esto incluye supervisar la desviación en la calidad de los datos y las métricas de calidad del modelo, como la precisión y el RMSE. SageMaker El monitoreo de sesgos de [Clarify](https://aws.amazon.com/sagemaker/clarify/?sagemaker-data-wrangler-whats-new.sort-by=item.additionalFields.postDateTime&sagemaker-data-wrangler-whats-new.sort-order=desc) ayuda a los científicos de datos y a los ingenieros de aprendizaje automático a monitorear el sesgo en la predicción del modelo y la desviación de atribución de características.

**P: ¿Qué ocurre en segundo plano cuando el monitor de modelos de SageMaker está habilitado?**

Amazon SageMaker Model Monitor automatiza la supervisión de modelos, lo que reduce la necesidad de monitorizarlos manualmente o de crear herramientas adicionales. Para automatizar el proceso, el monitor de modelos le permite crear un conjunto de estadísticas y restricciones de referencia a partir de los datos con los que se entrenó el modelo y, a continuación, configurar una programación para supervisar las predicciones realizadas en su punto de conexión. El monitor de modelos utiliza reglas para detectar desviaciones en sus modelos y le avisa cuando se producen. Los siguientes pasos describen lo que ocurre cuando se habilita la supervisión del modelo:
+ **Supervisión del modelo habilitada**: para un punto de conexión en tiempo real, tiene que habilitar el punto de conexión para capturar datos de las solicitudes entrantes a un modelo ML implementado y las predicciones del modelo resultantes. Para un trabajo de transformación por lotes, habilite la captura de datos de las entradas y salidas de la transformación por lotes.
+ **Trabajo de procesamiento de referencia**: a continuación, cree una referencia a partir del conjunto de datos que se utilizó para entrenar el modelo. La referencia calcula las métricas y sugiere las limitaciones de las métricas. Por ejemplo, la puntuación de recuperación del modelo no debe retroceder y caer por debajo de 0,571, o la puntuación de precisión no debe caer por debajo de 1,0. Las predicciones en tiempo real o por lotes del modelo se comparan con las restricciones y se consideran infracciones si están fuera de los valores restringidos.
+ **Trabajo de supervisión**: a continuación, cree una programación de supervisión que especifique qué datos se recopilarán, con qué frecuencia se recopilarán, cómo analizarlos y qué informes se producirán.
+ **Trabajo de fusión**: esto solo se aplica si utilizas Amazon SageMaker Ground Truth. El monitor de modelos compara las predicciones que hace su modelo con las etiquetas de Ground Truth para medir la calidad del modelo. Para que esto funcione, debe etiquetar periódicamente los datos capturados por su punto de conexión o trabajo de transformación por lotes y cargarlos en Amazon S3. 

  Después de crear y cargar las etiquetas de Ground Truth, incluya la ubicación de las etiquetas como parámetro al crear el trabajo de supervisión. 

Cuando usa el monitor de modelos para supervisar un trabajo de transformación por lotes en lugar de un punto de conexión en tiempo real, en lugar de recibir solicitudes a un punto de conexión y rastrear las predicciones, el monitor de modelos supervisa las entradas y salidas de las inferencias. En una programación del monitor de modelos, el cliente proporciona el recuento y el tipo de instancias que se van a utilizar en el trabajo de procesamiento. Estos recursos permanecen reservados hasta que se elimine la programación, independientemente del estado de la ejecución actual.

**P: ¿Qué es la captura de datos, por qué es necesaria y cómo puedo habilitarla?**

Para registrar las entradas de su punto de conexión y las salidas de inferencia del modelo implementado en Amazon S3, puede habilitar una característica llamada [Captura de datos](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-capture.html). Para obtener más información sobre cómo habilitarla para un trabajo de transformación por lotes y de punto de conexión en tiempo real, consulte [Captura de datos del punto de conexión en tiempo real](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-capture-endpoint.html) y [Captura de datos del trabajo de transformación por lotes](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-capture-batch.html).

**P: ¿La activación de la captura de datos afecta al rendimiento de un punto de conexión en tiempo real?**

La captura de datos se realiza de forma asíncrona sin afectar al tráfico de producción. Después de habilitar la captura de datos, la carga de solicitud y respuesta, junto con algunos metadatos adicionales, se guarda en la ubicación de Amazon S3 especificada en `DataCaptureConfig`. Tenga en cuenta que puede haber un retraso en la propagación de los datos capturados a Amazon S3.

También puede ver los datos capturados so enumera los archivos de captura de datos almacenados en Amazon S3. El formato de la ruta de Amazon S3 es: `s3:///{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl`. La captura de datos de Amazon S3 debe realizarse en la misma región que la programación del monitor de modelos. También debe asegurarse de que los nombres de las columnas del conjunto de datos de referencia solo tengan letras minúsculas y un guión bajo (`_`) como único separador.

**P: ¿Por qué se necesita Ground Truth para la supervisión de modelos?**

Las siguientes funciones del monitor de modelos requieren las etiquetas Ground Truth:
+ La **supervisión de la calidad del modelo** compara las predicciones que hace su modelo con las etiquetas de Ground Truth para medir la calidad del modelo.
+ La **supervisión del sesgo del modelo** supervisa el sesgo en las predicciones. Una forma en que se puede introducir el sesgo en los modelos de ML implementados es cuando los datos utilizados en el entrenamiento difieren de los datos utilizados para generar las predicciones. Esto es especialmente pronunciado si los datos utilizados para el entrenamiento cambian con el tiempo (como la fluctuación de las tasas hipotecarias) y la predicción del modelo no es tan precisa a menos que se vuelva a entrenar el modelo con datos actualizados. Por ejemplo, un modelo para predecir los precios de las viviendas pueden sesgarse si las tasas hipotecarias utilizadas para entrenar el modelo difieren de las tasas hipotecarias más actuales del mundo real.

**P: En el caso de los clientes que utilizan Ground Truth para el etiquetado, ¿qué medidas puedo tomar para controlar la calidad del modelo?**

La supervisión de la calidad del modelo compara las predicciones que hace su modelo con las etiquetas de Ground Truth para medir la calidad del modelo. Para que esto funcione, debe etiquetar periódicamente los datos capturados por su punto de conexión o trabajo de transformación por lotes y cargarlos en Amazon S3. Además de las capturas, la ejecución de supervisión del sesgo del modelo también requiere datos de Ground Truth. En casos de uso reales, los datos de Ground Truth deben recopilarse y cargarse periódicamente en la ubicación designada de Amazon S3. Para cotejar las etiquetas de Ground Truth con los datos de predicción capturados, debe haber un identificador único para cada registro del conjunto de datos. Para ver la estructura de cada registro de datos de Ground Truth, consulte [Ingest Ground Truth Labels y Merge Them With Predictions](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-merge.html).

El siguiente ejemplo de código se puede utilizar para generar datos artificiales de Ground Truth para un conjunto de datos tabular.

```
import random

def ground_truth_with_id(inference_id):
    random.seed(inference_id)  # to get consistent results
    rand = random.random()
    # format required by the merge container
    return {
        "groundTruthData": {
            "data": "1" if rand < 0.7 else "0",  # randomly generate positive labels 70% of the time
            "encoding": "CSV",
        },
        "eventMetadata": {
            "eventId": str(inference_id),
        },
        "eventVersion": "0",
    }


def upload_ground_truth(upload_time):
    records = [ground_truth_with_id(i) for i in range(test_dataset_size)]
    fake_records = [json.dumps(r) for r in records]
    data_to_upload = "\n".join(fake_records)
    target_s3_uri = f"{ground_truth_upload_path}/{upload_time:%Y/%m/%d/%H/%M%S}.jsonl"
    print(f"Uploading {len(fake_records)} records to", target_s3_uri)
    S3Uploader.upload_string_as_file_body(data_to_upload, target_s3_uri)
# Generate data for the last hour
upload_ground_truth(datetime.utcnow() - timedelta(hours=1))
# Generate data once a hour
def generate_fake_ground_truth(terminate_event):
    upload_ground_truth(datetime.utcnow())
    for _ in range(0, 60):
        time.sleep(60)
        if terminate_event.is_set():
            break


ground_truth_thread = WorkerThread(do_run=generate_fake_ground_truth)
ground_truth_thread.start()
```

En el siguiente ejemplo de código se muestra cómo generar tráfico artificial para enviarlo al punto de conexión del modelo. Observe el atributo `inferenceId` utilizado anteriormente para invocar. Si está presente, se usa para unirse a los datos de Ground Truth (de lo contrario, se usa `eventId`).

```
import threading

class WorkerThread(threading.Thread):
    def __init__(self, do_run, *args, **kwargs):
        super(WorkerThread, self).__init__(*args, **kwargs)
        self.__do_run = do_run
        self.__terminate_event = threading.Event()

    def terminate(self):
        self.__terminate_event.set()

    def run(self):
        while not self.__terminate_event.is_set():
            self.__do_run(self.__terminate_event)
def invoke_endpoint(terminate_event):
    with open(test_dataset, "r") as f:
        i = 0
        for row in f:
            payload = row.rstrip("\n")
            response = sagemaker_runtime_client.invoke_endpoint(
                EndpointName=endpoint_name,
                ContentType="text/csv",
                Body=payload,
                InferenceId=str(i),  # unique ID per row
            )
            i += 1
            response["Body"].read()
            time.sleep(1)
            if terminate_event.is_set():
                break


# Keep invoking the endpoint with test data
invoke_endpoint_thread = WorkerThread(do_run=invoke_endpoint)
invoke_endpoint_thread.start()
```

Debe cargar los datos de Ground Truth a un bucket de Amazon S3 que tenga el mismo formato de ruta que los datos capturados, que tiene el siguiente formato: `s3://<bucket>/<prefix>/yyyy/mm/dd/hh`

**nota**  
La fecha de esta ruta es la fecha en que se recopiló la etiqueta de Ground Truth. No tiene que coincidir con la fecha en que se generó la inferencia.

**P: ¿Cómo pueden los clientes personalizar los programas de supervisión?**

Además de utilizar los mecanismos de supervisión integrados, puede crear sus propios programas y procedimientos de supervisión personalizados mediante scripts de preprocesamiento y postprocesamiento o mediante el uso o la creación de su propio contenedor. Es importante tener en cuenta que los scripts de preprocesamiento y postprocesamiento solo funcionan con trabajos de calidad de datos y modelos.

Amazon SageMaker AI le permite monitorear y evaluar los datos observados por los puntos finales del modelo. Para ello, debe crear una referencia con la que comparar el tráfico en tiempo real. Una vez que la referencia esté lista, establezca una programación para evaluarla y compararla continuamente con la referencia. Al crear una programación, puede proporcionar el script preprocesamiento y postprocesamiento.

En el ejemplo siguiente se muestra cómo personalizar los programas de supervisión con scripts de preprocesamiento y postprocesamiento.

```
import boto3, osfrom sagemaker import get_execution_role, Sessionfrom sagemaker.model_monitor import CronExpressionGenerator, DefaultModelMonitor
# Upload pre and postprocessor scripts
session = Session()
bucket = boto3.Session().resource("s3").Bucket(session.default_bucket())
prefix = "demo-sagemaker-model-monitor"
pre_processor_script = bucket.Object(os.path.join(prefix, "preprocessor.py")).upload_file("preprocessor.py")
post_processor_script = bucket.Object(os.path.join(prefix, "postprocessor.py")).upload_file("postprocessor.py")
# Get execution role
role = get_execution_role() # can be an empty string
# Instance type
instance_type = "instance-type"
# instance_type = "ml.m5.xlarge" # Example
# Create a monitoring schedule with pre and post-processing
my_default_monitor = DefaultModelMonitor(
    role=role,
    instance_count=1,
    instance_type=instance_type,
    volume_size_in_gb=20,
    max_runtime_in_seconds=3600,
)

s3_report_path = "s3://{}/{}".format(bucket, "reports")
monitor_schedule_name = "monitor-schedule-name"
endpoint_name = "endpoint-name"
my_default_monitor.create_monitoring_schedule(
    post_analytics_processor_script=post_processor_script,
    record_preprocessor_script=pre_processor_script,
    monitor_schedule_name=monitor_schedule_name,
    # use endpoint_input for real-time endpoint
    endpoint_input=endpoint_name,
    # or use batch_transform_input for batch transform jobs
# batch_transform_input=batch_transform_name,
    output_s3_uri=s3_report_path,
    statistics=my_default_monitor.baseline_statistics(),
    constraints=my_default_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
)
```

**P: ¿Cuáles son algunos de los escenarios o casos de uso en los que puedo utilizar un script de preprocesamiento?**

Puede utilizar scripts de preprocesamiento cuando necesite transformar las entradas del monitor de modelos. Considere los siguientes escenarios de ejemplo:

1. Script de preprocesamiento para la transformación de datos.

   Suponga que la salida de su modelo es una matriz: `[1.0, 2.1]`. El contenedor del monitor de modelos solo funciona con estructuras JSON tabulares o aplanadas, como `{“prediction0”: 1.0, “prediction1” : 2.1}`. Puede utilizar un script de preprocesamiento como el siguiente ejemplo para transformar la matriz en la estructura JSON correcta.

   ```
   def preprocess_handler(inference_record):
       input_data = inference_record.endpoint_input.data
       output_data = inference_record.endpoint_output.data.rstrip("\n")
       data = output_data + "," + input_data
       return { str(i).zfill(20) : d for i, d in enumerate(data.split(",")) }
   ```

1. Excluya determinados registros de los cálculos métricos del monitor de modelos.

   Suponga que el modelo tiene características opcionales y que utiliza `-1` para indicar que a la característica opcional le falta un valor. Si tiene un monitor de calidad de datos, es posible que desee eliminar el `-1` de la matriz de valores de entrada para que no se incluya en los cálculos de métricas del monitor. Puede utilizar un script como el siguiente para eliminar esos valores.

   ```
   def preprocess_handler(inference_record):
       input_data = inference_record.endpoint_input.data
       return {i : None if x == -1 else x for i, x in enumerate(input_data.split(","))}
   ```

1. Aplique una estrategia de muestreo personalizada.

   También puede aplicar una estrategia de muestreo personalizada en su script de preprocesamiento. Para ello, configure el contenedor propio y prediseñado del monitor de modelos para que haga caso omiso de un porcentaje de los registros de acuerdo con la frecuencia de muestreo especificada. En el siguiente ejemplo, el controlador muestrea el 10 % de los registros devolviendo el registro del 10 % de las llamadas al controlador y, en caso contrario, devuelve una lista vacía.

   ```
   import random
   
   def preprocess_handler(inference_record):
       # we set up a sampling rate of 0.1
       if random.random() > 0.1:
           # return an empty list
           return []
       input_data = inference_record.endpoint_input.data
       return {i : None if x == -1 else x for i, x in enumerate(input_data.split(","))}
   ```

1. Utilice un registro personalizado.

   Puedes registrar cualquier información que necesites de tu script en Amazon CloudWatch. Esto puede resultar útil a la hora de depurar el script de preprocesamiento en caso de que se produzca un error. El siguiente ejemplo muestra cómo puedes usar la `preprocess_handler` interfaz para iniciar sesión CloudWatch.

   ```
   def preprocess_handler(inference_record, logger):
       logger.info(f"I'm a processing record: {inference_record}")
       logger.debug(f"I'm debugging a processing record: {inference_record}")
       logger.warning(f"I'm processing record with missing value: {inference_record}")
       logger.error(f"I'm a processing record with bad value: {inference_record}")
       return inference_record
   ```

**nota**  
Cuando el script de preprocesamiento se ejecuta en datos de transformación por lotes, el tipo de entrada no siempre es el objeto `CapturedData`. En el caso de los datos CSV, el tipo es una cadena. Para los datos JSON, el tipo es un diccionario de Python.

**P: ¿Cuándo puedo aprovechar un script de postprocesamiento?**

Puede utilizar un script de postprocesamiento como extensión después de una ejecución de supervisión correcta. El siguiente es un ejemplo sencillo, pero puede realizar o llamar a cualquier función empresarial que necesite realizar tras una ejecución de supervisión satisfactoria.

```
def postprocess_handler(): 
    print("Hello from the post-processing script!")
```

**P: ¿Cuándo debo considerar la posibilidad de utilizar mi propio contenedor para la supervisión de modelos?**

SageMaker La IA proporciona un contenedor prediseñado para analizar los datos capturados en los puntos finales o realizar tareas de transformación por lotes para conjuntos de datos tabulares. Sin embargo, hay situaciones en las que puede que desee crear su propio contenedor. Considere los siguientes escenarios:
+ Tiene requisitos normativos y de conformidad que exigen utilizar únicamente los contenedores que se creen y mantengan internamente en su organización.
+ Si desea incluir algunas bibliotecas de terceros, puede colocar un `requirements.txt` archivo en un directorio local y hacer referencia a él mediante el `source_dir` parámetro del [estimador de SageMaker IA, que permite la instalación de la biblioteca en tiempo](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html#sagemaker.estimator.Estimator) de ejecución. Sin embargo, si tiene muchas bibliotecas o dependencias que aumentan el tiempo de instalación mientras ejecuta el trabajo de entrenamiento, puede que le interese utilizar su propio contenedor.
+ Su entorno no requiere conectividad a Internet (o silo), lo que impide la descarga de paquetes.
+ Desea supervisar los datos que están en formatos de datos distintos de los tabulares, como los casos de uso de NLP o CV.
+ Cuando necesite métricas de supervisión adicionales a las compatibles con el monitor de modelos.

**P: Tengo modelos de NLP y CV. ¿Cómo puedo supervisarlos para detectar la desviación de datos?**

El contenedor prediseñado de Amazon SageMaker AI admite conjuntos de datos tabulares. Si desea supervisar modelos de NLP y CV, puede utilizar su propio contenedor y aprovechar los puntos de extensión que proporciona el monitor de modelos. Para obtener más información sobre los requisitos, consulte [Utilice sus propios contenedores](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-byoc-containers.html). A continuación, se muestran más ejemplos:
+ Para obtener una explicación detallada de cómo utilizar el monitor de modelos para un caso práctico de visión artificial, consulte [Detecting and Analyzing incorrect predictions](https://aws.amazon.com/blogs/machine-learning/detecting-and-analyzing-incorrect-model-predictions-with-amazon-sagemaker-model-monitor-and-debugger/).
+ Para ver un escenario en el que se puede aprovechar Model Monitor para un caso de uso de la PNL, consulte [Detectar la desviación de datos de la PNL con Amazon SageMaker Model Monitor personalizado](https://aws.amazon.com/blogs/machine-learning/detect-nlp-data-drift-using-custom-amazon-sagemaker-model-monitor/).

**P: Deseo eliminar el punto de conexión del modelo para el que estaba activado el monitor de modelos, pero no puedo hacerlo porque el programa de supervisión sigue activo. ¿Qué tengo que hacer?**

Si desea eliminar un punto final de inferencia alojado en SageMaker AI que tenga habilitado Model Monitor, primero debe eliminar el programa de monitoreo del modelo (con la `DeleteMonitoringSchedule` [CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-monitoring-schedule.html) o la [API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteMonitoringSchedule.html)). A continuación, elimine el punto de conexión.

**P: ¿ SageMaker Model Monitor calcula las métricas y las estadísticas para las entradas?**

El monitor de modelos calcula métricas y estadísticas para la salida, no para la entrada.

**P: ¿Soporta SageMaker Model Monitor puntos finales multimodelo?**

No, el monitor de modelos admite solo puntos de conexión que alojan un solo modelo y no admite la supervisión de puntos de conexión multimodelo.

**P: ¿ SageMaker Model Monitor proporciona datos de monitoreo sobre contenedores individuales en un proceso de inferencia?**

El monitor de modelos admite la supervisión de canalizaciones de inferencia, pero la captura y el análisis de datos se realiza para toda la canalización, no para contenedores individuales en la canalización.

**P: ¿Qué puedo hacer para evitar que las solicitudes de inferencia se vean afectadas cuando se configura la captura de datos?**

Para evitar que las solicitudes de inferencia se vean afectadas, la captura de datos deja de capturar solicitudes con niveles altos de uso de disco. Se recomienda mantener la utilización del disco por debajo del 75 % para garantizar que la captura de datos siga capturando las solicitudes.

**P: ¿La captura de datos de Amazon S3 puede estar en una AWS región diferente a la región en la que se configuró el programa de monitoreo?**

La captura de datos de Amazon S3 debe realizarse en la misma región que la programación de supervisión de modelos.

**P: ¿Qué es una referencia y cómo puedo crearla? ¿Puedo crear una referencia personalizada?**

La referencia sirve para comparar las predicciones en tiempo real o por lotes del modelo. Calcula las estadísticas y las métricas junto con sus restricciones. Durante la supervisión, todos estos elementos se utilizan en conjunto para identificar las infracciones.

Para usar la solución predeterminada de Amazon SageMaker Model Monitor, puede aprovechar el [SDK de Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). En concreto, utilice el método [suggest\$1baseline](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.model_monitoring.DefaultModelMonitor.suggest_baseline) de la [ModelMonitor[ModelQualityMonitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.model_monitoring.ModelQualityMonitor)](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.model_monitoring.DefaultModelMonitor)clase para activar un trabajo de procesamiento que calcule las métricas y las restricciones de la línea base.

El resultado de un trabajo de referencia son dos archivos: `statistics.json` y `constraints.json`. El [esquema de estadísticas](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-byoc-statistics.html) y el [esquema de restricciones](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-byoc-constraints.html) contienen el esquema de los archivos respectivos. Puede revisar las restricciones generadas y modificarlas antes de utilizarlas para la supervisión. En función de su comprensión del dominio y del problema empresarial, puede hacer que una restricción sea más agresiva o flexibilizarla para controlar el número y la naturaleza de las infracciones.

**P: ¿Cuáles son las pautas para crear un conjunto de datos de referencia?**

El requisito principal para cualquier tipo de supervisión es tener un conjunto de datos de referencia que se utilice para calcular las métricas y las restricciones. Normalmente, este es el conjunto de datos de entrenamiento que utiliza el modelo, pero en algunos casos puede optar por utilizar algún otro conjunto de datos de referencia.

Los nombres de las columnas del conjunto de datos de referencia deben ser compatibles con Spark. Para mantener la máxima compatibilidad entre Spark, CSV, JSON y Parquet, se recomienda utilizar únicamente letras minúsculas y utilizar únicamente `_` como separador. Los caracteres especiales, lo que incluye `“ ”`, pueden causar problemas.

**P: ¿Cuáles son los parámetros `StartTimeOffset` y `EndTimeOffset` y cuándo se utilizan?**

Cuando se requiere Amazon SageMaker Ground Truth para monitorear trabajos como la calidad de los modelos, debes asegurarte de que un trabajo de monitoreo solo use datos para los que Ground Truth esté disponible. Los `end_time_offset` parámetros `start_time_offset` y de se [EndpointInput](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.model_monitoring.EndpointInput)pueden usar para seleccionar los datos que utiliza el trabajo de monitoreo. El trabajo de supervisión utiliza los datos del intervalo de tiempo definido por `start_time_offset` y `end_time_offset`. Estos parámetros deben especificarse en el [formato de duración ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations). A continuación se muestran algunos ejemplos:
+ Si tus resultados de Ground Truth llegan 3 días después de que se hayan realizado las predicciones, establezca `start_time_offset="-P3D"` y`end_time_offset="-P1D"`, es decir, 3 días y 1 día, respectivamente.
+ Si los resultados de Ground Truth llegan 6 horas después de las predicciones y tiene una programación por horas, establezca `start_time_offset="-PT6H"` y `end_time_offset="-PT1H"`, que es 6 horas y 1 hora.

**P: ¿Puedo ejecutar trabajos de supervisión “bajo demanda”?**

Sí, puede ejecutar trabajos de monitoreo «bajo demanda» ejecutando un trabajo de SageMaker procesamiento. Para Batch Transform, [Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html) tiene una canalización [MonitorBatchTransformStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.monitor_batch_transform_step.MonitorBatchTransformStep)que puedes usar para crear una canalización de SageMaker IA que ejecute trabajos de monitoreo bajo demanda. El repositorio de ejemplos de SageMaker IA tiene ejemplos de código para ejecutar trabajos de monitoreo de [calidad de datos](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_model_monitor/model_monitor_batch_transform/SageMaker-ModelMonitoring-Batch-Transform-Data-Quality-With-SageMaker-Pipelines-On-Demand.ipynb) y [modelar la calidad](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_model_monitor/model_monitor_batch_transform/SageMaker-ModelMonitoring-Batch-Transform-Model-Quality-With-SageMaker-Pipelines-On-Demand.ipynb) según se requiera.

**P: ¿Cómo se configura el monitor de modelos?**

Puede configurar el monitor de modelos de una de las siguientes formas:
+ **[Amazon SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/index.html)**: hay un [módulo Model Monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html) que contiene clases y funciones que ayudan a sugerir líneas de base, crear programas de monitoreo y más. Consulte los [ejemplos de cuadernos de Amazon SageMaker Model Monitor](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker_model_monitor) para ver cuadernos detallados que utilizan el SDK de Python para SageMaker IA para configurar Model Monitor.
+ **[Canalizaciones: las](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html)** [canalizaciones se integran con Model Monitor a través de Step y. QualityCheck [ClarifyCheckStep](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-clarify-check)](https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-quality-check) APIs Puede crear una canalización de SageMaker IA que contenga estos pasos y que pueda usarse para ejecutar trabajos de monitoreo bajo demanda siempre que se ejecute la canalización.
+ **[Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html)**: puede crear un programa de monitoreo de la calidad de los datos o del modelo junto con programas de sesgo y explicabilidad del modelo directamente desde la interfaz de usuario seleccionando un punto final de la lista de puntos finales del modelo implementados. Puede crear programaciones para otros tipos de supervisión si selecciona la pestaña correspondiente en la interfaz de usuario.
+ **[SageMaker Panel de control del modelo](https://docs.aws.amazon.com/sagemaker/latest/dg/model-dashboard.html)**: puede habilitar la supervisión de los puntos finales seleccionando un modelo que se haya implementado en un punto final. En la siguiente captura de pantalla de la consola de SageMaker IA, se `group1` ha seleccionado un modelo denominado en la sección **Modelos** del **panel de control de modelos**. En esta página, puede crear una programación de supervisión y editar, activar o desactivar los programas y alertas de supervisión actuales. Para obtener una guía paso a paso sobre cómo ver las alertas y las programaciones de supervisión de modelos, consulte [Ver los horarios y las alertas del monitor de modelos](https://docs.aws.amazon.com/sagemaker/latest/dg/model-dashboard-schedule.html).

![\[Captura de pantalla del Panel de modelos, que muestra la opción de crear una programación de supervisión.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/model-monitoring-faqs-screenshot.png)


**P: ¿Cómo se integra Model Monitor con SageMaker Model Dashboard**

[SageMaker Model Dashboard](https://docs.aws.amazon.com/sagemaker/latest/dg/model-dashboard.html) le brinda una supervisión unificada de todos sus modelos al proporcionar alertas automatizadas sobre las desviaciones del comportamiento esperado y la solución de problemas para inspeccionar los modelos y analizar los factores que afectan al rendimiento del modelo a lo largo del tiempo.