

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 프로덕션 환경의 모델에 대한 특성 어트리뷰션 드리프트
<a name="clarify-model-monitor-feature-attribution-drift"></a>

프로덕션 중인 모델의 라이브 데이터 분포에서 드리프트가 발생하면, 편향 지표를 모니터링할 때 편향 드리프트가 일어날 수 있는 것과 마찬가지로, 특징 속성 값에도 그에 따른 드리프트가 발생할 수 있습니다. Amazon SageMaker Clarify 특징 속성 모니터링은 데이터 사이언티스트와 ML 엔지니어가 특징 속성의 편향을 정기적으로 모니터링할 수 있도록 도와줍니다. 모델이 모니터링되는 동안, 고객은 SageMaker Studio에서 특징 속성을 자세히 설명하는 내보내기 가능한 보고서와 그래프를 확인할 수 있고, 속성 값이 특정 임계값을 넘어 드리프트하는 것으로 감지되면 알림을 받아보도록 Amazon CloudWatch에서 경보를 구성할 수 있습니다.

구체적인 상황에 대입하여 이를 살펴보기 위해, 대학 입시를 위한 가상의 시나리오를 생각해 보겠습니다. 해당 훈련 데이터와 라이브 데이터에서 다음과 같은 (집계된) 특징 속성 값을 관찰했다고 가정해 보겠습니다.

대학 입시 가상 시나리오


| 기능 | 훈련 데이터의 속성 | 라이브 데이터의 속성 | 
| --- | --- | --- | 
| SAT 점수 | 0.70 | 0.10 | 
| 평점평균(GPA) | 0.50 | 0.20 | 
| 학급 석차 | 0.05 | 0.70 | 

훈련 데이터에서 라이브 데이터로의 변동 폭이 크게 나타났습니다. 특징 순위가 완전히 뒤바뀌었습니다. 편향 드리프트와 마찬가지로, 특징 속성 드리프트가 발생하는 것은 라이브 데이터 분포의 변화가 원인일 수 있으므로 라이브 데이터 상에서 모델의 동작을 자세히 살펴볼 필요가 있습니다. 앞서와 마찬가지로, 이러한 시나리오에서 먼저 수행할 일은 드리프트가 발생했다는 경보가 울리게 하는 것입니다.

훈련 데이터에서 라이브 데이터로 넘어갈 때 개별 특징의 순위가 어떻게 변하는지 비교하는 방법으로 드리프트를 감지할 수 있습니다. 순위 순서의 변화를 민감하게 살펴보는 것 외에도, 특징의 원시 속성 점수에도 민감하게 주의를 기울여야 합니다. 예를 들어, 두 종류의 특징이 훈련 데이터에서 라이브 데이터로 넘어갈 때 각각의 순위가 동일한 등수만큼 떨어진 경우라면, 훈련 데이터상에서 속성 점수가 더 높게 나타난 특징을 더 민감하게 살펴볼 필요가 있습니다. 이러한 특성을 염두에 둔 채, 정규화된 할인 누적 이득(NDCG) 점수를 이용하여 훈련 데이터와 라이브 데이터의 특징 속성 순위를 비교해보도록 하겠습니다.

구체적으로 다음과 같은 내용을 가정해봅시다.
+ *F=[f1,...,fm]*는 훈련 데이터에서 각자의 속성 점수를 기준으로 정렬된 특징의 목록입니다.여기서 *m*은 특징의 총 개수입니다. 예를 들어, 이 사나리오에서 *F*=[SAT 점수, GPA, 학급 석차]입니다.
+ *a(f)*는 특징 *f*가 주어졌을 때 훈련 데이터에 대한 특징 속성 점수를 반환하는 함수입니다. 예컨대, *a*(SAT 점수) = 0.70입니다.
+ *F′=[f′1,...,f′m]*는 라이브 데이터에서 각자의 속성 점수를 기준으로 정렬된 특징의 목록입니다. 예컨대, *F*′=[학급 석차, GPA, SAT 점수]입니다.

이제 NDCG를 다음과 같이 계산할 수 있습니다.

        NDCG=DCG/iDCG

여기서 DCG와 iDCG는 각각 다음과 같습니다.
+ DCG = ∑1m*a*(*f'i*)/log2​(*i*\$11)
+ iDCG = ∑1m*a*(*fi*)/log2​(*i*\$11)

수량 DCG는 훈련 데이터상에서 고순위 속성인 특징이 라이브 데이터에서 특징 속성을 계산했을 때도 고순위에 속하는지 여부를 측정합니다. 수량 iDCG는 이상적인 점수를 측정하며, 이는 단순히 최종 수량이 항상 [0, 1] 범위 안에 들어가도록 만들기 위한 정규화 인수에 불과합니다.여기서 1은 가능한 최상의 값을 의미합니다.** NDCG 값이 1이라면 라이브 데이터의 특징 속성 순위가 훈련 데이터의 특징 속성 순위와 동일하다는 뜻입니다. 이 예제에서는 순위가 크게 바뀌었기 때문에, NDCG 값은 0.69가 되었습니다.

SageMaker Clarify에서는 NDCG 값이 0.90 미만이면 자동으로 경보를 발생시킵니다.

## 모델 모니터 예제 노트북
<a name="clarify-model-monitor-sample-notebooks-feature-drift"></a>

SageMaker Clarify는 실시간 엔드포인트에 대한 추론 데이터를 캡처하고, 변화하는 편향을 모니터링하기 위한 기준을 만들고, 결과를 검사하는 방법을 보여주는 다음과 같은 예제 노트북을 제공합니다.
+ [Monitoring bias drift and feature attribution drift Amazon SageMaker Clarify](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_model_monitor/fairness_and_explainability/SageMaker-Model-Monitor-Fairness-and-Explainability.html) - Amazon SageMaker Model Monitor를 사용하여 시간 경과에 따른 바이어스 드리프트 및 특징 속성 드리프트를 모니터링합니다.

이 노트북은 SageMaker Studio에서만 실행이 검증되었습니다. SageMaker Studio에서 노트북을 여는 방법에 대한 지침이 필요한 경우, [Amazon SageMaker Studio Classic 노트북 만들기 또는 열기](notebooks-create-open.md)을 참조하세요. 커널을 선택하라는 메시지가 표시되면, **Python 3 (Data Science)**를 선택합니다. 다음 주제들에는 마지막 두 단계의 주요 내용과 예제 노트북에서 보았던 코드 예제가 포함되어 있습니다.

**Topics**
+ [모델 모니터 예제 노트북](#clarify-model-monitor-sample-notebooks-feature-drift)
+ [프로덕션 중인 모델을 위한 SHAP 기준 생성](clarify-model-monitor-shap-baseline.md)
+ [모델 특징 속성 드리프트 위반](clarify-model-monitor-model-attribution-drift-violations.md)
+ [어트리뷰션 드리프트를 모니터링하는 파라미터](clarify-config-json-monitor-model-explainability-parameters.md)
+ [특징 속성 드리프트 모니터링 작업 예약](clarify-model-monitor-feature-attribute-drift-schedule.md)
+ [프로덕션 모델의 특징 속성 드리프트에 대한 보고서 검사](clarify-feature-attribute-drift-report.md)
+ [특징 드리프트 분석을 위한 CloudWatch 지표](clarify-feature-attribute-drift-cw.md)

# 프로덕션 중인 모델을 위한 SHAP 기준 생성
<a name="clarify-model-monitor-shap-baseline"></a>

설명은 주로 대조적입니다.즉, 대부분 기준으로부터의 편차를 반영하는 내용입니다. 설명 가능성 기준에 대한 자세한 내용은 [설명 가능성에 대한 SHAP 기준](clarify-feature-attribute-shap-baselines.md)를 참조하세요.

SageMaker Clarify는 인스턴스별 추론에 대한 설명을 제공하는 것 외에도, 포함된 특징과 관련하여 모델 전체의 동작을 이해할 수 있도록 도와주는 ML 모델에 대한 전반적인 설명도 지원합니다. SageMaker Clarify는 여러 인스턴스의 Shapley 값을 집계하여 ML 모델에 대한 전반적인 설명을 생성합니다. SageMaker Clarify는 사용자가 기준을 정의하는 데 사용할 수 있는 다음과 같은 다양한 집계 방법을 지원합니다.
+ `mean_abs` - 모든 인스턴스에 대한 절대 SHAP 값의 평균입니다.
+ `median` - 모든 인스턴스에 대한 SHAP 값의 중앙값입니다.
+ `mean_sq` - 모든 인스턴스에 대한 제곱 SHAP 값의 평균입니다.

실시간 또는 배치 변환 추론 데이터를 캡처하도록 애플리케이션을 구성했다면, 특징 속성 드리프트의 모니터링을 위해 먼저 필요한 작업은 비교해볼 수 있는 기준을 생성하는 것입니다. 여기에는 데이터 입력 방식, 민감한 그룹 구분, 예측 캡처 방법, 해당 모델 및 훈련 후 편향 지표를 구성하는 작업이 포함됩니다. 그 다음에는 기준 설정 작업을 시작해야 합니다. 모델 설명 가능성 모니터는 이미 배포되어 추론을 생산하면서 특징 속성 드리프트를 정기적으로 감지하고 있는 모델이 수행한 예측을 설명할 수 있습니다.

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

이 예제에서 설명 가능성 기준 설정 작업은 테스트 데이터세트를 편향 기준 설정 작업과 공유하므로, 동일한 `DataConfig`가 사용되고 있으며, 둘 사이의 유일한 차이점은 작업 출력 URI입니다.

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

현재 SageMaker Clarify 설명자는 확장 가능하고 효율적인 SHAP 구현을 제공하므로, 설명 가능성 구성은 SHAPConfig이며, 여기에는 다음이 포함됩니다.
+ `baseline` - Kernel SHAP 알고리즘에서 기준 데이터세트로 사용할 행의 목록(하나 이상) 또는 S3 객체 URI입니다. 형식은 데이터 세트 형식과 동일해야 합니다. 각 행에는 특징 열/값만 포함되어야 하고 레이블 열/값은 생략되어야 합니다.
+ `num_samples` - Kernel SHAP 알고리즘에서 사용할 샘플의 수입니다. 이 숫자는 SHAP 값을 계산하기 위해 생성되는 합성 데이터 세트의 크기를 결정합니다.
+ agg\$1method - 글로벌 SHAP 값에 대한 집계 메서드입니다. 유효한 값은 다음과 같습니다.
  + `mean_abs` - 모든 인스턴스에 대한 절대 SHAP 값의 평균입니다.
  + `median` - 모든 인스턴스에 대한 SHAP 값의 중앙값입니다.
  + `mean_sq` - 모든 인스턴스에 대한 제곱 SHAP 값의 평균입니다.
+ `use_logit` - 로짓 함수를 모델 예측에 적용할지 여부를 나타내는 지표입니다. 기본값은 `False`입니다. 만약 `use_logit`이 `True`라면, SHAP 값은 로그 승산 단위를 갖게 됩니다.
+ `save_local_shap_values` (bool) - 로컬 SHAP 값을 출력 위치에 저장할지 여부를 나타내는 지표입니다. 기본값은 `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,
)
```

기준 설정 작업을 시작합니다. 설명 가능성 기준 설정 작업에서는 생성된 합성 데이터세트에 대한 예측을 얻기 위해 섀도우 엔드포인트를 만들어야 하기 때문에 동일한 `model_config`가 필요합니다.

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

# 모델 특징 속성 드리프트 위반
<a name="clarify-model-monitor-model-attribution-drift-violations"></a>

특징 속성 드리프트 작업은 [기준 구성](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html#sagemaker-CreateModelExplainabilityJobDefinition-request-ModelExplainabilityBaselineConfig)에서 제공하는 기준 제약 조건을 현재의 `MonitoringExecution`에 대한 분석 결과와 비교하여 평가합니다. 이 작업은 위반이 감지되면 해당 위반을 실행 출력 위치에 있는 *constraint\$1violations.json* 파일에 나열하고, 실행 상태를 [결과 해석](model-monitor-interpreting-results.md)로 표시합니다.

특징 속성 드리프트 위반 파일의 스키마는 다음과 같습니다.
+ `label` - 레이블, 작업 분석 구성 `label_headers`또는 자리 표시자(예: `"label0"`)의 이름입니다.
+ `metric_name` - 설명 가능성 분석 메서드의 이름입니다. 현재 `shap`만 지원됩니다.
+ `constraint_check_type` - 모니터링되는 위반의 유형입니다. 현재 `feature_attribution_drift_check`만 지원됩니다.
+ `description` - 위반 내역에 대한 설명 메시지입니다.

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

모니터링 작업은 `explanations`섹션의 각 레이블을 대상으로 기준 제약 조건 파일 및 작업 분석 결과 파일(analysis.json)에 있는 해당 글로벌 SHAP 값의 [nDCG 점수](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ndcg_score.html)를 계산합니다.** 점수가 0.9점 미만이면 위반이 기록됩니다. 결합된 글로벌 SHAP 값이 평가되는 것이므로, 위반 항목에는 `“feature”`필드가 없습니다. 다음 출력은 기록된 여러 위반의 예시를 제공합니다.

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

# 어트리뷰션 드리프트를 모니터링하는 파라미터
<a name="clarify-config-json-monitor-model-explainability-parameters"></a>

Amazon SageMaker Clarify 설명 가능성 모니터는 [분석 구성 파일](clarify-processing-job-configure-analysis.md)의 분석 구성에서 사용된 매개변수의 하위 집합을 재사용합니다. 다음 매개변수가 반드시 JSON 파일로 제공되어야 하고, 해당 경로는 반드시 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityAppSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityAppSpecification)의 `ConfigUri`매개변수에 제공되어야 합니다.
+ `"version"` - (선택사항) 해당 구성 파일의 스키마 버전입니다. 제공하지 않을 경우, 지원 가능한 최신 버전이 사용됩니다.
+ `"headers"` - (선택사항) 데이터세트의 특징 이름 목록. 설명 가능성 분석에는 레이블이 필요하지 않습니다.
+ `"methods"` - 분석 및 보고를 위한 메서드 및 관련 매개변수의 목록입니다. 생략된 섹션이 있는 경우, 해당 섹션은 계산되지 않습니다.
  + `"shap"` - (선택사항) SHAP 값 계산에 관한 섹션입니다.
    + `"baseline"` - (선택사항) 행의 목록(하나 이상)이거나, 또는 Amazon Simple Storage Service Amazon S3 객체 URI입니다. Kernel SHAP 알고리즘에서 기준 데이터세트(백그라운드 데이터세트라고도 함)로 사용됩니다. 형식은 데이터세트 형식과 동일해야 합니다. 각 행에는 해당 특징 열(또는 값)만 포함되어 있어야 합니다. 각 행을 모델로 보내기 전에 제외되어야 하는 열을 먼저 모두 제외하세요.
    + `"num_samples"` - Kernel SHAP 알고리즘에서 사용할 샘플의 수입니다. 이 숫자는 SHAP 값을 계산하기 위해 생성되는 합성 데이터세트의 크기를 결정합니다. 제공하지 않을 경우, SageMaker Clarify 작업은 특징의 개수를 기반으로 값을 선택합니다.
    + `"agg_method"` - 글로벌 SHAP 값에 대한 집계 메서드입니다. 유효한 값은 다음과 같습니다.
      + `"mean_abs"` - 모든 인스턴스에 대한 절대 SHAP 값의 평균입니다.
      + `"median"` - 모든 인스턴스에 대한 SHAP 값의 중앙값입니다.
      + `"mean_sq"` - 모든 인스턴스에 대한 제곱 SHAP 값의 평균입니다.
    + `"use_logit"` - (선택사항) 로짓 함수를 모델 예측에 적용할지 여부를 나타내는 부울 값입니다. 만약 `"use_logit"`이 `true`라면, SHAP 값은 로그 승산 단위를 가집니다. 기본값은 `false`입니다.
    + `"save_local_shap_values"` - (선택사항) 로컬 SHAP 값을 출력 위치에 저장할지 여부를 나타내는 부울 값입니다. 저장하려면 `true`를 사용하세요. 저장하지 않으려면 `false`를 사용하세요. 기본값은 `false`입니다.
+ `"predictor"` - (실시간 엔드포인트인 경우 선택사항/배치 변환인 경우 필수) 모델 매개변수에 대한 섹션으로, `"shap"`및 `"post_training_bias"`섹션이 존재하는 경우 필수입니다.
  + `"model_name"` - `CreateModel`API에서 생성한 모델 이름으로, 컨테이너 모드는 `SingleModel`입니다.
  + `"instance_type"` - 섀도우 엔드포인트의 인스턴스 유형입니다.
  + `"initial_instance_count"` - 섀도우 엔드포인트의 인스턴스 개수입니다.
  + `"content_type"` - (선택사항) 섀도우 엔드포인트를 통해 추론을 가져오는 데 사용되는 모델 입력 형식입니다. 유효한 값은 CSV인 경우 `"text/csv"`, JSON Lines인 경우 `"application/jsonlines"`, Apache Parquet인 경우 `application/x-parquet`, 그리고 컴퓨터 비전 설명 가능성을 활성화하려면 `application/x-image`입니다. 기본값은 `dataset_type`형식과 동일합니다.
  + `"accept_type"` - (선택사항) 섀도우 엔드포인트를 통해 추론을 가져오는 데 사용되는 모델 출력 형식입니다.** 유효한 값은 `"text/csv"`인 경우 CSV, JSON Lines인 경우 `"application/jsonlines"`입니다. 제외할 경우, SageMaker Clarify 함수는 캡처된 데이터의 응답 데이터 유형을 사용합니다.
  + `"content_template"` - (선택사항) 데이터세트 인스턴스에서 모델 입력을 구성하는 데 사용되는 템플릿 문자열입니다. `"content_type"`이 `"application/jsonlines"`인 경우에만 사용됩니다. 템플릿에는 자리 표시자가 `$features`하나만 있어야 하며, 이는 런타임 시 특징 목록으로 대체됩니다. 예를 들어 `"content_template":"{\"myfeatures\":$features}"`에서, 만약 인스턴스(레이블 없음)가 `1,2,3`이라면, 모델 입력은 JSON Lines `'{"myfeatures":[1,2,3]}'`이 됩니다.
  + `"label_headers"` - (선택사항) `"label"`이 데이터세트에서 가져오는 값의 목록입니다. 모델 엔드포인트 또는 배치 변환 작업에서 반환된 점수를 해당 레이블 값과 연결합니다. 이 값이 제공되면 분석 보고서는 `“label0”`과 같은 자리 표시자 대신에 헤더를 사용합니다.

다른 매개변수는 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelExplainabilityJobInput)API의 `EndpointInput`(실시간 엔드포인트인 경우) 또는 `BatchTransformInput`(배치 변환 작업인 경우)에서 제공되어야 합니다.
+ `FeaturesAttribute` - 엔드포인트 또는 배치 작업 입력 데이터 형식이 `"application/jsonlines"`인 경우 이 매개변수가 필요합니다. 데이터세트 형식이 JSON Lines인 경우 해당 특징 열을 찾는 데 사용되는 것은 JMEsPath입니다.
+ `ProbabilityAttribute` - 확률을 계산하는 모델 출력의 인덱스 또는 JMEsPath 위치입니다. 예를 들어, 모델 출력이 레이블 및 확률 목록을 포함하는 JSON Lines인 경우라면, 최대 확률에 해당하는 레이블이 편향 계산 용도로 선택됩니다.

## CSV 및 JSON Lines 데이터세트를 위한 JSON 구성 파일의 예제
<a name="clarify-config-json-monitor-model-explainability-parameters-examples"></a>

다음은 CSV 및 JSON Lines 데이터세트를 구성하여 특징 속성 드리프트를 모니터링하기 위해 사용하는 JSON 파일의 예제입니다.

**Topics**
+ [CSV 데이터세트](#clarify-config-json-monitor-model-explainability-parameters-example-csv)
+ [JSON Lines 데이터세트](#clarify-config-json-monitor-model-explainability-parameters-example-jsonlines)

### CSV 데이터세트
<a name="clarify-config-json-monitor-model-explainability-parameters-example-csv"></a>

다음 예제와 같이 3개의 숫자형 특징 열이 있는 데이터세트를 생각해보겠습니다.

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

다음 예제와 같이 모델 출력값에 두 개의 열이 있다고 가정합니다.첫 번째 열은 예측된 레이블이고 두 번째 열은 확률입니다.

```
1, 0.5385257417814224
```

다음 JSON 구성 파일 예제는 이 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
    }
}
```

예측된 레이블은 `"ProbabilityAttribute"`매개변수에 의해 선택되었습니다. 0 기준으로 시작하는 번호 매기기가 사용되므로, 여기서 1은 모델 출력의 두 번째 열을 나타냅니다.

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

### JSON Lines 데이터세트
<a name="clarify-config-json-monitor-model-explainability-parameters-example-jsonlines"></a>

다음 예제와 같이 특징 열 4개와 레이블 열 1개가 있는 데이터세트에서 첫 번째 특징과 레이블이 이진수라고 가정해 보겠습니다.

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

모델 입력은 데이터세트 형식과 동일하며, 모델 출력은 다음 예제와 같은 JSON Line입니다.

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

다음 예제에서, JSON 구성 파일은 이 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}"
    }
}
```

이 때, 데이터세트의 특징을 찾는 데는 `EndpointInput`(실시간 엔드포인트인 경우) 또는 `BatchTransformInput`(배치 변환 작업인 경우)의 `"features"`매개변수 값이 사용되고, `"probability"`매개변수 값은 모델 출력값에서 확률 값을 선택하게 됩니다.

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

# 특징 속성 드리프트 모니터링 작업 예약
<a name="clarify-model-monitor-feature-attribute-drift-schedule"></a>

SHAP 기준 생성을 마쳤다면, `ModelExplainabilityMonitor`클래스 인스턴스의 `create_monitoring_schedule()`메서드를 호출하여 시간별 모델 설명 가능성 모니터를 예약할 수 있습니다. 다음 섹션은 실시간 엔드포인트에 배포된 모델 및 배치 변환 작업에 사용할 모델 설명 가능성 모니터를 생성하는 방법을 보여줍니다.

**중요**  
모니터링 일정을 생성할 때는 배치 변환 입력이나 엔드포인트 입력 중에서 하나를 지정할 수 있지만, 둘 다 지정할 수는 없습니다.

기준 설정 작업이 이미 제출된 경우, 모니터는 기준 설정 작업으로부터 분석 구성을 자동으로 반영합니다. 다만, 사용자가 기준 설정 단계를 건너뛰거나 해당 캡처 데이터세트의 특성이 훈련 데이터세트의 특성과 다른 경우에는, 분석 구성을 사용자가 제공해야 합니다. `ModelConfig`는 기준 설정 작업에서 필요한 것과 같은 이유로 `ExplainabilityAnalysisConfig`에서 요구됩니다. 특징 속성을 계산하는 데에는 특징만 필요하므로, Ground Truth 레이블 지정은 제외해야 합니다.

## 실시간 엔드포인트에 배포된 모델에 대한 특징 속성 드리프트 모니터링
<a name="model-monitor-explain-quality-rt"></a>

실시간 엔드포인트에 대한 모델 설명 가능성 모니터를 예약하려면, 다음 코드 샘플에 나와 있는 것처럼 `EndpointInput`인스턴스를 `ModelExplainabilityMonitor`인스턴스의 `endpoint_input`인수로 전달하세요.

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

## 배치 변환 작업에 대한 특징 속성 드리프트 모니터링
<a name="model-monitor-explain-quality-bt"></a>

배치 변환 작업에 대한 모델 설명 가능성 모니터를 예약하려면, 다음 코드 샘플에 나와 있는 것처럼 `BatchTransformInput`인스턴스를 `ModelExplainabilityMonitor`인스턴스의 `batch_transform_input`인수로 전달하세요.

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

# 프로덕션 모델의 특징 속성 드리프트에 대한 보고서 검사
<a name="clarify-feature-attribute-drift-report"></a>

사용자가 예약한 일정이 기본 설정에 따라 시작된 후에는, 먼저 첫 번째 실행이 시작될 때까지 기다린 다음에 해당 일정을 중지해야 요금이 발생하지 않습니다.

보고서를 검사하려면 다음 코드를 사용하세요.

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

 기준과 비교 시 위반 항목이 있는 경우, 다음과 같이 나열됩니다.

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

모델이 실시간 엔드포인트에 배포되어 있다면, SageMaker Studio에서 **엔드포인트** 탭을 선택한 다음 해당 엔드포인트를 두 번 클릭하여 분석 결과 및 CloudWatch 지표의 시각화를 확인할 수 있습니다.

# 특징 드리프트 분석을 위한 CloudWatch 지표
<a name="clarify-feature-attribute-drift-cw"></a>

이 가이드는 SageMaker Clalify에서 특징 속성 드리프트 분석을 위해 사용할 수 있는 CloudWatch 지표와 관련 속성을 보여줍니다. 특징 속성 드리프트 모니터링 작업은 다음 두 가지 유형의 지표를 계산하고 게시합니다.
+ 각 특징의 글로벌 SHAP 값.
**참고**  
이 지표의 이름은 작업 분석 구성에서 제공하는 특징 이름을 `feature_`에 추가합니다. 예를 들어 `feature_X`는 특징 `X`의 글로벌 SHAP 값입니다.
+ 지표의 `ExpectedValue`.

이러한 지표는 다음 CloudWatch 네임스페이스에 게시됩니다.
+ 실시간 엔드포인트인 경우: `aws/sagemaker/Endpoints/explainability-metrics`
+ 배치 변환 작업인 경우: `aws/sagemaker/ModelMonitoring/explainability-metrics`

각 지표에는 다음 속성이 있습니다.
+ `Endpoint`: 해당 시, 모니터링되는 엔드포인트의 이름입니다.
+ `MonitoringSchedule`: 모니터링 작업을 위한 일정의 이름입니다.
+ `ExplainabilityMethod`: Shapley 값을 계산하는 데 사용되는 메서드입니다. `KernelShap`를 선택합니다.
+ `Label`: 작업 분석 구성 `label_headers`또는 자리 표시자(예: `label0`)에서 제공하는 이름입니다.
+ `ValueType`: 지표에서 반환되는 값의 유형입니다. [`GlobalShapValues`] 또는 [`ExpectedValue`]을 선택합니다.

모니터링 작업이 지표를 게시하지 않도록 하려면, [모델 설명 가능성 작업](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelExplainabilityJobDefinition.html) 정의의 `Environment`맵에서 `publish_cloudwatch_metrics`를 `Disabled`로 설정합니다.