请用 240 条完全虚构的研究项目数据,完成一个中文轻量案例:小样本预测模型为什么不能只看 AUC。 比较简单基线、正则化 Logistic 回归和树模型,采用嵌套分层交叉验证,报告折外 ROC-AUC、PR-AUC、Brier、校准和混淆矩阵;再用隔离的结局派生变量演示数据泄漏。生成可复现代码、数据、4 张中文图和 HTML/Markdown 报告。明确模拟数据不能当作真实证据,并实际执行、检查所有文件;失败时如实说明。
真实 OpenScience 对话 · 固定模型 GPT-5.6-sol · 数据完全虚构
预测模型验证:
为什么不能只看 AUC
这不是预先写好的静态答案。下面直接呈现 AI 研伴(OpenScience)同一个真实演示会话中的提问、工具活动、完整回复和项目文件。
原生会话实录
像进入工作台一样查看这次分析
页面直接读取公开的脱敏会话数据,按原顺序展示用户提问、Agent 活动、完整回复和实际文件;没有重新改写成宣传摘要。
预测模型验证:为什么不能只看 AUC
AI 研伴(OpenScience) · gpt-5.6-sol
Agent 活动 · 12 个步骤展开查看
已完成并验证本次独立演示项目。所有计算均使用固定种子、CPU 单线程,在本项目工作区内完成;未访问其他项目、环境变量、密钥或主机内网,也未安装系统服务或下载大型模型。
主要结果
模拟数据:
- 样本量:240
- 阳性率:47.92%(115/240)
- 固定种子:
20260911 - 模拟结果完全虚构,不代表真实人群证据,也不用于临床或现实决策
- 实际分析耗时:约 47.4 秒
合法模型采用:
- 外层 5 折分层交叉验证
- 内层 3 折分层交叉验证
- 所有预处理、特征筛选和调参均在训练折内完成
- 保留每个样本的外层折外预测概率
- 阈值固定为 0.5,未利用折外结果调阈值
| 模型 | ROC-AUC | PR-AUC | Brier 分数 | 准确率 | 敏感度 | 特异度 |
|---|---|---|---|---|---|---|
| 简单基线 | 0.500 | 0.479 | 0.250 | 0.521 | 0.000 | 1.000 |
| 正则化 Logistic 回归 | 0.698 | 0.688 | 0.219 | 0.642 | 0.617 | 0.664 |
| 随机森林 | 0.671 | 0.625 | 0.226 | 0.617 | 0.617 | 0.616 |
| 错误示范:结果派生变量泄漏 | 1.000 | 1.000 | 0.003 | 1.000 | 1.000 | 1.000 |
PR-AUC 的阳性率基线为 0.479。泄漏方案明显虚高,且已明确隔离,没有参与合法模型选择。
已生成文件
项目工作区内已生成:
analysis.py:完整可复现分析脚本report.md:中文科研案例报告report.html:可独立离线阅读的 HTML 报告simulated-project-data.csvsimulated-project-data.xlsxoof-predictions.csv:3 个模型共 720 条折外预测记录metrics.csvfeature-importance.csvdata-dictionary.csvdependencies.txtresult-summary.jsonfigure-01-roc-pr.pngfigure-02-calibration.pngfigure-03-metrics-confusion.pngfigure-04-leakage.png
图表包括:
- ROC 与 PR 曲线
- 折外概率校准图
- 合法模型指标比较
- 合法方案与泄漏方案对照,并醒目标注“不正确做法,仅用于教学”
验证结果
已执行:
python3 analysis.py
随后在项目工作区重新执行并检查:
- 所有要求文件均存在
- 原始数据行数:240
- 折外预测行数:720
result-summary.json可正常读取- 结果摘要包含随机种子、阳性率、耗时、模型指标及各文件 SHA-256
- 中文报告 SHA-256:
ada9e19778bf65aa554276f4f7dda189013ecbc1567528fc9c558f38cc1cde12
最重要的教学结论已写入报告:ROC-AUC 只反映排序区分度,不能替代 PR-AUC、Brier 分数、校准图和阈值下混淆矩阵;此外,结果派生变量会造成极端虚高表现,必须在建模前完成数据泄漏审计。
我打开了 4 张图,发现中文都显示成方框,当前结果不能发布。请使用 Google Noto 官方中文字体修复代码,重新生成并检查图片和报告;保留这次失败与修复过程,并明确说明代码运行成功不等于图像一定显示正常。
Agent 活动 · 8 个步骤展开查看
已继续在同一独立项目中修复,并保留本轮用户反馈与我的处理回复作为真实对话记录。
首先明确承认
首轮视觉验收失败:虽然首轮代码成功运行并生成了 4 张 PNG,但中文标题、坐标轴和图例实际显示为方框,因此首轮结果不能发布。代码运行成功并不能证明图像没有乱码;本轮已针对字体文件、字体绑定和输出文件进行修复与验证。
本轮修复
已从 Google Noto 官方维护的 GitHub 仓库下载并使用:
字体:Noto Sans CJK SC
官方来源:
https://raw.githubusercontent.com/notofonts/noto-cjk/main/Sans/OTF/SimplifiedChinese/NotoSansCJKsc-Regular.otf
修改后的 analysis.py:
- 显式定义官方字体来源 URL
- 显式要求脚本同目录存在
NotoSansCJKsc-Regular.otf - 使用:
font_manager.fontManager.addfont(str(FONT_PATH))
font_manager.FontProperties(fname=str(FONT_PATH))
- 标题、坐标轴标签、图例、刻度标签和图表注释均显式绑定该
FontProperties - 设置:
plt.rcParams["axes.unicode_minus"] = False
- 不再静默回退到可能缺少中文 glyph 的字体
- 若字体缺失、为空或字体名称解析不符,脚本会清晰报错并停止
字体文件在重新渲染和验证完成后已按要求删除。由于 analysis.py 保留了官方获取命令、来源 URL 和失败提示,因此之后复现时需要先重新下载该官方字体;缺少字体时不会生成可能含方框的图像。
已重新生成的文件
以下文件均已更新:
figure-01-roc-pr.pngfigure-02-calibration.pngfigure-03-metrics-confusion.pngfigure-04-leakage.pngreport.htmlreport.mdresult-summary.jsonanalysis.pydependencies.txt
此外,重新运行同时保留并核验了:
metrics.csvoof-predictions.csvsimulated-project-data.csvsimulated-project-data.xlsxfeature-importance.csvdata-dictionary.csv
实际验证
执行命令:
python3 analysis.py
重新生成后实际得到:
| 图像 | 尺寸 | 文件大小 |
|---|---|---|
figure-01-roc-pr.png | 2340 × 900 | 177,348 bytes |
figure-02-calibration.png | 1260 × 900 | 92,069 bytes |
figure-03-metrics-confusion.png | 1980 × 1440 | 121,799 bytes |
figure-04-leakage.png | 2160 × 900 | 79,590 bytes |
文件级验证结果:
- 4 张 PNG 均存在
- 4 张 PNG 均非空
- 图像尺寸均可正常读取
- 字体文件存在且非空时,字体解析名称为
Noto Sans CJK SC report.html已重新嵌入 4 张更新后的 PNGmetrics.csv包含 4 行结果- 原始数据仍为 240 行
- 折外预测仍为 720 行
- 合法模型指标重新计算并与首轮一致:
- 简单基线 ROC-AUC:0.500
- 正则化 Logistic 回归 ROC-AUC:0.698
- 随机森林 ROC-AUC:0.671
- 独立泄漏教学示范 ROC-AUC:1.000
重新执行后已删除本地字体文件,并额外验证:
otf_exists_after_cleanup False
同时确认删除字体后再次运行会失败,而不是静默回退:
exit_code=1
这符合“缺少官方字体时清晰失败”的要求。
报告中的新增记录
report.md 和 result-summary.json 已记录:
- 首轮视觉验收失败的原因
- 官方字体名称
- 官方来源 URL
- 字体文件路径和名称验证
- 图像尺寸与非空验证
- 不静默回退字体的设置
- “代码运行成功不等同于视觉无乱码,仍需人工查看图像”的限制说明
需要如实说明:本轮已完成官方字体绑定、字体解析、渲染输出和文件级检查,但我不会把这些检查夸大为人工视觉验收的替代品。最终发布前仍建议直接打开 4 张 PNG 和 report.html,确认中文 glyph 在实际查看器中无方框、无截断、无重叠。
实际计算结果
同一个 AUC,回答不了所有问题
| 模型 | ROC-AUC | PR-AUC | Brier(越低越好) |
|---|---|---|---|
| 简单基线 | 0.500 | 0.479 | 0.250 |
| 正则化 Logistic 回归 | 0.698 | 0.688 | 0.219 |
| 随机森林 | 0.671 | 0.625 | 0.226 |
| 错误示范:结果派生变量泄漏 | 1.000 | 1.000 | 0.003 |



