# S 档「函数卡片」模板 > **只给 S 档用**(约 15 个招牌算法,见 `docs/03-roadmap.md` §3.1)。 > 其余 A 档函数只要求 docstring 一句话 + 一条 pytest,不写卡片。 > > 卡片写在哪:`docs/algorithms/<函数名>.md`。 > 为什么写:S 档是自己实现、以后会去改内部实现的算法, > 卡片是"半年后还看得懂当时为什么这么写"的唯一保障。 --- ## 卡片模板 ```markdown # <函数名> | 项 | 内容 | |---|---| | 模块 | `mcm_toolkit.<包>.<模块>` | | 档位 | S | | 参考来源 | <教材 / 论文 / 库;自己实现时参考了什么> | ## 1. 数学定义 <公式。用 LaTeX 写,例如 \`\\hat{\\theta}^* = \\arg\\min_\\theta ...\`。 一句话说清输入输出分别是什么数学对象。> ## 2. 适用场景 **用**:<什么题型、什么数据条件下该用它> **不用**:<什么条件下它失效或不该用> ## 3. 参数与返回值 | 参数 | 类型 | 默认 | 含义 | 取值影响 | |---|---|---|---|---| | | | | | | 返回 `Result`: | 字段 | 内容 | |---|---| | `params` | | | `metrics` | | | `data` | | ## 4. 复杂度 - 时间:`O(...)` - 空间:`O(...)` - **什么时候会跑不完**:<给出具体数字量级,例如"n > 1e6 时内存 8GB 打不住"> ## 5. 数值稳定性 <浮点误差、除零、log(0)、上溢下溢、病态矩阵…… 写清"什么输入会出问题"和"代码里怎么防的"。> ## 6. 常见错误 1. <错误用法> → <后果> → <正确做法> 2. … ## 7. 最小示例 ```python # 能直接复制进 notebook 跑通的 5~15 行 ``` ## 8. 单元测试要点 | 测什么 | 期望 | |---|---| | <已知解析解> | <精度要求> | | <边界输入> | <行为> | ## 9. MCM/ICM 用法 - **哪类题**:<例如"评价类 / 预测类 / 优化类"> - **论文里怎么表述**:<一句话,能直接改写成论文的"方法"小节> - **图**:<配哪张图,用哪个 `viz` 函数> - **踩坑提醒**:<评审最可能质疑什么> ``` --- ## 示例:`bootstrap_ci` 的卡片(示范,未定稿) ```markdown # bootstrap_ci | 项 | 内容 | |---|---| | 模块 | `mcm_toolkit.stats.bootstrap` | | 档位 | S | | 参考来源 | Efron (1979); Efron & Tibshirani (1993) *An Introduction to the Bootstrap* | ## 1. 数学定义 给定样本 \`x_1..x_n\` 与统计量 \`T(·)\`,从 \`x\` 中有放回抽 \`n\` 个得到 \`x^*\`, 重复 \`B\` 次得 \`T^*_1..T^*_B\`。百分位法区间为 \`[T^*_{(α/2·B)}, T^*_{(1-α/2)·B}]\`。 ## 2. 适用场景 **用**:统计量没有解析分布(中位数、极差、自定义指标)、样本有偏、想给区间但不想假设正态。 **不用**:\`n < 10\`(经验分布不可靠);数据有强时间相关性时(要用 block bootstrap)。 ## 3. 参数与返回值 | 参数 | 类型 | 默认 | 含义 | 取值影响 | |---|---|---|---|---| | `statistic` | callable | `np.mean` | 任意 `f(sample) -> float` | 换 `np.median` 就得到中位数的 CI | | `n_resamples` | int | 10000 | 重采样次数 `B` | 越大区间端点越稳;10000 通常够 | | `confidence` | float | 0.95 | 置信水平 | | | `method` | str | `"percentile"` | `"percentile"` / `"bca"` | BCa 更准但慢 | ## 4. 复杂度 时间 \`O(B·n)\`;空间 \`O(B)\`(**按块处理,不落地 B×n 矩阵**)。 `n=1e6, B=1e4` 约 \`1e10\` 次操作 → **跑不完**,此时应改用解析近似或降 `B`。 ## 7. 最小示例 \`\`\`python import numpy as np from mcm_toolkit.stats import bootstrap_ci r = bootstrap_ci(heights, statistic=np.median, n_resamples=10000, random_state=42) print(r.params["low"], r.params["high"]) \`\`\` ## 9. MCM/ICM 用法 - **哪类题**:任何要"给结论 + 给不确定性"的题,尤其评价类和预测类。 - **论文里怎么表述**:"采用非参数 bootstrap(B=10000,seed=42)估计中位数的 95% 置信区间。" - **图**:预测曲线 + 阴影区间;用 `viz.plot`。 - **踩坑提醒**:必须报 `B` 和 seed;BCa 与 percentile 结果不同时要说明选了哪个及理由。 ```