Join us at DevFest for Ukraine June 14-15 Online Register now

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 la herramienta de forma activa internamente y ahora está disponible en versión BETA para probarla en sus propios casos de uso.

Tablero de indicadores de equidad

¿Qué son los indicadores de equidad?

Fairness Indicators es una biblioteca que permite calcular fácilmente las métricas de equidad comúnmente identificadas para clasificadores binarios y multiclase. Muchas de las 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 mil millones de usuarios. Los indicadores de equidad le permitirán evaluar en cualquier tamaño de caso de uso.

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

  • Evaluar la distribución de conjuntos de datos
  • Evaluar el rendimiento del modelo, dividido en grupos definidos de usuarios.
    • Siéntase seguro de sus resultados con intervalos de confianza y evaluaciones en varios umbrales.
  • Sumérjase en secciones individuales para explorar las causas fundamentales y las oportunidades de mejora.

Este estudio de caso , con vídeos y ejercicios de programación, demuestra cómo los indicadores Fairness se puede utilizar en uno de sus propios productos para evaluar las preocupaciones de equidad a través del tiempo.

La descarga del paquete pip incluye:

Uso de indicadores de equidad con modelos de 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 por las que le gustaría dividir. Si no tiene las características de corte exactas para sus preocupaciones de equidad, puede explorar tratando de encontrar un conjunto de evaluación que las tenga, o considerar características de proxy dentro de su conjunto de características que puedan resaltar las disparidades de resultados. Para más información, véase aquí .

Modelo

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

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

Configuración de rebanadas

A continuación, defina los sectores 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’])
]`

Calcular métricas de equidad

Añadir una devolución de llamada Indicadores justos con el metrics_callback lista. 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 habilitar el cálculo de los intervalos de confianza. Los intervalos de confianza se calculan mediante bootstrapping de Poisson y requieren un nuevo cálculo de más de 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)

Representar indicadores de equidad

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:

  • Seleccionar métricas a la pantalla marcando las casillas en el lado izquierdo. Los gráficos individuales para cada una de las métricas aparecerán en el widget, en orden.
  • Cambiar el corte de línea de base, la primera barra del gráfico, usando el selector desplegable. Los deltas se calcularán con este valor de referencia.
  • Seleccione los umbrales utilizando 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 anular la selección.
  • Pase el ratón sobre una barra para ver métricas para esa rebanada.
  • Identificar las disparidades con la línea de base utilizando la columna "Dif w. La línea de base", que identifica la diferencia porcentual entre la rebanada actual y la línea de base.
  • Explora los puntos de datos de una rebanada de profundidad utilizando la herramienta Qué-Si . Ver aquí para ver un ejemplo.

Representación de indicadores de equidad para varios 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.

Usar 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 el SDK de Apache Beam Python, puede crear un binario de evaluación TFMA independiente y luego ejecutarlo para analizar su modelo.

Datos

Este paso es para proporcionar el conjunto de datos en el que desea que se ejecuten las evaluaciones. Debe estar en tf.Example formato proto tener etiquetas, predicciones y otras características que usted podría querer cortar sucesivamente.

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 un extractor y una configuración de evaluación independiente del modelo para analizar y proporcionar los datos que TFMA necesita para calcular métricas. ModelAgnosticConfig especificación define las características, las predicciones, y las etiquetas que deben utilizarse en los ejemplos de entrada.

Para ello, cree un mapa de características con claves que representen todas las características, incluidas las claves de etiqueta y predicción y los valores que representan el tipo de datos de la característica.

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 características.

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

Configurar modelo de extractor agnóstico

Extractor se utiliza para extraer las características, las etiquetas y las predicciones de la entrada utilizando el modelo config agnóstico. Y si se quiere cortar sus datos, también es necesario para definir la especificación clave rebanada , que contiene información sobre las columnas que desea rebanada en.

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

Calcular métricas de equidad

Como parte de EvalSharedModel , puede proporcionar todas las métricas en los que desea que su modelo a ser evaluado. Las métricas se proporcionan en forma de métricas de devoluciones de llamada como los definidos 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 en un construct_fn que se utiliza para crear un gráfico tensorflow para llevar a cabo 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, utilice uno de ExtractEvaluate o ExtractEvaluateAndWriteResults funciones 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 equidad siguiendo las instrucciones de la sección "Representar indicadores de equidad" anterior.

Más ejemplos

El directorio de ejemplos Indicadores Fairness contiene varios ejemplos: