

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

# 데이터 품질
<a name="model-monitor-data-quality"></a>

데이터 품질 모니터링은 프로덕션 환경의 기계 학습(ML) 모델을 자동으로 모니터링하여 데이터 품질 문제가 발생할 때 사용자에게 알립니다. 프로덕션 환경의 ML 모델은 대부분의 훈련 데이터세트에서와 같이 신중하게 선별되지 않은 실제 데이터를 예측해야 합니다. 프로덕션 환경에서 모델이 수신하는 데이터의 통계적 속성이 훈련 받은 기준 데이터의 속성과 멀어지면 모델의 예측 정확도가 떨어지기 시작합니다. Amazon SageMaker 모델 모니터는 규칙을 사용하여 데이터 드리프트를 감지하고 데이터 드리프트가 발생하면 알려줍니다. 데이터 품질을 모니터링하려면 다음 단계를 따르세요.
+ 데이터 캡처를 활성화합니다. 이는 실시간 추론 엔드포인트 또는 배치 변환 작업에서 추론 입력 및 출력을 캡처한 다음, 해당 데이터를 Amazon S3에 저장합니다. 자세한 내용은 [데이터 캡처](model-monitor-data-capture.md)섹션을 참조하세요.
+ 기준을 생성합니다. 이 단계에서는 제공하는 입력 데이터세트를 분석하는 기준 작업을 실행합니다. 기준은 대규모 데이터세트에서 데이터 품질을 측정하는 데 사용되는 Apache Spark를 토대로 빌드된 오픈 소스 라이브러리인 [Deequ](https://github.com/awslabs/deequ)를 사용하여 각 기능에 대한 기준 스키마 제약 조건 및 통계를 계산합니다. 자세한 내용은 [기준 생성](model-monitor-create-baseline.md)섹션을 참조하세요.
+ 데이터 품질 모니터링 작업을 정의하고 스케줄링합니다. 데이터 품질 모니터링 작업에 대한 특정 정보 및 코드 샘플은 [데이터 품질 모니터링 작업 스케줄링](model-monitor-schedule-data-monitor.md)섹션을 참조하세요. 작업 모니터링에 대한 일반적인 내용은 [모니터링 작업 일정 예약](model-monitor-scheduling.md)섹션을 참조하세요.
  + 선택적으로 전처리 및 후처리 스크립트를 사용하여 데이터 품질 분석에서 나오는 데이터를 변환할 수 있습니다. 자세한 내용은 [사전 처리 및 사후 처리](model-monitor-pre-and-post-processing.md)섹션을 참조하세요.
+ 데이터 품질 지표를 확인합니다. 자세한 내용은 [통계에 대한 스키마(statistics.json 파일)](model-monitor-interpreting-statistics.md)섹션을 참조하세요.
+ 데이터 품질 모니터링을 Amazon CloudWatch와 통합합니다. 자세한 내용은 [CloudWatch 지표](model-monitor-interpreting-cloudwatch.md)섹션을 참조하세요.
+ 모니터링 작업의 결과물을 해석합니다. 자세한 내용은 [결과 해석](model-monitor-interpreting-results.md)섹션을 참조하세요.
+ 실시간 엔드포인트를 사용하는 경우 SageMaker Studio를 사용하여 데이터 품질 모니터링을 활성화하고 결과를 시각화할 수 있습니다. 자세한 내용은 [Amazon SageMaker Studio에서 실시간 엔드포인트의 결과 시각화](model-monitor-interpreting-visualize-results.md)섹션을 참조하세요.

**참고**  
모델 모니터는 테이블 형식 데이터에 대해서만 모델 지표와 통계를 계산합니다. 예를 들어, 이미지를 입력으로 받아 이미지 기반의 레이블을 출력하는 이미지 분류 모델을 모니터링할 수 있습니다. 모델 모니터는 입력이 아닌 출력에 대한 지표와 통계를 계산할 수 있습니다.

**Topics**
+ [기준 생성](model-monitor-create-baseline.md)
+ [데이터 품질 모니터링 작업 스케줄링](model-monitor-schedule-data-monitor.md)
+ [통계에 대한 스키마(statistics.json 파일)](model-monitor-interpreting-statistics.md)
+ [CloudWatch 지표](model-monitor-interpreting-cloudwatch.md)
+ [위반에 대한 스키마(constraint\$1violations.json 파일)](model-monitor-interpreting-violations.md)

# 기준 생성
<a name="model-monitor-create-baseline"></a>

데이터 드리프트 및 기타 데이터 품질 문제를 감지할 수 있는 기준이 되는 표준으로 통계 및 제약 조건의 기준 계산이 필요합니다. 모델 모니터는 CSV 및 플랫 JSON 입력에 대한 제약 조건을 자동으로 제안할 수 있는 기능을 제공하는 내장 컨테이너를 제공합니다. 또한 이 *sagemaker-model-monitor-analyzer* 컨테이너는 기준과 비교한 제약 조건 검증, Amazon CloudWatch 지표 내보내기 등 다양한 모델 모니터링 기능을 제공합니다. 이 컨테이너는 Spark 버전 3.3.0을 기반으로 하며 [Deequ](https://github.com/awslabs/deequ) 버전 2.0.2를 사용하여 구축되었습니다. 기준 데이터세트의 모든 열 이름은 Spark와 호환되어야 합니다. 열 이름의 경우 소문자만 사용하고 특수 문자로는 `_`만 사용하세요.

모델을 훈련하는 데 사용한 훈련 데이터세트는 일반적으로 좋은 기준 데이터세트입니다. 훈련 데이터세트의 데이터 스키마와 추론 데이터세트 스키마는 정확히 일치해야 합니다(기능의 수와 순서). 예측/출력 열(들)은 훈련 데이터세트의 첫 번째 열로 간주됩니다. 훈련 데이터세트에서 일련의 기준 제약 조건을 제안하고 데이터를 탐색하기 위한 기술 통계를 생성하도록 SageMaker AI에 요청할 수 있습니다. 이 예시의 경우 이 예시에 포함된 사전 훈련된 모델을 훈련하는 데 사용된 훈련 데이터세트를 업로드합니다. Amazon S3에 훈련 데이터세트를 이미 저장한 경우 해당 데이터세트를 직접 가리킬 수 있습니다.

**훈련 데이터세트에서 기준을 생성하려면** 

훈련 데이터를 준비하고 Amazon S3에 저장했으면 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)를 사용하여 `DefaultModelMonitor.suggest_baseline(..)`으로 기본 처리 작업을 시작합니다. [Amazon SageMaker Model Monitor 사전 구축 컨테이너](model-monitor-pre-built-container.md)를 사용해 기준 통계를 생성하고, 데이터세트에 대한 기준 제약 조건을 제안하고, 사용자가 지정한 `output_s3_uri`위치에 기록합니다.

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

**참고**  
훈련 데이터세트에 기능/열 이름을 첫 번째 행으로 제공하고 이전 코드 샘플에서와 같이 `header=True` 옵션을 설정하면 SageMaker AI는 제약 조건 및 통계 파일에서 기능 이름을 사용합니다.

데이터세트에 대한 기준 통계는 statistics s.json 파일에 포함되어 있으며, 제안된 기준 제약 조건은 `output_s3_uri`에서 지정한 위치의 constraints.json 파일에 포함되어 있습니다.

테이블 형식 데이터세트 통계 및 제약 조건의 출력 파일


| 파일 이름 | 설명 | 
| --- | --- | 
| statistics.json |  이 파일에는 분석되는 데이터세트의 각 기능에 대한 열 기반 통계가 있어야 합니다. 이 파일의 스키마에 대한 자세한 내용은 [통계에 대한 스키마(statistics.json 파일)](model-monitor-byoc-statistics.md)섹션을 참조하세요.  | 
| constraints.json |  이 파일에는 관찰된 기능에 대한 제약 조건이 있어야 합니다. 이 파일의 스키마에 대한 자세한 내용은 [제약 조건에 대한 스키마(constraints.json 파일)](model-monitor-byoc-constraints.md)섹션을 참조하세요.  | 

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)는 기준 통계 및 제약 조건을 생성하기 위해 설명된 편의 기능을 제공합니다. 하지만 이러한 목적을 위해 직접 처리 작업을 호출하려는 경우에는 다음 예시에서와 같이 `Environment`맵을 설정해야 합니다.

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

# 데이터 품질 모니터링 작업 스케줄링
<a name="model-monitor-schedule-data-monitor"></a>

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

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

## 실시간 엔드포인트에 배포된 모델에 대한 데이터 품질 모니터링
<a name="model-monitor-data-quality-rt"></a>

실시간 엔드포인트에 대한 데이터 품질 모니터를 예약하려면, 다음 코드 샘플에 나와 있는 것처럼 `EndpointInput`인스턴스를 `DefaultModelMonitor`인스턴스의 `endpoint_input`인수로 전달하세요.

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

## 배치 변환 작업에 대한 데이터 품질 모니터링
<a name="model-monitor-data-quality-bt"></a>

배치 변환 작업에 대한 데이터 품질 모니터를 예약하려면, 다음 코드 샘플에 나와 있는 것처럼 `BatchTransformInput`인스턴스를 `DefaultModelMonitor`인스턴스의 `batch_transform_input`인수로 전달하세요.

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

# 통계에 대한 스키마(statistics.json 파일)
<a name="model-monitor-interpreting-statistics"></a>

Amazon SageMaker 모델 모니터는 열/기능 통계를 기준으로 사전 빌드된 컨테이너를 계산합니다. 통계는 기준 데이터세트를 비롯해 분석 중인 현재 데이터세트에 대 계산됩니다.

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

다음 사항에 유의하세요.
+ 사전 빌드 컨테이너는 컴팩트한 분위 스케치인 [KLL 스케치](https://datasketches.apache.org/docs/KLL/KLLSketch.html)를 계산합니다.
+ 기본적으로 10개의 버킷으로 분포를 구체화합니다. 현재는 구성이 불가능합니다.

# CloudWatch 지표
<a name="model-monitor-interpreting-cloudwatch"></a>

CloudWatch 지표에 내장된 Amazon SageMaker 모델 모니터 컨테이너를 사용할 수 있습니다. `emit_metrics` 옵션이 기준 제약 조건 파일의 `Enabled`에 있는 경우 SageMaker AI는 다음 네임스페이스의 데이터세트에서 관찰된 각 기능/열에 대해 이러한 지표를 내보냅니다.
+ `EndpointName` 및 `ScheduleName`차원을 포함하는 `For real-time endpoints: /aws/sagemaker/Endpoints/data-metric`네임스페이스.
+ `MonitoringSchedule` 차원을 포함하는 `For batch transform jobs: /aws/sagemaker/ModelMonitoring/data-metric`네임스페이스.

숫자 필드의 경우 내장 컨테이너는 다음과 같은 CloudWatch 지표를 내보냅니다.
+ 지표: Max → `MetricName: feature_data_{feature_name}, Stat: Max`에 대한 쿼리
+ 지표: Min → `MetricName: feature_data_{feature_name}, Stat: Min`에 대한 쿼리
+ 지표: Sum → `MetricName: feature_data_{feature_name}, Stat: Sum`에 대한 쿼리
+ 지표: SampleCount → `MetricName: feature_data_{feature_name}, Stat: SampleCount`에 대한 쿼리
+ 지표: Average → `MetricName: feature_data_{feature_name}, Stat: Average`에 대한 쿼리

숫자 및 문자열 필드의 경우 내장 컨테이너는 다음과 같은 CloudWatch 지표를 내보냅니다.
+ 지표: Completeness → `MetricName: feature_non_null_{feature_name}, Stat: Sum`에 대한 쿼리
+ 지표: Baseline Drift → `MetricName: feature_baseline_drift_{feature_name}, Stat: Sum`에 대한 쿼리

# 위반에 대한 스키마(constraint\$1violations.json 파일)
<a name="model-monitor-interpreting-violations"></a>

위반 파일은 `MonitoringExecution`의 출력으로 생성되며, 이 파일에는 분석된 현재 데이터세트에 대한 제약 조건(constraints.json 파일에 지정된)을 평가한 결과가 나열됩니다. Amazon SageMaker 모델 모니터 사전 빌드된 컨테이너는 다음과 같은 위반 검사를 제공합니다.

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

모니터된 위반 유형 


| 위반 검사 유형 | 설명  | 
| --- | --- | 
| data\$1type\$1check | 현재 실행의 데이터 유형이 기준 데이터세트의 데이터 유형과 다를 경우 이 위반에 플래그가 지정됩니다. 기준 단계 동안 생성된 제약 조건은 각 열에 대해 추론된 데이터 유형을 제안합니다. 위반으로 플래그가 지정된 경우 임계값을 조정하도록 `monitoring_config.datatype_check_threshold`파라미터를 튜닝할 수 있습니다.  | 
| completeness\$1check | 현재 실행에서 관찰된 완전성(null이 아닌 항목의 %)이 기능별로 지정된 완전성 임계값에 지정된 임계값을 초과하면 이 위반에 플래그가 지정됩니다. 기준 단계 동안 생성된 제약 조건은 완전성 값을 제안합니다.  | 
| baseline\$1drift\$1check | 현재 데이터세트와 기준 데이터세트 간에 계산된 분포 거리가 `monitoring_config.comparison_threshold`에 지정된 임계값보다 크면 이 위반에 플래그가 지정됩니다.  | 
| missing\$1column\$1check | 현재 데이터세트의 열 수가 기준 데이터세트의 개수보다 작으면 이 위반에 플래그가 지정됩니다.  | 
| extra\$1column\$1check | 현재 데이터세트의 열 수가 기준의 개수보다 많으면 이 위반에 플래그가 지정됩니다.  | 
| categorical\$1values\$1check | 현재 데이터세트의 알 수 없는 값이 기준 데이터세트보다 더 많으면 이 위반에 플래그가 지정됩니다. 이 값은 `monitoring_config.domain_content_threshold`의 임계값에 의해 결정됩니다.  | 