

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.

# 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*.