机器学习课程 · 选题十

TabularX
面向可解释性与可复现性的自动化表格建模工具包

不是做一个精度更高的 AutoML,而是让每次 fit() 都留下完整的、可追溯的实验记录。

01 问题引入02 Baseline:MLJAR03 TabularX 架构04 TabularX 能力05 效果示例
01 · 问题引入

AutoML 已经很成熟了——但仍然是黑箱

01

传统 AutoML

数据 → fit() → 模型

  • 数据怎么处理的?不知道
  • 模型为什么选这个?不知道
  • 对谁有偏见?不知道
02

我们的目标

数据 → fit() → 完整报告文件夹

  • 数据概况 / 划分方案
  • 预处理流水线 / 模型排名
  • SHAP 解释 / 公平性审计
关键洞察:传统 AutoML 也会产生大量中间文件(JSON、CSV、图片),但它们零散分布在目录树中,没有整理成一份有逻辑的报告。我们不是从零造物,而是把这些已有产物编排成可读的文档。
02 · Baseline

MLJAR 的设计哲学

mljar-supervised 是表格 AutoML 最成熟的开源标杆之一,我们在设计 TabularX 时继承并推进了它的三条核心理念。

注册表 + 能力声明

每个模型族注册时声明自己需要哪些预处理。线性模型要标准化,随机森林不要,CatBoost 连编码都不需要——框架自动匹配,不做一刀切。

Profile 只报事实

数据观测与预处理决策分离。DataInfo 只管「看」数据——列类型、缺失、偏态;PreprocessingTuner 再根据数据事实与模型能力的交集做出决策。

自动化的实验记录

不靠用户手动整理日志,每次运行自动写入结构化的实验记录:data_info.jsonparams.jsonleaderboard.csv、每个模型的 framework.json。一个目录打开,全都有据可查。

03 · TabularX 架构

纯函数分层

最核心的架构决策:每个阶段是纯函数,只做计算不做 IO。测试只需要「给输入、断言输出」,不需要 mock 文件系统。

core/ — 纯函数层Profile · Split · Preprocess · ModelSearch · SHAP · Fairness
只做计算,零 IO,零副作用
schema/ — 通信协议通过 dataclass 契约通信:DataProfile → SplitResult → PreprocessedData
estimator.py — 编排 + IO 层串接各阶段 + 写 HTML + 存模型 + 保存图片
reports/ — 报告渲染Jinja2 模板,schema 数据 → HTML 字符串,模板与逻辑彻底分离
分层价值:函数式核心 + Schema 契约 + 编排封装 + 模板渲染,四层各司其职,互不干扰。
03 · TabularX 架构

Schema 通信协议与封装设计

Dataclass 契约
每个阶段产出一个 frozen dataclass,作为下一阶段的类型安全输入。MLJAR 把中间数据写 JSON 落盘;TabularX 在内存中做契约通信,最后统一渲染为报告。
异常管理
领域异常统一继承 TabularXError,用户可在调用链路上统一 catch。参数越界等底层问题直接用 ValueError,不额外包装。
封装设计
AutoEstimator 把整条流水线封装为两行代码:ae = AutoEstimator()ae.fit(X, y)。内部自动完成 profile → split → preprocess → search → explain → fairness 的串接。

用户视角

ae = AutoEstimator(
    task="classification",
    output_dir="./output"
)
ae.fit(X, y, sensitive_features=["gender"])
04 · TabularX 能力

注册表与预处理自动路由

01

模型能力声明

每个 ModelSpec 声明:

  • 任务类型(回归 / 分类)
  • 声明式搜索空间 ParamDef
  • 默认参数
  • 支持的能力(scale? 编码? feature importance? predict_proba?)

注册表按 binary / multiclass / regression 三桶管理。

02

Profile + 自动路由

第一步:Profile 只做观测——列类型、缺失、偏态、标准化需求。与模型无关。

第二步:DataInfo ∩ ModelCapability → 预处理决策。

模型需要 Scale需要编码
线性 / 神经网络
随机森林 / XGBoost
CatBoost否(自带)
04 · TabularX 能力

Optuna 多进程调参与全模型报告

声明式搜索空间

每个模型的调参空间用 ParamDef 列表声明——参数名、类型、范围、尺度。调参器统一遍历,生成 Optuna suggest 调用。搜索空间定义与调参逻辑彻底解耦。

每个模型独立报告

与 MLJAR 不同——TabularX 让所有成功跑完的模型都有自己的独立报告:

  • 评估指标(分类 / 回归)
  • 混淆矩阵(分类任务)
  • ROC 曲线(二分类)
  • 调参轨迹图
04 · TabularX 能力

SHAP 解释与公平性审计

最优模型确定后,框架自动完成两件事,不需要用户额外调用。

SHAP 可解释性
特征重要性排序(平均 |SHAP|)、SHAP summary 图(特征贡献方向分布)、Waterfall 图(单样本分解)。Top-K 特征累计解释力占比一目了然。
公平性审计
用户只需传入 sensitive_features。框架自动按敏感特征分组,计算 Demographic Parity 和 Equalized Odds 差异,超阈值标红告警。
一行代码
ae.fit(X, y, sensitive_features=["gender"])——公平性审计不再需要手动实现。

公平性指标

指标含义阈值
Demographic Parity各组正类率差异≤ 0.1
Equalized Odds TPR各组真正率差异≤ 0.1
Equalized Odds FPR各组假正率差异≤ 0.1
04 · TabularX 能力

报告生成——协议数据到最终产出

所有阶段的数据通过 Jinja2 模板渲染为一系列 HTML 文件。每个 HTML 直接用浏览器打开就能看。

intro1-output/ ├── best_model.joblib ├── report.html # 完整合并报告 └── reports/ ├── profile.html # 数据概况 ├── split.html # 划分方案 ├── preprocess.html # 预处理流水线 ├── model_search.html # 模型搜索排名 ├── explanation.html # SHAP + 公平性 ├── assets/ # 图片 └── models/ # 每个模型的独立报告 ├── xgboost.html ├── random_forest.html └── ...
Jinja2 模板渲染
模板与逻辑彻底分离。不满足默认风格可以只改模板,不碰 Python 代码。
强制默认产出
每次 fit() 结束,报告自动生成。不是「可选」导出功能,而是框架的默认行为。
零额外工具
所有 HTML 直接用浏览器打开即可查看,不需要搭建服务或安装任何工具。
05 · 效果示例

Breast Cancer 数据集一次运行的输出

二分类 · 569 样本 · 30 特征 · 四个模型 + Voting 组合

模型排名

XGBoost 第一
验证 AUC 0.9934 · 测试 0.9911

四个模型都成功跑完。LightGBM 验证集最高但测试集略低,存在泛化差距。

SHAP 解释

特征 1: worst concave points
平均 |SHAP| = 0.90,远高于其他特征

Summary 图展示贡献方向;Waterfall 图展示单样本分解。

公平性审计

DP diff = 0.94 · EO TPR diff = 1.0
超阈值自动告警

框架自动按敏感特征分组计算,无需手动实现指标。

报告目录

13 个 HTML 文件
6 份子报告 + 6 模型报告 + 1 完整合并报告

一次 fit(),完整实验目录自动成型。

TabularX 数据概况报告 · profile.html

TabularX 数据概况报告

① 摘要

输入

569
样本数(行)
31
特征数(列)
c4255f37fde14b18
数据指纹

输出(结论)

判定为 binary 分类任务, 共 2 个类别。

关键发现

  • 11 列建议标准化(scale_needed)
  • 0 列存在缺失值(has_missing)
  • 0 列为常数列、0 列为全空列(预处理器将丢弃)
  • 0 列为高基数文本列
  • 22 列分布偏斜(skewed,建议 log 变换或缩尾)
  • 0 列高基数类别(high_cardinality,建议目标编码)

② 判断流程与证据

2.1 判断流程图

flowchart TD Start([开始:接收 X, y]) --> InputCheck{输入类型检查} InputCheck -->|X 不是 DataFrame 或 y 不是 Series| InvalidInput[失败:InvalidDataError] InputCheck -->|类型正确| ShapeCheck{数据非空检查} ShapeCheck -->|X 无行/无列,或 y 无样本| EmptyData[失败:EmptyDataError] ShapeCheck -->|数据非空| AlignCheck{X/y 长度检查} AlignCheck -->|行数不一致| LengthError[失败:MismatchedLengthError] AlignCheck -->|长度一致| TaskCheck{任务类型判断} TaskCheck -->|y 全为空| EmptyTarget[失败:EmptyTargetError] TaskCheck -->|task_type 非法或无法推断| TaskError[失败:TaskTypeError] TaskCheck -->|唯一值 = 2| Binary[二分类任务] TaskCheck -->|唯一值 3~20| Multi[多分类任务] TaskCheck -->|连续值或浮点且唯一值 > 20| Reg[回归任务] Binary --> Imbalance{类别不平衡检测} Multi --> Imbalance Reg --> ColLoop[逐列分析] Imbalance -->|最小类别占比 < 10%| Imbalanced[标记 imbalanced] Imbalance -->|否则| Balanced[类别分布较均衡] Imbalanced --> ColLoop Balanced --> ColLoop ColLoop --> EmptyColCheck{是否全空列?} EmptyColCheck -->|是:非缺失值 = 0| EmptyColumn[标记 empty_column] EmptyColCheck -->|否| ConstantCheck{是否常数列?} ConstantCheck -->|是:唯一值 = 1| ConstantColumn[标记 constant_column] ConstantCheck -->|否| ColType{列类型判断} EmptyColumn --> Done([完成:输出 DataProfile]) ConstantColumn --> Done ColType -->|datetime| DateTime[日期时间列] ColType -->|boolean| Boolean[布尔列] ColType -->|整数且唯一值 ≤ 20| Cate[类别列] ColType -->|整数且唯一值 > 20 或浮点| Num[数值列] ColType -->|object/str/category| Cat{唯一值与行唯一率} Cat -->|唯一值 > 200 且 >50% 行唯一| Text[文本列] Cat -->|其他| Cate Cate --> HighCard{基数检测} HighCard -->|unique > 50| HighCardYes[标记 high_cardinality] HighCard -->|unique ≤ 50| LowCard[基数正常] HighCardYes --> Miss{缺失值检查} LowCard --> Miss Num --> Scale{scale 判据} Scale -->|均值>0.5 或 std>1.5| ScaleYes[标记 scale_needed] Scale -->|否则| ScaleNo[无需标准化] ScaleYes --> Skew{偏度检测} ScaleNo --> Skew Skew -->|偏度>1| Skewed[标记 skewed] Skew -->|否则| NoSkew[分布风险较低] Skewed --> Miss{缺失值检查} NoSkew --> Miss DateTime --> Miss Boolean --> Miss Text --> Miss Miss -->|n_missing > 0| MissYes[标记 has_missing] Miss -->|无缺失| Done MissYes --> Done classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef warning fill:#fff3cd,stroke:#856404,stroke-width:1px; class InvalidInput,EmptyData,LengthError,EmptyTarget,TaskError error; class EmptyColumn,ConstantColumn,MissYes,ScaleYes,Skewed,HighCardYes,Imbalanced warning;
↑ profile 阶段完整判断流程。后续阶段:Split → Preprocess → Model Search。

2.2 目标变量判断依据

任务类型:binary
  • task_type_source = user+auto — 用户手动指定分类任务;按唯一值数 2 细分为 binary
规则:唯一值 ≤2 → 二分类;3~20 → 多分类;浮点连续且唯一值 >20 → 回归

2.3 特征列判断依据(仅列特殊情况)

mean radius numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=14.1273, std=3.5210,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean texture numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=19.2896, std=4.2973,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean perimeter numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=91.9690, std=24.2776,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean area numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=654.8891, std=351.6048,满足判据 → scale_needed
  • skewness = 1.6457 — 偏度 = 1.6457,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean smoothness numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0964, std=0.0141,不满足判据 → 无需 scale
mean compactness numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1043, std=0.0528,不满足判据 → 无需 scale
  • skewness = 1.1901 — 偏度 = 1.1901,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean concavity numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0888, std=0.0796,不满足判据 → 无需 scale
  • skewness = 1.4012 — 偏度 = 1.4012,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean concave points numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0489, std=0.0388,不满足判据 → 无需 scale
  • skewness = 1.1712 — 偏度 = 1.1712,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean symmetry numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1812, std=0.0274,不满足判据 → 无需 scale
mean fractal dimension numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0628, std=0.0071,不满足判据 → 无需 scale
  • skewness = 1.3045 — 偏度 = 1.3045,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
radius error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.4052, std=0.2771,不满足判据 → 无需 scale
  • skewness = 3.0886 — 偏度 = 3.0886,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
texture error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=1.2169, std=0.5512,满足判据 → scale_needed
  • skewness = 1.6464 — 偏度 = 1.6464,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
perimeter error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=2.8661, std=2.0201,满足判据 → scale_needed
  • skewness = 3.4436 — 偏度 = 3.4436,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
area error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=40.3371, std=45.4510,满足判据 → scale_needed
  • skewness = 5.4472 — 偏度 = 5.4472,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
smoothness error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0070, std=0.0030,不满足判据 → 无需 scale
  • skewness = 2.3145 — 偏度 = 2.3145,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
compactness error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0255, std=0.0179,不满足判据 → 无需 scale
  • skewness = 1.9022 — 偏度 = 1.9022,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
concavity error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0319, std=0.0302,不满足判据 → 无需 scale
  • skewness = 5.1105 — 偏度 = 5.1105,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
concave points error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0118, std=0.0062,不满足判据 → 无需 scale
  • skewness = 1.4447 — 偏度 = 1.4447,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
symmetry error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0205, std=0.0083,不满足判据 → 无需 scale
  • skewness = 2.1951 — 偏度 = 2.1951,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
fractal dimension error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0038, std=0.0026,不满足判据 → 无需 scale
  • skewness = 3.924 — 偏度 = 3.9240,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst radius numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=16.2692, std=4.8290,满足判据 → scale_needed
  • skewness = 1.1031 — 偏度 = 1.1031,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst texture numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=25.6772, std=6.1409,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
worst perimeter numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=107.2612, std=33.5730,满足判据 → scale_needed
  • skewness = 1.1282 — 偏度 = 1.1282,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst area numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=880.5831, std=568.8565,满足判据 → scale_needed
  • skewness = 1.8594 — 偏度 = 1.8594,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst smoothness numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1324, std=0.0228,不满足判据 → 无需 scale
worst compactness numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2543, std=0.1572,不满足判据 → 无需 scale
  • skewness = 1.4736 — 偏度 = 1.4736,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst concavity numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2722, std=0.2084,不满足判据 → 无需 scale
  • skewness = 1.1502 — 偏度 = 1.1502,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst concave points numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1146, std=0.0657,不满足判据 → 无需 scale
worst symmetry numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2901, std=0.0618,不满足判据 → 无需 scale
  • skewness = 1.4339 — 偏度 = 1.4339,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst fractal dimension numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0839, std=0.0180,不满足判据 → 无需 scale
  • skewness = 1.6626 — 偏度 = 1.6626,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理

③ 详细描述性统计

目标变量

任务类型binary
类别数2
类别分布 1: 62.7% 0: 37.3%
缺失率0.00%

特征列

列名类型dtype缺失数缺失率 唯一值标签均值标准差
mean radius numeric float64 0 0.00% 456 numeric scale_needed 14.1273 3.5210
mean texture numeric float64 0 0.00% 479 numeric scale_needed 19.2896 4.2973
mean perimeter numeric float64 0 0.00% 522 numeric scale_needed 91.9690 24.2776
mean area numeric float64 0 0.00% 539 numeric scale_needed skewed 654.8891 351.6048
mean smoothness numeric float64 0 0.00% 474 numeric 0.0964 0.0141
mean compactness numeric float64 0 0.00% 537 numeric skewed 0.1043 0.0528
mean concavity numeric float64 0 0.00% 537 numeric skewed 0.0888 0.0796
mean concave points numeric float64 0 0.00% 542 numeric skewed 0.0489 0.0388
mean symmetry numeric float64 0 0.00% 432 numeric 0.1812 0.0274
mean fractal dimension numeric float64 0 0.00% 499 numeric skewed 0.0628 0.0071
radius error numeric float64 0 0.00% 540 numeric skewed 0.4052 0.2771
texture error numeric float64 0 0.00% 519 numeric scale_needed skewed 1.2169 0.5512
perimeter error numeric float64 0 0.00% 533 numeric scale_needed skewed 2.8661 2.0201
area error numeric float64 0 0.00% 528 numeric scale_needed skewed 40.3371 45.4510
smoothness error numeric float64 0 0.00% 547 numeric skewed 0.0070 0.0030
compactness error numeric float64 0 0.00% 541 numeric skewed 0.0255 0.0179
concavity error numeric float64 0 0.00% 533 numeric skewed 0.0319 0.0302
concave points error numeric float64 0 0.00% 507 numeric skewed 0.0118 0.0062
symmetry error numeric float64 0 0.00% 498 numeric skewed 0.0205 0.0083
fractal dimension error numeric float64 0 0.00% 545 numeric skewed 0.0038 0.0026
worst radius numeric float64 0 0.00% 457 numeric scale_needed skewed 16.2692 4.8290
worst texture numeric float64 0 0.00% 511 numeric scale_needed 25.6772 6.1409
worst perimeter numeric float64 0 0.00% 514 numeric scale_needed skewed 107.2612 33.5730
worst area numeric float64 0 0.00% 544 numeric scale_needed skewed 880.5831 568.8565
worst smoothness numeric float64 0 0.00% 411 numeric 0.1324 0.0228
worst compactness numeric float64 0 0.00% 529 numeric skewed 0.2543 0.1572
worst concavity numeric float64 0 0.00% 539 numeric skewed 0.2722 0.2084
worst concave points numeric float64 0 0.00% 492 numeric 0.1146 0.0657
worst symmetry numeric float64 0 0.00% 500 numeric skewed 0.2901 0.0618
worst fractal dimension numeric float64 0 0.00% 535 numeric skewed 0.0839 0.0180
radius_group categorical category 0 0.00% 3 categorical

由 TabularX 自动生成 · 数据指纹 c4255f37fde14b18

TabularX 数据划分报告 · split.html

TabularX 数据划分报告

① 摘要

输入

569
原始样本数
0.2
test_size 参数
0.25
validation_size 参数

输出

341
训练集 (59.9%)
114
验证集 (20.0%)
114
测试集 (20.0%)

关键结论

任务为 分类任务,使用了 分层采样(stratified split), 保证训练/验证/测试集各类别分布与原数据一致。 随机种子:42

② 判断流程与证据

2.1 判断流程图

flowchart TD Start([开始:接收 X, y, profile, config]) --> TaskCheck{任务类型判断} TaskCheck -->|binary / multiclass| Stratify[使用分层采样 stratify=y] TaskCheck -->|regression| Random[使用纯随机采样] Stratify --> Phase1[阶段 1:分出测试集] Random --> Phase1 Phase1 -->|stratify 失败(类别样本不足)| StratifyFail1[失败:StratifyError] Phase1 -->|成功| Phase2[阶段 2:从剩余部分分验证集] Phase2 -->|stratify 失败| StratifyFail2[失败:StratifyError] Phase2 -->|成功| SizeCheck{子集样本数检查} SizeCheck -->|任一子集 < min_samples_split| SizeFail[失败:InvalidSplitError] SizeCheck -->|全部达标| DistCheck{类别分布对比} DistCheck -->|max_shift < 0.05| Good[分布一致 ✅] DistCheck -->|max_shift ≥ 0.05| Warn[分布差异较大 ⚠️ 记录警告] Good --> Done([完成:输出 SplitResult]) Warn --> Done classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef warning fill:#fff3cd,stroke:#856404,stroke-width:1px; class StratifyFail1,StratifyFail2,SizeFail error; class Warn warning;
↑ split 阶段完整判断流程。

2.2 判断依据

stratify_reason = binary — 目标任务类型为 binary,使用分层采样保证各集类别分布一致。
random_seed = 42 — 随机种子 = 42,保证划分可复现。
train_ratio = 0.5993 — 训练集 341 样本,占 59.93%
valid_ratio = 0.2004 — 验证集 114 样本,占 20.04%
test_ratio = 0.2004 — 测试集 114 样本,占 20.04%
stratify_quality = 0.0088 — 三集间最大类别比例差异 = 0.0088(差异较小,分布一致 ✅)

由 TabularX 自动生成 · 随机种子 42

TabularX 数据预处理报告 · preprocess.html

TabularX 数据预处理报告

① 摘要

输入 / 输出

31
输入特征数
33
输出特征数
0
丢弃列数
341
训练集样本数
114
验证集样本数
114
测试集样本数

关键结论

没有列被丢弃。
特征数量从 31 变为 33 (增加 了 2 列)。

② 判断流程

flowchart TD Start([开始:接收 X, y, profile, split_result, config]) --> Slice[阶段 1:切片数据] Slice -->|提取 train/valid/test 索引| ColLoop[阶段 2:逐列处理] ColLoop --> EmptyCol{常数列或全空列?} EmptyCol -->|是| Drop[丢弃此列] EmptyCol -->|否| TextCol{文本列?} TextCol -->|是,handle_text=drop| Drop TextCol -->|是,handle_text=keep| TextError[报错:暂不支持 NLP] TextCol -->|否| DtCol{日期列?} DtCol -->|handle_datetime=drop| Drop DtCol -->|handle_datetime=keep| Keep[原样保留] DtCol -->|handle_datetime=extract| DtExtract[提取年/月/日数值特征] Drop --> NextCol TextError --> NextCol Keep --> NextCol DtExtract --> NextCol DtCol -->|否| NumCol{数值列?} NumCol -->|是| NumImpute[填补缺失值] NumImpute --> ScaleQuery{需要标准化?} ScaleQuery -->|是| SkewQuery1{分布偏斜?} ScaleQuery -->|否| SkewQuery2{分布偏斜?} SkewQuery1 -->|是| YeoJohnson[Yeo-Johnson 变换
兼作标准化] SkewQuery1 -->|否| Scale[标准化] SkewQuery2 -->|是| YeoJohnson2[Yeo-Johnson 变换] SkewQuery2 -->|否| NoOp[无需处理] YeoJohnson --> NextCol Scale --> NextCol YeoJohnson2 --> NextCol NoOp --> NextCol NumCol -->|否| BoolCol{布尔列?} BoolCol -->|是| BoolProc["填补缺失 转 int(0/1)"] BoolProc --> NextCol BoolCol -->|否| CateCol{类别列?} CateCol -->|是| CateImpute[填补缺失值] CateImpute --> HighCard{高基数?} HighCard -->|unique > max_onehot_categories| HighEnc{高基数编码} HighEnc -->|target| TargetEncode[目标编码] HighEnc -->|frequency| FreqEncode[频率编码] HighCard -->|否| LowEnc{低基数编码} LowEnc -->|onehot| OneHot[OneHot 编码] LowEnc -->|label| LabelEncode[标签编码] TargetEncode --> NextCol FreqEncode --> NextCol OneHot --> NextCol LabelEncode --> NextCol CateCol -->|否| Unknown[未知类型 原样保留] Unknown --> NextCol NextCol{还有下一列?} NextCol -->|是| ColLoop NextCol -->|否| Done([完成:输出 PreprocessedData]) classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef decision fill:#fff3cd,stroke:#856404,stroke-width:1px; class Drop,TextError error; class EmptyCol,TextCol,DtCol,NumCol,BoolCol,CateCol,ScaleQuery,SkewQuery1,SkewQuery2,HighCard,HighEnc,LowEnc decision;
↑ preprocess 阶段决策流程。灰色背景节点为决策分支,红色为错误出口。

③ 逐列变换记录

总计 31 列 · 标准化 11 列 · 填补 0 列 · 编码 0 列 · 丢弃 0 列

列名 原始 dtype 原始唯一值 变换动作 输出特征数 说明
mean radius float64 456 standard_scale 1
mean texture float64 479 standard_scale 1
mean perimeter float64 522 standard_scale 1
mean area float64 539 yeo-johnson+scale 1
mean smoothness float64 474 保留 1
mean compactness float64 537 yeo-johnson 1
mean concavity float64 537 yeo-johnson 1
mean concave points float64 542 yeo-johnson 1
mean symmetry float64 432 保留 1
mean fractal dimension float64 499 yeo-johnson 1
radius error float64 540 yeo-johnson 1
texture error float64 519 yeo-johnson+scale 1
perimeter error float64 533 yeo-johnson+scale 1
area error float64 528 yeo-johnson+scale 1
smoothness error float64 547 yeo-johnson 1
compactness error float64 541 yeo-johnson 1
concavity error float64 533 yeo-johnson 1
concave points error float64 507 yeo-johnson 1
symmetry error float64 498 yeo-johnson 1
fractal dimension error float64 545 yeo-johnson 1
worst radius float64 457 yeo-johnson+scale 1
worst texture float64 511 standard_scale 1
worst perimeter float64 514 yeo-johnson+scale 1
worst area float64 544 yeo-johnson+scale 1
worst smoothness float64 411 保留 1
worst compactness float64 529 yeo-johnson 1
worst concavity float64 539 yeo-johnson 1
worst concave points float64 492 保留 1
worst symmetry float64 500 yeo-johnson 1
worst fractal dimension float64 535 yeo-johnson 1
radius_group category 3 onehot(3) 3

④ 列映射关系

仅展示有变化的列(被丢弃、展开、重命名或提取)。未列出的列原样保留。

原始列名 变换后列名 输出特征数 状态
radius_group radius_group_large radius_group_medium radius_group_small 3 展开

④ 数据概况

输出特征名

mean radius mean texture mean perimeter mean area mean smoothness mean compactness mean concavity mean concave points mean symmetry mean fractal dimension radius error texture error perimeter error area error smoothness error compactness error concavity error concave points error symmetry error fractal dimension error worst radius worst texture worst perimeter worst area worst smoothness worst compactness worst concavity worst concave points worst symmetry worst fractal dimension radius_group_large radius_group_medium radius_group_small

训练集描述性统计

列名 均值 标准差 最小值 最大值
mean radius 0.0000 1.0015 -1.9882 3.9711
mean texture 0.0000 1.0015 -2.0949 4.4438
mean perimeter 0.0000 1.0015 -1.9434 3.9624
mean area 0.0000 1.0015 -3.2571 2.6745
mean smoothness 0.0966 0.0135 0.0625 0.1425
mean compactness -0.0000 1.0015 -2.4231 2.4261
mean concavity 0.0000 1.0015 -1.6039 2.0715
mean concave points -0.0000 1.0015 -1.8194 2.0503
mean symmetry 0.1811 0.0281 0.1167 0.3040
mean fractal dimension -0.0000 1.0015 -2.7083 2.5781
radius error 0.0000 1.0015 -2.1487 2.2590
texture error -0.0000 1.0015 -2.4298 3.2078
perimeter error 0.0000 1.0015 -2.3460 2.5050
area error 0.0000 1.0015 -2.7590 2.4684
smoothness error -0.0000 1.0015 -3.4730 2.5279
compactness error -0.0000 1.0015 -2.2551 2.2689
concavity error 0.0000 1.0015 -1.9491 2.5693
concave points error -0.0000 1.0015 -2.7892 3.1021
symmetry error -0.0000 1.0015 -2.2717 2.3510
fractal dimension error -0.0000 1.0015 -2.2305 2.4126
worst radius 0.0000 1.0015 -2.9872 2.2546
worst texture -0.0000 1.0015 -2.0753 3.7012
worst perimeter 0.0000 1.0015 -2.9755 2.2817
worst area -0.0000 1.0015 -3.0560 2.3016
worst smoothness 0.1326 0.0227 0.0712 0.2184
worst compactness -0.0000 1.0015 -2.3134 2.4057
worst concavity 0.0000 1.0015 -1.7770 2.4025
worst concave points 0.1153 0.0681 0.0000 0.2910
worst symmetry 0.0000 1.0015 -3.0698 3.1460
worst fractal dimension -0.0000 1.0015 -2.5804 2.6530
radius_group_large 0.0411 0.1987 0.0000 1.0000
radius_group_medium 0.3607 0.4809 0.0000 1.0000
radius_group_small 0.5982 0.4910 0.0000 1.0000

由 TabularX 自动生成 · Preprocess 报告

TabularX 模型搜索报告 · model_search.html
TabularX 可解释性与公平性报告 · explanation.html

TabularX 可解释性与公平性报告

① 摘要

输入

xgboost
最优模型
114
解释样本数
33
特征数
87.1%
Top-10 累计解释力
1
敏感特征数

结论

对最优模型 xgboost 执行了 SHAP 可解释性分析, 并对 1 个敏感特征执行了公平性评估。

② 整体流程图

flowchart TB Input([模型搜索结果]) --> SHAPBlock[SHAP 可解释性
对最优模型] SHAPBlock --> Importance[特征重要性排序
Top-10] SHAPBlock --> Viz[SHAP 可视化
beeswarm / 柱状图 / waterfall] SHAPBlock --> Direction[特征贡献方向分析] Input --> FairnessBlock[公平性评估
对每个敏感特征] FairnessBlock --> Resolve[查找 column_mappings
解析预处理后列名] Resolve --> Dropped{已被丢弃?} Dropped -->|是| Skip[跳过并提示] Dropped -->|否| Split[按子组拆分测试集] Split --> GroupMetrics[计算各子组指标
正类预测率 / 准确率 / TPR / FPR] GroupMetrics --> Diff[计算公平性差异
Demographic Parity
Equalized Odds TPR/FPR] Diff --> Threshold{超出阈值 0.1?} Threshold -->|是| Warn[标记潜在偏见] Threshold -->|否| Pass[公平性通过] SHAPBlock & FairnessBlock --> Report[生成可解释性与公平性报告]
可解释性与公平性报告完整流程。SHAP 解释在最优模型上自动执行;公平性评估在用户指定敏感特征后执行。

③ SHAP 可解释性分析

1.1 基本信息

xgboost
最优模型
114
解释样本数
33
特征数
87.1%
Top-10 累计解释力
模型决策依据
最优模型 xgboost 在 114 个测试样本上进行了 SHAP 解释。 前 10 个特征累计解释了约 87.1% 的模型决策, 说明模型决策主要受少数关键特征驱动。

1.2 特征重要性(Top-10)

排名 特征 平均 |SHAP| 解释力占比 均值 标准差 最小值 最大值
1 worst concave points 0.9008 14.6% 0.0849 0.9916 -2.1791 1.1075
2 worst radius 0.7442 12.0% 0.0282 0.8024 -2.0766 0.7417
3 worst perimeter 0.7440 12.0% 0.0787 0.7863 -1.2415 1.0073
4 worst texture 0.6683 10.8% 0.0164 0.7612 -1.1125 1.9466
5 area error 0.5802 9.4% 0.0349 0.6237 -1.4137 0.7279
6 mean smoothness 0.4599 7.4% -0.0918 0.4703 -0.7463 0.8527
7 worst concavity 0.3725 6.0% 0.0463 0.3869 -0.4768 0.6348
8 worst area 0.3482 5.6% 0.0418 0.3914 -0.5360 0.7712
9 mean concave points 0.3276 5.3% 0.0379 0.3304 -0.5368 0.4520
10 mean texture 0.2372 3.8% 0.0176 0.2951 -0.7406 0.5986

1.3 SHAP 可视化

SHAP Summary
SHAP Summary(beeswarm)— 每个点代表一个样本的 SHAP 值
SHAP 特征重要性
特征重要性排序(平均 |SHAP| 值)
SHAP Waterfall
单个样本的 SHAP Waterfall 解释

1.4 特征贡献方向摘要

下表列出 Top-5 特征对预测的总体影响方向。均值 > 0 表示该特征值越高越推动预测向正类(或更高预测值), 均值 < 0 表示该特征值越高越推动预测向负类(或更低预测值)。

特征 平均 SHAP 值 主导方向 影响描述
worst concave points 0.0849 正向 值越大 → 正类概率越高
worst radius 0.0282 正向 值越大 → 正类概率越高
worst perimeter 0.0787 正向 值越大 → 正类概率越高
worst texture 0.0164 正向 值越大 → 正类概率越高
area error 0.0349 正向 值越大 → 正类概率越高

④ 公平性评估

4.1 配置

敏感特征 radius_group
评估指标Demographic Parity, Equalized Odds (TPR / FPR)
差异阈值由 FairnessConfig.dp_threshold / eo_tpr_threshold / eo_fpr_threshold 配置

4.2 敏感特征:radius_group

各子组指标

子组 样本数 正类预测率 准确率 TPR(真正率) FPR(假正率)
radius_group_medium 44 22.73% 90.91% 75.00% 3.12%
radius_group_small 66 93.94% 96.97% 100.00% 33.33%
radius_group_large 4 0.00% 100.00% 0.00% 0.00%

公平性差异

指标 差异值 是否超阈值 说明
Demographic Parity 0.9394 各子组正类预测率的最大差异
Equalized Odds (TPR) 1.0000 各子组真正率的最大差异
Equalized Odds (FPR) 0.3333 各子组假正率的最大差异
潜在偏见检测
模型在特征 radius_group 上存在超过阈值的公平性差异, 建议进一步审查模型对该特征的依赖情况。

由 TabularX 自动生成 · 可解释性与公平性报告

总结

TabularX 把 AutoML 变成一个可追溯的过程

1

传统 AutoML 产出零散的中间文件,TabularX 把它们编排为完整的、可读的实验报告。

2

继承 MLJAR 的注册表 + 能力声明 + Profile 只报事实的核心理念。

3

纯函数分层 + Schema 契约使核心逻辑与 IO 解耦,各阶段独立可测。

4

SHAP 解释与公平性审计成为每次运行的默认产物,不是可选的附加功能。

TabularX 数据概况报告 · profile.html

TabularX 数据概况报告

① 摘要

输入

569
样本数(行)
31
特征数(列)
c4255f37fde14b18
数据指纹

输出(结论)

判定为 binary 分类任务, 共 2 个类别。

关键发现

  • 11 列建议标准化(scale_needed)
  • 0 列存在缺失值(has_missing)
  • 0 列为常数列、0 列为全空列(预处理器将丢弃)
  • 0 列为高基数文本列
  • 22 列分布偏斜(skewed,建议 log 变换或缩尾)
  • 0 列高基数类别(high_cardinality,建议目标编码)

② 判断流程与证据

2.1 判断流程图

flowchart TD Start([开始:接收 X, y]) --> InputCheck{输入类型检查} InputCheck -->|X 不是 DataFrame 或 y 不是 Series| InvalidInput[失败:InvalidDataError] InputCheck -->|类型正确| ShapeCheck{数据非空检查} ShapeCheck -->|X 无行/无列,或 y 无样本| EmptyData[失败:EmptyDataError] ShapeCheck -->|数据非空| AlignCheck{X/y 长度检查} AlignCheck -->|行数不一致| LengthError[失败:MismatchedLengthError] AlignCheck -->|长度一致| TaskCheck{任务类型判断} TaskCheck -->|y 全为空| EmptyTarget[失败:EmptyTargetError] TaskCheck -->|task_type 非法或无法推断| TaskError[失败:TaskTypeError] TaskCheck -->|唯一值 = 2| Binary[二分类任务] TaskCheck -->|唯一值 3~20| Multi[多分类任务] TaskCheck -->|连续值或浮点且唯一值 > 20| Reg[回归任务] Binary --> Imbalance{类别不平衡检测} Multi --> Imbalance Reg --> ColLoop[逐列分析] Imbalance -->|最小类别占比 < 10%| Imbalanced[标记 imbalanced] Imbalance -->|否则| Balanced[类别分布较均衡] Imbalanced --> ColLoop Balanced --> ColLoop ColLoop --> EmptyColCheck{是否全空列?} EmptyColCheck -->|是:非缺失值 = 0| EmptyColumn[标记 empty_column] EmptyColCheck -->|否| ConstantCheck{是否常数列?} ConstantCheck -->|是:唯一值 = 1| ConstantColumn[标记 constant_column] ConstantCheck -->|否| ColType{列类型判断} EmptyColumn --> Done([完成:输出 DataProfile]) ConstantColumn --> Done ColType -->|datetime| DateTime[日期时间列] ColType -->|boolean| Boolean[布尔列] ColType -->|整数且唯一值 ≤ 20| Cate[类别列] ColType -->|整数且唯一值 > 20 或浮点| Num[数值列] ColType -->|object/str/category| Cat{唯一值与行唯一率} Cat -->|唯一值 > 200 且 >50% 行唯一| Text[文本列] Cat -->|其他| Cate Cate --> HighCard{基数检测} HighCard -->|unique > 50| HighCardYes[标记 high_cardinality] HighCard -->|unique ≤ 50| LowCard[基数正常] HighCardYes --> Miss{缺失值检查} LowCard --> Miss Num --> Scale{scale 判据} Scale -->|均值>0.5 或 std>1.5| ScaleYes[标记 scale_needed] Scale -->|否则| ScaleNo[无需标准化] ScaleYes --> Skew{偏度检测} ScaleNo --> Skew Skew -->|偏度>1| Skewed[标记 skewed] Skew -->|否则| NoSkew[分布风险较低] Skewed --> Miss{缺失值检查} NoSkew --> Miss DateTime --> Miss Boolean --> Miss Text --> Miss Miss -->|n_missing > 0| MissYes[标记 has_missing] Miss -->|无缺失| Done MissYes --> Done classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef warning fill:#fff3cd,stroke:#856404,stroke-width:1px; class InvalidInput,EmptyData,LengthError,EmptyTarget,TaskError error; class EmptyColumn,ConstantColumn,MissYes,ScaleYes,Skewed,HighCardYes,Imbalanced warning;
↑ profile 阶段完整判断流程。后续阶段:Split → Preprocess → Model Search。

2.2 目标变量判断依据

任务类型:binary
  • task_type_source = user+auto — 用户手动指定分类任务;按唯一值数 2 细分为 binary
规则:唯一值 ≤2 → 二分类;3~20 → 多分类;浮点连续且唯一值 >20 → 回归

2.3 特征列判断依据(仅列特殊情况)

mean radius numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=14.1273, std=3.5210,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean texture numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=19.2896, std=4.2973,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean perimeter numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=91.9690, std=24.2776,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
mean area numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=654.8891, std=351.6048,满足判据 → scale_needed
  • skewness = 1.6457 — 偏度 = 1.6457,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean smoothness numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0964, std=0.0141,不满足判据 → 无需 scale
mean compactness numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1043, std=0.0528,不满足判据 → 无需 scale
  • skewness = 1.1901 — 偏度 = 1.1901,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean concavity numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0888, std=0.0796,不满足判据 → 无需 scale
  • skewness = 1.4012 — 偏度 = 1.4012,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean concave points numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0489, std=0.0388,不满足判据 → 无需 scale
  • skewness = 1.1712 — 偏度 = 1.1712,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
mean symmetry numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1812, std=0.0274,不满足判据 → 无需 scale
mean fractal dimension numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0628, std=0.0071,不满足判据 → 无需 scale
  • skewness = 1.3045 — 偏度 = 1.3045,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
radius error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.4052, std=0.2771,不满足判据 → 无需 scale
  • skewness = 3.0886 — 偏度 = 3.0886,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
texture error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=1.2169, std=0.5512,满足判据 → scale_needed
  • skewness = 1.6464 — 偏度 = 1.6464,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
perimeter error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=2.8661, std=2.0201,满足判据 → scale_needed
  • skewness = 3.4436 — 偏度 = 3.4436,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
area error numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=40.3371, std=45.4510,满足判据 → scale_needed
  • skewness = 5.4472 — 偏度 = 5.4472,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
smoothness error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0070, std=0.0030,不满足判据 → 无需 scale
  • skewness = 2.3145 — 偏度 = 2.3145,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
compactness error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0255, std=0.0179,不满足判据 → 无需 scale
  • skewness = 1.9022 — 偏度 = 1.9022,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
concavity error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0319, std=0.0302,不满足判据 → 无需 scale
  • skewness = 5.1105 — 偏度 = 5.1105,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
concave points error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0118, std=0.0062,不满足判据 → 无需 scale
  • skewness = 1.4447 — 偏度 = 1.4447,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
symmetry error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0205, std=0.0083,不满足判据 → 无需 scale
  • skewness = 2.1951 — 偏度 = 2.1951,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
fractal dimension error numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0038, std=0.0026,不满足判据 → 无需 scale
  • skewness = 3.924 — 偏度 = 3.9240,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst radius numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=16.2692, std=4.8290,满足判据 → scale_needed
  • skewness = 1.1031 — 偏度 = 1.1031,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst texture numeric, scale_needed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=25.6772, std=6.1409,满足判据 → scale_needed
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
worst perimeter numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=107.2612, std=33.5730,满足判据 → scale_needed
  • skewness = 1.1282 — 偏度 = 1.1282,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst area numeric, scale_needed, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=880.5831, std=568.8565,满足判据 → scale_needed
  • skewness = 1.8594 — 偏度 = 1.8594,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|mean| > 0.5 或 std > 1.5 → 建议标准化
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst smoothness numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1324, std=0.0228,不满足判据 → 无需 scale
worst compactness numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2543, std=0.1572,不满足判据 → 无需 scale
  • skewness = 1.4736 — 偏度 = 1.4736,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst concavity numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2722, std=0.2084,不满足判据 → 无需 scale
  • skewness = 1.1502 — 偏度 = 1.1502,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst concave points numeric
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.1146, std=0.0657,不满足判据 → 无需 scale
worst symmetry numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.2901, std=0.0618,不满足判据 → 无需 scale
  • skewness = 1.4339 — 偏度 = 1.4339,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理
worst fractal dimension numeric, skewed
  • col_type = numeric — 列类型判定为 numeric
  • scale_rule = |mean|>0.5 or std>1.5 — |mean|=0.0839, std=0.0180,不满足判据 → 无需 scale
  • skewness = 1.6626 — 偏度 = 1.6626,|skew| > 1.0,分布偏斜明显,建议评估 log 变换或缩尾处理
规则:|skew| > 1 → 分布偏斜,建议评估 log 变换或缩尾处理

③ 详细描述性统计

目标变量

任务类型binary
类别数2
类别分布 1: 62.7% 0: 37.3%
缺失率0.00%

特征列

列名类型dtype缺失数缺失率 唯一值标签均值标准差
mean radius numeric float64 0 0.00% 456 numeric scale_needed 14.1273 3.5210
mean texture numeric float64 0 0.00% 479 numeric scale_needed 19.2896 4.2973
mean perimeter numeric float64 0 0.00% 522 numeric scale_needed 91.9690 24.2776
mean area numeric float64 0 0.00% 539 numeric scale_needed skewed 654.8891 351.6048
mean smoothness numeric float64 0 0.00% 474 numeric 0.0964 0.0141
mean compactness numeric float64 0 0.00% 537 numeric skewed 0.1043 0.0528
mean concavity numeric float64 0 0.00% 537 numeric skewed 0.0888 0.0796
mean concave points numeric float64 0 0.00% 542 numeric skewed 0.0489 0.0388
mean symmetry numeric float64 0 0.00% 432 numeric 0.1812 0.0274
mean fractal dimension numeric float64 0 0.00% 499 numeric skewed 0.0628 0.0071
radius error numeric float64 0 0.00% 540 numeric skewed 0.4052 0.2771
texture error numeric float64 0 0.00% 519 numeric scale_needed skewed 1.2169 0.5512
perimeter error numeric float64 0 0.00% 533 numeric scale_needed skewed 2.8661 2.0201
area error numeric float64 0 0.00% 528 numeric scale_needed skewed 40.3371 45.4510
smoothness error numeric float64 0 0.00% 547 numeric skewed 0.0070 0.0030
compactness error numeric float64 0 0.00% 541 numeric skewed 0.0255 0.0179
concavity error numeric float64 0 0.00% 533 numeric skewed 0.0319 0.0302
concave points error numeric float64 0 0.00% 507 numeric skewed 0.0118 0.0062
symmetry error numeric float64 0 0.00% 498 numeric skewed 0.0205 0.0083
fractal dimension error numeric float64 0 0.00% 545 numeric skewed 0.0038 0.0026
worst radius numeric float64 0 0.00% 457 numeric scale_needed skewed 16.2692 4.8290
worst texture numeric float64 0 0.00% 511 numeric scale_needed 25.6772 6.1409
worst perimeter numeric float64 0 0.00% 514 numeric scale_needed skewed 107.2612 33.5730
worst area numeric float64 0 0.00% 544 numeric scale_needed skewed 880.5831 568.8565
worst smoothness numeric float64 0 0.00% 411 numeric 0.1324 0.0228
worst compactness numeric float64 0 0.00% 529 numeric skewed 0.2543 0.1572
worst concavity numeric float64 0 0.00% 539 numeric skewed 0.2722 0.2084
worst concave points numeric float64 0 0.00% 492 numeric 0.1146 0.0657
worst symmetry numeric float64 0 0.00% 500 numeric skewed 0.2901 0.0618
worst fractal dimension numeric float64 0 0.00% 535 numeric skewed 0.0839 0.0180
radius_group categorical category 0 0.00% 3 categorical

由 TabularX 自动生成 · 数据指纹 c4255f37fde14b18

TabularX 数据划分报告 · split.html

TabularX 数据划分报告

① 摘要

输入

569
原始样本数
0.2
test_size 参数
0.25
validation_size 参数

输出

341
训练集 (59.9%)
114
验证集 (20.0%)
114
测试集 (20.0%)

关键结论

任务为 分类任务,使用了 分层采样(stratified split), 保证训练/验证/测试集各类别分布与原数据一致。 随机种子:42

② 判断流程与证据

2.1 判断流程图

flowchart TD Start([开始:接收 X, y, profile, config]) --> TaskCheck{任务类型判断} TaskCheck -->|binary / multiclass| Stratify[使用分层采样 stratify=y] TaskCheck -->|regression| Random[使用纯随机采样] Stratify --> Phase1[阶段 1:分出测试集] Random --> Phase1 Phase1 -->|stratify 失败(类别样本不足)| StratifyFail1[失败:StratifyError] Phase1 -->|成功| Phase2[阶段 2:从剩余部分分验证集] Phase2 -->|stratify 失败| StratifyFail2[失败:StratifyError] Phase2 -->|成功| SizeCheck{子集样本数检查} SizeCheck -->|任一子集 < min_samples_split| SizeFail[失败:InvalidSplitError] SizeCheck -->|全部达标| DistCheck{类别分布对比} DistCheck -->|max_shift < 0.05| Good[分布一致 ✅] DistCheck -->|max_shift ≥ 0.05| Warn[分布差异较大 ⚠️ 记录警告] Good --> Done([完成:输出 SplitResult]) Warn --> Done classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef warning fill:#fff3cd,stroke:#856404,stroke-width:1px; class StratifyFail1,StratifyFail2,SizeFail error; class Warn warning;
↑ split 阶段完整判断流程。

2.2 判断依据

stratify_reason = binary — 目标任务类型为 binary,使用分层采样保证各集类别分布一致。
random_seed = 42 — 随机种子 = 42,保证划分可复现。
train_ratio = 0.5993 — 训练集 341 样本,占 59.93%
valid_ratio = 0.2004 — 验证集 114 样本,占 20.04%
test_ratio = 0.2004 — 测试集 114 样本,占 20.04%
stratify_quality = 0.0088 — 三集间最大类别比例差异 = 0.0088(差异较小,分布一致 ✅)

由 TabularX 自动生成 · 随机种子 42

TabularX 数据预处理报告 · preprocess.html

TabularX 数据预处理报告

① 摘要

输入 / 输出

31
输入特征数
33
输出特征数
0
丢弃列数
341
训练集样本数
114
验证集样本数
114
测试集样本数

关键结论

没有列被丢弃。
特征数量从 31 变为 33 (增加 了 2 列)。

② 判断流程

flowchart TD Start([开始:接收 X, y, profile, split_result, config]) --> Slice[阶段 1:切片数据] Slice -->|提取 train/valid/test 索引| ColLoop[阶段 2:逐列处理] ColLoop --> EmptyCol{常数列或全空列?} EmptyCol -->|是| Drop[丢弃此列] EmptyCol -->|否| TextCol{文本列?} TextCol -->|是,handle_text=drop| Drop TextCol -->|是,handle_text=keep| TextError[报错:暂不支持 NLP] TextCol -->|否| DtCol{日期列?} DtCol -->|handle_datetime=drop| Drop DtCol -->|handle_datetime=keep| Keep[原样保留] DtCol -->|handle_datetime=extract| DtExtract[提取年/月/日数值特征] Drop --> NextCol TextError --> NextCol Keep --> NextCol DtExtract --> NextCol DtCol -->|否| NumCol{数值列?} NumCol -->|是| NumImpute[填补缺失值] NumImpute --> ScaleQuery{需要标准化?} ScaleQuery -->|是| SkewQuery1{分布偏斜?} ScaleQuery -->|否| SkewQuery2{分布偏斜?} SkewQuery1 -->|是| YeoJohnson[Yeo-Johnson 变换
兼作标准化] SkewQuery1 -->|否| Scale[标准化] SkewQuery2 -->|是| YeoJohnson2[Yeo-Johnson 变换] SkewQuery2 -->|否| NoOp[无需处理] YeoJohnson --> NextCol Scale --> NextCol YeoJohnson2 --> NextCol NoOp --> NextCol NumCol -->|否| BoolCol{布尔列?} BoolCol -->|是| BoolProc["填补缺失 转 int(0/1)"] BoolProc --> NextCol BoolCol -->|否| CateCol{类别列?} CateCol -->|是| CateImpute[填补缺失值] CateImpute --> HighCard{高基数?} HighCard -->|unique > max_onehot_categories| HighEnc{高基数编码} HighEnc -->|target| TargetEncode[目标编码] HighEnc -->|frequency| FreqEncode[频率编码] HighCard -->|否| LowEnc{低基数编码} LowEnc -->|onehot| OneHot[OneHot 编码] LowEnc -->|label| LabelEncode[标签编码] TargetEncode --> NextCol FreqEncode --> NextCol OneHot --> NextCol LabelEncode --> NextCol CateCol -->|否| Unknown[未知类型 原样保留] Unknown --> NextCol NextCol{还有下一列?} NextCol -->|是| ColLoop NextCol -->|否| Done([完成:输出 PreprocessedData]) classDef error fill:#f8d7da,stroke:#721c24,stroke-width:1px; classDef decision fill:#fff3cd,stroke:#856404,stroke-width:1px; class Drop,TextError error; class EmptyCol,TextCol,DtCol,NumCol,BoolCol,CateCol,ScaleQuery,SkewQuery1,SkewQuery2,HighCard,HighEnc,LowEnc decision;
↑ preprocess 阶段决策流程。灰色背景节点为决策分支,红色为错误出口。

③ 逐列变换记录

总计 31 列 · 标准化 11 列 · 填补 0 列 · 编码 0 列 · 丢弃 0 列

列名 原始 dtype 原始唯一值 变换动作 输出特征数 说明
mean radius float64 456 standard_scale 1
mean texture float64 479 standard_scale 1
mean perimeter float64 522 standard_scale 1
mean area float64 539 yeo-johnson+scale 1
mean smoothness float64 474 保留 1
mean compactness float64 537 yeo-johnson 1
mean concavity float64 537 yeo-johnson 1
mean concave points float64 542 yeo-johnson 1
mean symmetry float64 432 保留 1
mean fractal dimension float64 499 yeo-johnson 1
radius error float64 540 yeo-johnson 1
texture error float64 519 yeo-johnson+scale 1
perimeter error float64 533 yeo-johnson+scale 1
area error float64 528 yeo-johnson+scale 1
smoothness error float64 547 yeo-johnson 1
compactness error float64 541 yeo-johnson 1
concavity error float64 533 yeo-johnson 1
concave points error float64 507 yeo-johnson 1
symmetry error float64 498 yeo-johnson 1
fractal dimension error float64 545 yeo-johnson 1
worst radius float64 457 yeo-johnson+scale 1
worst texture float64 511 standard_scale 1
worst perimeter float64 514 yeo-johnson+scale 1
worst area float64 544 yeo-johnson+scale 1
worst smoothness float64 411 保留 1
worst compactness float64 529 yeo-johnson 1
worst concavity float64 539 yeo-johnson 1
worst concave points float64 492 保留 1
worst symmetry float64 500 yeo-johnson 1
worst fractal dimension float64 535 yeo-johnson 1
radius_group category 3 onehot(3) 3

④ 列映射关系

仅展示有变化的列(被丢弃、展开、重命名或提取)。未列出的列原样保留。

原始列名 变换后列名 输出特征数 状态
radius_group radius_group_large radius_group_medium radius_group_small 3 展开

④ 数据概况

输出特征名

mean radius mean texture mean perimeter mean area mean smoothness mean compactness mean concavity mean concave points mean symmetry mean fractal dimension radius error texture error perimeter error area error smoothness error compactness error concavity error concave points error symmetry error fractal dimension error worst radius worst texture worst perimeter worst area worst smoothness worst compactness worst concavity worst concave points worst symmetry worst fractal dimension radius_group_large radius_group_medium radius_group_small

训练集描述性统计

列名 均值 标准差 最小值 最大值
mean radius 0.0000 1.0015 -1.9882 3.9711
mean texture 0.0000 1.0015 -2.0949 4.4438
mean perimeter 0.0000 1.0015 -1.9434 3.9624
mean area 0.0000 1.0015 -3.2571 2.6745
mean smoothness 0.0966 0.0135 0.0625 0.1425
mean compactness -0.0000 1.0015 -2.4231 2.4261
mean concavity 0.0000 1.0015 -1.6039 2.0715
mean concave points -0.0000 1.0015 -1.8194 2.0503
mean symmetry 0.1811 0.0281 0.1167 0.3040
mean fractal dimension -0.0000 1.0015 -2.7083 2.5781
radius error 0.0000 1.0015 -2.1487 2.2590
texture error -0.0000 1.0015 -2.4298 3.2078
perimeter error 0.0000 1.0015 -2.3460 2.5050
area error 0.0000 1.0015 -2.7590 2.4684
smoothness error -0.0000 1.0015 -3.4730 2.5279
compactness error -0.0000 1.0015 -2.2551 2.2689
concavity error 0.0000 1.0015 -1.9491 2.5693
concave points error -0.0000 1.0015 -2.7892 3.1021
symmetry error -0.0000 1.0015 -2.2717 2.3510
fractal dimension error -0.0000 1.0015 -2.2305 2.4126
worst radius 0.0000 1.0015 -2.9872 2.2546
worst texture -0.0000 1.0015 -2.0753 3.7012
worst perimeter 0.0000 1.0015 -2.9755 2.2817
worst area -0.0000 1.0015 -3.0560 2.3016
worst smoothness 0.1326 0.0227 0.0712 0.2184
worst compactness -0.0000 1.0015 -2.3134 2.4057
worst concavity 0.0000 1.0015 -1.7770 2.4025
worst concave points 0.1153 0.0681 0.0000 0.2910
worst symmetry 0.0000 1.0015 -3.0698 3.1460
worst fractal dimension -0.0000 1.0015 -2.5804 2.6530
radius_group_large 0.0411 0.1987 0.0000 1.0000
radius_group_medium 0.3607 0.4809 0.0000 1.0000
radius_group_small 0.5982 0.4910 0.0000 1.0000

由 TabularX 自动生成 · Preprocess 报告

TabularX 模型搜索报告 · model_search.html
TabularX 可解释性与公平性报告 · explanation.html

TabularX 可解释性与公平性报告

① 摘要

输入

xgboost
最优模型
114
解释样本数
33
特征数
87.1%
Top-10 累计解释力
1
敏感特征数

结论

对最优模型 xgboost 执行了 SHAP 可解释性分析, 并对 1 个敏感特征执行了公平性评估。

② 整体流程图

flowchart TB Input([模型搜索结果]) --> SHAPBlock[SHAP 可解释性
对最优模型] SHAPBlock --> Importance[特征重要性排序
Top-10] SHAPBlock --> Viz[SHAP 可视化
beeswarm / 柱状图 / waterfall] SHAPBlock --> Direction[特征贡献方向分析] Input --> FairnessBlock[公平性评估
对每个敏感特征] FairnessBlock --> Resolve[查找 column_mappings
解析预处理后列名] Resolve --> Dropped{已被丢弃?} Dropped -->|是| Skip[跳过并提示] Dropped -->|否| Split[按子组拆分测试集] Split --> GroupMetrics[计算各子组指标
正类预测率 / 准确率 / TPR / FPR] GroupMetrics --> Diff[计算公平性差异
Demographic Parity
Equalized Odds TPR/FPR] Diff --> Threshold{超出阈值 0.1?} Threshold -->|是| Warn[标记潜在偏见] Threshold -->|否| Pass[公平性通过] SHAPBlock & FairnessBlock --> Report[生成可解释性与公平性报告]
可解释性与公平性报告完整流程。SHAP 解释在最优模型上自动执行;公平性评估在用户指定敏感特征后执行。

③ SHAP 可解释性分析

1.1 基本信息

xgboost
最优模型
114
解释样本数
33
特征数
87.1%
Top-10 累计解释力
模型决策依据
最优模型 xgboost 在 114 个测试样本上进行了 SHAP 解释。 前 10 个特征累计解释了约 87.1% 的模型决策, 说明模型决策主要受少数关键特征驱动。

1.2 特征重要性(Top-10)

排名 特征 平均 |SHAP| 解释力占比 均值 标准差 最小值 最大值
1 worst concave points 0.9008 14.6% 0.0849 0.9916 -2.1791 1.1075
2 worst radius 0.7442 12.0% 0.0282 0.8024 -2.0766 0.7417
3 worst perimeter 0.7440 12.0% 0.0787 0.7863 -1.2415 1.0073
4 worst texture 0.6683 10.8% 0.0164 0.7612 -1.1125 1.9466
5 area error 0.5802 9.4% 0.0349 0.6237 -1.4137 0.7279
6 mean smoothness 0.4599 7.4% -0.0918 0.4703 -0.7463 0.8527
7 worst concavity 0.3725 6.0% 0.0463 0.3869 -0.4768 0.6348
8 worst area 0.3482 5.6% 0.0418 0.3914 -0.5360 0.7712
9 mean concave points 0.3276 5.3% 0.0379 0.3304 -0.5368 0.4520
10 mean texture 0.2372 3.8% 0.0176 0.2951 -0.7406 0.5986

1.3 SHAP 可视化

SHAP Summary
SHAP Summary(beeswarm)— 每个点代表一个样本的 SHAP 值
SHAP 特征重要性
特征重要性排序(平均 |SHAP| 值)
SHAP Waterfall
单个样本的 SHAP Waterfall 解释

1.4 特征贡献方向摘要

下表列出 Top-5 特征对预测的总体影响方向。均值 > 0 表示该特征值越高越推动预测向正类(或更高预测值), 均值 < 0 表示该特征值越高越推动预测向负类(或更低预测值)。

特征 平均 SHAP 值 主导方向 影响描述
worst concave points 0.0849 正向 值越大 → 正类概率越高
worst radius 0.0282 正向 值越大 → 正类概率越高
worst perimeter 0.0787 正向 值越大 → 正类概率越高
worst texture 0.0164 正向 值越大 → 正类概率越高
area error 0.0349 正向 值越大 → 正类概率越高

④ 公平性评估

4.1 配置

敏感特征 radius_group
评估指标Demographic Parity, Equalized Odds (TPR / FPR)
差异阈值由 FairnessConfig.dp_threshold / eo_tpr_threshold / eo_fpr_threshold 配置

4.2 敏感特征:radius_group

各子组指标

子组 样本数 正类预测率 准确率 TPR(真正率) FPR(假正率)
radius_group_medium 44 22.73% 90.91% 75.00% 3.12%
radius_group_small 66 93.94% 96.97% 100.00% 33.33%
radius_group_large 4 0.00% 100.00% 0.00% 0.00%

公平性差异

指标 差异值 是否超阈值 说明
Demographic Parity 0.9394 各子组正类预测率的最大差异
Equalized Odds (TPR) 1.0000 各子组真正率的最大差异
Equalized Odds (FPR) 0.3333 各子组假正率的最大差异
潜在偏见检测
模型在特征 radius_group 上存在超过阈值的公平性差异, 建议进一步审查模型对该特征的依赖情况。
← → 翻页 · F 全屏