Indicadores de equidad

Los indicadores de equidad están diseñados para ayudar a los equipos a evaluar y mejorar los modelos para las preocupaciones de equidad en asociación con el conjunto de herramientas más amplio de Tensorflow. Actualmente, muchos de nuestros productos utilizan activamente la herramienta de forma interna y ahora está disponible en versión BETA para que la pruebe en sus propios casos de uso.

Tablero de indicadores de equidad

¿Qué son los indicadores de equidad?

Fairness Indicators es una biblioteca que permite el cálculo sencillo de métricas de equidad comúnmente identificadas para clasificadores binarios y multiclase. Muchas herramientas existentes para evaluar las preocupaciones sobre la equidad no funcionan bien en conjuntos de datos y modelos a gran escala. En Google, es importante para nosotros tener herramientas que puedan funcionar en sistemas de miles de millones de usuarios. Los indicadores de equidad le permitirán evaluar casos de uso de cualquier tamaño.

En particular, los indicadores de equidad incluyen la capacidad de:

  • Evaluar la distribución de conjuntos de datos
  • Evalúe el rendimiento del modelo, dividido en grupos definidos de usuarios
    • Confíe en sus resultados con intervalos de confianza y evaluaciones en múltiples umbrales
  • Profundice en los segmentos individuales para explorar las causas fundamentales y las oportunidades de mejora

Este estudio de caso , completo con videos y ejercicios de programación, demuestra cómo se pueden usar los indicadores de equidad en uno de sus propios productos para evaluar las preocupaciones de equidad a lo largo del tiempo.

La descarga del paquete pip incluye:

Uso de indicadores de equidad con modelos Tensorflow

Datos

Para ejecutar indicadores de equidad con TFMA, asegúrese de que el conjunto de datos de evaluación esté etiquetado para las características que le gustaría dividir. Si no tiene las funciones de corte exactas para sus preocupaciones sobre la equidad, puede intentar encontrar un conjunto de evaluación que las tenga, o considerar funciones de proxy dentro de su conjunto de funciones que pueden resaltar las disparidades en los resultados. Para obtener orientación adicional, consulte aquí .

Modelo

Puede usar la clase Tensorflow Estimator para construir su modelo. El soporte para los modelos Keras llegará pronto a TFMA. Si desea ejecutar TFMA en un modelo de Keras, consulte la sección "TFMA independiente del modelo" a continuación.

Después de entrenar a su Estimador, deberá exportar un modelo guardado para fines de evaluación. Para obtener más información, consulte la guía TFMA .

Configuración de sectores

A continuación, defina los cortes en los que le gustaría evaluar:

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

Si desea evaluar cortes interseccionales (por ejemplo, tanto el color como la altura del pelaje), puede configurar lo siguiente:

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

Métricas de equidad informática

Agregue una devolución de llamada de indicadores de equidad a la lista metrics_callback . En la devolución de llamada, puede definir una lista de umbrales en los que se evaluará el modelo.

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)

Antes de ejecutar la configuración, determine si desea o no habilitar el cálculo de los intervalos de confianza. Los intervalos de confianza se calculan utilizando el arranque de Poisson y requieren volver a calcularse en 20 muestras.

compute_confidence_intervals = True

Ejecute la canalización de evaluación de 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)

Indicadores de equidad de renderizado

from tensorflow_model_analysis.addons.fairness.view import widget_view

widget_view.render_fairness_indicator(eval_result=eval_result)

Indicadores de equidad

Consejos para usar indicadores de equidad:

  • Seleccione las métricas para mostrar marcando las casillas del lado izquierdo. Aparecerán gráficos individuales para cada una de las métricas en el widget, en orden.
  • Cambie el segmento de referencia , la primera barra del gráfico, utilizando el selector desplegable. Los deltas se calcularán con este valor de referencia.
  • Seleccione los umbrales con el selector desplegable. Puede ver varios umbrales en el mismo gráfico. Los umbrales seleccionados aparecerán en negrita y puede hacer clic en un umbral en negrita para deseleccionarlo.
  • Pase el cursor sobre una barra para ver las métricas de ese segmento.
  • Identifique las disparidades con la línea de base utilizando la columna "Dif. con la línea de base", que identifica la diferencia porcentual entre el segmento actual y la línea de base.
  • Explore los puntos de datos de un corte en profundidad con la herramienta What-If . Vea aquí un ejemplo.

Indicadores de Equidad de Representación para Múltiples Modelos

Los indicadores de equidad también se pueden utilizar para comparar modelos. En lugar de pasar un solo eval_result, pase un objeto multi_eval_results, que es un diccionario que asigna dos nombres de modelo a objetos 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)

Indicadores de equidad - Comparación de modelos

La comparación de modelos se puede utilizar junto con la comparación de umbrales. Por ejemplo, puede comparar dos modelos en dos conjuntos de umbrales para encontrar la combinación óptima para sus métricas de equidad.

Uso de indicadores de equidad con modelos que no son de TensorFlow

Para brindar un mejor soporte a los clientes que tienen diferentes modelos y flujos de trabajo, hemos desarrollado una biblioteca de evaluación que es independiente del modelo que se está evaluando.

Cualquiera que quiera evaluar su sistema de aprendizaje automático puede usar esto, especialmente si tiene modelos que no están basados ​​en TensorFlow. Con Apache Beam Python SDK, puede crear un binario de evaluación de TFMA independiente y luego ejecutarlo para analizar su modelo.

Datos

Este paso es proporcionar el conjunto de datos en el que desea que se ejecuten las evaluaciones. Debe estar en formato de prototipo tf.Example con etiquetas, predicciones y otras características que quizás desee dividir.

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

Modelo

En lugar de especificar un modelo, puede crear una configuración y extractor de evaluación independiente del modelo para analizar y proporcionar los datos que TFMA necesita para calcular las métricas. La especificación ModelAgnosticConfig define las características, las predicciones y las etiquetas que se utilizarán a partir de los ejemplos de entrada.

Para ello, cree un mapa de funciones con claves que representen todas las funciones, incluidas las claves de etiquetas y de predicción, y los valores que representen el tipo de datos de la función.

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

Cree una configuración independiente del modelo utilizando claves de etiqueta, claves de predicción y el mapa de funciones.

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

Configurar extractor agnóstico de modelos

El extractor se usa para extraer las características, las etiquetas y las predicciones de la entrada usando la configuración agnóstica del modelo. Y si desea dividir sus datos, también debe definir la especificación de la clave de división, que contiene información sobre las columnas en las que desea dividir.

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’]),
    ])
]

Métricas de equidad informática

Como parte de EvalSharedModel , puede proporcionar todas las métricas sobre las que desea que se evalúe su modelo. Las métricas se proporcionan en forma de devoluciones de llamadas de métricas como las definidas en post_export_metrics o fairness_indicators .

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

También toma un construct_fn que se usa para crear un gráfico de tensorflow para realizar la evaluación.

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

Una vez que todo esté configurado, use una de las funciones ExtractEvaluate o ExtractEvaluateAndWriteResults proporcionadas por model_eval_lib para evaluar el modelo.

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

Por último, renderice los indicadores de imparcialidad siguiendo las instrucciones de la sección anterior "Procesar indicadores de imparcialidad".

Más ejemplos

El directorio de ejemplos de indicadores de equidad contiene varios ejemplos: