| | Varoquaux | Olivier | 2018 | arXiv:1806.04876 | | Shearer | Chris | 2000 | CRISP-DM Consortium | | Wirth & Hipp | R. & J. | 2000 | Data-Mining | | Kapoor | S. & A. | 2024 | Patterns 5(9):101065 | | Chawla | N.V. et al. | 2002 | JAIR 16:321-357 | | Stiglic | G. et al. | 2012 | Journal of Medical Systems | | Lundberg | S.M. & S.I. | 2017 | NeurIPS | | Collins | G.S. et al. | 2015 | Annals of Internal Medicine (TRIPOD) | | Moons | K.G.M. et al. | 2019 | Annals of Internal Medicine (PROBAST) | | Norgeot | B. et al. | 2020 | Nature Machine Intelligence (MI-CLAIM) | | Smith | J.W. et al. | 1988 | CAMC |
Pitfalls
-
-
Verification
-
-
- Never cite CRISP-DM without citing Shearer (2000) or Wirth & Hipp (2000). These are the original papers.
- Never run CV without isolating preprocessing inside folds. This is the core of the methodology.
- SMOTE before splitting = severe leakage. Recall collapses to ~0.50, Precision inflates to 1.00.
- PIDD has 768 samples. Best model only reaches F1~0.71. Claims of F1>0.90 are always suspicious.
- Global imputation = minor leakage. Only +0.6% F1 inflation. Technically incorrect.
- Use imblearn.Pipeline, NOT sklearn.Pipeline. sklearn.Pipeline does NOT support SMOTE properly.
- For SHAP analysis, use venv with numpy>=2.0. System Python on Debian has numpy 1.x compiled packages (numexpr, bottleneck) that crash with numpy 2.x. Create isolated venv.
- CatBoost needs compilation from pip. Takes ~4 minutes. Install separately in venv.
Output Contracts
- cv_results.csv: 10-fold CV metrics per model
- comprehensive_results.json: all results including CV, ensemble, SHAP
- run_shap.py: SHAP analysis script
- report.py: summary report generation
契约层 · BOUNDARY
边界:技能功能边界。
契约层 · IO_CONTRACT
输入:请求描述、上下文信息。 输出:执行结果、状态反馈。
验证清单 · VERIFICATION
原则 (Principles)
凡引必溯:CRISP-DM 必并引 Shearer (2000) 或 Wirth & Hipp (2000) 之原典,单引 CRISP-DM 者,非学术之诚。
预处入折:交叉验证必使预处理(含 SMOTE、imputation)落入 fold 之内;折外预处即泄漏,Recall 崩、Precision 虚高。
知界而警:PIDD 768 样本,最佳模型 F1 不过 0.71;凡 F1>0.90 之声称,皆疑,必查泄漏。
工具择用:SMOTE 用
imblearn.Pipeline,勿用sklearn.Pipeline(不支持 SMOTE);SHAP 用独立 venv(numpy≥2.0)。交叉验证中预处理(含 SMOTE、imputation)已隔离在 fold 内部,无折外预处理
已使用
imblearn.Pipeline而非sklearn.Pipeline执行 SMOTE若报告 F1 > 0.90,已视为异常并立即排查数据泄漏(PIDD 768 样本最佳 F1≈0.71)
SHAP 分析已在独立 venv(numpy≥2.0)中执行,未使用系统 Python(Debian numpy 1.x 编译包冲突)
引用 CRISP-DM 方法论时已并引 Shearer (2000) 或 Wirth & Hipp (2000) 原始文献
缺失值处理已禁止全局 imputation,填充值在验证折内独立计算
输出契约完整:
cv_results.csv(10-fold CV metrics)、comprehensive_results.json、run_shap.py、report.py均已生成
Genes (策略基因)
紧凑策略表示。条件→策略。需要深度时参考完整文档。
- [PIDD-001] 执行交叉验证时 → 必须将预处理(含 SMOTE、imputation)隔离在 fold 内部,严禁在数据分割前执行
- [PIDD-002] 处理类别不平衡数据时 → 必须使用
imblearn.Pipeline而非sklearn.Pipeline,以确保 SMOTE 正确支持 - [PIDD-003] 评估 PIDD 数据集模型性能时 → 若 F1 分数超过 0.90,必须视为异常并立即排查数据泄漏
- [PIDD-004] 进行 SHAP 可解释性分析时 → 必须创建独立 venv 并安装 numpy>=2.0,以避免系统 Python 编译包冲突
- [PIDD-005] 引用 CRISP-DM 方法论时 → 必须同时引用 Shearer (2000) 或 Wirth & Hipp (2000) 原始文献
- [PIDD-006] 处理缺失值时 → 禁止使用全局 imputation,必须在验证折内独立计算填充值以消除轻微泄漏
约束规则 · RULES
- 输入约束: 参数类型、范围、格式必须校验
- 输出约束: 返回值结构、编码、命名必须一致
- 异常约束: 错误信息必须包含上下文和恢复建议
- 安全约束: 不执行未验证的任意代码,不暴露内部状态
Golden 集合 · GOLDEN SET
- Golden Input: PIDD 数据集(768 样本,类别不平衡)+ 在数据分割前执行 SMOTE 的 10-fold CV 脚本(覆盖泄漏路径)
- Golden Output: 按 PIDD-001/002 用
imblearn.Pipeline将 SMOTE/imputation 隔离入折后重跑,F1 回落至 ≈0.71 界内;cv_results.csv、comprehensive_results.json均生成,Recall 不再虚崩至 ~0.50 - Golden Error: F1 > 0.90(如 0.93)→ 触发 PIDD-003 泄漏异常,须回查折外预处理与全局 imputation(PIDD-006)并复算 F1 回落到 0.71 量级
Golden 集合是测试的单一真理来源。所有改进必须通过 golden 测试。
示例 · EXAMPLES
示例 1(折内预处理)
- 输入:对 PIDD(768 样本,不平衡)做 10-fold CV 前,在数据分割前执行 SMOTE 的全量脚本
- 操作/输出:按原则「预处入折」与 PIDD-001,改用
imblearn.Pipeline(PIDD-002)把 SMOTE/imputation 放进 Pipeline,仅在各 fold 训练折内执行;产出cv_results.csv等输出契约 - 验证:Recall 不再虚崩至 ~0.50、Precision 不再虚高至 1.00;F1 落于 ≈0.71 界内,未触发 PIDD-003 的 F1>0.90 泄漏异常
示例 2(F1 异常排查)
- 输入:某运行报告 PIDD 模型 F1=0.93
- 操作/输出:按 PIDD-003 判定为异常,回查折外预处理与全局 imputation(PIDD-006),将填充值改为折内独立计算后重跑
- 验证:复算 F1 回落到 0.71 量级;
comprehensive_results.json前后对照记录泄漏来源
示例 3(SHAP 环境)
- 输入:对获胜模型做 SHAP 可解释性分析,系统 Python 为 Debian numpy 1.x
- 操作/输出:按 PIDD-004 建独立 venv 并安装 numpy≥2.0、单独编译安装 CatBoost(约 4 分钟),运行
run_shap.py - 验证:SHAP 运行无 numexpr/bottleneck 崩溃;引用 CRISP-DM 时按 PIDD-005 已并引 Shearer (2000) 或 Wirth & Hipp (2000)
违反规则的操作视为不安全,必须拒绝或隔离。
每项验证必须可执行、可记录、可复现。验证失败时记录原因和修复。