データ・バイアス検出 - 例

データにおけるバイアスは、そのデータの一部の要素について表現が多すぎるか重みが大きすぎるときに発生する可能性があります。データ・バイアス・ディテクタでは、何をバイアスとみなすかについてしきい値を事前に定義することのない、データ・バイアスの定量的な測定が提供されます。データ・バイアス評価は、そのデータの顕著な特徴と、対処する特有の問題によって異なります。達成する必要がある目標に基づいて、独自の許容可能バイアス・レベルを設定する必要があります。

データ・バイアス検出のワークフロー

OML RESTサービスを介してデータ・バイアスを検出するには、次のステップに従います:
  1. アクセス・トークンの取得
  2. データ・バイアス検出ジョブを作成し実行します。
  3. データ・バイアス・ジョブの詳細を表示します。
  4. 出力表を問い合せて、センシティブ特徴について検出されたデータ・バイアス詳細を表示します。

1: アクセス・トークンの取得

OML Servicesにリクエストを送信するには、Oracle Machine Learning (OML)アカウントの資格証明を使用して認証トークンを取得する必要があります。トークンを認証および取得するには、-dオプションを指定したcURLを使用して、Oracle Machine Learningユーザー管理クラウド・サービスRESTエンドポイント/oauth2/v1/tokenにOracle Machine Learningアカウントの資格証明を渡します。次のコマンドを実行して、アクセス・トークンを取得します:

$ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"grant_type":"password", "username":"'<yourusername>'", 
"password":"' <yourpassword>'"}'"<oml-cloud-service-location-url>/omlusers/api/oauth2/v1/token"
説明:
  • -X POSTで、HTTPサーバーとの通信時にPOSTリクエストを使用することを指定します
  • -headerで、リクエストに必要なヘッダー(application/json)を定義します
  • -dで、ユーザー名およびパスワードの認証資格証明をPOSTリクエストのデータとしてHTTPサーバーに送信します
  • Content-Typeで、レスポンス形式(JSON)を定義します
  • Acceptでは、レスポンス形式(JSON)を定義します
  • yourusernameは、デフォルトのOML_DEVELOPERロールを持つOracle Machine Learningユーザーのユーザー名です
  • yourpasswordは、ユーザー名のパスワードです
  • oml-cloud-service-location-urlは、テナンシIDおよびデータベース名を含むOracle Machine Learningユーザー管理クラウド・サービスのインスタンスURLのRESTサーバー部分を含むURLです。URLは、Oracle Autonomous Databaseインスタンスのサービス・コンソールの「開発」タブから取得できます。

2: データ・バイアス検出ジョブの作成

この例で使用されているデータセットであるAdultデータセット(Census Incomeデータセットとも呼ばれる)は、多変量データセットです。これには、30,940人の成人の国勢調査データが含まれています。このデータセットに関連付けられている予測タスクは、個人の年収が50Kを超えているかどうかを判断することです。

このデータ・バイアス検出の例で使用されているデータセット内の属性を次に示します:

表 - Adultデータセットの属性

属性 タイプ 説明
Income Binary >50K または<=50K

ノート:

この属性は、分類モデルのoutcomeとして使用されます。
Age Continuous 17から90才まで
Gender Binary 男性、女性
Marital Status Categorical
  • 既婚-市民配偶者
  • 離婚
  • 未婚
  • 別居
  • 死別
  • 既婚-配偶者不在
  • 既婚-軍人配偶者
データ・バイアス検出とデータ・バイアス軽減のためのジョブを作成するには、次のPOSTリクエストをOML Services内の/omlmod/v1/jobsエンドポイントに送信します。

ノート:

OML Servicesは、DBMS_SCHEDULERと対話してジョブに関するアクションを実行します。

次に、データ・バイアス検出ジョブのリクエストの例を示します:

curl -v -X POST <oml-cloud-service-location-url>/-H "Content-Type: 
application/json" -H "accept: application/json" -d
'{"jobProperties":{
	  "jobName":"jobNametest",
	  "jobType":"DATA_BIAS",
	  "jobServiceLevel":"MEDIUM",
	  "inputSchemaName":"OMLUSER",
	  "outputSchemaName":"OMLUSER",
	  "outputData":"adultbias_tab",
	  "jobDescription":"Data_Bias job,specify all parameters",
	  "inputData":"ADULT",
	  "sensitiveFeatures":["\"GENDER\""],
	  "strata":["\"MARITAL_STATUS\""],
	  "outcomeColumn":"INCOME",
	  "positiveOutcome":">50K",
	  "categoricalBinNum":6
	  "numericalBinNum":10}}'
      -H 'Authorization:Bearer <token>'

データ・バイアス検出ジョブ作成リクエストのレスポンス:

"jobId":"OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53","links":[{"rel":"self","href":"http://<oml-cloud-service-location-url>/omlmod/v1/jobs/OML%2453D60B34_A275_4B2B_831C_2C8AE40BCB53"}]}

このコマンドで使用されているパラメータを次に示します:

  • jobName: OMLジョブの名前。この例では、名前はjobNametestです。
  • jobType: 実行するジョブのタイプを指定します。これは、データ・バイアス・ジョブの場合はDATA_BIASに設定されます。
  • jobServiceLevel: MEDIUM
  • inputSchemaName: OMLUSER
  • outputSchemaName: OMLUSER
  • outputData: これは、出力データ表の名前です。この例では、出力データ表の名前はadultbias_tabです
  • jobDescription: これは、Data_Biasジョブの説明です。
  • inputData: これは、入力データ表の名前です。この例では、表名はADULTです。
  • sensitiveFeatures: これは、データ・バイアスの検出と軽減が実行される特徴のリストです。デフォルトでは、250個の特徴をデータ・バイアス検出のためにモニターできます。250個を超える特徴がある場合は、エラーになります。指定できる特徴は、数値型またはカテゴリ型のどちらかです。この例では、センシティブ特徴用に渡されている属性はGENDERです。

    ノート:

    このリリースでは、テキスト、ネストおよび日付データ型はサポートされていません。
  • strata:これは、strataという3番目の変数を条件付けることで、交絡変数からのデータ・バイアスの影響を軽減するための条件付き人口統計差異(CDD)を計算する、ストラタ名の配列です。この例では、strataに指定されている名前はMARITAL_STATUSです。
  • outcomeColumn: これは、機械学習モデルのトレーニングの結果である、入力データ内の特徴の名前です。この結果は、数値型またはカテゴリ型のどちらかである必要があります。この例では、それはINCOMEです。
  • positiveOutcome: これは、データセット内の特定のグループを有利にする値です。これにより、基本的に、そのグループについては陽性結果が示されます。この例では、陽性結果の値は>50Kです。
  • categoricalBinNum: カテゴリ型の特徴に対してビニングを実行するかどうかを示します。ビンの数は6に設定されています。
  • numericalBinNum: 数値型の特徴に対してビニングを実行するかどうかを示します。ビンの数は、デフォルト値10に設定されています。

3: 発行済ジョブの詳細の表示

次のコマンドを実行すると、ジョブの詳細が表示されます:

curl -v -X GET <oml-cloud-service-location-url>/omlmod/v1/jobs/'OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53' 
-H "Content-Type: application/json" -H 'Authorization:Bearer <token>'
この例では、
  • $tokenは、認可APIを介して取得されたトークンに割り当てられる環境変数を表します。
  • OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53はジョブIDです

ジョブ詳細リクエストのレスポンス

次に、ジョブ詳細リクエストのレスポンスを示します。ジョブがすでに以前に1回実行されている場合は、最後のジョブ実行に関する情報が返されます。

{"jobId":"OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53","jobRequest":{"jobSchedule":null,"jobProperties":{"jobType":"DATA_BIAS","inputSchemaName":"OMLUSER","outputSchemaName":"OMLUSER","outputData":"adultbias_tab","jobDescription":"Data_Bias job test case400,specify all parameters","jobName":"jobNametest","disableJob":false,"jobServiceLevel":"MEDIUM","inputData":"ADULT","sensitiveFeatures":["\"GENDER\""],"strata":["\"MARITAL_STATUS\""],"outcomeColumn":"INCOME","outcomeThreshold":null,"positiveOutcome":">50K","replaceResultTable":null,"pairwiseMode":null,"categoricalBinNum":6,"numericalBinNum":10}},"jobStatus":"CREATED","dateSubmitted":"2024-08-06T08:20:05.688706Z","links":[{"rel":"self","href":"http:<oml-cloud-service-location-url>/omlmod/v1/jobs/OML%2453D60B34_A275_4B2B_831C_2C8AE40BCB53"}],"jobFlags":[],"state":"SUCCEEDED","enabled":false,"lastStartDate":"2024-08-06T08:20:05.837534Z","runCount":1,"lastRunDetail":{"jobRunStatus":"SUCCEEDED","errorMessage":nul* Connection #0 to host <oml-cloud-service-location-url> left intact l,"requestedStartDate":"2024-08-06T08:20:05.752235Z","actualStartDate":"2024-08-06T08:20:05.837615Z","duration":"0 0:0:1.0"}}

ノート:

ジョブ・レスポンスでのjobIdoutputData名を書き留めます。これらは、出力表を問い合せて、ジョブ・リクエストで定義されていたセンシティブ特徴について検出されたデータ・バイアスの詳細を表示するために必要です。

4. データベースへの接続による出力表へのアクセス

データ・バイアス・ジョブが正常に発行されたら、データベースに接続して出力スキーマ内の出力表にアクセスする必要があります。この例では、
  • inputSchemaName: OMLUSER
  • outputSchemaName: OMLUSER
  • outputData: これは出力データ表です。この例では、名前はadultbias_tabです。
  1. 次のSQL問合せを実行して出力表内のレコードの数をカウントします:
    select * from
        OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53_ADULTBIAS_TAB;
    この例では、
    • OML$53D60B34_A275_4B2B_831C_2C8AE40BCB53はジョブIDです。
    • ADULTBIAS_TABは出力表名です。

    次に、パラメータsensitiveFeatureに渡されたGENDERについてと、パラメータstrataに渡されたMARITAL_STATUSについてデータ・バイアス結果を示します:

    {
        "metric": [
            {
                "group_a": "MALE",
                "CI": 0.33841,
                "SP": 0.19628
            },
            {
                "group_a": "FEMALE",
                "CI": -0.33841,
                "SP": -0.19628
            }
        ],
        "cdd": [
            {
                "strata": "MARITAL_STATUS",
                "result": [
                    {
                        "group_a": "MALE",
                        "CDD": 0.092269,
                        "detail": [
                            {
                                "subgroup": "MARRIED-CIV-SPOUSE",
                                "DD": -0.0036665
                            },
                            {
                                "subgroup": "NEVER-MARRIED",
                                "DD": 0.11335
                            },
                            {
                                "subgroup": "DIVORCED",
                                "DD": 0.23977
                            },
                            {
                                "subgroup": "SEPARATED",
                                "DD": 0.38267
                            },
                            {
                                "subgroup": "WIDOWED",
                                "DD": 0.31675
                            },
                            {
                                "subgroup": "MARRIED-SPOUSE-ABSENT",
                                "DD": 0.18168
                            },
                            {
                                "subgroup": "",
                                "DD": 0.015385
                            }
                        ]
                    },
                    {
                        "group_a": "FEMALE",
                        "CDD": -0.092269,
                        "detail": [
                            {
                                "subgroup": "MARRIED-CIV-SPOUSE",
                                "DD": 0.0036665
                            },
                            {
                                "subgroup": "NEVER-MARRIED",
                                "DD": -0.11335
                            },
                            {
                                "subgroup": "DIVORCED",
                                "DD": -0.23977
                            },
                            {
                                "subgroup": "SEPARATED",
                                "DD": -0.38267
                            },
                            {
                                "subgroup": "WIDOWED",
                                "DD": -0.31675
                            },
                            {
                                "subgroup": "MARRIED-SPOUSE-ABSENT",
                                "DD": -0.18168
                            },
                            {
                                "subgroup": "",
                                "DD": -0.015385
                            }
                        ]
                    }
                ]
            }
        ],
        "reweighing_matrix": [
            {
                "group_a": "MALE",
                "group_a_pos_weight": 0.78764,
                "non_group_a_pos_weight": 2.2,
                "group_a_neg_weight": 1.0935,
                "non_group_a_neg_weight": 0.85251
            },
            {
                "group_a": "FEMALE",
                "group_a_pos_weight": 2.2,
                "non_group_a_pos_weight": 0.78764,
                "group_a_neg_weight": 0.85251,
                "non_group_a_neg_weight": 1.0935
            }
        ]
    }
属性GENDERおよびMARITAL_STATUSに対して計算されたメトリックを見てみましょう:
  • 属性GENDERについてとグループMALEついて計算されたクラス不均衡(CI)および統計的均一性(SP)はです。一方、グループFEMALEのCI値とSP値は負です。これは、不利なグループ(female)のデータ・ポイントが、有利なグループより少ないことを示しています。機械学習トレーニング・プロセスの間に、モデルは、全体的なエラー率を最小限に抑えようとします。その結果、モデルは、多数派クラスの予測を得意とし、少数派または不利なクラスに関しては不得意になる傾向があります。
  • グループMALEFEMALEの条件付き人口統計差異は、それぞれ0.092269-0.092269です。strata MARITAL_STATUSについての計算されたCDDの合計がゼロであることに注目してください。これは、MARITAL_STATUSを考慮に入れた後であっても、このデータはまだMALEグループに偏っており(CDDが正であるため)、FEMALEグループに不利(CDDが負であるため)になっています。
  • GENDERについては、リウェイト・マトリックスが計算されます。リウェイトは、データ・バイアスを軽減するための方法です。リウェイトにより、不利なグループ内の正ラベルが付いたインスタンスに、より大きな重みを割り当てることで、データ・バイアスを減らします。基本的に、分類子では、重みがより大きいインスタンスに、より注意が払われ、それらの正しい分類が優先されます。目標は、分類子によって有利なグループが優先されず不利なグループへの既存の偏りが許可されないようにすることです。リウェイト・マトリックスをどのように適用できるかを次に示します:

    一部の機械学習パッケージでは、特定のモデルのトレーニング・パラメータとして行重みやサンプル重みが受け入れられます。たとえば、OracleのDBMS_DATA_MININGパッケージでは、一般化線形モデル(GLM)をトレーニングする間に「グローバル設定」でODMS_ROW_WEIGHT_COLUMN_NAMEを設定できます。トレーニング・プロセスに行重みを組み込めない分類アルゴリズムの場合、重み付けマトリックスは、データのリサンプリングのためのガイダンスの役割を果たします。

Adultのデータセットには偏りがあり、結果は、偏ったグループに依存しています。このため、グループMALEの所得率は、他の不利なグループFEMALEよりも高い正の値になります。このバイアスを軽減するために、トレーニングの間に、有利なグループにはより低い重みが割り当てられ、逆もまた同様のことが行われます。理想的なシナリオでは、データセットが偏っていないときは、偏ったグループMALES、WHITEなどと、結果>50K、<=50Kは独立しています。つまり、個人に、偏ったグループ(ここでは、それはGENDER)であっても結果が割り当てられます。