あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

【AWS】SageMaker Clarifyでバイアス分析をしてみた


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 など



感想

モデルのバイアス確認がどうやってもできなかった。まだまだだ。。。