# Prompt 04：完整内部验证

## 背景

这是流程的第四阶段：对**完整开发流程**做内部验证——不是先在全训练集固定变量再做交叉验证，而是每个 outer fold 内独立重学全部预处理与变量筛选，用折外（out-of-fold, OOF）预测评价流程的真实表现。对应 Book 3 第 4 章，参考实现见 `Demo_R_Project/R/04_internal_validation.R`。

## 数据说明

- 输入：清理后的分析队列、`results/tables/split_manifest.csv`（只用 train 成员）、`results/tables/fold_manifest.csv`（outer 折成员）；
- 结局变量：`<结局变量>`；正类：`<正类>`；
- 候选预测变量：`<候选变量清单>`；
- outer 折数：`<折数>`（须与 fold 成员清单一致）；LASSO 内层调参折数：`<内层折数>`；种子：`<种子>`。

## 当前任务

按 fold 成员清单执行 outer 交叉验证：每个 outer 训练折内独立重学插补、编码、标准化、LASSO 筛选与 Logistic 重拟合，对该折的留出部分预测；合并全部 OOF 预测后计算 ROC/AUC、Brier、校准与 DCA，并输出逐折选变量审计。

先检查输入并给出简要计划，然后继续执行指定任务；不要在计划后等待用户再次确认。只有输入冲突、字典冲突、必须改变方法或命中暂停条件时停止。

## 方法

1. 校验 fold 成员清单恰好划分训练集（行 ID 集合一致、折数等于 `<折数>`），不一致即暂停；
2. 对每一个 outer fold：以其余折为折内训练集，独立学习中位数/众数插补值、因子编码与参照、标准化参数，运行交叉验证 LASSO（内层 `<内层折数>` 折，lambda.min）选出变量，映射原始变量后 Logistic 无惩罚重拟合；
3. 用该折学到的全部预处理与模型，对该 outer fold 的留出样本预测概率；
4. 合并全部 OOF 预测（应恰好覆盖训练集一次），计算：ROC 与 AUC（95% CI 注明方法，如 DeLong）、Brier、校准 intercept 与 slope、有阈值范围依据的 DCA；
5. 输出逐折入选变量审计（每个原始变量在几折入选），作为折内独立重选的证据；
6. 绘制 OOF ROC 图、校准图、DCA 图；
7. 每折所用变量集合落盘，保证可回放。

## 输出

- `results/tables/cv_predictions_logistic.csv`：带行 ID 与 fold 编号的 OOF 预测；
- `results/tables/cv_selected_variables_by_fold.csv`：逐折入选变量；
- `results/tables/cv_metrics_logistic.csv`：AUC（含 CI 与方法）、Brier、校准 intercept/slope；
- `results/tables/cv_pipeline_audit.csv`：逐折流程审计（插补值、变量数等）；
- `results/figures/` 下的 OOF ROC 图、校准图、DCA 图；
- 日志：逐折完成记录与断言结果。

## 约束

- 严禁"全训练集先筛变量、固定名单、再做 CV"——每个 outer fold 必须独立重选；
- 折内学习的一切（插补、编码、标准化、变量集合、模型）不得跨折共享；
- 测试集本阶段不读取、不使用；本阶段结果标记为"内部验证"，不得称为外部验证；
- OOF 预测必须带行 ID 且恰好覆盖训练集一次；
- 指标口径写清：CI 方法、Brier 定义、DCA 阈值范围；CV 折不视为独立样本；
- 全程使用仓库内相对路径。

## 验收

- OOF 预测行数等于训练集行数，行 ID 无重复、无遗漏；
- 逐折入选变量表存在，且能体现折间差异（证明确实折内重选）；
- `cv_metrics_logistic.csv` 含 AUC 点估计与 95% CI（注明方法）、Brier、校准 intercept/slope；
- 三张图存在且非空，DCA 有明确的阈值范围；
- 全部阶段标记为"内部验证"，与后续测试集评价区分。

## 暂停条件

出现以下任一情况，停止并报告，等待人工决定：某折内结局类别不完整（无法拟合或评价）；某折 LASSO 无有效入选变量或 Logistic 不收敛/分离；OOF 预测无法恰好覆盖训练集；校准或 AUC 区间出现非有限值；DCA 缺少合理阈值范围；fold 成员清单与训练集不一致。
