

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Qualidade dos dados
<a name="model-monitor-data-quality"></a>

O monitoramento de qualidade dos dados monitora automaticamente os modelos de machine learning (ML) em produção e notifica você quando surgem problemas de qualidade de dados. Os modelos de ML em produção têm que fazer predições sobre dados da vida real que não são cuidadosamente curados como a maioria dos conjuntos de dados de treinamento. Se a natureza estatística dos dados que o modelo recebe durante a produção se desviar da natureza dos dados da linha de base nos quais foi treinado, o modelo começa a perder a precisão em suas predições. O Amazon SageMaker Model Monitor usa regras para detectar desvios de dados e alerta você quando isso acontece. Para monitorar a qualidade dos dados, siga estas etapas:
+ Habilite a captura de dados. Essa ação captura a entrada e a saída de inferência de um endpoint de inferência em tempo real ou de um trabalho de transformação em lote e armazena os dados no Amazon S3. Para obter mais informações, consulte [Captura de dados](model-monitor-data-capture.md).
+ Crie uma linha de base. Nesta etapa, você executará um trabalho de linha de base que analisa um conjunto de dados de entrada fornecido por você. A linha de base calcula as restrições do esquema de linha de base para cada atributo usando [Deequ](https://github.com/awslabs/deequ), uma biblioteca de código aberto criada no Apache Spark que é usada para medir a qualidade dos dados em conjuntos de dados grandes. Para obter mais informações, consulte [Criar uma linha de base](model-monitor-create-baseline.md).
+ Defina e programe trabalhos de monitoramento de qualidade dos dados. Para obter informações específicas e exemplos de código de trabalhos de monitoramento da qualidade dos dados, consulte [Programar trabalhos de monitoramento da qualidade dos dados](model-monitor-schedule-data-monitor.md). Para obter informações gerais sobre trabalhos de monitoramento, consulte [Programar trabalhos de monitoramento](model-monitor-scheduling.md).
  + Opcionalmente, use scripts de pré-processamento e pós-processamento para transformar os dados que saem da sua análise de qualidade dos dados. Para obter mais informações, consulte [Pré-processamento e pós-processamento](model-monitor-pre-and-post-processing.md).
+ Visualize métricas de qualidade dos dados. Para obter mais informações, consulte [Esquema para estatísticas (arquivo statistics.json)](model-monitor-interpreting-statistics.md).
+ Integre o monitoramento da qualidade dos dados com a Amazon CloudWatch. Para obter mais informações, consulte [CloudWatch Métricas](model-monitor-interpreting-cloudwatch.md).
+ Interpretar os resultados de um trabalho de monitoramento. Para obter mais informações, consulte [Interpretar resultados](model-monitor-interpreting-results.md).
+ Use o SageMaker Studio para permitir o monitoramento da qualidade dos dados e visualizar os resultados se você estiver usando um endpoint em tempo real. Para obter mais informações, consulte [Visualize resultados para endpoints em tempo real no Amazon Studio SageMaker](model-monitor-interpreting-visualize-results.md).

**nota**  
O Model Monitor calcula métricas e estatísticas do modelo somente em dados tabulares. Por exemplo, um modelo de classificação de imagens que usa imagens como entrada e gera um rótulo baseado nessa imagem ainda pode ser monitorado. O Model Monitor seria capaz de calcular métricas e estatísticas para a saída, não para a entrada.

**Topics**
+ [Criar uma linha de base](model-monitor-create-baseline.md)
+ [Programar trabalhos de monitoramento da qualidade dos dados](model-monitor-schedule-data-monitor.md)
+ [Esquema para estatísticas (arquivo statistics.json)](model-monitor-interpreting-statistics.md)
+ [CloudWatch Métricas](model-monitor-interpreting-cloudwatch.md)
+ [Esquema para violações (arquivo constraint\$1violations.json)](model-monitor-interpreting-violations.md)

# Criar uma linha de base
<a name="model-monitor-create-baseline"></a>

Os cálculos da linha de base de estatísticas e restrições são necessários como um padrão em relação ao qual o desvio de dados e outros problemas de qualidade de dados podem ser detectados. O Model Monitor fornece um contêiner interno que oferece a capacidade de sugerir automaticamente as restrições para a entrada JSON simples e CSV. Esse *sagemaker-model-monitor-analyzer*contêiner também fornece uma variedade de recursos de monitoramento de modelos, incluindo validação de restrições em relação a uma linha de base e emissão de métricas da Amazon CloudWatch . Esse contêiner é baseado na versão 3.3.0 do Spark e foi criado com a versão 2.0.2 do [Deequ](https://github.com/awslabs/deequ). Todos os nomes das colunas em seu conjunto de dados de linha de base devem estar em conformidade com o Spark. Para os nomes das colunas, use somente caracteres minúsculos e `_` como o único caractere especial.

O conjunto de dados de treinamento usado para treinar o modelo geralmente é um bom conjunto de dados de linha de base. O esquema de dados do conjunto de dados de treinamento e o esquema do conjunto de dados de inferência devem ser uma correspondência exata (o número e a ordem dos atributos). Observe que as prediction/output colunas são consideradas as primeiras colunas no conjunto de dados de treinamento. No conjunto de dados de treinamento, você pode pedir à SageMaker IA que sugira um conjunto de restrições básicas e gere estatísticas descritivas para explorar os dados. Para esse exemplo, faça upload do conjunto de dados de treinamento usado para treinar o modelo pré-treinado incluído neste exemplo. Se você já armazenou o conjunto de dados de treinamento no Amazon S3, poderá apontar diretamente para ele.

**Para criar uma linha de base a partir de um conjunto de dados de treinamento** 

Quando você tiver seus dados de treinamento prontos e armazenados no Amazon S3, inicie um trabalho de processamento básico usando o SDK `DefaultModelMonitor.suggest_baseline(..)` do Amazon [Python SageMaker ](https://sagemaker.readthedocs.io/en/stable). Essa ação usa um [Contêiner pré-construído Amazon SageMaker Model Monitor](model-monitor-pre-built-container.md) que gera estatísticas de linha de base e sugere restrições de linha de base para o conjunto de dados e as grava no local `output_s3_uri` especificado.

```
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**  
Se você fornecer os feature/column nomes no conjunto de dados de treinamento como a primeira linha e definir a `header=True` opção conforme mostrado na amostra de código anterior, o SageMaker AI usará o nome do recurso no arquivo de restrições e estatísticas.

As estatísticas de linha de base para o conjunto de dados estão contidas no arquivo statistics.json e as restrições de linha de base sugeridas estão contidas no arquivo constraints.json no local especificado com `output_s3_uri`.

Arquivos de saída para estatísticas e restrições do conjunto de dados tabular


| Nome do arquivo | Description | 
| --- | --- | 
| statistics.json |  Espera-se que este arquivo tenha estatísticas colunares para cada atributo no conjunto de dados que é analisado. Para obter mais informações sobre o esquema desse arquivo, consulte [Esquema para estatísticas (arquivo statistics.json)](model-monitor-byoc-statistics.md).  | 
| constraints.json |  Espera-se que este arquivo tenha as restrições sobre os atributos observados. Para obter mais informações sobre o esquema desse arquivo, consulte [Esquema para restrições (arquivo constraints.json)](model-monitor-byoc-constraints.md).  | 

O [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) fornece funções de conveniência descritas para gerar as estatísticas e restrições básicas. No entanto, se você quiser chamar o trabalho de processamento diretamente para essa finalidade, é necessário definir o mapa `Environment` como mostrado no seguinte exemplo:

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

# Programar trabalhos de monitoramento da qualidade dos dados
<a name="model-monitor-schedule-data-monitor"></a>

Depois de criar sua linha de base, você pode chamar o método `create_monitoring_schedule()` da sua instância de classe `DefaultModelMonitor` para programar um monitor horário de qualidade dos modelo. As seções a seguir mostram como criar um monitor de qualidade dos modelo para um modelo implantado em um endpoint em tempo real, bem como para um trabalho de transformação de lotes.

**Importante**  
Você pode especificar uma entrada de transformação em lote ou uma entrada de endpoint, mas não ambas, ao criar sua programação de monitoramento.

## Monitoramento da qualidade dos dados para modelos implantados em endpoints em tempo real
<a name="model-monitor-data-quality-rt"></a>

Para programar um monitor de qualidade dos dados para um endpoint em tempo real, transmita sua instância `EndpointInput` para o argumento `endpoint_input` de sua instância `DefaultModelMonitor`, conforme mostrado no seguinte exemplo 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",
   )
)
```

## Monitoramento da qualidade dos dados para trabalhos de transformação de lotes
<a name="model-monitor-data-quality-bt"></a>

Para programar um monitor de qualidade dos dados para um trabalho de transformação de lotes, transmita sua instância `BatchTransformInput` para o argumento `batch_transform_input` de sua instância `DefaultModelMonitor`, conforme mostrado no seguinte exemplo 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 estatísticas (arquivo statistics.json)
<a name="model-monitor-interpreting-statistics"></a>

O contêiner pré-construído do Amazon SageMaker Model Monitor calcula por estatística. column/feature As estatísticas são calculadas para o conjunto de dados da linha de base e também para o conjunto de dados atual que está sendo analisado.

```
{
    "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
        }
    ]
}
```

Observe o seguinte:
+ Os contêineres pré-criados calculam o [esboço KLL](https://datasketches.apache.org/docs/KLL/KLLSketch.html), que é um esboço de quantias compactas.
+ Por padrão, materializamos a distribuição em 10 buckets. Isso não é configurável no momento.

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

Você pode usar o contêiner incorporado Amazon SageMaker Model Monitor para CloudWatch métricas. Quando a `emit_metrics` opção está `Enabled` no arquivo de restrições da linha de base, o SageMaker AI emite essas métricas para cada uma feature/column observada no conjunto de dados no seguinte namespace:
+ `For real-time endpoints: /aws/sagemaker/Endpoints/data-metric` namespace com dimensões `EndpointName` e `ScheduleName`.
+ `For batch transform jobs: /aws/sagemaker/ModelMonitoring/data-metric` namespace com dimensão `MonitoringSchedule`.

Para campos numéricos, o contêiner integrado emite as seguintes métricas: CloudWatch
+ Métrica: Max → consulta para `MetricName: feature_data_{feature_name}, Stat: Max`
+ Métrica: Min → consulta para `MetricName: feature_data_{feature_name}, Stat: Min`
+ Métrica: Sum → consulta para `MetricName: feature_data_{feature_name}, Stat: Sum`
+ Métrica: SampleCount → consulta para `MetricName: feature_data_{feature_name}, Stat: SampleCount`
+ Métrica: Average → consulta para `MetricName: feature_data_{feature_name}, Stat: Average`

Para campos numéricos e de string, o contêiner integrado emite as seguintes métricas: CloudWatch 
+ Métrica: Completeness → consulta para `MetricName: feature_non_null_{feature_name}, Stat: Sum`
+ Métrica: Baseline Drift → consulta para `MetricName: feature_baseline_drift_{feature_name}, Stat: Sum`

# Esquema para violações (arquivo constraint\$1violations.json)
<a name="model-monitor-interpreting-violations"></a>

O arquivo de violações é gerado como a saída de um `MonitoringExecution`, que lista os resultados da avaliação das restrições (especificadas no arquivo constraints.json) em relação ao conjunto de dados atual que foi analisado. O contêiner pré-construído Amazon SageMaker Model Monitor fornece as seguintes verificações de violação.

```
{
    "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 violações monitoradas 


| Tipo de verificação de violação | Description  | 
| --- | --- | 
| data\$1type\$1check | Se os tipos de dados na execução atual não forem os mesmos que no conjunto de dados da linha de base, essa violação será sinalizada. Durante a etapa da linha de base, as restrições geradas sugerem o tipo de dados inferidos para cada coluna. O parâmetro `monitoring_config.datatype_check_threshold` pode ser regulado para ajustar o limite quando for sinalizado como uma violação.  | 
| completeness\$1check | Se a completude (% de itens não nulos) observada na execução atual exceder o limite especificado no limite de completude especificado por atributo, essa violação será sinalizada. Durante a etapa da linha de base, as restrições geradas sugerem um valor de completude.   | 
| baseline\$1drift\$1check | Se a distância de distribuição calculada entre os conjuntos de dados atual e da linha de base for maior do que o limite especificado em `monitoring_config.comparison_threshold`, essa violação será sinalizada.  | 
| missing\$1column\$1check | Se o número de colunas no conjunto de dados atual for menor que o número no conjunto de dados da linha de base, essa violação será sinalizada.  | 
| extra\$1column\$1check | Se o número de colunas no conjunto de dados atual for maior que o número na linha de base, essa violação será sinalizada.  | 
| categorical\$1values\$1check | Se houver mais valores desconhecidos no conjunto de dados atual do que no conjunto de dados da linha de base, essa violação será sinalizada. Esse valor é ditado pelo limite em `monitoring_config.domain_content_threshold`.  | 