

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

# 本番稼働用モデルのバイアスドリフト
<a name="clarify-model-monitor-bias-drift"></a>

Amazon SageMaker Clarify バイアスモニタリングは、データサイエンティストと機械学習エンジニアが予測のバイアスを定期的にモニタリングするのに役立ちます。モデルのモニタリング中は、バイアスを詳細に説明する、エクスポート可能なレポートとグラフを SageMaker Studio で表示できます。また、Amazon CloudWatch でアラートを設定して、特定のしきい値を超えるバイアスが検出された場合に通知を送信するようにできます。トレーニングデータがデプロイ中にモデルに表示されるデータ (つまり、ライブデータ) と異なる場合、デプロイされた機械学習モデルではバイアスが発生または悪化するおそれがあります。ライブデータの分布におけるこのような変化は、一時的 (原因が短期間の現実世界の出来事である場合など) または永続的である場合があります。いずれの場合も、変化を検出することが重要です。例えば、モデルトレーニングに使用された住宅ローン利率が現在の現実世界の住宅ローン利率と異なる場合、住宅価格を予測するためのモデルの出力にバイアスが生じる可能性があります。Model Monitor のバイアス検出機能を使用すると、SageMaker AI が特定のしきい値を超えるバイアスを検出した場合に、SageMaker Studio と Amazon CloudWatch アラートを通じて表示できるメトリクスが自動的に生成されます。

一般的に、トレーニングとデプロイの段階でのみバイアスを測定するのでは不十分です。モデルのデプロイ後、デプロイされたモデルが参照するデータ (つまり、ライブデータ) の分布がトレーニングデータセット内のデータ分布と異なる場合があるためです。この変化により、時間の経過とともにモデルにバイアスが生じる可能性があります。ライブデータの分布における変化は、一時的 (原因がホリデーシーズンなどの短期間の行動による場合など) または永続的である場合があります。いずれの場合も、これらの変化を検出し、必要に応じてバイアスを減らすための措置を講じることが重要です。

これらの変更を検出するために、SageMaker Clarify は、デプロイされたモデルのバイアスメトリクスを継続的にモニタリングし、メトリクスがしきい値を超えた場合に自動アラートを発する機能を提供します。DPPL バイアスメトリクスを例として考えてみます。値の許容範囲を指定します (A=(amin​, amax​))。DPPL がデプロイメント中に収まっている必要がある差は (-0.1, 0.1) などです。この範囲から逸脱した場合は*バイアスの検出*アラートが発生します。SageMaker Clarify を使用すると、このようなチェックを定期的に実行できます。

例えば、チェックの頻度を 2 日に設定できます。この設定では、SageMaker Clarify は 2 日間の期間中に収集されたデータに対する DPPL メトリクスを計算します。この例では、Dwin はモデルが過去 2 日間の期間中に処理したデータです。DPPL 値 bwin​ が Dwin​ で計算された許容範囲 A から外れた場合、アラートが発行されます。bwin が A から外れているかどうかをチェックするこのアプローチ手法は、ノイズが多くなる場合があります。Dwin​ がごく少数のサンプルで構成され、ライブデータの分布を表していない場合などです。サンプルサイズが小さいと、Dwin​ に基づいて計算されたバイアス bwin​ があまり堅牢な推定ではない可能性があります。実は、非常に高い (または低い) bwin の値は純粋に偶然で観測されたのかもしれません。観測されたデータ Dwin から導き出された結論が統計的に有意であることを確認するために、SageMaker Clarify では信頼区間を使用しています。具体的には、正規分布ブートストラップ法を使用して区間 C=(cmin​, cmax) を構築します。このようにすることで、SageMaker Clarify は、ライブデータ全体に基づいて計算された真のバイアス値が高い確率で C に含まれていると確信を持てます。ここで、信頼区間 C が許容範囲 A と重なる場合、SageMaker Clarify は「ライブデータ分布のバイアスメトリクス値が許容範囲内にある可能性が高い」と解釈します。C と A が重ならない場合、SageMaker Clarify はバイアスメトリクスが A に含まれていないと確信し、アラートを発します。

## Model Monitor のサンプルノートブック
<a name="clarify-model-monitor-sample-notebooks-bias-drift"></a>

Amazon SageMaker Clarify には、リアルタイムエンドポイントの推論データをキャプチャし、進化するバイアスをモニタリングするためのベースラインを作成し、結果を確認する方法を示す次のサンプルノートブックが用意されています。
+ [バイアスドリフトと特徴属性ドリフトのモニタリング (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 を使用して、バイアスドリフトと特徴属性ドリフトを経時的にモニタリングします。

このノートブックの動作確認が実施されているのは、Amazon SageMaker Studio のみです。Amazon SageMaker Studio でノートブックを開く方法の手順については、「[Amazon SageMaker Studio Classic ノートブックを作成する、または開く](notebooks-create-open.md)」を参照してください。カーネルの選択を求めるメッセージが表示されたら、**[Python 3 (Data Science)]** (Python 3 (データサイエンス)) を選択します。次のトピックでは、最後の 2 つのステップの要点が説明されています。サンプルノートブックのコードサンプルも含まれています。

**Topics**
+ [Model Monitor のサンプルノートブック](#clarify-model-monitor-sample-notebooks-bias-drift)
+ [バイアスドリフトのベースラインを作成する](clarify-model-monitor-bias-drift-baseline.md)
+ [バイアスドリフト違反](clarify-model-monitor-bias-drift-violations.md)
+ [バイアスドリフトをモニタリングするためのパラメータ](clarify-config-json-monitor-bias-parameters.md)
+ [バイアスドリフトのモニタリングジョブをスケジュールする](clarify-model-monitor-bias-drift-schedule.md)
+ [データのバイアスドリフトのレポートを確認する](clarify-model-monitor-bias-drift-report.md)
+ [バイアスドリフト分析の CloudWatch メトリクス](clarify-model-monitor-bias-drift-cw.md)

# バイアスドリフトのベースラインを作成する
<a name="clarify-model-monitor-bias-drift-baseline"></a>

アプリケーションのリアルタイム推論データまたはバッチ変換推論データのキャプチャを設定した後、バイアスドリフトのモニタリングで最初に行うタスクはベースラインの作成です。これには、データ入力、機密性の高いグループ、予測のキャプチャ方法、モデルとそのトレーニング後のバイアスメトリクスの設定が含まれます。その後に、ベースライン作成ジョブを開始する必要があります。

モデルのバイアスモニタリングは、機械学習モデルのバイアスドリフトを定期的に検出できます。他のモニタリングタイプと同様に、モデルバイアスモニタリングを作成する手順は、ベースラインを作成してからモニタリングスケジュールを作成する方法が一般的です。

```
model_bias_monitor = ModelBiasMonitor(
    role=role,
    sagemaker_session=sagemaker_session,
    max_runtime_in_seconds=1800,
)
```

`DataConfig` には、分析するデータセット (データセットファイルなど)、その形式 (CSV または JSON Lines)、ヘッダー (存在する場合)、およびラベルに関する情報が保存されています。

```
model_bias_baselining_job_result_uri = f"{baseline_results_uri}/model_bias"
model_bias_data_config = DataConfig(
    s3_data_input_path=validation_dataset,
    s3_output_path=model_bias_baselining_job_result_uri,
    label=label_header,
    headers=all_headers,
    dataset_type=dataset_type,
)
```

`BiasConfig` は、データセット内の機微グループの設定です。通常、バイアスはメトリクスを計算し、それをグループ間で比較することで測定されます。その対象となるグループは、*ファセット*と呼ばれます。トレーニング後のバイアスに関しては、正のラベルも考慮する必要があります。

```
model_bias_config = BiasConfig(
    label_values_or_threshold=[1],
    facet_name="Account Length",
    facet_values_or_threshold=[100],
)
```

`ModelPredictedLabelConfig` はモデルの出力から予測ラベルを抽出する方法を指定します。この例では、顧客が頻繁に離脱することを予想して、0.8 のカットオフ値が選択されています。より複雑な出力の場合は、他にもいくつかのオプションがあります。例えば、「label」はエンドポイント応答ペイロードで予測されたラベルの位置を示すインデックス、名前、または JMESPath です。

```
model_predicted_label_config = ModelPredictedLabelConfig(
    probability_threshold=0.8,
)
```

`ModelConfig` は、推論に使用されるモデルに関連する設定です。トレーニング後のバイアスメトリクスを計算するには、指定されたモデル名の推論を取得して計算に含める必要があります。これを実現するために、処理ジョブはモデルを使用して一時エンドポイント (*シャドウエンドポイント*とも呼ばれる) を作成します。処理ジョブは、計算が完了した後にシャドウエンドポイントを削除します。この設定は説明可能性モニタリングでも使用されます。

```
model_config = ModelConfig(
    model_name=model_name,
    instance_count=endpoint_instance_count,
    instance_type=endpoint_instance_type,
    content_type=dataset_type,
    accept_type=dataset_type,
)
```

これで、ベースライン作成ジョブを開始できます。

```
model_bias_monitor.suggest_baseline(
    model_config=model_config,
    data_config=model_bias_data_config,
    bias_config=model_bias_config,
    model_predicted_label_config=model_predicted_label_config,
)
print(f"ModelBiasMonitor baselining job: {model_bias_monitor.latest_baselining_job_name}")
```

スケジュールされたモニタリングは、ベースラインジョブ名を自動的に取得し、モニタリングが開始されるまで待機します。

# バイアスドリフト違反
<a name="clarify-model-monitor-bias-drift-violations"></a>

バイアスドリフトジョブは、[ベースライン設定](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html#sagemaker-CreateModelBiasJobDefinition-request-ModelBiasBaselineConfig)によって提供されるベースラインの制約を、現在の `MonitoringExecution` の分析結果と照らし合わせて評価します。違反が検出されると、ジョブはその違反を実行出力場所の constraint\$1violations.json ファイルに一覧表示し、実行ステータスを [結果の解釈](model-monitor-interpreting-results.md) としてマークします。**

バイアスドリフト違反ファイルのスキーマは次のとおりです。
+ `facet` — モニタリングジョブ分析設定ファセット `name_or_index` によって提供されるファセットの名前。
+ `facet_value` — モニタリングジョブ分析設定ファセット `value_or_threshold` によって提供されるファセットの値。
+ `metric_name` — バイアスメトリクスのショートネーム。例えば、「CI」はクラスの不均衡を表します。トレーニング前の各バイアスメトリックの略称については、「[トレーニング前のバイアスメトリクス](clarify-measure-data-bias.md)」を参照してください。トレーニング後の各バイアスメトリックの短縮名については、「[トレーニング済みデータのメトリクスとモデルのバイアスのメトリクス](clarify-measure-post-training-bias.md)」を参照してください。
+ `constraint_check_type` — モニタリング対象の違反のタイプ。現在は、`bias_drift_check` のみがサポートされます。
+ `description` — 違反を説明する説明メッセージ。

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

バイアスメトリクスは、分布の平等度を測定するために使用されます。値がゼロに近いほど、分布のバランスが取れていることを示します。ジョブ分析結果ファイル (analysis.json) 内のバイアスメトリクスの値が、ベースライン制約ファイル内の対応する値よりも悪い場合、違反が記録されます。例えば、DPPL バイアスメトリクスのベースライン制約が `0.2` で、分析結果が `0.1` の場合、`0.1` は `0.2` より `0` に近いため違反は記録されません。ただし、分析結果が `-0.3` であれば、ベースライン制約の `0.2` より `0` から離れているため、違反が記録されます。

```
{
    "version": "1.0",
    "violations": [{
        "facet": "Age",
        "facet_value": "40",
        "metric_name": "CI",
        "constraint_check_type": "bias_drift_check",
        "description": "Value 0.0751544567666083 does not meet the constraint requirement"
    }, {
        "facet": "Age",
        "facet_value": "40",
        "metric_name": "DPPL",
        "constraint_check_type": "bias_drift_check",
        "description": "Value -0.0791244970125596 does not meet the constraint requirement"
    }]
}
```

# バイアスドリフトをモニタリングするためのパラメータ
<a name="clarify-config-json-monitor-bias-parameters"></a>

Amazon SageMaker Clarify バイアスモニタリングは、[分析設定ファイル](clarify-processing-job-configure-analysis.md) の分析設定に使用されたパラメータのサブセットを再利用します。このトピックでは、設定パラメータについて説明したあと、JSON ファイルの例を紹介します。これらのファイルを使用して CSV および JSON Lines データセットを設定し、機械学習モデルが本番稼働しているときにバイアスドリフトがないかモニタリングします。

以下のパラメータは JSON ファイルで提供する必要があります。この JSON ファイルへのパスは、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasAppSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasAppSpecification) API の `ConfigUri` パラメータで指定する必要があります。
+ `"version"` - (オプション) 設定ファイルのスキーマバージョン。指定しない場合、サポートされている最新のバージョンが使用されます。
+ `"headers"` - (オプション) データセット内の列名のリスト。`dataset_type` が `"application/jsonlines"` で、`"label"` が指定されている場合、最後のヘッダーはラベル列のヘッダーになります。
+ `"label"` — (オプション) バイアスメトリクスに使用するモデルのターゲット属性。**列名、またはデータセット形式が CSV の場合はインデックスとして、データセット形式が JSON Lines の場合は JMESPath として指定します。
+ `"label_values_or_threshold"` — (オプション) ラベル値またはしきい値のリスト。バイアスメトリクスに使用した肯定的な結果を示します。
+ `"facet"` — (オプション) ファセットと呼ばれる機密属性である機能のリスト。ファセットはペアの形式でバイアスメトリクスに使用され、次のものが含まれます。**
  + `"name_or_index"` - ファセットの列名またはインデックス。
  + `"value_or_threshold"` — (オプション) ファセット列に入力できる値またはしきい値のリスト。バイアスの測定に使用されるグループなど、機密性の高いグループを示します。指定しない場合、バイアスメトリクスは (すべての値ではなく) 一意の値ごとに 1 つのグループとして計算されます。ファセット列が数値の場合、このしきい値は、機密性の高いグループを選択するための下限として適用されます。
+ `"group_variable"` — (オプション) 条件付き人口格差のバイアスメトリクスに使用されるグループ変数を示す列名またはインデックス。****

他のパラメーターは、 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasJobInput](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelBiasJobInput) API の `EndpointInput` (リアルタイムエンドポイントの場合) または `BatchTransformInput` (バッチ変換ジョブの場合) で指定する必要があります。
+ `FeaturesAttribute` — エンドポイントの入力データ形式が `"application/jsonlines"` の場合、このパラメータは必須です。データセット形式が JSON Lines の場合、これは特徴量列の検索に使用される JMESPath です。
+ `InferenceAttribute` — バイアスメトリクスを使用してバイアスをモニタリングするために使用されるターゲット属性のモデル出力内のインデックスまたは JMESPath の場所。CSV `accept_type` ケースでこれが指定されていない場合、モデル出力がスコアまたは確率に対応する単一の数値であると仮定します。
+ `ProbabilityAttribute` — 確率を示すモデル出力内のインデックスまたは JMESPath の場所。例えば、モデル出力がラベルと確率のリストを含む JSON Lines の場合、最大確率に対応するラベルがバイアス計算用に選択されます。
+ `ProbabilityThresholdAttribute` - (オプション) 二項分類の場合にバイナリラベルを選択するためのしきい値を示す浮動小数点値。デフォルト値は 0.5 です。

## CSV および JSON Lines データセットの JSON 設定ファイルの例
<a name="clarify-config-json-monitor-bias-parameters-examples"></a>

CSV および JSON Lines データセットを設定してバイアスドリフトをモニタリングするために使用される JSON ファイルの例を次に示します。

**Topics**
+ [CSV データセット](#clarify-config-json-monitor-bias-parameters-example-csv)
+ [JSON Lines データセット](#clarify-config-json-monitor-bias-parameters-example-jsonlines)

### CSV データセット
<a name="clarify-config-json-monitor-bias-parameters-example-csv"></a>

次の例のように、4 つの特徴量列と 1 つのラベル列からなるデータセットを考えてみると、最初の特徴量とラベルはバイナリです。

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

次の例のように、モデル出力に 2 つの列があり、最初の列が予測ラベル、2 番目の列が確率であると仮定します。

```
1, 0.5385257417814224
```

次に、次の JSON 設定ファイルはこの CSV データセットを設定する方法の例を示します。

```
{
    "headers": [
        "feature_0",
        "feature_1",
        "feature_2",
        "feature_3",
        "target"
    ],
    "label": "target",
    "label_values_or_threshold": [1],
    "facet": [{
        "name_or_index": "feature_1",
        "value_or_threshold": [1]
    }]
}
```

予測ラベルは `"InferenceAttribute"` パラメータによって選択されます。0 から始まる番号が使用されるため、0 はモデル出力の最初の列を示します。

```
"EndpointInput": {
    ...
    "InferenceAttribute": 0
    ...
}
```

別の方法として、さまざまなパラメータを使用して確率値をバイナリ予測ラベルに変換することもできます。0 から始まる番号付けが使用されます。1 は 2 列目を示し、0.6 という `ProbabilityThresholdAttribute` 値は、確率が 0.6 を超えるとバイナリラベルが 1 と予測されることを示します。

```
"EndpointInput": {
    ...
    "ProbabilityAttribute": 1,
    "ProbabilityThresholdAttribute": 0.6
    ...
}
```

### JSON Lines データセット
<a name="clarify-config-json-monitor-bias-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}
```

モデル出力に 2 つの列があり、最初の列が予測ラベル、2 番目の列が確率であると仮定します。

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

次の JSON 設定ファイルはこの JSON Lines データセットを設定する方法の例を示します。

```
{
    "headers": [
        "feature_0",
        "feature_1",
        "feature_2",
        "feature_3",
        "target"
    ],
    "label": "label",
    "label_values_or_threshold": [1],
    "facet": [{
        "name_or_index": "feature_1",
        "value_or_threshold": [1]
    }]
}
```

次に、`EndpointInput` (リアルタイムエンドポイントの場合) または `BatchTransformInput` (バッチ変換ジョブの場合) `"features"` のパラメータ値を使用してデータセット内の特徴量を検索し、`"predicted_label"` パラメータ値によってモデル出力から予測ラベルを選択します。

```
"EndpointInput": {
    ...
    "FeaturesAttribute": "features",
    "InferenceAttribute": "predicted_label"
    ...
}
```

別の方法として、`ProbabilityThresholdAttribute` パラメータ値を使用して確率値をバイナリ予測ラベルに変換することもできます。例えば、値が 0.6 の場合、確率が 0.6 を超えると、バイナリラベルは 1 と予測されます。

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

# バイアスドリフトのモニタリングジョブをスケジュールする
<a name="clarify-model-monitor-bias-drift-schedule"></a>

ベースラインを作成したら、`ModelBiasModelMonitor` クラスインスタンスの `create_monitoring_schedule()` メソッドを呼び出して、1 時間ごとのバイアスドリフトモニターをスケジュールできます。以下のセクションでは、リアルタイムエンドポイントにデプロイされたモデルとバッチ変換ジョブのバイアスドリフトモニターを作成する方法を示します。

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

データ品質モニタリングとは異なり、モデル品質をモニタリングしたい場合は Ground Truth ラベルを指定する必要があります。ただし、Ground Truth ラベルは遅れる可能性があります。これに対処するには、モニタリングスケジュールを作成するときにオフセットを指定します。タイムオフセットの作成方法の詳細については、「[モデルモニターのオフセット](model-monitor-model-quality-schedule.md#model-monitor-model-quality-schedule-offsets)」を参照してください。

ベースライン作成ジョブを送信済みである場合、モニタリングジョブはベースライン作成ジョブから分析設定を自動的に取得します。ベースライン作成のステップをスキップした場合、またはキャプチャするデータセットがトレーニングデータセットと異なる性質を持つ場合は、分析設定を指定する必要があります。

## リアルタイムエンドポイントにデプロイされたモデルのバイアスドリフトモニタリング
<a name="model-monitor-bias-quality-rt"></a>

リアルタイムエンドポイントのバイアスドリフトモニターをスケジュールするには、次のコードサンプルに示すように、`EndpointInput` インスタンスを `ModelBiasModelMonitor` インスタンスの `endpoint_input` 引数に渡します。

```
from sagemaker.model_monitor import CronExpressionGenerator
            
model_bias_monitor = ModelBiasModelMonitor(
    role=sagemaker.get_execution_role(),
    ...
)

model_bias_analysis_config = None
if not model_bias_monitor.latest_baselining_job:
    model_bias_analysis_config = BiasAnalysisConfig(
        model_bias_config,
        headers=all_headers,
        label=label_header,
    )

model_bias_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_bias_monitor.baseline_statistics(),
    constraints=model_bias_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    enable_cloudwatch_metrics=True,
    analysis_config=model_bias_analysis_config,
    endpoint_input=EndpointInput(
        endpoint_name=endpoint_name,
        destination="/opt/ml/processing/input/endpoint",
        start_time_offset="-PT1H",
        end_time_offset="-PT0H",
        probability_threshold_attribute=0.8,
    ),
)
```

## バッチ変換ジョブのバイアスドリフトモニタリング
<a name="model-monitor-bias-quality-bt"></a>

バッチ変換ジョブのバイアスドリフトモニターをスケジュールするには、次のコードサンプルに示すように、`BatchTransformInput` インスタンスを `ModelBiasModelMonitor` インスタンスの `batch_transform_input` 引数に渡します。

```
from sagemaker.model_monitor import CronExpressionGenerator
                
model_bias_monitor = ModelBiasModelMonitor(
    role=sagemaker.get_execution_role(),
    ...
)

model_bias_analysis_config = None
if not model_bias_monitor.latest_baselining_job:
    model_bias_analysis_config = BiasAnalysisConfig(
        model_bias_config,
        headers=all_headers,
        label=label_header,
    )
    
schedule = model_bias_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_bias_monitor.baseline_statistics(),
   constraints=model_bias_monitor.suggested_constraints(),
   schedule_cron_expression=CronExpressionGenerator.hourly(),
   enable_cloudwatch_metrics=True,
   analysis_config=model_bias_analysis_config,
   batch_transform_input=BatchTransformInput(
        destination="opt/ml/processing/input",
        data_captured_destination_s3_uri=s3_capture_path,
        start_time_offset="-PT1H",
        end_time_offset="-PT0H",
        probability_threshold_attribute=0.8
   ),
)
```

# データのバイアスドリフトのレポートを確認する
<a name="clarify-model-monitor-bias-drift-report"></a>

モニタリングの結果を SageMaker Studio で生成されたレポートで確認できない場合は、次を実行するとレポートを出力できます。

```
schedule_desc = model_bias_monitor.describe_schedule()
execution_summary = schedule_desc.get("LastMonitoringExecutionSummary")
if execution_summary and execution_summary["MonitoringExecutionStatus"] in ["Completed", "CompletedWithViolations"]:
    last_model_bias_monitor_execution = model_bias_monitor.list_executions()[-1]
    last_model_bias_monitor_execution_report_uri = last_model_bias_monitor_execution.output.destination
    print(f'Report URI: {last_model_bias_monitor_execution_report_uri}')
    last_model_bias_monitor_execution_report_files = sorted(S3Downloader.list(last_model_bias_monitor_execution_report_uri))
    print("Found Report Files:")
    print("\n ".join(last_model_bias_monitor_execution_report_files))
else:
    last_model_bias_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_bias_monitor_execution:
    model_bias_violations = last_model_bias_monitor_execution.constraint_violations()
    if model_bias_violations:
        print(model_bias_violations.body_dict)
```

モデルがリアルタイムエンドポイントにデプロイされている場合、**[エンドポイント]** タブを選択してエンドポイントをダブルクリックすると、SageMaker Studio で分析結果と CloudWatch メトリクスを視覚化して表示できます。

# バイアスドリフト分析の CloudWatch メトリクス
<a name="clarify-model-monitor-bias-drift-cw"></a>

このガイドでは、SageMaker Clarify のバイアスドリフト分析に使用できる CloudWatch メトリクスとそのプロパティについて説明します。バイアスドリフトモニタリングジョブは、[トレーニング前のバイアスメトリクス](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-measure-data-bias.html)と[トレーニング後のバイアスメトリクス](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-measure-post-training-bias.html)の両方を計算し、次の CloudWatch 名前空間に公開します。
+ リアルタイムエンドポイントの場合: `aws/sagemaker/Endpoints/bias-metrics`
+ バッチ変換ジョブの場合: `aws/sagemaker/ModelMonitoring/bias-metrics` 

CloudWatch メトリックス名は、メトリクスのショートネームを `bias_metric` に追加します。

例えば、`bias_metric_CI` はクラス不均衡 (CI) のバイアスメトリクスです。

**注記**  
`+/- infinity` は浮動小数点数 `+/- 2.348543e108` として公開され、null 値を含むエラーは公開されません。

各メトリクスには次のプロパティがあります。
+ `Endpoint`: モニタリング対象のエンドポイントの名前 (該当する場合)。
+ `MonitoringSchedule`: モニタリングジョブのスケジュールの名前。
+ `BiasStage`: バイアスドリフトモニタリングジョブのステージの名前。[`Pre-training`] または [`Post-Training`] のいずれかを選択します。
+ `Label`: モニタリングジョブの分析設定 `label` によって提供されるターゲット特徴量の名前。
+ `LabelValue`: モニタリングジョブの分析設定 `label_values_or_threshold` によって提供されるファセット特徴量の名前。
+ `Facet`: モニタリングジョブ分析設定ファセット `name_of_index` によって提供されるファセットの名前。
+ `FacetValue`: モニタリングジョブ分析設定ファセット `nvalue_or_threshold` によって提供されるファセットの値。

モニタリングジョブがメトリクスを公開しないようにするには、[モデルバイアスジョブ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelBiasJobDefinition.html) 定義の `Environment` マップで `publish_cloudwatch_metrics` を `Disabled` に設定します。