公平性インジケーター

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

公平性指標ダッシュボード

公平性指標とは?

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

特に、Fairness Indicators には次の機能が含まれています。

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

このケース スタディは、ビデオとプログラミング演習を完備しており、独自の製品の 1 つで公平性インジケーターを使用して、時間の経過とともに公平性の問題を評価する方法を示しています。

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

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

データ

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

モデル

Tensorflow Estimator クラスを使用してモデルを構築できます。 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)

公平性指標

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

  • 左側のボックスをチェックして、表示するメトリックを選択します。各メトリックの個々のグラフがウィジェットに順番に表示されます。
  • ドロップダウン セレクターを使用して、グラフの最初のバーであるベースライン スライスを変更します。差分は、このベースライン値で計算されます。
  • ドロップダウン セレクターを使用してしきい値を選択します。同じグラフに複数のしきい値を表示できます。選択したしきい値は太字で表示され、太字のしきい値をクリックして選択を解除できます。
  • バーの上にカーソルを置くと、そのスライスの指標が表示されます。
  • 現在のスライスとベースラインのパーセンテージの違いを識別する「ベースラインとの差分」列を使用して、ベースラインとの不均衡を識別します。
  • 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 proto 形式にする必要があります。

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 } }
        }
    }
}

モデル

モデルを指定する代わりに、モデルに依存しない eval 構成とエクストラクタを作成して、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)

Model Agnostic Extractor のセットアップ

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))

また、評価を実行するための tensorflow グラフを作成するために使用される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関数のいずれかを使用して、モデルを評価します。

_ = (
    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)

最後に、上記の「Render Fairness Indicators」セクションの手順を使用して、Fairness Indicator をレンダリングします。

その他の例

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