機械学習モデルが公平かどうかを簡単に確認する方法

機械学習モデルが公平かどうかを簡単に確認する方法

[[361220]]

[51CTO.com クイック翻訳] 私たちはますます分断が進む世界に住んでいます。世界の一部の地域では、人種や性別による違いや不平等が拡大しています。モデリングに使用されるデータは、通常、データ ソースを反映します。世界は偏っている可能性があり、データとモデルはそれを反映する可能性があります。機械学習エンジニアがモデルに偏りがあるかどうかを簡単に確認できる方法を提案します。現在、当社の公平性ツールは分類モデルに対してのみ機能します。

ケーススタディ

DELLEX 公平性モジュール (https://dalex.drwhy.ai/) の威力を実証するために、有名なドイツの信用データセット (https://archive.ics.uci.edu/ml/datasets/statlog+(german+credit+data)) を使用して、各信用申請者にリスクを割り当てます。この単純なタスクでは、解釈可能な決定木分類器の使用が必要になる場合があります。

  1. # インポート
  2. dalexをdxとしてインポートする
  3. numpyをnpとしてインポートする
  4.  
  5. sklearn.composeからColumnTransformer をインポートします
  6. sklearn.pipelineからパイプラインをインポートします
  7. sklearn.preprocessingからOneHotEncoder をインポートします
  8. sklearn.treeからDecisionTreeClassifier をインポートします
  9.  
  10. # クレジットデータ
  11. データ = dx.datasets.load_german()
  12.  
  13. # リスクターゲット
  14. X = data.drop (列 = 'リスク' )
  15. y = データ.リスク
  16.  
  17. categorical_features = [ '性別' '職業' '住宅' '貯蓄口座' "当座預金口座" '目的' ]
  18. categorical_transformer = パイプライン(ステップ=[
  19. ( 'onehot' 、 OneHotEncoder(handle_unknown= 'ignore' ))
  20. ])
  21.  
  22. プリプロセッサ = ColumnTransformer(トランスフォーマー=[
  23. ( 'cat' 、カテゴリ変換、カテゴリ特徴)
  24. ])
  25.  
  26. clf = パイプライン(ステップ=[
  27. ( 'プリプロセッサ' 、プリプロセッサ)、
  28. ( '分類子' 、 DecisionTreeClassifier(max_depth=7、 random_state=123))
  29. ])
  30.  
  31. clf.fit(X, y)
  32.  
  33. exp = dx.Explainer(clf, X, y)

dx.Explainer を取得したら、保護されたベクトル (各観測値 (個人) の性別、人種、国籍を示す機密属性の配列またはリスト) を使用してサブグループ内のすべての必要なメトリックを計算できるように、メソッド model_fairness() を実行する必要があります。これに加えて、どのサブグループ (つまり、保護された一意の要素) が最も高い権限を持っているかを示す必要があります。これは、privileged パラメータを使用して実行できます。この場合は、年配の男性になります。

  1. # 配列 価値観 たとえば、male_old、female_young などです。
  2.  
  3. 保護 = data.sex + '_' + np。ここで(data.age < 25, 'young' , 'old' )
  4. 特権 = '男性_年配'  
  5.      
  6. fobject = exp.model_fairness(保護 = 保護、特権 = 特権)

このオブジェクトには多くのプロパティがありますが、それぞれについて説明するのではなく、1 つのメソッドと 2 つのグラフに焦点を当てます。

それで、私たちのモデルは偏っているのでしょうか?

これは単純な質問ですが、偏見の性質上、答えは「場合による」となります。しかし、このアプローチは異なる視点からバイアスを測定するため、バイアスのあるモデルが漏れることがなくなります。公平性をチェックするには、fairness_check() メソッドを使用します。

  1. fobject.fairness_check(epsilon = 0.8) #デフォルトのイプシロン

以下は上記のコードからのコンソール出力です。

  1. 1 つの指標バイアスが検出されました: FPR
  2.  
  3. 結論: 1 つのメトリック スコアが許容範囲を超えたため、モデルは公正とは言えません。  イプシロンより
  4. これは、モデルが不公平であることを意味するのでなく、これらの指標基づいて自動的に承認されるわけではないことを意味します
  5.  
  6. 指標比率  'male_old'パラメータ'epsilon'設定されました  0.8なので指標は(0.8、1.25)の範囲内にある必要があります。
  7. TPR ACC PPV FPR STP
  8. 女性_老齢 1.006508 1.027559 1.000000 0.765051 0.927739
  9. 若い女性 0.971800 0.937008 0.879594 0.775330 0.860140
  10. 若い男性 1.030369 0.929134 0.875792 0.998532 0.986014

FPR (False Positive Rate) メトリックはバイアスを検出します。上記の出力は、モデルを自動的に承認することはできないことを示しています (上記の出力に記載されているとおり)。そのため、ユーザーが決定する必要があります。それは公平なモデルではないと思います。 FPR が低いということは、特権サブグループでは特権のないサブグループよりも誤検知が発生する可能性が高くなることを意味します。

fairness_check() の詳細な説明

元の DataFrame のバイアス、結論、メトリック比率に関する情報を取得します。指標には、TPR (真陽性率)、ACC (精度)、PPV (陽性予測値)、FPR (偽陽性率)、STP (統計的類似性) などがあります。これらのメトリックは、各非特権サブグループの混同マトリックス (https://en.wikipedia.org/wiki/Confusion_matrix) から導出され、特権サブグループに基づくメトリックで除算されます。考えられる結論は3つあります。

  1. #不公平
  2. 結論:あなたのモデル  2以上のメトリックスコアが許容限度を超えたため不公平です イプシロンより
  3. # 公平でもなければ ない 
  4. 結論: 1 つのメトリック スコアが許容範囲を超えたため、モデルは公正とは言えません。   epsilonによるモデルが不公平であることを意味するのではなくこれらの指標基づいて自動的に承認されるわけではないことを意味します。
  5. # 公平
  6. 結論: チェックされた公平性メトリック観点から、モデルは公平です

DA は、どのメトリックよりも優れたパフォーマンスを発揮する、真に公平なモデルですが、真の値 (ターゲット) が機密属性に依存する場合は、状況が複雑になり、この記事の範囲を超えてしまいます。つまり、いくつかの指標は異なりますが、必ずしもユーザーの基準を超えるわけではありません。さらに詳しく知りたい場合は、「Fairness and Machine Learning」という本、特に第 2 章を読むことをお勧めします。

しかし、疑問に思う人もいるかもしれません。なぜ私たちのモデルは不公平なのでしょうか? どのような基準でこの決定を下すのでしょうか?

この質問に答えるのは難しいですが、公平性を判断するアプローチが今のところ最善のアプローチであるように思われます。通常、各サブグループのスコアは、特権サブグループのスコアに近い値になります。数学的な観点から見ると、特権メトリックと非特権メトリックのスコアの比率は 1 に近くなるはずです。値が 1 に近いほど、モデルは公平になります。しかし、基準を少し緩めると、次のように言う方が理にかなっています。

ここで、ε は 0 から 1 の間の値であり、比率の最小許容値となります。デフォルトでは、採用でよく見られる 4/5 ルール (80% ルール) に従って 0.8 になります。メトリックの公平性と識別性の差の間に恣意的でない境界を見つけることは困難です。メトリックの比率が正確に 1 であるかどうかをチェックしても意味がありません。比率が 0.99 だったらどうなるでしょうか。これが、許容可能な識別度の具体的なしきい値がある唯一の既知の値である 0.8 をデフォルトの ε として選択することになった理由です。もちろん、ユーザーは必要に応じてこの値を変更できます。

偏見も生まれる

バイアス検出プロットは 2 つあります (ただし、バイアスを視覚化する方法は他にもたくさんあります)。

  • fairness_check - fairness_check() メソッドの直感的な表示
  • metric_scores – メトリックの生のスコアである metric_scores 属性を視覚化します。

型は、単にプロット メソッドの型引数に渡されます。

  1. fobject.plot() 関数

上の画像は、公平性チェックの出力に似たものを示しています。メトリック名はより標準的な公平性に相当するものに変更されていますが、式は参照しているメトリックを示しています。上記のグラフは直感的です。バーが赤い領域に達すると、メトリックが ε ベースの範囲外にあることを意味します。ビンの長さは |1-M| に相当します。ここで、M は特権のないメトリックの割合を特権のあるメトリックの割合で割ったものです (前の公平性チェックと同じです)。

  1. fobject.plot(タイプ='metric_scores')

公平性チェックが補足されたメトリック スコア プロットは、メトリックとその比率を適切に表現します。ここで、ポイントは生のメトリック スコアです。垂直線は特権メトリックスコアを表します。その線に近ければ近いほど良いです。

複数のモデルを 1 つのプロットにまとめて、簡単に比較することができます。 metric_scores を視覚化するためにいくつかのモデルを追加してみましょう。

  1. sklearn.ensembleからRandomForestClassifier をインポートします
  2. sklearn.linear_modelからLogisticRegression をインポートします
  3. sklearn.preprocessingからStandardScaler をインポートします
  4.  
  5. #モデルを作成する
  6. numeric_features = [ 'credit_amount' , 'duration' , 'age' ]
  7.  
  8. numeric_transformer = パイプライン(ステップ=[
  9. ( 'スケーラー' 、 StandardScaler())])
  10.  
  11. categorical_transformer = パイプライン(ステップ=[
  12. ( 'onehot' 、 OneHotEncoder(handle_unknown= 'ignore' ))])
  13.  
  14.  
  15. プリプロセッサ = ColumnTransformer(
  16. トランスフォーマー=[
  17. ( 'cat' 、カテゴリ変換、カテゴリ特徴)、
  18. ( 'num' 、数値変換、数値機能)])
  19.  
  20. clf_forest = パイプライン(ステップ=[( 'プリプロセッサ' , プリプロセッサ),
  21. ( 'classifier' 、 RandomForestClassifier(random_state=123、 max_depth=4))]).fit(X,y)
  22.  
  23. clf_logreg = パイプライン(ステップ=[( 'プリプロセッサ' , プリプロセッサ),
  24. ( '分類子' 、ロジスティック回帰(ランダム状態=123))]).fit(X,y)
  25.                        
  26. #説明オブジェクトを作成する
  27. exp_forest = dx.Explainer(clf_forest、X、y、詳細 = False )
  28. exp_logreg = dx.Explainer(clf_logreg, X,y, verbose = False )
  29.  
  30. #公平な説明を作成する
  31. fobject_forest = exp_forest.model_fairness(保護、特権)
  32. fobject_logreg = exp_logreg.model_fairness(保護、特権)
  33.  
  34. # 彼らのメトリックスコアを見てみましょう
  35. fobject.plot(オブジェクト=[fobject_forest, fobject_logreg], タイプ = "metric_scores" )

上記コードの出力。

それでは、fairness_check に基づいてグラフを確認してみましょう。

RandomForestClassifier は緑色の領域内にあるため、これらのメトリックに関しては公平であることがわかります。一方、LogisticRegression は 3 つの指標でレッド ゾーンに達しているため、公平とは言えません。

各プロットはインタラクティブであり、Python 視覚化パッケージ plotly を使用して作成されました。

結論

DALEX の公平性モジュールは、モデルの公平性を確保するための統一されたアクセス可能な方法です。モデルのバイアスを視覚化する方法は他にもありますので、ぜひチェックしてみてください。バイアスを軽減する方法は将来追加される予定です。長期的な計画としては、個人の公平性と回帰における公平性のサポートを追加することです。

ぜひご覧ください。次のコマンドを使用して dalex をインストールできます。

  1. pip インストール dalex –U

元のタイトル: 機械学習モデルが公平であるかどうかを簡単に確認する方法、著者: Jakub Wiśniewski

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  2020 年の AI と分析の 5 つの災害

>>:  ロボットにあなたのことをもっと理解させるにはどうすればいいでしょうか?

ブログ    

推薦する

テレンス・タオ:初心者はAIツールを使って専門家レベルのタスクを実行すべきではないし、GPTは専門家にとってあまり役に立たない

著名な数学者テレンス・タオ氏はここ数か月、ChatGPTなどの大規模モデルAIツールを使用して数学の...

...

MIT、物体を拾うための「最強のアシスタント」を発表、少量のトレーニングサンプルで自然言語制御を実現

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

チップ大手がCESで新年の幕開けを飾る戦いを繰り広げる! AMD、インテル、NVIDIA、クアルコムの衝撃的な対決

毎年恒例のテクノロジー業界のオープニングショー「CES」が現在、米国ラスベガスで開催されています。 ...

人工知能チュートリアル(I):基礎

今日、コンピュータサイエンスの分野の学生や実務家にとって、人工知能、データサイエンス、機械学習、ディ...

6つのトラックと10のテクノロジー: インテリジェントボディと3D生成がAIを活性化し、空間コンピューティングがターミナル変革を切り開く

2000年前に生きていた古代人が1000年前に戻ったとしても、適応できるものは多くないかもしれません...

...

機械学習とディープラーニングの違いは何ですか? なぜ機械学習を選択する人が増えるのでしょうか?

機械学習とディープラーニングの違いは何でしょうか?この記事から答えを見つけてみましょう。ターゲットこ...

...

AIの次の波に乗る:リスクを減らしながら成功する

近年、人工知能(AI)はビジネスや業界でますます注目を集めています。企業が AI を使用する方法も、...

...

Python データ分析の基礎: 外れ値の検出と処理

機械学習において、異常検出と処理は比較的小さな分野、または機械学習の副産物です。一般的な予測問題では...

人工知能の急速な発展は人間に取って代わるのでしょうか?

[[347812]]現在の人工知能技術の発展は、主にコンピュータを媒体として活用し、自動化技術の発...

楊振:ビッグデータとAI技術の発展の観点から、クロスチェーン技術は必要かつ不可避である

著者: 楊振、上級ソフトウェアエンジニア、アーキテクト、独立講師。ソフトウェア開発経験18年。『Et...

...