

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á.

# Desvio de atribuição de atributos para modelos em produção
<a name="clarify-model-monitor-feature-attribution-drift"></a>

Um desvio na distribuição de dados dinâmicos para modelos em produção pode resultar em um desvio correspondente nos valores de atribuição do atributo, assim como pode causar uma oscilação no desvio ao monitorar as métricas de desvio. O monitoramento de atribuição de recursos do Amazon SageMaker Clarify ajuda cientistas de dados e engenheiros de ML a monitorar regularmente as previsões de variações na atribuição de recursos. À medida que o modelo é monitorado, os clientes podem visualizar relatórios e gráficos exportáveis detalhando as atribuições de recursos no SageMaker Studio e configurar alertas na Amazon CloudWatch para receber notificações se for detectado que os valores de atribuição ultrapassam um determinado limite. 

Para ilustrar isso com uma situação específica, considere um cenário hipotético de admissões a faculdades. Suponha que observemos os seguintes valores (agregados) de atribuição de valores de atributos nos dados de treinamento e nos dados dinâmicos:

Cenário hipotético de admissão à faculdade


| Recurso | Atribuição nos dados de treinamento | Atribuição em dados dinâmicos | 
| --- | --- | --- | 
| Pontuação SAT | 0,70 | 0.10 | 
| GPA | 0.50 | 0.20 | 
| Classificação da classe | 0,05 | 0,70 | 

A mudança dos dados de treinamento para os dados dinâmicos parece significativa. A classificação de atributos foi completamente revertida. Semelhante ao desvio de polarização, os desvios de atribuição de atributos podem ser causados por uma mudança na distribuição de dados dinâmicos e justificam uma análise mais detalhada do comportamento do modelo nos dados dinâmicos. Novamente, a primeira etapa nesses cenários é disparar um alarme de ocorrência de desvio.

Podemos detectar o desvio comparando como a classificação dos atributos individuais mudou dos dados de treinamento para os dados dinâmicos. Além de sermos sensíveis às mudanças na ordem de classificação, também queremos ser sensíveis à pontuação bruta de atribuição dos atributos. Por exemplo, considerando dois atributos que se enquadram na classificação pelo mesmo número de posições, do treinamento aos dados dinâmicos, queremos ser mais sensíveis ao atributo que teve uma pontuação de atribuição mais alta nos dados de treinamento. Com essas propriedades em mente, usamos a pontuação de ganho cumulativo com desconto normalizado (NDCG) para comparar as classificações de atribuições de atributos de treinamento e os dados dinâmicos.

Especificamente, suponha que temos o seguinte:
+ *F= [f1, ..., fm]* é a lista de atributos classificados com relação às pontuações de atribuição nos dados de treinamento, onde *m* é o número total de atributos. Por exemplo, no nosso caso, *F* = [Pontuação SAT, GPA, Classificação].
+ *a(f)* é uma função que retorna a pontuação de atribuição do atributo nos dados de treinamento, dado um atributo *f*. Por exemplo, *a*(Pontuação SAT) = 0,70.
+ *F′= [f′1, ..., f′m]* é a lista de atributos classificados com relação às pontuações de atribuição nos dados dinâmicos. Por exemplo, *F*′ = [Classificação, GPA, Pontuação SAT].

Então, podemos calcular o NDCG como:

        NDCG = DCG/iDCG

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

A quantidade DCG mede se os atributos com alta atribuição nos dados de treinamento também têm uma classificação mais alta na atribuição de atributos calculada nos dados dinâmicos. A quantidade iDCG mede a *pontuação ideal* e é apenas um fator de normalização para garantir que a quantidade final resida na faixa [0, 1], com 1 sendo o melhor valor possível. Um valor NDCG de 1 significa que a classificação de atribuição do atributo nos dados dinâmicos é a mesma que a dos dados de treinamento. Neste exemplo específico, como a classificação mudou bastante, o valor do NDCG é 0,69.

No SageMaker Clarify, se o valor do NDCG estiver abaixo de 0,90, emitimos automaticamente um alerta.

## Caderno de exemplo do Model Monitor
<a name="clarify-model-monitor-sample-notebooks-feature-drift"></a>

SageMaker O Clarify fornece o seguinte exemplo de caderno que mostra como capturar dados de inferência para um endpoint em tempo real, criar uma linha de base para monitorar a evolução do viés e inspecionar os resultados: 
+ [Monitorando o desvio de viés e o desvio de atribuição de recursos Amazon Clarify SageMaker — Use o Amazon](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/fairness_and_explainability/SageMaker-Model-Monitor-Fairness-and-Explainability.html) SageMaker Model Monitor para monitorar o desvio de viés e o desvio de atribuição de recursos ao longo do tempo.

Este notebook foi verificado para ser executado somente no SageMaker Studio. Se você precisar de instruções sobre como abrir um notebook no SageMaker Studio, consulte[Crie ou abra um notebook Amazon SageMaker Studio Classic](notebooks-create-open.md). Caso seja solicitado que você escolha um kernel, escolha **Python 3 (Ciência de dados)**. Os tópicos a seguir contêm os destaques das duas últimas etapas e contêm exemplos de código do caderno de exemplo. 

**Topics**
+ [Caderno de exemplo do Model Monitor](#clarify-model-monitor-sample-notebooks-feature-drift)
+ [Criar uma linha de base do SHAP para modelos em produção](clarify-model-monitor-shap-baseline.md)
+ [Violações do desvio de atribuição de atributos do modelo](clarify-model-monitor-model-attribution-drift-violations.md)
+ [Parâmetros para monitorar o desvio de atribuição](clarify-config-json-monitor-model-explainability-parameters.md)
+ [Programar trabalhos de monitoramento de desvio de atribuição de atributos](clarify-model-monitor-feature-attribute-drift-schedule.md)
+ [Inspecionar relatórios de desvio de atribuição de atributos em modelos de produção](clarify-feature-attribute-drift-report.md)
+ [CloudWatch Métricas para análise de desvio de recursos](clarify-feature-attribute-drift-cw.md)

# Criar uma linha de base do SHAP para modelos em produção
<a name="clarify-model-monitor-shap-baseline"></a>

As explicações são tipicamente contrastivas, ou seja, elas explicam os desvios de uma linha de base. Para obter informações sobre linhas de base de explicabilidade, consulte [Linhas de base do SHAP para explicabilidade](clarify-feature-attribute-shap-baselines.md).

Além de fornecer explicações para inferências por instância, o SageMaker Clarify também oferece suporte à explicação global para modelos de ML que ajudam você a entender o comportamento de um modelo como um todo em termos de seus recursos. SageMaker O Clarify gera uma explicação global de um modelo de ML agregando os valores de Shapley em várias instâncias. SageMaker O Clarify oferece suporte às seguintes formas diferentes de agregação, que você pode usar para definir linhas de base:
+ `mean_abs`: Média dos valores SHAP absolutos para todas as instâncias.
+ `median`: Média dos valores SHAP para todas as instâncias.
+ `mean_sq`: Média dos valores SHAP quadráticos para todas as instâncias.

Depois de configurar sua aplicação para capturar dados de inferência em tempo real ou de transformação de lotes, a primeira tarefa para monitorar o desvio da atribuição de atributos é criar uma linha de base para comparação. Isso envolve configurar as entradas de dados, quais grupos são confidenciais, como as predições são capturadas e o modelo e suas métricas de desvio pós-treinamento. Em seguida, você precisa iniciar o trabalho de linha de base. O monitor de explicabilidade do modelo pode explicar as predições de um modelo implantado que está produzindo inferências e detectar desvios na atribuição de atributos regularmente.

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

Neste exemplo, o trabalho de linha de base de explicabilidade compartilha o conjunto de dados de teste com o trabalho de linha de base de desvio, então ele usa o mesmo `DataConfig` e a única diferença é o URI de saída do trabalho.

```
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,
)
```

Atualmente, o SageMaker explicador do Clarify oferece uma implementação escalável e eficiente do SHAP, portanto, a configuração de explicabilidade inclui o seguinte: SHAPConfig
+ `baseline`: Uma lista de linhas (pelo menos uma) ou URI do objeto S3 a ser usada como conjunto de dados de linha de base no algoritmo SHAP do Kernel. O formato deve ser igual ao formato do conjunto de dados. Cada linha deve conter somente o recurso columns/values e omitir a coluna/valores do rótulo.
+ `num_samples`: Número de amostras a serem usadas no algoritmo SHAP do Kernel. Esse número determina o tamanho do conjunto de dados sintético gerado para calcular os valores SHAP.
+ agg\$1method: Método de agregação para valores globais de SHAP. Estes são valores válidos:
  + `mean_abs`: Média dos valores SHAP absolutos para todas as instâncias.
  + `median`: Média dos valores SHAP para todas as instâncias.
  + `mean_sq`: Média dos valores SHAP quadráticos para todas as instâncias.
+ `use_logit`: Indicador de se a função logit deve ser aplicada às predições de modelo. O padrão é `False`. Se o `use_logit` for `True`, os valores SHAP terão unidades logarítmicas de probabilidades.
+ `save_local_shap_values` (bool): Indicador de se os valores SHAP locais devem ser salvos no local de saída. O padrão é `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 um trabalho de linha de base. A mesma `model_config` é necessária porque o trabalho de definição de base de explicabilidade precisa criar um endpoint de sombra para obter predições para o conjunto de dados sintéticos gerado.

```
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}")
```

# Violações do desvio de atribuição de atributos do modelo
<a name="clarify-model-monitor-model-attribution-drift-violations"></a>

Os trabalhos de desvio de atribuição de atributos avaliam as restrições da linha de base fornecidas pela [configuração da linha de base](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html#sagemaker-CreateModelExplainabilityJobDefinition-request-ModelExplainabilityBaselineConfig) em relação aos resultados da análise da `MonitoringExecution` atual. Se forem detectadas violações, o trabalho as listará no arquivo *constraint\$1violations.json* no local de saída de execução e marcará o status da execução como [Interpretar resultados](model-monitor-interpreting-results.md).

Aqui está o esquema do arquivo de violações do desvio de atribuição de atributos.
+ `label`: O nome do rótulo, `label_headers` da configuração da análise do trabalho ou um espaço reservado, como `"label0"`.
+ `metric_name`: O nome do método de análise de explicabilidade. No momento, somente `shap` é compatível.
+ `constraint_check_type`: O tipo de violação monitorada. No momento, somente `feature_attribution_drift_check` é compatível.
+ `description`: Uma mensagem descritiva para explicar a violação.

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

Para cada rótulo na seção `explanations`, os trabalhos de monitoramento calculam a [pontuação nDCG](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ndcg_score.html) de seus valores globais de SHAP no arquivo de restrições da linha de base e no arquivo de resultados da análise do trabalho (*analysis.json*). Se a pontuação for menor que 0,9, uma violação será registrada. O valor global combinado do SHAP é avaliado, portanto, não há campos `“feature”` na entrada da violação. A saída a seguir fornece um exemplo de várias violações 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 monitorar o desvio de atribuição
<a name="clarify-config-json-monitor-model-explainability-parameters"></a>

O monitor de SageMaker explicabilidade Amazon Clarify reutiliza um subconjunto dos parâmetros usados na configuração de análise do. [Arquivos de configuração de análise](clarify-processing-job-configure-analysis.md) Os parâmetros a seguir devem ser fornecidos em um arquivo JSON e o caminho deve ser fornecido no 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"`: (Opcional) Versão do esquema do arquivo de configuração. Se não for fornecida, a versão compatível mais recente será usada.
+ `"headers"`: (Opcional) Uma lista de nomes de atributos no conjunto de dados. A análise de explicabilidade não exige rótulos. 
+ `"methods"`: Uma lista de métodos e seus parâmetros para as análises e relatórios. Se alguma seção for omitida, ela não será computada.
  + `"shap"`: (Opcional) Seção sobre o cálculo do valor SHAP.
    + `"baseline"`: (Opcional) Uma lista de linhas (pelo menos uma) ou um URI de objeto do Amazon Simple Storage Service Amazon S3. Para ser usado como conjunto de dados de linha de base (também conhecido como conjunto de dados em segundo plano) no algoritmo SHAP do Kernel. O formato deve ser igual ao formato do conjunto de dados. Cada linha deve conter somente as colunas (ou valores) dos atributos. Antes de enviar cada linha para o modelo, omita qualquer coluna que deva ser excluída.
    + `"num_samples"`: Número de amostras a serem usadas no algoritmo SHAP do Kernel. Esse número determina o tamanho do conjunto de dados sintético gerado para calcular os valores SHAP. Se não for fornecido, um trabalho do SageMaker Clarify escolherá o valor com base em uma contagem de recursos.
    + `"agg_method"`: Método de agregação para valores globais de SHAP. Os valores válidos são os seguintes:
      + `"mean_abs"`: Média dos valores SHAP absolutos para todas as instâncias.
      + `"median"`: Média dos valores SHAP para todas as instâncias.
      + `"mean_sq"`: Média dos valores SHAP quadráticos para todas as instâncias.
    + `"use_logit"`: (Opcional) Valor boleano para indicar se a função logit deve ser aplicada às predições de modelo. Se o `"use_logit"` for `true`, então os valores SHAP têm unidades logarítmicas de probabilidades. O valor padrão é `false`. 
    + `"save_local_shap_values"`: (Opcional) Valor boleano para indicar se os valores SHAP locais devem ser salvos no local de saída. Use `true` para salvá-los. Use `false` para não salvá-los. O padrão é `false`.
+ `"predictor"`: (Opcional para endpoint em tempo real, necessária para transformação de lotes) Seção sobre parâmetros do modelo, necessária se as seções `"shap"` e `"post_training_bias"` estiverem presentes.
  + `"model_name"`: Nome do modelo criado pela `CreateModel` API, com o modo de contêiner como `SingleModel`.
  + `"instance_type"`: Tipo de instância para o endpoint de sombra.
  + `"initial_instance_count"`: Contagem de instância para o endpoint de sombra.
  + `"content_type"`: (Opcional) O formato de entrada do modelo a ser usado para obter inferências com o endpoint de sombra. Os valores válidos são `"text/csv"` para CSV, `"application/jsonlines"` para linhas JSON, `application/x-parquet` para Apache Parquet e `application/x-image` para permitir a explicabilidade do Computer Vision. O valor padrão é o mesmo do formato `dataset_type`.
  + `"accept_type"`: (Opcional) O formato de *saída* do modelo a ser usado para obter inferências com o endpoint de sombra. Os valores válidos são `"text/csv"` para CSV, `"application/jsonlines"` para linhas JSON. Se omitido, o SageMaker Clarify usa o tipo de dados de resposta dos dados capturados.
  + `"content_template"`: (Opcional) Uma string de modelo usada para construir a entrada do modelo a partir de instâncias do conjunto de dados. Usado apenas quando o `"content_type"` for `"application/jsonlines"`. O modelo deve ter apenas um espaço reservado, `$features`, que é substituído pela lista de atributos em runtime. Por exemplo, em um dado `"content_template":"{\"myfeatures\":$features}"`, se uma instância (sem rótulo) for `1,2,3`, a entrada do modelo se tornará linhas JSON `'{"myfeatures":[1,2,3]}'`.
  + `"label_headers"`: (Opcional) Uma lista de valores que o `"label"` assumem no conjunto de dados. Associa as pontuações retornadas pelo endpoint do modelo ou pelo trabalho de transformação de lotes aos valores de rótulo correspondentes. Se for fornecido, o relatório de análise usará os cabeçalhos em vez de espaços reservados, como `“label0”`.

Os outros parâmetros devem ser fornecidos em `EndpointInput` (para endpoints em tempo real) ou `BatchTransformInput` (para trabalhos de transformação de lotes) da API de [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput).
+ `FeaturesAttribute`: Esse parâmetro é obrigatório se o formato de dados de entrada do endpoint ou do trabalho em lotes for `"application/jsonlines"`. Ele é JMESPath usado para localizar as colunas de recursos se o formato do conjunto de dados for JSON Lines.
+ `ProbabilityAttribute`— Índice ou JMESPath localização na saída do modelo para probabilidades. Se a saída do modelo for linhas JSON com uma lista de rótulos e probabilidades, por exemplo, o rótulo que corresponde à probabilidade máxima será selecionado para cálculos de desvio.

## Exemplos de arquivos de configuração JSON para conjuntos de dados CSV e linhas JSON
<a name="clarify-config-json-monitor-model-explainability-parameters-examples"></a>

Veja alguns exemplos dos arquivos JSON usados para configurar conjuntos de dados CSV e linhas JSON para monitorá-los quanto ao desvio de atribuição de atributos.

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

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

Considere um conjunto de dados que tenha três colunas de atributos numéricos, como no exemplo a seguir.

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

Suponha que a saída do modelo tenha duas colunas, onde a primeira é o rótulo previsto e a segunda é a probabilidade, como no exemplo a seguir.

```
1, 0.5385257417814224
```

O arquivo de exemplo de configuração JSON a seguir mostra como esse conjunto de dados CSV pode ser configurado.

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

O rótulo previsto é selecionado pelo parâmetro `"ProbabilityAttribute"`. A numeração baseada em zero é usada, então 1 indica a segunda coluna da saída do modelo.

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

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

Considere um conjunto de dados que tenha quatro colunas de atributos e uma coluna de rótulo, em que o primeiro atributo e o rótulo sejam binários, como no exemplo a seguir.

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

A entrada do modelo é igual ao formato do conjunto de dados, e a saída do modelo são linhas JSON, como no exemplo a seguir.

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

No exemplo a seguir, o arquivo de configuração JSON mostra como esse conjunto de dados de linhas JSON pode ser configurado.

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

Então, o valor do parâmetro `"features"` em `EndpointInput` (para endpoints em tempo real) ou `BatchTransformInput` (para trabalhos de transformação de lotes) é usado para localizar os atributos no conjunto de dados, e o valor do parâmetro `"probability"` seleciona o valor de probabilidade na saída do modelo.

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

# Programar trabalhos de monitoramento de desvio de atribuição de atributos
<a name="clarify-model-monitor-feature-attribute-drift-schedule"></a>

Depois de criar sua linha de base SHAP, você pode chamar o método `create_monitoring_schedule()` da sua instância de classe `ModelExplainabilityMonitor` para programar um monitor horário de explicabilidade do modelo. As seções a seguir mostram como criar um monitor de explicabilidade do 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.

Se um trabalho de linha de base foi apresentado, o monitor seleciona automaticamente a configuração de análise do trabalho de linha de base. No entanto, se você pular a etapa de definição de linha de base ou se o conjunto de dados de captura tiver uma natureza diferente da do conjunto de dados de treinamento, você precisará fornecer a configuração da análise. A `ModelConfig` é exigida pela `ExplainabilityAnalysisConfig` pelo mesmo motivo que é exigida para o trabalho de linha de base. Observe que somente atributos são necessários para calcular a atribuição de atributos, portanto, você deve excluir o rótulo do Ground Truth.

## Monitoramento do desvio de atribuição de atributos para modelos implantados em endpoints em tempo real
<a name="model-monitor-explain-quality-rt"></a>

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

## Monitoramento de desvio de atribuição de atributos para trabalhos de transformação de lotes
<a name="model-monitor-explain-quality-bt"></a>

Para programar um monitor de explicabilidade do modelo para um trabalho de transformação de lotes, transmita sua instância `BatchTransformInput` para o argumento `batch_transform_input` de sua instância `ModelExplainabilityMonitor`, conforme mostrado no seguinte exemplo 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",
   )
)
```

# Inspecionar relatórios de desvio de atribuição de atributos em modelos de produção
<a name="clarify-feature-attribute-drift-report"></a>

Depois que a programação configurada for iniciada por padrão, você precisará aguardar o início da primeira execução e, em seguida, interromper a programação para evitar cobranças.

Para inspecionar os relatórios, siga os seguintes códigos:

```
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.")
```

 Se houver quaisquer violações em comparação com a linha de base, elas serão listadas aqui:

```
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)
```

Se seu modelo for implantado em um endpoint em tempo real, você poderá ver visualizações no SageMaker Studio dos resultados e CloudWatch métricas da análise escolhendo a guia **Endpoints e clicando duas vezes no endpoint**.

# CloudWatch Métricas para análise de desvio de recursos
<a name="clarify-feature-attribute-drift-cw"></a>

Este guia mostra CloudWatch métricas e suas propriedades que você pode usar para análise de desvio de atributos de recursos no SageMaker Clarify. Os trabalhos de monitoramento de desvio de atributos de atributos calculam e publicam dois tipos de métricas:
+ O valor global do SHAP de cada atributo.
**nota**  
O nome dessa métrica acrescenta o nome do atributo fornecido pela configuração da análise de trabalhos para `feature_`. Por exemplo, `feature_X` é o valor global do SHAP para o atributo `X`.
+ O `ExpectedValue` da métrica.

Essas métricas são publicadas no seguinte CloudWatch namespace:
+ Para endpoints em tempo real: `aws/sagemaker/Endpoints/explainability-metrics`
+ Criar trabalhos de transformação de lotes: `aws/sagemaker/ModelMonitoring/explainability-metrics`

Cada métrica tem as seguintes propriedades:
+ `Endpoint`: o nome do endpoint monitorado, se aplicável.
+ `MonitoringSchedule`: o nome da programação para o trabalho de monitoramento. 
+ `ExplainabilityMethod`: o método usado para calcular os valores de Shapley. Selecione `KernelShap`.
+ `Label`: o nome fornecido pela configuração `label_headers` da análise de trabalhos ou um espaço reservado como `label0`.
+ `ValueType`: o tipo do valor retornado pela métrica. Escolha `GlobalShapValues` ou `ExpectedValue`.

Para impedir que os trabalhos de monitoramento publiquem métricas, defina `publish_cloudwatch_metrics` como `Disabled` no mapa `Environment` da definição de [trabalhos de explicabilidade de modelo](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html).