MLモデルのバイアス検知
保護属性、格差のある影響、fairlearnの指標、均等オッズ、人口統計学的パリティについて学習します。
「MLモデルのバイアス検知」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
アルゴリズムバイアスとは
モデルの予測が、センシティブ属性(性別、人種、年齢)で定義されるグループに対して体系的に不利になる場合、そのモデルにはバイアスがあります。バイアスは偏ったトレーニングデータに起因することが多く、採用、融資、医療の意思決定で実害を引き起こす可能性があります。
センシティブ属性
センシティブ属性とは、性別や民族など、公平性を測定する対象となる属性です。公平性のメトリクスは、その属性が定義するグループ間でモデルの動作を比較します。これは、その属性がモデルの入力として使われていない場合でも同様です。
人口統計的パリティ
人口統計的パリティでは、グループ間で陽性予測率が等しいことが求められます。ローンモデルがグループAの60%を承認する一方で、グループBでは35%しか承認しない場合、申請者の実際の信用力にかかわらず、人口統計的パリティに違反しています。
# P(prediction = 1 | group = A) == P(prediction = 1 | group = B)等化オッズ
等化オッズは、より厳しい基準です。グループ間で真陽性率と偽陽性率が等しいことを求めます。これは真のラベルを条件とするため、モデルが各グループに対して同程度に正確であれば、選択率が異なることを許容します。
# TPR and FPR equal across groups
# P(pred=1 | y=1, A) == P(pred=1 | y=1, B)
# P(pred=1 | y=0, A) == P(pred=1 | y=0, B)パリティとオッズの比較
これらの指標は互いに両立しない場合があります。
- 人口統計的パリティは真のラベルを考慮しないため、ベースレートが実際に異なる場合でも、率を等しくすることを求める可能性があります
- 等化オッズは真のラベルを尊重しますが、選択率が等しくないことを許容します
どの状況でも普遍的に正しい指標はありません。選択は、状況と法制度によって決まります。
fairlearnの紹介
fairlearnは、不公平性を測定および緩和するためのPythonライブラリです。中心となる測定ツールはMetricFrameで、センシティブグループ別に分解した任意のメトリクスを計算します。
import pandas as pd
from fairlearn.metrics import MetricFrame
from sklearn.metrics import accuracy_score, selection_rateMetricFrameの構築
メトリクスの辞書、真のラベル、予測値、sensitive_featuresを渡します。fairlearnは各メトリクスをグループごとに評価します。
mf = MetricFrame(
metrics={
"accuracy": accuracy_score,
"selection_rate": selection_rate,
},
y_true=y_test,
y_pred=y_pred,
sensitive_features=X_test["gender"],
)グループ別の結果
by_group属性は、各グループの各メトリクスを表にして返すため、格差をひと目で確認できます。
print(mf.by_group)
# accuracy selection_rate
# gender
# female 0.81 0.34
# male 0.83 0.59全体と差分
fairlearnは集計結果も提供します。overallはデータセット全体を表し、difference()やratio()などのヘルパーは、最も良いグループと最も悪いグループの差を要約します。
print(mf.overall)
print(mf.difference(method="between_groups"))
# selection_rate 0.25 -> 25 point gap between groups格差の可視化
by_groupの棒グラフにすると、数値を直感的に把握できます。同じメトリクスの棒の間に大きな差があれば、モデルがグループによって異なる扱いをしている明確な警告サインです。
mf.by_group.plot.bar(
subplots=True,
layout=[1, 2],
figsize=(10, 4),
title="Metrics by group",
)検出から緩和へ
バイアスを定量化した後、fairlearnでは、ExponentiatedGradientなどの緩和アルゴリズムや、ThresholdOptimizerを使った後処理を利用できます。これらは、再学習やしきい値の調整によって公平性の制約を満たします。必ず最初に検出を行ってください。測定していないものを修正することはできません。
理解度チェック
公平性に関する知識を確認しましょう。
まとめ
バイアスの検出方法を学びました。
- 人口統計的パリティはグループ間の陽性予測率を等しくします
- 等化オッズはラベルを条件としてTPRとFPRを等しくします
- fairlearn MetricFrameは、
sensitive_featuresのグループごとにメトリクス辞書を計算します by_groupを可視化して格差を見つけ、その後で緩和を適用します
よくある質問
「MLモデルのバイアス検知」レッスンは無料ですか?
はい。「MLモデルのバイアス検知」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「MLモデルのバイアス検知」で何を学びますか?
保護属性、格差のある影響、fairlearnの指標、均等オッズ、人口統計学的パリティについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「MLモデルのバイアス検知」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。