公平性指標

Fairness Indicatorsは、より広範なTensorflowツールキットと連携して、公平性に関する懸念のモデルを評価および改善するチームをサポートするように設計されています。このツールは現在、多くの製品で社内で積極的に使用されており、独自のユースケースを試すためにベータ版で利用できるようになりました。

公平性インジケーターダッシュボード

公平性指標とは何ですか?

Fairness Indicatorsは、バイナリおよびマルチクラス分類器の一般的に識別される公平性メトリックの簡単な計算を可能にするライブラリです。公平性の懸念を評価するための既存のツールの多くは、大規模なデータセットやモデルではうまく機能しません。 Googleでは、10億ユーザーのシステムで動作するツールを用意することが重要です。公平性指標を使用すると、あらゆる規模のユースケースで評価できます。

特に、公平性指標には次の機能が含まれます。

  • データセットの分布を評価する
  • 定義されたユーザーグループ間でスライスされたモデルのパフォーマンスを評価します
    • 複数のしきい値での信頼区間と評価により、結果に自信を持ってください
  • 個々のスライスを深く掘り下げて、根本原因と改善の機会を探ります

このケーススタディは、ビデオとプログラミング演習を完備しており、公平性の懸念を長期にわたって評価するために、公平性インジケーターを自社製品の1つでどのように使用できるかを示しています。

pipパッケージのダウンロードには次のものが含まれます。

Tensorflowモデルでの公平性インジケーターの使用

データ

TFMAを使用して公平性インジケーターを実行するには、スライスする機能の評価データセットにラベルが付けられていることを確認してください。公平性の懸念に対応する正確なスライス機能がない場合は、評価セットを見つけるか、機能セット内で結果の不一致を強調する可能性のあるプロキシ機能を検討することを検討してください。追加のガイダンスについては、ここを参照してください。

モデル

TensorflowEstimatorクラスを使用してモデルを構築できます。 KerasモデルのサポートはまもなくTFMAに提供されます。 KerasモデルでTFMAを実行する場合は、以下の「モデルに依存しないTFMA」セクションを参照してください。

Estimatorがトレーニングされたら、評価のために保存されたモデルをエクスポートする必要があります。詳細については、 TFMAガイドを参照してください。

スライスの構成

次に、評価するスライスを定義します。

slice_spec = [
  tfma.slicer.SingleSliceSpec(columns=[‘fur color’])
]

交差するスライス(たとえば、毛皮の色と高さの両方)を評価する場合は、次のように設定できます。

slice_spec = [
  tfma.slicer.SingleSliceSpec(columns=[‘fur_color’, ‘height’])
]`

公平性メトリクスを計算する

公平性インジケーターのコールバックをmetrics_callbackリストに追加します。コールバックでは、モデルが評価されるしきい値のリストを定義できます。

from tensorflow_model_analysis.addons.fairness.post_export_metrics import fairness_indicators

# Build the fairness metrics. Besides the thresholds, you also can config the example_weight_key, labels_key here. For more details, please check the api.
metrics_callbacks = \
    [tfma.post_export_metrics.fairness_indicators(thresholds=[0.1, 0.3,
     0.5, 0.7, 0.9])]

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path=tfma_export_dir,
    add_metrics_callbacks=metrics_callbacks)

構成を実行する前に、信頼区間の計算を有効にするかどうかを決定します。信頼区間は、ポアソンブートストラップを使用して計算され、20サンプル以上の再計算が必要です。

compute_confidence_intervals = True

TFMA評価パイプラインを実行します。

validate_dataset = tf.data.TFRecordDataset(filenames=[validate_tf_file])

# Run the fairness evaluation.
with beam.Pipeline() as pipeline:
  _ = (
      pipeline
      | beam.Create([v.numpy() for v in validate_dataset])
      | 'ExtractEvaluateAndWriteResults' >>
       tfma.ExtractEvaluateAndWriteResults(
                 eval_shared_model=eval_shared_model,
                 slice_spec=slice_spec,
                 compute_confidence_intervals=compute_confidence_intervals,
                 output_path=tfma_eval_result_path)
  )
eval_result = tfma.load_eval_result(output_path=tfma_eval_result_path)

公平性指標をレンダリングする

from tensorflow_model_analysis.addons.fairness.view import widget_view

widget_view.render_fairness_indicator(eval_result=eval_result)

公平性指標

公平性インジケーターを使用するためのヒント:

  • 左側のチェックボックスをオンにして、表示するメトリックを選択します。各メトリックの個々のグラフが順番にウィジェットに表示されます。
  • ドロップダウンセレクターを使用して、グラフの最初のバーであるベースラインスライスを変更します。デルタは、このベースライン値を使用して計算されます。
  • ドロップダウンセレクターを使用してしきい値を選択します。同じグラフに複数のしきい値を表示できます。選択したしきい値は太字になり、太字のしきい値をクリックして選択を解除できます。
  • バーにカーソルを合わせると、そのスライスのメトリックが表示されます。
  • 現在のスライスとベースラインの差の割合を特定する「Diffw.baseline」列を使用して、ベースラインとの差異を特定します。
  • What-Ifツールを使用して、スライスのデータポイントを詳細に調べます。例については、こちらをご覧ください。

複数のモデルのレンダリングの公平性インジケーター

公平性指標を使用して、モデルを比較することもできます。単一のeval_resultを渡す代わりに、multi_eval_resultsオブジェクトを渡します。これは、2つのモデル名をeval_resultオブジェクトにマッピングするディクショナリです。

from tensorflow_model_analysis.addons.fairness.view import widget_view

eval_result1 = tfma.load_eval_result(...)
eval_result2 = tfma.load_eval_result(...)
multi_eval_results = {"MyFirstModel": eval_result1, "MySecondModel": eval_result2}

widget_view.render_fairness_indicator(multi_eval_results=multi_eval_results)

公平性指標-モデル比較

モデル比較は、しきい値比較と一緒に使用できます。たとえば、2つのしきい値セットで2つのモデルを比較して、公平性メトリックの最適な組み合わせを見つけることができます。

非TensorFlowモデルでの公平性インジケーターの使用

さまざまなモデルとワークフローを持つクライアントをより適切にサポートするために、評価対象のモデルに依存しない評価ライブラリを開発しました。

機械学習システムを評価したい人は誰でもこれを使用できます。特に、TensorFlowベースではないモデルがある場合はそうです。 Apache Beam Python SDKを使用すると、スタンドアロンのTFMA評価バイナリを作成し、それを実行してモデルを分析できます。

データ

このステップは、評価を実行するデータセットを提供することです。ラベル、予測、およびスライスしたいその他の機能を含むtf.Exampleプロト形式である必要があります。

tf.Example {
    features {
        feature {
          key: "fur_color" value { bytes_list { value: "gray" } }
        }
        feature {
          key: "height" value { bytes_list { value: "tall" } }
        }
        feature {
          key: "prediction" value { float_list { value: 0.9 } }
        }
        feature {
          key: "label" value { float_list { value: 1.0 } }
        }
    }
}

モデル

モデルを指定する代わりに、モデルにとらわれない評価構成とエクストラクターを作成して、TFMAがメトリックを計算するために必要なデータを解析して提供します。 ModelAgnosticConfig仕様は、入力例から使用される機能、予測、およびラベルを定義します。

このために、ラベルと予測キーを含むすべての特徴を表すキーと、特徴のデータ型を表す値を使用して、特徴マップを作成します。

feature_map[label_key] = tf.FixedLenFeature([], tf.float32, default_value=[0])

ラベルキー、予測キー、および特徴マップを使用して、モデルにとらわれない構成を作成します。

model_agnostic_config = model_agnostic_predict.ModelAgnosticConfig(
    label_keys=list(ground_truth_labels),
    prediction_keys=list(predition_labels),
    feature_spec=feature_map)

モデルにとらわれないエクストラクタを設定する

Extractorは、モデルにとらわれない構成を使用して、入力から特徴、ラベル、および予測を抽出するために使用されます。また、データをスライスする場合は、スライスする列に関する情報を含むスライスキーの仕様も定義する必要があります。

model_agnostic_extractors = [
    model_agnostic_extractor.ModelAgnosticExtractor(
        model_agnostic_config=model_agnostic_config, desired_batch_size=3),
    slice_key_extractor.SliceKeyExtractor([
        slicer.SingleSliceSpec(),
        slicer.SingleSliceSpec(columns=[‘height’]),
    ])
]

公平性メトリクスを計算する

EvalSharedModelの一部として、モデルを評価するためのすべてのメトリックを提供できます。メトリックは、 post_export_metricsまたはfairness_indicatorsで定義されているようなメトリックコールバックの形式で提供されます。

metrics_callbacks.append(
    post_export_metrics.fairness_indicators(
        thresholds=[0.5, 0.9],
        target_prediction_keys=[prediction_key],
        labels_key=label_key))

また、評価を実行するためのテンソルフローグラフを作成するために使用されるconstruct_fnも取り込みます。

eval_shared_model = types.EvalSharedModel(
    add_metrics_callbacks=metrics_callbacks,
    construct_fn=model_agnostic_evaluate_graph.make_construct_fn(
        add_metrics_callbacks=metrics_callbacks,
        fpl_feed_config=model_agnostic_extractor
        .ModelAgnosticGetFPLFeedConfig(model_agnostic_config)))

すべての設定が完了したら、model_eval_libが提供するExtractEvaluate関数またはExtractEvaluateAndWriteResults関数のExtractEvaluateかを使用してモデルを評価します。

_ = (
    examples |
    'ExtractEvaluateAndWriteResults' >>
        model_eval_lib.ExtractEvaluateAndWriteResults(
        eval_shared_model=eval_shared_model,
        output_path=output_path,
        extractors=model_agnostic_extractors))

eval_result = tensorflow_model_analysis.load_eval_result(output_path=tfma_eval_result_path)

最後に、上記の「公平性インジケーターのレンダリング」セクションの手順を使用して、公平性インジケーターをレンダリングします。

その他の例

Fairness Indicatorsのexamplesディレクトリには、いくつかの例が含まれています。