models/metrics.py(用户写、Codex 审):6 个回归指标 + 共享入口 verify_yt_yp 落地, compare_models 仍是 TODO(L1)。 真 bug(决策 59,由用户亲手改定): - r2_score 的 SS_tot 基准用了 np.mean(y_pred),必须是 np.mean(y_true)。 探针实测:修前 0.8803827751196172、修后 0.875 = sklearn.metrics.r2_score 一致; adjusted_r2 复用它,一并修正。完美拟合(r2_score(y, y) == 1)与常量 y 都掩盖了这个错, 所以新测试特意用"非完美拟合"的数据。ss_tol 顺带改名 ss_tot。 - smape 的 np.where 掩码防不住零除(两条分支都会被求值),在 filterwarnings = ["error::RuntimeWarning"] 下任何含 0 的用例直接红 → 改 np.divide(where=), 数值结果不变(决策 60)。 工程侧(决策 47):报错文案统一为"参数名 + 实际值";补 7 处 docstring (Parameters / Returns / Raises,把 NaN 报错、mape 遇 0、r2 常量 y、adjusted_r2 分母保护 写成契约;n_features 注明不含截距);ruff 9 条清零(6 F541 + 3 W293)。 tests/test_models.py:5 条 → 23 条(2 条摘 skip 转正 + 18 条新增)。 三连:pytest 224 passed / 26 skipped(250 收集)、ruff 0、pyright 0。 文档:STATUS 决策 59 / 60 + 第九轮(含 4 条待拍板口径);CHANGELOG 本轮条目; docs/dev/personal-pitfalls.md 追加易错点 31(基准量抄错对象)与 32(np.where 掩码防不住零除)。
文档索引
本目录是 MCM/ICM Toolkit 的需求、架构、方案与开发规范的唯一落盘处。
| 文档 | 内容 |
|---|---|
| 01-suggestion-review.md | 对 ChatGPT 建库建议的审查与精简:留什么、砍什么、补什么 |
| 02-architecture.md | 精简后的包结构、边界划分、统一接口约定 |
| 03-roadmap.md | 功能清单分级(L0 / L1 / L2 / 不做)与开发纪律 |
| 04-environment.md | conda / venv 环境配置、镜像、离线约束 |
| dev/function-card-template.md | S 档算法的「函数卡片」模板 |
| 05-git-workflow.md | Git 工作流、Gitea 远程(SSH 走 Tailscale)、行尾策略 |
| dev/personal-pitfalls.md | 个人易错点清单:只追加,追加前不通读 |
阅读顺序
- 先读
01-suggestion-review.md—— 它决定后面所有事。 - 再读
02-architecture.md—— 它决定代码往哪写。 - 开工前读
03-roadmap.md的对应条目 —— 它决定这次做什么、做到什么程度。 - 环境出问题看
04-environment.md。
项目级进度看根目录的
STATUS.md;本目录只放不会频繁变的内容。