Google Cloud Platform机器学习训练:使用What-If Tool分析模型公平性
前言
在机器学习模型的开发和应用过程中,公平性是一个至关重要的考量因素。本教程将介绍如何使用Google Cloud Platform上的机器学习工具,特别是What-If Tool,来分析模型预测中的潜在偏见问题。
学习目标
- 掌握如何针对已部署模型使用What-if Tool
- 探索数据集的基本属性
- 分析模型结果中的偏见表现
- 了解What-if Tool提供的偏见修复建议
项目概述
本项目使用XGBoost分类器模型对UCI人口普查数据集进行预测,判断个人年收入是否超过5万美元。我们将通过What-If Tool可视化模型在测试数据上的表现,特别关注模型预测中的公平性问题。
环境准备
首先需要导入必要的Python库并设置环境:
import os
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import witwidget
from witwidget.notebook.visualization import (
WitWidget,
WitConfigBuilder,
)
pd.options.display.max_columns = 50
项目配置
设置GCP项目ID和存储路径:
PROJECT = "your-project-id" # 替换为你的GCP项目ID
BUCKET = f"gs://{PROJECT}"
MODEL = 'xgboost_model'
VERSION = 'v1'
MODEL_DIR = os.path.join(BUCKET, MODEL)
# 设置环境变量
os.environ.update({
'PROJECT': PROJECT,
'BUCKET': BUCKET,
'MODEL': MODEL,
'VERSION': VERSION,
'MODEL_DIR': MODEL_DIR
})
模型部署
部署XGBoost模型到AI Platform:
%%bash
gcloud config set project $PROJECT
gsutil mb $BUCKET
gsutil cp gs://cloud-training-demos/mlfairness/model.bst $MODEL_DIR/model.bst
gcloud ai-platform models list | grep $MODEL || gcloud ai-platform models create $MODEL
gcloud ai-platform versions create $VERSION \
--model=$MODEL \
--framework='XGBOOST' \
--runtime-version=1.14 \
--origin=$MODEL_DIR \
--python-version=3.5 \
--project=$PROJECT
数据准备
下载测试数据和预处理结果:
%%bash
gsutil cp gs://cloud-training-demos/mlfairness/income.pkl .
gsutil cp gs://cloud-training-demos/mlfairness/x_test.npy .
gsutil cp gs://cloud-training-demos/mlfairness/y_test.npy .
加载数据并查看特征:
features = pd.read_pickle('income.pkl')
x_test = np.load('x_test.npy')
y_test = np.load('y_test.npy')
features.head()
数据预处理说明
XGBoost要求所有特征值必须为数值型,因此原始数据集进行了以下转换:
- 性别特征:"Female"转换为1,"Male"转换为2
- 使用Pandas的get_dummies函数将分类特征转换为数值特征
- 例如"Education"列被转换为多个子列,如"Education_HS-grad"等
准备What-If Tool输入
组合特征和标签,准备2000个测试样本:
num_wit_examples = 2000
test_examples = np.hstack((
x_test[:num_wit_examples],
y_test[:num_wit_examples].reshape(-1, 1)
))
初始化What-If Tool
配置What-If Tool并连接到AI Platform模型:
FEATURE_NAMES = features.columns.tolist() + ['income_prediction']
def adjust(pred):
return [1 - pred, pred]
config_builder = (
WitConfigBuilder(test_examples.tolist(), FEATURE_NAMES)
.set_ai_platform_model(PROJECT, MODEL, VERSION, adjust_prediction=adjust)
.set_target_feature('income_prediction')
.set_label_vocab(['low', 'high'])
)
WitWidget(config_builder, height=800)
使用What-If Tool分析模型
1. 数据分布分析
在"Datapoint Editor"标签页下:
- 选择"Binning | X-Axis"为"Education_Masters"
- 观察拥有硕士学历人群的收入预测分布
2. 特征分布检查
在"Features"标签页:
- 过滤"sex"特征
- 观察数据集中男女比例(女性670,男性1330)
- 注意数据集中女性样本不足的问题
3. 公平性分析
在"Performance + Fairness"标签页:
- 设置"Slice by"为"Sex"
- 观察模型对男女样本的不同表现:
- 女性高收入预测率:3.4%
- 男性高收入预测率:18.9%
- 注意F1分数在女性样本上较低
4. 实现人口平等
点击"Demographic Parity"按钮:
- 观察工具自动调整的阈值:
- 女性阈值:0.19
- 男性阈值:0.54
- 调整后两组的高收入预测率均约为17.7%
- 注意调整带来的预测误差变化
技术要点总结
- 数据偏见识别:通过What-If Tool可以直观发现数据集中性别比例失衡问题
- 模型公平性评估:工具提供了量化评估模型在不同群体上表现差异的方法
- 偏见缓解方案:通过调整分类阈值可以实现人口平等
- 权衡考量:公平性调整可能影响模型整体性能,需要根据应用场景权衡
最佳实践建议
- 在模型开发早期就应考虑公平性问题
- 定期使用What-If Tool等工具监控生产模型的公平性表现
- 考虑多种公平性定义(如机会平等、预测平等)并根据业务需求选择
- 公平性调整不仅限于阈值调整,还包括数据增强、损失函数修改等方法
通过本教程,您应该已经掌握了使用What-If Tool分析机器学习模型公平性的基本方法。这些技能对于开发负责任的AI系统至关重要。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考