Commit b7d424d7 by luoqi

docs(algorithm): 列出默认调参值 + 补医生建议码(作基线对照)

按反馈:默认值列出来作基线对照(线上偏离时好核是不是配置被调过)。

§一 病种表:
- 补「建议码」列(IMPLANT_RECOMMENDED 等)— 诊断码之外的第二触发源,
  说明任一命中即召回;建议码也是码(置信度低些)
- 恢复 + 扩充「默认调参值」表:起步分 / 冷静期 / 黄金窗末 / 紧迫临界 全 10 病种
  标"出厂默认,可配,真理源在 SUB_SCENARIOS + DiagnosisTreatmentMap"

§三 优先级因素表:
- 补回「默认值」列(钻+20/金+15… / confidence ×1.0/0.9/0.75 / 时间窗曲线)
  跟 §一 一致,作基线对照

️ 全局注释口径调整:从"不写死数字" → "列默认值作基线对照,算法形状稳定数值可调"
(呼应"万一偏离了呢" — 默认值是对照基准)
parent 9bea4619
...@@ -28,10 +28,10 @@ PAC 做三件事,像一条流水线: ...@@ -28,10 +28,10 @@ PAC 做三件事,像一条流水线:
- **② 画像算法**:给每个筛出来的患者贴标签(价值高不高、容易流失吗、能不能打扰)。 - **② 画像算法**:给每个筛出来的患者贴标签(价值高不高、容易流失吗、能不能打扰)。
- **③ 优先级算法**:把这些人排个先后,客服时间有限,先打最该打的。 - **③ 优先级算法**:把这些人排个先后,客服时间有限,先打最该打的。
> ⚙️ **关于数值**:本文涉及的**权重/分档/阈值都是默认配置,可按宿主或集团策略调整** > ⚙️ **关于数值**:本文列出的**权重/分档/阈值都是"出厂默认配置",可按宿主或集团策略调整**
>(不同集团对种植 vs 补牙的重视、对"多久算流失"的口径可能不同)。 >(不同集团对种植 vs 补牙的重视、对"多久算流失"的口径可能不同)。
> 文档只讲**算法结构(公式形状 + 方向)**,**具体数字不写死**——真理源在代码/配置,改参不改文档 > **列出默认值是为了给一个基线对照**——万一线上行为跟预期偏了,先核是不是配置被调过
> 下面 `📐 证据` 块里出现的少量数字仅作示例,帮助理解量级,不代表固定法则 > **算法的"形状"(公式 / 流程)是稳定的;"数值"是可调的**,真理源永远在代码/配置,改参后同步更新本文即可
下面逐个讲。 下面逐个讲。
...@@ -59,21 +59,42 @@ PAC 做三件事,像一条流水线: ...@@ -59,21 +59,42 @@ PAC 做三件事,像一条流水线:
### 覆盖哪些情况 ### 覆盖哪些情况
按牙科疾病大类(ICD-10 的 K00–K09),PAC 覆盖 **10 种**"发现了没去做"的情况 按牙科疾病大类(ICD-10 的 K00–K09),PAC 覆盖 **10 种**"发现了没去做"的情况。
(下表按临床价值从高到低排,**每种病的"起步分/冷静期"是可配默认值,不写死在此**):
| 诊断码 | 情况 | 大白话 | 每种病有**两个触发码**——**诊断码**(医生明确诊断,如 `K08`)或**建议码**(医生/AI 写的建议,如 `IMPLANT_RECOMMENDED`),**任一命中**即触发召回。建议码确实也是码,是诊断之外的第二信号源(置信度低些,见上)。
| 诊断码 | 建议码 | 情况(大白话) |
|---|---|---| |---|---|---|
| K08 | 缺失牙未修复 | 缺了牙没去种/没镶(价值最高,种植 ¥1.5–3 万) | | K08 | `IMPLANT_RECOMMENDED` | 缺失牙未修复(缺了牙没去种/没镶,价值最高 ¥1.5–3 万) |
| K07 | 错颌畸形未正畸 | 牙不齐没去矫正 | | K07 | `ORTHO_CONSULT_RECOMMENDED` | 错颌畸形未正畸(牙不齐没去矫正) |
| K04 | 牙髓炎未做根管 | 牙神经发炎没去做根管 | | K04 | `RCT_RECOMMENDED` | 牙髓炎未做根管(牙神经发炎没去做根管) |
| K05 | 牙周炎未做基础治疗 | 牙周病没去洗治 | | K05 | `SRP_RECOMMENDED` | 牙周炎未做基础治疗(牙周病没去洗治) |
| K09 | 颌骨囊肿未处理 | 颌骨囊肿没去摘 | | K09 | `JAW_CYST_REMOVAL_RECOMMENDED` | 颌骨囊肿未处理(没去摘) |
| K02 | 龋齿未充填 | 蛀牙没去补 | | K02 | `FILLING_RECOMMENDED` | 龋齿未充填(蛀牙没去补) |
| K03 | 牙体损伤未修复 | 牙磨损/缺损没去修 | | K03 | `HARD_TISSUE_REPAIR_RECOMMENDED` / `CROWN_RECOMMENDED` | 牙体损伤未修复(磨损/缺损没去修) |
| K06 | 牙龈牙槽问题未处置 | 牙龈问题没去看 | | K06 | `GUM_TREATMENT_RECOMMENDED` | 牙龈牙槽问题未处置(没去看) |
| K01 | 阻生牙未拔除 | 智齿该拔没拔 | | K01 | `EXTRACTION_RECOMMENDED` | 阻生牙未拔除(智齿该拔没拔) |
| K00 | 牙发育/萌出异常未处置 | 儿童换牙/长牙问题没去看 | | K00 | `ERUPTION_INTERVENTION_RECOMMENDED` | 牙发育/萌出异常未处置(儿童换牙/长牙问题) |
**每种病的默认调参值**(下表是**出厂默认**,列出来作基线对照——万一线上行为跟预期偏了,先核是不是配置被调过):
| 诊断码 | 起步分(base) | 冷静期(天)<br/>诊断后多久才召 | 黄金窗末(天)<br/>超过开始衰减 | 紧迫临界(天)<br/>超过加紧迫分 |
|---|---|---|---|---|
| K08 缺失牙 | **60** | 30 | 180 | 120 |
| K07 正畸 | 55 | 30 | 365 | 180 |
| K04 根管 | 52 | 14 | 60 | 45 |
| K05 牙周 | 50 | 30 | 120 | 90 |
| K09 颌骨囊肿 | 50 | 14 | 90 | 60 |
| K02 龋齿 | 45 | 14 | 90 | 60 |
| K03 牙体损伤 | 35 | 14 | 90 | 60 |
| K06 牙龈牙槽 | 35 | 14 | 120 | 60 |
| K01 阻生牙 | 30 | 14 | 180 | 90 |
| K00 发育萌出 | 25 | 30 | 365 | 180 |
> 📐 **证据 & 真理源**:起步分在 `SUB_SCENARIOS[*].base`;冷静期/黄金窗/紧迫临界在
> `DiagnosisTreatmentMap[K??]`(`packages/types/src/canonical-codes.ts`)。
> **这些是默认值,可按宿主/集团策略调**;改参改代码这一处,本表同步更新即可。
> **不漏码**:host 数据出现的 K-code 都进池,起步分低的靠综合分自然沉底。
> 📐 **证据**:每种病的 **起步分**(`SUB_SCENARIOS[*].base`)+ **冷静期 / 黄金窗 / 紧迫临界** > 📐 **证据**:每种病的 **起步分**(`SUB_SCENARIOS[*].base`)+ **冷静期 / 黄金窗 / 紧迫临界**
>(`DiagnosisTreatmentMap[K??]`)是**集中可配的默认值**,真理源在代码,改参不改本文。 >(`DiagnosisTreatmentMap[K??]`)是**集中可配的默认值**,真理源在代码,改参不改本文。
...@@ -199,16 +220,16 @@ PAC 做三件事,像一条流水线: ...@@ -199,16 +220,16 @@ PAC 做三件事,像一条流水线:
把它想成给每个召回机会打分,像考试加权。**6 个因素 + 它们怎么影响分数的方向**(具体权重值可配,见下注): 把它想成给每个召回机会打分,像考试加权。**6 个因素 + 它们怎么影响分数的方向**(具体权重值可配,见下注):
| 因素 | 通俗解释 | 方向 | | 因素 | 通俗解释 | 方向 | 默认值(可配,作基线对照) |
|---|---|---| |---|---|---|---|
| **① 临床基线** | 这种病本身多重要 | 病种越值钱/越严重 → 起步分越高(乘法主项) | | **① 临床基线** | 这种病本身多重要 | 越值钱/越严重 → 起步越高(乘法主项)| 病种 base,见上表(K08=60…K00=25)|
| **② 时间窗形状** | 现在是不是召回最佳时机 | 黄金窗内最高;过早 / 过晚都打折(乘在基线上) | | **② 时间窗因子** | 现在是不是召回最佳时机 | 黄金窗内最高;过早/过晚都打折(乘) | 窗内 ×1.0;过早 0.6→1.0 线性;过晚 1.0→0.4(到 2× 窗末) |
| **③ 患者价值加分** | 高价值患者加分 | 价值档越高 → 加得越多(加法) | | **③ 患者价值加分** | 高价值患者加分 | 价值档越高 → 加越多(加) | 钻 +20 / 金 +15 / 银 +10 / 普通 +5 / 新客 0 |
| **④ 转化可能加分** | 接电话后真来的可能性 | 越可能转化(流失风险低 / 近期回访成功)→ 加得越多 | | **④ 转化可能加分** | 接电话后真来的可能性 | 越可能转化 → 加越多(加) | `(3−风险档)×2`(0–6)+ 近期回访成功 +4,封顶 +10 |
| **⑤ 临床紧迫加分** | 再拖会出大问题 | 诊断超过该病种"紧迫临界" → 固定加分 | | **⑤ 临床紧迫加分** | 再拖会出大问题 | 超该病种紧迫临界 → 固定加(加) | 超临界(见上表)→ +5 |
| **⑥ 信号可信度** | 召回理由多靠谱 | 信号越可信(医生诊断 > AI 抽取)→ 折扣越接近 1(乘法) | | **⑥ 信号可信因子** | 召回理由多靠谱 | 越可信 → 折扣越接近 1(乘) | 最低 confidence ≥0.9 →×1.0;≥0.7 →×0.9;否则 ×0.75 |
**算法结构**(形状固定,权重可配): **算法结构**(形状固定,上面"默认值"列可配):
``` ```
raw = (临床基线 × 时间窗因子 + 价值加分 + 转化加分 + 紧迫加分) × 信号可信因子 raw = (临床基线 × 时间窗因子 + 价值加分 + 转化加分 + 紧迫加分) × 信号可信因子
score = clamp(round(raw), 0, 100) ← 取整 + 夹到 0~100,保证不越界 score = clamp(round(raw), 0, 100) ← 取整 + 夹到 0~100,保证不越界
...@@ -216,9 +237,8 @@ score = clamp(round(raw), 0, 100) ← 取整 + 夹到 0~100,保证不越界 ...@@ -216,9 +237,8 @@ score = clamp(round(raw), 0, 100) ← 取整 + 夹到 0~100,保证不越界
- 4 个加分项在括号里**相加**,然后整体乘 ②时间窗 和 ⑥可信度两个**0~1 折扣因子** - 4 个加分项在括号里**相加**,然后整体乘 ②时间窗 和 ⑥可信度两个**0~1 折扣因子**
- 所以"再急再值钱,信号不可信(⑥低)也会被打折",避免 AI 误抽的理由冲高分。 - 所以"再急再值钱,信号不可信(⑥低)也会被打折",避免 AI 误抽的理由冲高分。
> ⚙️ **权重可配**:各因素的具体分档/加分值(起步分多少、钻卡加几分、置信折扣几档)都集中在 > 📐 **真理源**:这些默认值都在 `priority-scorer.ts` 的 `computeXxx()` 函数 + 病种字典,
> `priority-scorer.ts` 的 `computeXxx()` 函数 + 病种字典,**按宿主/集团策略调,改这一处即可**。 > **按宿主/集团策略调改这一处即可**;上表列默认值仅作基线对照(算法形状稳定,数值可调)。
> 本文不写死这些数字 —— 算法的"形状"稳定,"权重"可调。
### 真实例子:卜晓平,87 分(用**默认权重**走一遍,换配置则分值随之变) ### 真实例子:卜晓平,87 分(用**默认权重**走一遍,换配置则分值随之变)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment