# 小样本预测模型为什么不能只看 AUC

> **独立演示项目;数据完全虚构,不代表真实人群证据,也不用于临床或其他现实决策。**

## 1. 研究问题与模拟机制

面向科研研究生,模拟“研究项目是否按期完成”的二分类预测任务。固定种子 `20260911` 生成 240 个项目;变量包括项目规模、团队规模、前期准备、研究领域、资源投入和两项冗余特征。先生成特征,再按如下虚构机制生成概率:`logit(p) = -1.05 + 0.035*(准备-60) + 0.025*(资源-60) + 0.10*(团队-6) + 0.16*log(规模) + 领域偏移 + N(0,0.75)`,最后按 Bernoulli(p) 生成结果。该机制只是软件演示设定,不能解释为变量的因果作用。

原始数据还含有 `outcome_derived_leakage`,它直接等于结果,是**结果派生变量**,仅用于下文隔离的错误示范,未进入任何合法模型的选择或训练。

## 2. 验证设计与模型

- 外层 5 折、内层 3 折,均为分层、打乱、固定种子;保留每个样本的外层折外概率。
- 合法模型:简单先验基线、带标准化/独热编码/单变量筛选与 C 调参的正则化 Logistic 回归、带同样折内预处理/筛选与深度和叶节点调参的随机森林。
- `GridSearchCV` 只在外层训练折中进行;预处理、特征筛选和调参全部在训练折内。阈值预先固定为 0.5,未用折外结果选阈值。
- 报告 ROC-AUC、PR-AUC、Brier 分数;PR-AUC 的阳性率基线为 `0.4792`(阳性数 115/240)。折间 SD 没有被冒充为置信区间;这里报告的是一次固定模拟的折外汇总,未给出置信区间。

## 3. 结果

model roc_auc pr_auc brier accuracy sensitivity specificity
简单基线 0.5000 0.4792 0.2496 0.5208 0.0000 1.000
正则化Logistic回归 0.6984 0.6880 0.2194 0.6417 0.6174 0.664
随机森林 0.6714 0.6254 0.2259 0.6167 0.6174 0.616
错误示范(结果派生变量泄漏) 1.0000 1.0000 0.0028 1.0000 1.0000 1.000

图 1 展示 ROC/PR,图 2 展示校准,图 3 展示合法模型指标。AUC 衡量排序区分度,不衡量概率是否可信;因此必须同时看 PR、Brier、校准和阈值下混淆矩阵。预测概率只表示本模拟数据生成条件下的模型输出,不是个体真实概率。

### 阈值 0.5 混淆矩阵

- **简单基线**:

```text
[[125, 0], [115, 0]]
```(行=真实类别0/1,列=预测类别0/1)
- **正则化Logistic回归**:

```text
[[83, 42], [44, 71]]
```(行=真实类别0/1,列=预测类别0/1)
- **随机森林**:

```text
[[77, 48], [44, 71]]
```(行=真实类别0/1,列=预测类别0/1)

### 特征重要性限制

下表是外层折内拟合后系数绝对值/树特征重要性的平均摘要,仅用于描述模型内部利用的关联信号;冗余特征可能分摊重要性,重要性不等于稳定性,更不等于因果作用。

model feature importance
正则化Logistic回归 num__resource_input 0.8958
正则化Logistic回归 num__redundant_resource_copy 0.6723
正则化Logistic回归 num__preparation_score 0.6171
正则化Logistic回归 num__team_size 0.3291
正则化Logistic回归 cat__research_field_工程技术 0.2884
正则化Logistic回归 cat__research_field_计算方法 0.1747
正则化Logistic回归 cat__research_field_社会科学 0.1496
正则化Logistic回归 num__redundant_size_copy 0.1164
随机森林 num__preparation_score 0.3296
随机森林 num__redundant_resource_copy 0.2460
随机森林 num__resource_input 0.2146
随机森林 num__team_size 0.1242
随机森林 num__project_size 0.0940
随机森林 num__redundant_size_copy 0.0588
随机森林 cat__research_field_工程技术 0.0257
随机森林 cat__research_field_基础研究 0.0135

## 4. 明确隔离的错误示范

图 4 和指标表中的“错误示范(结果派生变量泄漏)”将 `outcome_derived_leakage` 作为输入,且在同一数据上展示,属于 **不正确做法,仅用于教学**;它不得与合法方案比较后用于模型选择。由于输入直接携带结果,表现会虚高,正是数据泄漏审计需要拦截的情形。

## 5. 复现、耗时与审计

- 实际验证命令:`python3 analysis.py`
- 实际执行耗时:`47.61` 秒(CPU 轻量分析;模型线程数设为 1)。
- 首轮视觉验收失败:初版 PNG 的中文标题、坐标轴和图例显示为方框,不能发布。本轮已改用 Google Noto 官方字体 `Noto Sans CJK SC`,来源:https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/OTF/SimplifiedChinese/NotoSansCJKsc-Regular.otf;通过 `FontProperties(fname=...)` 显式指定所有标题、坐标轴、图例和注释,并设置负号正常显示。
- 字体验证:字体文件存在且非空;字体名称解析为 `Noto Sans CJK SC`;4 张 PNG 均重新渲染、尺寸和非空检查通过。该记录说明代码执行成功不等同于视觉无乱码,仍需人工查看图像。
- 依赖版本见 `dependencies.txt`;机器可读摘要见 `result-summary.json`。
- 输出:`simulated-project-data.csv`、`simulated-project-data.xlsx`、`oof-predictions.csv`、`metrics.csv`、`feature-importance.csv`、`data-dictionary.csv`、四张 PNG、`report.md`、`report.html`、`analysis.py`。
- 审计结论:结果派生列被明确排除在合法特征列表外;无外部数据、无密钥/环境变量读取、无大型模型、无系统服务安装;所有随机过程固定种子。

## 6. 解读边界

这是一次小样本、完全虚构的可复现实验。性能受生成机制、样本量和随机种子影响;不能外推到真实科研团队或人群。若用于真实研究,应预先定义目标、时间切点、缺失处理、外部验证和不确定性分析,并由领域专家审查。

figure-01-roc-pr.png


figure-02-calibration.png


figure-03-metrics-confusion.png


figure-04-leakage.png