Google Cloud Platform机器学习训练:使用What-If Tool分析模型公平性

Google Cloud Platform机器学习训练:使用What-If Tool分析模型公平性

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

前言

在机器学习模型的开发和应用过程中,公平性是一个至关重要的考量因素。本教程将介绍如何使用Google Cloud Platform上的机器学习工具,特别是What-If Tool,来分析模型预测中的潜在偏见问题。

学习目标

  1. 掌握如何针对已部署模型使用What-if Tool
  2. 探索数据集的基本属性
  3. 分析模型结果中的偏见表现
  4. 了解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"标签页下:

  1. 选择"Binning | X-Axis"为"Education_Masters"
  2. 观察拥有硕士学历人群的收入预测分布

2. 特征分布检查

在"Features"标签页:

  1. 过滤"sex"特征
  2. 观察数据集中男女比例(女性670,男性1330)
  3. 注意数据集中女性样本不足的问题

3. 公平性分析

在"Performance + Fairness"标签页:

  1. 设置"Slice by"为"Sex"
  2. 观察模型对男女样本的不同表现:
    • 女性高收入预测率:3.4%
    • 男性高收入预测率:18.9%
  3. 注意F1分数在女性样本上较低

4. 实现人口平等

点击"Demographic Parity"按钮:

  1. 观察工具自动调整的阈值:
    • 女性阈值:0.19
    • 男性阈值:0.54
  2. 调整后两组的高收入预测率均约为17.7%
  3. 注意调整带来的预测误差变化

技术要点总结

  1. 数据偏见识别:通过What-If Tool可以直观发现数据集中性别比例失衡问题
  2. 模型公平性评估:工具提供了量化评估模型在不同群体上表现差异的方法
  3. 偏见缓解方案:通过调整分类阈值可以实现人口平等
  4. 权衡考量:公平性调整可能影响模型整体性能,需要根据应用场景权衡

最佳实践建议

  1. 在模型开发早期就应考虑公平性问题
  2. 定期使用What-If Tool等工具监控生产模型的公平性表现
  3. 考虑多种公平性定义(如机会平等、预测平等)并根据业务需求选择
  4. 公平性调整不仅限于阈值调整,还包括数据增强、损失函数修改等方法

通过本教程,您应该已经掌握了使用What-If Tool分析机器学习模型公平性的基本方法。这些技能对于开发负责任的AI系统至关重要。

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廉珏俭Mercy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值