
SageMaker Clarifyバイアス分析をしてみた
SageMaker Clarifyとは
バイアス分析や瀬悦明可能性の評価を実行できる。モデルやデータの透明性を高め、モデルの予測がどのように行われているかを理解するのに役立つSDKツール。
やること
XGBoostでClarifyの結果を確認する。
※XGBoostの推論ができていない場合は下記を7まで実行する。8は終了時に実行する。
amegaeru.hatenablog.jp
実践!
1.Clarifyセットアップ
from sagemaker import Session from sagemaker.clarify import SageMakerClarifyProcessor # SageMakerセッションの初期化 sagemaker_session = Session() # Clarifyプロセッサーの初期化 clarify_processor = SageMakerClarifyProcessor( role=role, # IAMロール instance_count=1, # 使用するインスタンス数 instance_type="ml.t3.medium", # インスタンスタイプを変更 sagemaker_session=sagemaker_session ) print("SageMakerClarifyProcessor が正常に初期化されました。")

2.データバイアス分析
from sagemaker.clarify import DataConfig, BiasConfig, SageMakerClarifyProcessor # DataConfig の設定 data_config = DataConfig( s3_data_input_path=f"s3://{bucket}/{prefix}/train.csv", # トレーニングデータのS3パス s3_output_path=f"s3://{bucket}/clarify-output", # Clarifyの出力を保存するS3パス label="label", # ラベル列名 headers=["label", "sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"], # カラム名 dataset_type="text/csv" # データ形式 ) # BiasConfig の設定 bias_config = BiasConfig( label_values_or_threshold=[1], # ポジティブラベル facet_name="sepal length (cm)", # 分析対象の特徴量 facet_values_or_threshold=[5.5] # しきい値を指定 ) # Clarifyプロセッサーの初期化 clarify_processor = SageMakerClarifyProcessor( role=role, instance_count=1, # 使用するインスタンス数 instance_type="ml.t3.medium", # インスタンスタイプを変更 sagemaker_session=sagemaker_session ) # バイアス分析の実行 clarify_processor.run_pre_training_bias( data_config=data_config, data_bias_config=bias_config, methods="all" # 全ての分析メソッドを使用 )


INFO:sagemaker-clarify-processing:Collected analyses: 配下のJSONを確認する。
{'version': '1.0', 'pre_training_bias_metrics': {'label': 'label', 'facets': {'sepal length (cm)': [ {'value_or_threshold': '(5.5, 7.7 ]', 'metrics': [ {'name': 'CDDL', 'description': 'Conditional Demographic Disparity in Labels (CDDL)', 'value': None, 'error': 'Group variable is empty or not provided' }, {'name': 'CI', 'description': 'Class Imbalance (CI)', 'value': -0.16666666666666666 }, {'name': 'DPL', 'description': 'Difference in Positive Proportions in Labels (DPL)', 'value': -0.20857142857142855 }, {'name': 'JS', 'description': 'Jensen-Shannon Divergence (JS)', 'value': 0.025149769513246163 }, {'name': 'KL', 'description': 'Kullback-Liebler Divergence (KL)', 'value': 0.0959978824434343 }, {'name': 'KS', 'description': 'Kolmogorov-Smirnov Distance (KS)', 'value': 0.20857142857142863 }, {'name': 'LP', 'description': 'L-p Norm (LP)', 'value': 0.29496454300924557 }, {'name': 'TVD', 'description': 'Total Variation Distance (TVD)', 'value': 0.20857142857142857 } ] } ] }, 'label_value_or_threshold': '1' }
| キー | 説明 | 確認ポイント |
|---|---|---|
| "pre_training_bias_metrics" | 事前バイアス指標(学習前のデータにバイアスがあるか) | 各指標(DPL, JS, CI など)の値 |
| "facet" | バイアス分析対象の特徴量 | sepal length (cm) など |
| "label" | 目的変数(分類対象のラベル) | label |
| "value_or_threshold" | バイアスの基準値 | 5.5 で分けたときの結果 |
| "metrics" | 指標の一覧 | DPL, JS, KL, TVD など |
感想
モデルのバイアス確認がどうやってもできなかった。まだまだだ。。。