

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

# モデルの質ベースラインを作成する
<a name="model-monitor-model-quality-baseline"></a>

モデルによる予測と Amazon S3 に保存したベースラインデータセット内の正解ラベルを比較するベースラインジョブを作成します。通常、トレーニングデータセットをベースラインデータセットとして使用します。ベースラインジョブはモデルのメトリクスを計算し、モデル品質のドリフトのモニタリングに使用する制約を提案します。

ベースラインジョブを作成するには、モデルの予測と、データの Ground Truth を表すラベルが含まれているデータセットが必要です。

ベースラインジョブを作成するには、SageMaker Python SDK で提供される `ModelQualityMonitor` クラスで、次のステップを実行します。

**モデル品質のベースラインジョブを作成するには**

1.  まず、`ModelQualityMonitor` クラスのインスタンスを作成します。次のコードスニペットは、これを実行する方法を説明しています。

   ```
   from sagemaker import get_execution_role, session, Session
   from sagemaker.model_monitor import ModelQualityMonitor
                   
   role = get_execution_role()
   session = Session()
   
   model_quality_monitor = ModelQualityMonitor(
       role=role,
       instance_count=1,
       instance_type='ml.m5.xlarge',
       volume_size_in_gb=20,
       max_runtime_in_seconds=1800,
       sagemaker_session=session
   )
   ```

1. 次に、`ModelQualityMonitor` オブジェクトの `suggest_baseline` メソッドを呼び出して、ベースラインジョブを実行します。次のコードスニペットは、予測とAmazon S3 に保存されたラベルの両方が含まれているベースラインデータセットがあることを前提としています。

   ```
   baseline_job_name = "MyBaseLineJob"
   job = model_quality_monitor.suggest_baseline(
       job_name=baseline_job_name,
       baseline_dataset=baseline_dataset_uri, # The S3 location of the validation dataset.
       dataset_format=DatasetFormat.csv(header=True),
       output_s3_uri = baseline_results_uri, # The S3 location to store the results.
       problem_type='BinaryClassification',
       inference_attribute= "prediction", # The column in the dataset that contains predictions.
       probability_attribute= "probability", # The column in the dataset that contains probabilities.
       ground_truth_attribute= "label" # The column in the dataset that contains ground truth labels.
   )
   job.wait(logs=False)
   ```

1. ベースラインジョブの終了後、ジョブが生成した制約を確認できます。まず、`ModelQualityMonitor` オブジェクトの `latest_baselining_job` メソッドを呼び出して、ベースラインジョブの結果を取得します。

   ```
   baseline_job = model_quality_monitor.latest_baselining_job
   ```

1. ベースラインジョブでは制約が提案されます。これは、Model Monitor が測定するメトリクスのしきい値です。メトリクスがこの提案されたしきい値を超えた場合、Model Monitor は違反を報告します。ベースラインジョブが生成した制約を表示するには、ベースラインジョブの `suggested_constraints` メソッドを呼び出します。次のコードスニペットは、Pandas データフレームにバイナリ分類モデルの制約をロードします。

   ```
   import pandas as pd
   pd.DataFrame(baseline_job.suggested_constraints().body_dict["binary_classification_constraints"]).T
   ```

   生成された制約を表示し、必要に応じて変更してから、モニタリングに使用することをお勧めします。例えば、制約が厳しすぎると、違反アラートが必要以上に多くなる可能性があります。

   制約に科学的記数法で表現された数値が含まれている場合は、その数値を float に変換する必要があります。次の Python [前処理スクリプト](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-pre-and-post-processing.html#model-monitor-pre-processing-script)の例は、科学的記数法の数値を float に変換する方法を示しています。

   ```
   import csv
   
   def fix_scientific_notation(col):
       try:
           return format(float(col), "f")
       except:
           return col
   
   def preprocess_handler(csv_line):
       reader = csv.reader([csv_line])
       csv_record = next(reader)
       #skip baseline header, change HEADER_NAME to the first column's name
       if csv_record[0] == “HEADER_NAME”:
          return []
       return { str(i).zfill(20) : fix_scientific_notation(d) for i, d in enumerate(csv_record)}
   ```

   [Model Monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html) のドキュメントで定義されているように、前処理スクリプトをベースラインまたはモニタリングスケジュールに `record_preprocessor_script` として追加できます。

1. 制約の調整が完了したら、モニタリングスケジュールを作成するときにその制約を `constraints` パラメータとして渡します。詳細については、「[モデルの質モニタリングジョブをスケジュールする](model-monitor-model-quality-schedule.md)」を参照してください。

提案されたベースライン制約は、`output_s3_uri` で指定した場所の constraints.json ファイルに含まれています。このファイルのスキーマの詳細については、「[制約のスキーマ (constraints.json ファイル)](model-monitor-byoc-constraints.md)」を参照してください。