TensorFlow Extended (TFX) 中的公平性指标使用指南
什么是公平性指标?
公平性指标(Fairness Indicators)是TensorFlow Extended(TFX)生态系统中的一个重要组件,它专门用于评估和改进机器学习模型的公平性。在当今AI应用日益广泛的背景下,确保模型不会对特定人群产生偏见变得至关重要。
公平性指标库能够:
- 计算常见的公平性指标(适用于二分类和多分类问题)
- 处理大规模数据集和模型(支持十亿级用户系统)
- 提供置信区间和多阈值评估
- 深入分析特定数据切片,找出问题根源
核心组件
公平性指标作为TFX的一部分,与以下工具紧密集成:
- TensorFlow数据验证(TFDV):用于分析数据分布
- TensorFlow模型分析(TFMA):用于模型评估
- What-If工具(WIT):用于交互式模型探索
在TensorFlow模型中使用公平性指标
数据准备
使用公平性指标前,需要确保评估数据集已标记好您想要分析的切片特征。如果缺乏直接相关的特征,可以考虑:
- 寻找包含相关特征的评估集
- 使用现有特征中的代理特征
配置数据切片
定义您想要评估的切片,支持单一特征切片和交叉特征切片:
# 单一特征切片
slice_spec = [tfma.slicer.SingleSliceSpec(columns=['年龄'])]
# 交叉特征切片
slice_spec = [tfma.slicer.SingleSliceSpec(columns=['年龄', '性别'])]
计算公平性指标
添加公平性指标回调并定义评估阈值:
from tensorflow_model_analysis.addons.fairness.post_export_metrics import fairness_indicators
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=model_dir,
add_metrics_callbacks=metrics_callbacks)
运行评估
可选择是否计算置信区间(基于泊松自助法,需要20次重采样):
compute_confidence_intervals = True
执行评估管道:
with beam.Pipeline() as pipeline:
_ = (
pipeline
| beam.Create(dataset)
| '评估' >> tfma.ExtractEvaluateAndWriteResults(
eval_shared_model=eval_shared_model,
slice_spec=slice_spec,
compute_confidence_intervals=compute_confidence_intervals,
output_path=output_path)
)
eval_result = tfma.load_eval_result(output_path)
可视化结果
from tensorflow_model_analysis.addons.fairness.view import widget_view
widget_view.render_fairness_indicator(eval_result=eval_result)
可视化界面提供以下功能:
- 选择要显示的指标
- 更改基线切片
- 选择/取消选择阈值
- 悬停查看详细指标
- 识别与基线的差异
- 深入探索特定切片
多模型比较
公平性指标支持同时比较多个模型:
multi_eval_results = {
"模型A": eval_result1,
"模型B": eval_result2
}
widget_view.render_fairness_indicator(multi_eval_results=multi_eval_results)
在非TensorFlow模型中使用公平性指标
公平性指标也支持评估非TensorFlow模型,通过以下步骤实现:
数据准备
数据需要转换为tf.Example格式,包含预测值、标签值和切片特征:
tf.Example {
features {
feature { key: "年龄" value { bytes_list { value: "30-40" } } }
feature { key: "预测值" value { float_list { value: 0.75 } } }
feature { key: "标签值" value { float_list { value: 1.0 } } }
}
}
模型无关配置
定义特征映射和模型无关配置:
feature_map = {
"年龄": tf.FixedLenFeature([], tf.string),
"预测值": tf.FixedLenFeature([], tf.float32),
"标签值": tf.FixedLenFeature([], tf.float32)
}
model_agnostic_config = model_agnostic_predict.ModelAgnosticConfig(
label_keys=["标签值"],
prediction_keys=["预测值"],
feature_spec=feature_map)
设置提取器
model_agnostic_extractors = [
model_agnostic_extractor.ModelAgnosticExtractor(
model_agnostic_config=model_agnostic_config),
slice_key_extractor.SliceKeyExtractor([
slicer.SingleSliceSpec(columns=['年龄'])
])
]
计算指标
添加公平性指标回调并运行评估:
metrics_callbacks = [
post_export_metrics.fairness_indicators(thresholds=[0.5])
]
eval_shared_model = types.EvalSharedModel(
add_metrics_callbacks=metrics_callbacks,
construct_fn=model_agnostic_evaluate_graph.make_construct_fn(
add_metrics_callbacks=metrics_callbacks))
_ = (
examples
| '评估' >> model_eval_lib.ExtractEvaluateAndWriteResults(
eval_shared_model=eval_shared_model,
extractors=model_agnostic_extractors,
output_path=output_path))
最佳实践
- 选择合适的切片特征:选择与业务场景相关的敏感特征进行切片分析
- 多阈值评估:不要只依赖默认阈值(如0.5),评估多个阈值下的表现
- 置信区间:对于小样本切片,使用置信区间评估结果的可靠性
- 交叉特征分析:检查不同特征组合对模型表现的影响
- 持续监控:将公平性评估纳入模型监控流程,而不仅是一次性检查
公平性指标为机器学习团队提供了一套强大的工具,帮助他们在模型开发和生产过程中识别和解决公平性问题。通过系统地评估模型在不同人群中的表现,我们可以构建更加公平、可靠的AI系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考