モデル品質のベースラインを作成する - Amazon SageMaker

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

モデル品質のベースラインを作成する

モデルによる予測と 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 )
  2. 次に、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)
  3. ベースラインジョブの終了後、ジョブが生成した制約を確認できます。まず、ModelQualityMonitor オブジェクトの latest_baselining_job メソッドを呼び出して、ベースラインジョブの結果を取得します。

    baseline_job = model_quality_monitor.latest_baselining_job
  4. ベースラインジョブでは制約が提案されます。これは、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 前処理スクリプトの例は、科学的記数法の数値を 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 のドキュメントで定義されているように、前処理スクリプトをベースラインまたはモニタリングスケジュールに record_preprocessor_script として追加できます。

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

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