Просмотр исходного кода

docs(ac15): pct 分档改为原始取值口径;补"超出量为常数级"的证据

1. §16.3 改用不依赖分桶的原始事实:16 条变化只出现在 pct=30(6/24=25.0%) 与
   pct=70(10/33=30.3%) 两个值上;pct<=25 的 33 条一条未变
2. §16.3 增「不要引用某档 X%」小节,列出两种分桶的差异(30.3% vs 27.0%),
   说明差别只来自 pct=25(8 条)/pct=50(4 条) 挪桶,数据未变
3. §15.1.1 补证据:16 条只有 A/B 两模式,超出量(实测Δ-预期Δ)
   分别 0.0042 / 0.0051,全部落在 0.0042~0.0051、极差 0.0009;
   恒定且不随 pct/Δincome 变化 ⇒ 属课酬侧半分(误差源②),非算法差异

(容差常数 0.0055 与三误差源推导已在 2abbc0d 落地,本次仅文档订正)
Q 7 часов назад
Родитель
Сommit
3218d9b989
1 измененных файлов с 51 добавлено и 9 удалено
  1. 51 9
      internal/academic/dualrun/README.md

+ 51 - 9
internal/academic/dualrun/README.md

@@ -210,6 +210,21 @@ PHP CLI 的 notice/warning 会混进 stdout(legacy 的 `config/params.php` 在
 **余量 0.0008 不是"宽裕通过",是"擦边通过"**:换一条 `pct` 稍大或 `Δincome` 稍偏的记录,就会被误判成 `DEFECT`。
 **余量 0.0008 不是"宽裕通过",是"擦边通过"**:换一条 `pct` 稍大或 `Δincome` 稍偏的记录,就会被误判成 `DEFECT`。
 判据的失败模式因此不是"漏报缺陷",而是"把正常收敛报成缺陷"—— 后者会让人去改一个本来正确的算法,代价更高。
 判据的失败模式因此不是"漏报缺陷",而是"把正常收敛报成缺陷"—— 后者会让人去改一个本来正确的算法,代价更高。
 
 
+### 15.1.1 "多出来的那部分"是常数级的(这是它属于误差、不属于算法差异的证据)
+
+16 条精度收敛只有两种模式,而**两种模式的"实测Δ − 预期Δ"几乎相同**:
+
+| 模式 | 条数 | Δincome | pct | 预期Δ | 实测Δ | **超出量 = 实测 − 预期** |
+|---|---|---|---|---|---|---|
+| A | 10 | −0.004 | 70 | −0.0028 | −0.0070 | **−0.0042** |
+| B | 6 | +0.003 | 30 | +0.0009 | +0.0060 | **+0.0051** |
+
+全部 16 条的超出量落在 **0.0042 ~ 0.0051**,**极差只有 0.0009**。
+
+这就是关键证据:如果多出来的部分来自算法差异(比如少乘一次、夹取顺序错),它应当随 `pct` 或 `income` **成比例变化**,
+不可能在 `pct=70` 和 `pct=30`、`Δincome` 正负相反的两组里给出几乎相同的绝对值。
+**恒定、且不随 pct / Δincome 变化 ⇒ 只能是课酬侧那半分(②)**,即判据里被漏建的那一项。
+
 ### 15.2 纪律
 ### 15.2 纪律
 
 
 **不要为了消红放宽容差。** 容差是判据,不是目标。
 **不要为了消红放宽容差。** 容差是判据,不是目标。
@@ -250,19 +265,46 @@ teacher_reward  251.177 (legacy)   → 251.17 (target),Δ = -0.007
 
 
 **对外口径**:迁移后约 **16%** 的历史课酬会变,全部是分位级,**最大 0.7 分(0.007 元)**,方向随 Δincome 正负。
 **对外口径**:迁移后约 **16%** 的历史课酬会变,全部是分位级,**最大 0.7 分(0.007 元)**,方向随 Δincome 正负。
 
 
-### 16.3 PC 按 percentage 分档(解释"哪些课会变")
+### 16.3 变化的记录落在哪些 `percentage` 上(**用原始取值,不用分档百分比**)
+
+先给**不依赖分桶**的事实 —— 这是本节最可靠的一句:
+
+> **全部 16 条变化记录只出现在两个 pct 值上:`pct=30` 6 条、`pct=70` 10 条。**
+> 其余 pct 取值(10 / 20 / 22 / 25 / 35 / 50)**一条都没变**。本批无 `pct ≥ 100` 的记录。
 
 
-| pct 区间 | 总数 | PC | 变化概率 |
+按原始取值的完整分布:
+
+| pct | 总数 | PC | 变化率 |
 |---|---|---|---|
 |---|---|---|---|
-| `pct < 25` | 25 | 0 | **0.0%** |
-| `25 ≤ pct < 50` | 38 | 6 | **15.8%** |
-| `50 ≤ pct < 100` | 37 | 10 | **27.0%** |
-| `pct ≥ 100` | 0 | 0 | n/a(本批无此档记录) |
+| 10.0 | 2 | 0 | 0.0% |
+| 20.0 | 20 | 0 | 0.0% |
+| 22.0 | 3 | 0 | 0.0% |
+| 25.0 | 8 | 0 | **0.0%** |
+| **30.0** | 24 | **6** | **25.0%** |
+| 35.0 | 6 | 0 | 0.0% |
+| 50.0 | 4 | 0 | **0.0%** |
+| **70.0** | 33 | **10** | **30.3%** |
+| 合计 | 100 | 16 | — |
+
+#### 为什么不要引用"某档 X%"这种数字
+
+同样的数据换个分桶边界,百分比就变:
+
+| 分桶方式 | `pct<25` / `≤25` | 中间档 | `pct≥50` / `>50` |
+|---|---|---|---|
+| `≤25` / `26~50` / `>50` | 0 / 33 = 0.0% | 6 / 34 = 17.6% | 10 / 33 = **30.3%** |
+| `<25` / `25~50` / `50~100` | 0 / 25 = 0.0% | 6 / 38 = 15.8% | 10 / 37 = **27.0%** |
+
+差别全部来自 `pct=25` 的 8 条和 `pct=50` 的 4 条被挪了桶 —— **数据没变,只是边界挪了**。
+另外注意:`30.3%` 其实就是 **`pct=70` 这一个值的**变化率(10/33),不是某一档的综合率。
+
+#### 可引用的结论(两条,都不依赖分桶)
 
 
-PC 只落在两个具体值上:`pct=70` → 10 条,`pct=30` → 6 条。
+1. `pct ≤ 25` 的 33 条**一条未变**(0.0%)
+2. 变化的 16 条只出现在 `pct=30`(6/24=25.0%) 与 `pct=70`(10/33=30.3%) 两个值上
 
 
-**结论**:`Δreward ≈ Δincome × pct/100`,pct 越大越容易把 0.001~0.005 的收入收敛放大到跨分。
-**对账可先只看 `pct ≥ 50` 的课程**(本批 27.0% 会变,而 `pct < 25` 一条都不变)。
+机理:`Δreward ≈ Δincome × pct/100`,pct 越大越容易把 0.001~0.005 的收入收敛放大到跨分。
+**对账建议**:优先看 `pct=70` 与 `pct=30` 两类课程,它们覆盖了本批 100% 的变动。
 
 
 ### 16.4 覆盖率缺口(必须与结论一起出现)
 ### 16.4 覆盖率缺口(必须与结论一起出现)