PDP_ICE-偏依赖与个体条件期望
PDPICE-偏依赖与个体条件期望 的真实核心主要位于:
PDP_ICE-偏依赖与个体条件期望
1. 方法概述
PDP_ICE-偏依赖与个体条件期望 的真实核心主要位于:
core/pdp_ice_calculator.pyui/upload_widget.pyui/results_widget.pyui/main_window.py
从当前代码看,这个模块不是直接调用 sklearn 的 PartialDependenceDisplay,而是自己实现了一套一维 PDP / ICE 计算流程:
- 训练随机森林模型;
- 对每个被选特征单独生成一个一维网格;
- 从训练集抽样若干样本形成 ICE 基线;
- 固定其它特征,仅替换当前特征为网格值;
- 对每个样本得到一条 ICE 曲线,再对 ICE 求均值得到 PDP。
设数据集为
$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{N} \tag{1} $$
当前实现只支持单特征的 PDP / ICE,不支持二维交互 PDP。
2. 数据约束与模型设定
2.1 特征列与目标列
设目标列为 \(y\),用户选择的特征集合为 \(S\)。底层 set_data() 会先把目标列之外的所有列中过滤出数值列,再与用户手工输入的特征列表取交集。因此真正进入模型的矩阵为
$$ X=\mathcal{D}[S_{\text{num}}] \tag{2} $$
其中 \(S_{\text{num}}\) 表示最终保留下来的数值特征集合。
如果用户不填写特征列表,则默认使用全部数值特征。
2.2 非数值特征不会编码
当前模块不会做:
- One-Hot 编码
- 缺失值填补
- 标准化
- 其它特征工程
上传页若检测到非数值特征,只会提示“将被自动忽略”;训练与 PDP/ICE 计算都只使用数值列。
2.3 训练 / 测试切分
模型训练前先执行
$$ \mathcal{D}_{\text{train}}\cup\mathcal{D}_{\text{test}}=\mathcal{D} \tag{3} $$
其中:
test_size由界面输入;- 分类任务使用
stratify=y; - 回归任务不分层。
2.4 固定模型族
代码不支持任意模型切换,只支持:
$$ \mathcal{M}= \begin{cases} \text{RandomForestClassifier}, & \text{classification}\\ \text{RandomForestRegressor}, & \text{regression} \end{cases} \tag{4} $$
模型超参数只有:
n_estimatorsmax_depthrandom_state
其中界面里 max_depth=0 会被解释成 None。
3. 一维 ICE 与 PDP 的真实计算方式
3.1 网格构造
对某个特征 \(x_s\),代码从训练集列 X_train[s] 上取最小值和最大值,构造线性网格:
$$ G_s=\{z_1,\dots,z_m\},\qquad z_k\in[\min(x_s),\max(x_s)] \tag{5} $$
若该列在训练集中是常数,则网格退化成一个点。
3.2 ICE 样本基线
代码并不是对整个训练集都画 ICE,而是先随机抽样:
$$ \mathcal{I}\subset \mathcal{D}_{\text{train}},\qquad |\mathcal{I}|=\min(\texttt{ice\_samples}, |\mathcal{D}_{\text{train}}|) \tag{6} $$
然后只对这批抽中的训练样本生成 ICE 曲线。
3.3 单条 ICE 曲线
对抽中的某个样本 \(x^{(r)}\),代码固定其它特征,只让第 \(s\) 个特征沿网格变化,得到:
$$ \mathrm{ICE}_r(z)=f(x^{(r)}_{-s},x_s=z) \tag{7} $$
这里 \(f(\cdot)\) 是随机森林的 predict() 输出。
3.4 PDP 均值
对该特征的 PDP,代码直接取所有 ICE 曲线的均值:
$$ \mathrm{PDP}_s(z)=\frac{1}{|\mathcal{I}|}\sum_{r\in\mathcal{I}}\mathrm{ICE}_r(z) \tag{8} $$
这正对应导出表里的:
valuepdp_meanice_1,ice_2, ...
3.5 分类任务的特殊口径
这里有一个非常重要的实现细节:分类任务并没有使用 predict_proba(),而是直接使用
$$ f(x)=\hat y(x) \tag{9} $$
也就是类别预测标签本身。
因此:
- 若类别编码为
0/1,PDP 均值更像“预测为 1 的比例”; - 若类别是
0/1/2这类多类别整数编码,PDP 均值其实是在平均类别编号; - 若类别标签是字符串,当前
ICE/PDP的均值计算将不具备稳定的数值意义,甚至可能直接失败。
所以这个分类版 PDP/ICE 与标准教材中常见的“基于类别概率的 PDP”并不相同,文档里必须写清楚。
4. 测试集指标与结果结构
4.1 分类指标
分类任务在测试集上导出:
$$ \mathrm{Accuracy}=\frac{1}{n}\sum_{i=1}^{n}\mathbf{1}(\hat y_i=y_i) \tag{10} $$
并尽量补充:
f1_weightedf1_macro
4.2 回归指标
回归任务导出:
$$ \mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat y_i)^2} \tag{11} $$
$$ R^2=1-\frac{\sum_i(y_i-\hat y_i)^2}{\sum_i(y_i-\bar y)^2} \tag{12} $$
4.3 processed_data 的真实含义
结果字典中的
$$ \texttt{processed\_data}=[y, X] \tag{13} $$
其实只是“目标列 + 被选中的数值特征列”的拼接结果,并不是训练集 / 测试集拆分后的处理矩阵,也不是做过任何标准化后的矩阵。
5. 输出结果、图表与复现
5.1 图表输出
每个特征都会生成一张合并图:
- 灰色细线:若干条
ICE - 紫色粗线:
PDP
图文件保存在:
plots/pdp_ice_<feature>.png
也就是说,这个模块不会把 PDP 和 ICE 分成两张图,而是叠加在同一张图上。
5.2 Excel 工作表
save_to_excel() 实际导出:
RawDataProcessedTestPredsParametersParamsMetricsCharts- 每个特征一张
PDP_<feat>工作表
其中:
Parameters和Params内容是重复的;- 每个特征 sheet 都包含该特征的网格值、PDP 均值和若干 ICE 曲线;
Charts只保存特征名到图片路径的映射。
5.3 输出路径与复现脚本
默认输出路径形如:
results/PDP_ICE-偏依赖与个体条件期望分析结果_时间戳/pdp_ice_results_时间戳.xlsx
结果页还会自动生成:
repro_pdp_ice.py
并可额外导出带时间戳的 pdp_ice_reproduce_*.py 与对应输出日志。
6. 实现说明与注意事项
根据当前真实代码,论文说明中应明确以下边界:
- 这不是 sklearn 官方 PDP API 的直接封装,而是随机森林上一维 PDP/ICE 的自写实现。
- 当前只支持数值特征;非数值特征不会被编码,只会被忽略。
- ICE 不是对全体训练样本计算,而是只对
ice_samples个随机抽样样本计算。 - 分类任务直接对
predict()标签输出做均值,不是标准的类别概率 PDP。 - 因此分类任务在非二元数值标签、尤其字符串标签下,PDP/ICE 的数值解释性较弱,甚至可能出错。
- 目录里虽然存在
feature_engineering_panel.py和results_preview_widget.py,但主窗口实际仍是UploadWidget + ResultsWidget流程,这些组件没有真正接入当前主流程。
7. 论文写作模板
7.1 方法描述模板
“本文采用基于随机森林模型的一维偏依赖与个体条件期望分析方法,通过对单个特征构造网格取值并固定其余变量,考察该特征变化对模型输出的影响。依据项目实际实现,首先在训练集上拟合随机森林模型,然后从训练样本中随机抽取若干个体生成 ICE 曲线,最后对各条 ICE 曲线取均值得到 PDP 曲线。因此,本文所使用的是单特征、一维 PDP/ICE 分析流程,不包含二维交互 PDP。”
7.2 结果解释模板
结果部分可写为:PDP 曲线刻画了特征变化对模型输出的平均影响趋势,而 ICE 曲线之间的离散程度反映了不同样本响应路径的异质性。若大部分 ICE 曲线走势一致,则说明该特征作用较为稳定;若 ICE 曲线差异明显,则表明模型对不同个体存在异质化响应。对于分类任务,还需说明当前实现是对 predict() 离散输出求均值,因此图形更适合解释“平均预测标签变化趋势”,而不是严格意义上的类别概率偏依赖。
7.3 表格标题模板
- 表 1 PDP/ICE 分析模型参数与网格设置表
- 表 2 关键特征网格取值与 PDP 均值结果表
- 表 3 关键特征 ICE 曲线摘要统计表
- 表 4 随机森林模型预测性能指标表
7.4 图表题注模板
- 图 1 关键特征的 PDP 与 ICE 叠加曲线。
- 图 2 不同特征 PDP 曲线对比图。
- 图 3 关键特征 ICE 异质性响应图。
7.5 表格示例
表 1 关键特征 PDP 结果表示例
| 特征 | 网格取值 | PDP 均值 | 备注 |
|---|---|---|---|
| \(X_1\) | |||
| \(X_1\) |
表注:PDP 均值由所有 ICE 曲线在同一网格点上的算术平均得到;若为分类任务,应注明这里的平均对象是预测标签而非类别概率。
8. 单篇终审补充
8.1 图题与表题对齐建议
当前 PDP_ICE 模块的真实工作簿包含:
RawDataProcessedTestPredsParametersParamsMetricsCharts- 每个特征一张
PDP_<feat>工作表
其中每个 PDP_<feat> 工作表才是论文中最适合直接引用的核心结果页,因为它同时承载网格值、PDP 均值和若干 ICE 曲线。Parameters 与 Params 当前内容重复,论文里不需要把两张表都单独引用。
图文件保存在结果目录下的 plots/ 子目录,真实命名规则为:
pdp_ice_<feature>.png
因此图题建议写成“特征 \(X_j\) 的 PDP/ICE 叠加曲线图”。当前程序不会把 PDP 与 ICE 分成两张独立图,这一点应在论文图注里写清。
8.2 终审说明
这篇文档最需要避免的误写,是把分类任务的 PDP 解释成“类别概率偏依赖”。当前真实实现对分类任务直接对 predict() 的离散输出求均值,因此它更接近“平均预测标签趋势”,不是标准概率 PDP。
另外,当前 repro 脚本已经采用 repro_inputs/... 相对路径,结果目录中可见如 repro_inputs/pdp_ice_baseline_input.csv 的输入引用。这篇可按新框架写可复现性。
8.3 全量强化补充
本篇终审补充绑定的真实算法目录为 具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望,本次采用的代表性结果目录为 具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703。
该目录当前同时存在三份结构一致的工作簿:
pdp_ice_results_20260322_082703.xlsxpdp_ice_results_20260322_082703_reproduce.xlsxpdp_ice_repro.xlsx
三者实测工作表一致,均包含:
RawDataProcessedTestPredsParametersParamsMetricsChartsPDP_f1PDP_f2PDP_f3
这说明当前目录里同时保留了主结果工作簿和两份再生产物。正文若引用这一轮证据,最好把 pdp_ice_results_20260322_082703.xlsx 作为主结果,把另外两份明示为复现重跑结果,而不要写成单一文件。
当前目录中的真实图文件位于 plots/ 子目录:
具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/plots/pdp_ice_f1.png具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/plots/pdp_ice_f2.png具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/plots/pdp_ice_f3.png
因此这一轮真实图证据是 3 个特征各自的 PDP/ICE 叠加图,而不是二维交互 PDP 图,也不是把 PDP 与 ICE 拆成两类单独图。
复现实物方面,该目录实际包含:
具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/repro_pdp_ice.py具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/repro_inputs/pdp_ice_baseline_input.csv具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703/repro_inputs/pdp_ice_reproduce_20260322_082703_data.csv
其中 repro_pdp_ice.py 明确写成 INPUT_FILE = 'repro_inputs/pdp_ice_baseline_input.csv'、OUTPUT_FILE = 'pdp_ice_repro.xlsx'。因此当前目录的真实可复现性口径是“主结果目录自带两个输入副本,其中一个供当前 repro 脚本直接调用”,而不是单纯依赖算法根目录上传样本。
11. 软件实现核查补充(2026-07)
- 当前主结果目录应写作
具体的算法3/可解释与AutoML/PDP_ICE-偏依赖与个体条件期望/results/PDP_ICE-偏依赖与个体条件期望分析结果_20260322_082703。 - 正文应围绕
Parameters、RawData、Processed、PDP_f1、PDP_f2、PDP_f3、Local、Charts来写。 - 图证应对应
pdp_ice_f1.png、pdp_ice_f2.png、pdp_ice_f3.png,并把 PDP 与 ICE 的含义区分开。 - 复现脚本应按
repro_pdp_ice.py + repro_inputs/pdp_ice_baseline_input.csv的口径说明。