

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データ品質
<a name="model-monitor-data-quality"></a>

データ品質モニタリング機能は、本番稼働中の機械学習 (ML) モデルを自動的にモニタリングし、データ品質の問題が発生したときに通知します。本番稼働中の ML モデルは、実際のデータを予測する必要があります。こうしたデータは、ほとんどのトレーニングデータセットとは異なり、慎重に厳選されていません。本番稼働中にモデルが受け取るデータの統計的性質が、トレーニングに使用されたベースラインデータの性質からドリフトすると、モデルの予測精度が低下していきます。Amazon SageMaker Model Monitor では、ルールを使用してデータのドリフトを検出し、発生時に警告します。データ品質を監視するには、次のステップを実行します。
+ データキャプチャを有効にします。データキャプチャは、リアルタイム推論エンドポイントまたはバッチ変換ジョブからの推論の入出力をキャプチャするか、データを 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)」を参照してください。

**注記**  
Model Monitor は、表形式のデータのみに基づいてモデルメトリクスと統計を計算します。例えば、イメージを入力として受け取り、そのイメージに基づいてラベルを出力するイメージ分類モデルも引き続きモニタリングできます。Model Monitor は、入力ではなく出力のメトリクスと統計を計算できます。

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

統計と制約のベースライン計算は、データのドリフトやその他のデータ品質の問題を検出できる標準として必要とされます。Model Monitor には、CSV およびフラット JSON 入力の制約を自動的に推奨する機能を提供する組み込みコンテナが用意されています。この *sagemaker-model-monitor-analyzer* コンテナは、ベースラインに対する制約の検証などのさまざまなモデルモニタリング機能や Amazon CloudWatch メトリクスの出力を提供します。このコンテナは Spark バージョン 3.3.0 に基づいており、[Deequ](https://github.com/awslabs/deequ) バージョン 2.0.2 で構築されています。ベースラインデータセット内のすべての列名が Spark に準拠している必要があります。列名には小文字のみを使用でき、特殊文字は「`_`」のみ使用できます。

モデルのトレーニングに使用したトレーニングデータセットは、通常、適切なベースラインデータセットです。トレーニングデータセットデータスキーマと推論データセットスキーマは、正確に一致する必要があります (特徴量の数と順序)。予測/出力の列は、トレーニングデータセットの 1 列目と見なされます。トレーニングデータセットから、一連のベースライン制約を推奨し、データを探索するための記述統計を生成するように SageMaker AI に指示することができます。この例では、この例に含まれている事前トレーニング済みモデルのトレーニングに使用されたトレーニングデータセットをアップロードします。Amazon S3 にトレーニングデータセットをすでに保存している場合は、それを直接指定できます。

**トレーニングデータセットからベースラインを作成するには** 

トレーニングデータを準備して Amazon S3 に保存したら、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用して `DefaultModelMonitor.suggest_baseline(..)` のベースライン処理ジョブを開始します。このジョブでは、ベースライン統計を生成してデータセットのベースライン制約を推奨し、指定した `output_s3_uri` の場所にこれらを書き込む [Amazon SageMaker Model Monitor のビルド済みコンテナ](model-monitor-pre-built-container.md) を使用します。

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

**注記**  
トレーニングデータセット内の特徴/列の名前を 1 行目として指定し、上記のコードサンプルのように `header=True` オプションを設定した場合、SageMaker AI は制約および統計ファイル内の特徴名を使用します。

データセットのベースライン統計は statistics.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()` メソッドを呼び出して、1 時間ごとのデータ品質モニターをスケジュールできます。以下のセクションでは、リアルタイムエンドポイントにデプロイされたモデルとバッチ変換ジョブのデータ品質モニターを作成する方法を示します。

**重要**  
モニタリングスケジュールを作成するときに、バッチ変換入力またはエンドポイント入力のいずれかを指定できますが、両方を指定することはできません。

## リアルタイムエンドポイントにデプロイされたモデルのデータ品質モニタリング
<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 Model Monitor のビルド済みコンテナは、列/特徴の統計に基づいて計算を行います。統計は、ベースラインデータセットおよび分析中の現在のデータセットについて計算されます。

```
{
    "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 Model Monitor コンテナを使用できます。ベースライン制約ファイルで `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 メトリクスを出力します。
+ メトリクス: 完全性 → `MetricName: feature_non_null_{feature_name}, Stat: Sum` のクエリ
+ メトリクス: ベースラインドリフト → `MetricName: feature_baseline_drift_{feature_name}, Stat: Sum` のクエリ

# 違反のスキーマ (constraint\$1violations.json ファイル)
<a name="model-monitor-interpreting-violations"></a>

違反ファイルは `MonitoringExecution` の出力として生成されます。この出力には、分析された現在のデータセットに対して制約 (constraints.json ファイルで指定) を評価した結果が示されます。Amazon SageMaker Model Monitor のビルド済みコンテナは、次の違反チェックを行います。

```
{
    "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` のしきい値によって決定されます。  | 