|
|
@@ -1,39 +1,148 @@
|
|
|
---
|
|
|
-name: action-playbook
|
|
|
-description: 选择action前必读——7种action的触发前提与权衡要点、多因素综合判断原则(不是机械的if-then决策树,而是权衡框架)
|
|
|
+name: decision-strategy
|
|
|
+description: 广告决策完整策略——角色定位、对比基准、候选标记、年龄策略、7种action权衡、输出规范与自检
|
|
|
---
|
|
|
|
|
|
-# 决策动作手册
|
|
|
+# 决策策略(每次决策前必读)
|
|
|
|
|
|
-> **前置阅读**:`decision-framework`(候选标记含义与对比基准)、`platform-rules`(平台硬约束先过一遍)
|
|
|
+> **SSOT 声明**:所有阈值数值以 `config.py` 为准。本文档只描述概念、角色分工与判断原则。
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 一、候选标记 → action 映射(取代旧决策树)
|
|
|
+## 一、角色与原则
|
|
|
|
|
|
+### 三层架构
|
|
|
+
|
|
|
+```
|
|
|
+规则引擎(自动检测) → 候选标记(信号输出) → 你(综合决策者)
|
|
|
+ad_decision.py roi_low=True 等 结合上下文做最终判断
|
|
|
```
|
|
|
-收到候选广告
|
|
|
+
|
|
|
+### 你的职责
|
|
|
+
|
|
|
+- ✅ **理解候选标记的业务含义**(如"roi_low=True"表示"ROI 严重偏低")
|
|
|
+- ✅ **综合多因素做最终判断**:裂变表现、调整历史、tier组合位置、数据稳定性、异常模式
|
|
|
+- ✅ **给出可解释的 reason**:说清楚"为什么做这个判断",让运营能追溯逻辑
|
|
|
+
|
|
|
+### 核心原则
|
|
|
+
|
|
|
+规则引擎负责阈值检测和信号标记,你负责结合完整上下文做最终判断——信号是参考输入,不是执行指令。
|
|
|
+
|
|
|
+roi_low=True 不等于必须 pause —— 可能数据不稳定、可能刚调过价还没见效、可能这是 tier 里唯一的跑量广告。
|
|
|
+bid_up_candidate=True 也不等于必须 bid_up —— 可能 CTR 其实在下滑、可能近期已提过价。
|
|
|
+
|
|
|
+**你的判断 > 规则的候选**,但要给出充分理由。
|
|
|
+
|
|
|
+### 对比标准(不同维度用不同基准,严禁混用)
|
|
|
+
|
|
|
+| 维度 | 对比基准 | 数据字段 | 业务含义 |
|
|
|
+|------|---------|---------|---------|
|
|
|
+| 动态 ROI | **渠道P50** | `channel_roi_p50` | 全体广告"动态ROI_7日均值"的中位数 = 全渠道整体水位 |
|
|
|
+| 裂变率(fission_rate) | **同类均值** | `tier_fission_mean` | 同人群包 R 值的裂变水位 |
|
|
|
+| CTR | **同类均值** | 同类 | 同人群的曝光质量 |
|
|
|
+
|
|
|
+**为什么 ROI 必须看渠道**:渠道P50 反映当前大盘的"合理回报"。预算是跨人群共享的,低于 P50 就是跑不出渠道平均效率,应优化或淘汰。某人群同类中位数低,不代表"达标"。
|
|
|
+
|
|
|
+**为什么裂变率必须看同类**:不同人群的裂变天然不同(R500 高价值人群裂变弱、R50 宽泛人群裂变强)。只有同 R 值人群的裂变均值才能衡量"这条广告在它的人群里裂变强不强"。
|
|
|
+
|
|
|
+### reason 中的术语约定
|
|
|
+
|
|
|
+**禁止**在 reason 中出现英文变量名,统一用中文术语:
|
|
|
+
|
|
|
+| 禁用 | 必用 |
|
|
|
+|------|------|
|
|
|
+| `pause_line` | 关停线 |
|
|
|
+| `bid_down_line` | 降价线 |
|
|
|
+| `bid_up_line` | 提价线 |
|
|
|
+| `channel_roi_p50` / `roi_mean` | 渠道P50 / 渠道中位数 |
|
|
|
+| `tier_fission_mean` | 同类均值 / 同类裂变均值 |
|
|
|
+| `bid_increased_7d` | 7 天内已提价 |
|
|
|
+| `creative_changed_7d` | 7 天内已换创意 |
|
|
|
+| `roi_valid_days` | ROI 有效天数 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、候选标记解读(规则层的输出,不要重复检查)
|
|
|
+
|
|
|
+规则层(`ad_decision.py`)已经完成了以下检测,并把结果以候选标记的形式传递给你:
|
|
|
+
|
|
|
+| 字段 | 含义 | 规则已检测的内容 |
|
|
|
+|---------|------|----------------|
|
|
|
+| `roi_zone` | ROI 所在区间(客观事实) | `below_pause_line` / `bid_down_zone` / `above_bid_up_line` / `normal` |
|
|
|
+| `fission_vs_tier` | 裂变率与同类对比 | `high`(≥同类110%) / `normal` / `low`(<同类90%) / `unknown`(数据缺失) |
|
|
|
+| `bid_up_candidate=True` | 有提价潜力 | ROI 明显优于渠道 + 年龄在提价窗口 + 消耗未过高 + CTR 达标 |
|
|
|
+| `scale_up_candidate=True` | 值得扩量 | 成熟稳定 + 高消耗 + ROI 达标 |
|
|
|
+| `decay_signal=True` | 有衰退迹象 | 消耗趋势下降或 ROI 持续走低 |
|
|
|
+
|
|
|
+**⚠️ 关键变化**:`roi_zone="bid_down_zone"` 不等于"应该降价"——必须结合 `fission_vs_tier` 综合判断(见§四决策映射)。
|
|
|
+
|
|
|
+### 阈值参考(仅用于理解规则逻辑,不要在 reason 中引用具体数值)
|
|
|
+
|
|
|
+- **关停线** ≈ 渠道P50 × 0.75 — roi_low 的触发线
|
|
|
+- **降价线** ≈ 渠道P50 × 0.90 — bid_down_candidate 的触发线
|
|
|
+- **提价线** ≈ 渠道P50 × 1.05 — bid_up_candidate 的触发线
|
|
|
+
|
|
|
+(以上数值可能随运营策略调整,**以规则输出的候选标记为准**,不要硬记数值)
|
|
|
+
|
|
|
+### 你看到的数据
|
|
|
+
|
|
|
+每条候选广告到你手里时,已携带完整上下文:
|
|
|
+- 候选标记(上述 5 个 bool)
|
|
|
+- 核心指标(动态ROI、7日均消耗、昨日消耗、广告年龄、创意数等)
|
|
|
+- 渠道基准(channel_roi_p50)
|
|
|
+- 同类基准(tier_fission_mean、tier 内广告数/消耗统计)
|
|
|
+- 调整历史(7天内是否提价/降价/换创意)
|
|
|
+- 数据质量(roi_valid_days、stable_spend_days_30d)
|
|
|
+
|
|
|
+**你的工作是综合这些信息做判断,而不是只看候选标记就机械输出 action。**
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、年龄策略
|
|
|
+
|
|
|
+> 年龄分段以 `config.py::COLD_START_DAYS`(默认 3)和 `EARLY_GROWTH_DAYS`(默认 7)为准。
|
|
|
+
|
|
|
+| 年龄段 | 天数 | 你会看到吗 | 允许操作 | 禁止操作 | 原因 |
|
|
|
+|--------|------|-----------|---------|---------|------|
|
|
|
+| **冷启动期** | ≤3天 | 不会(规则已排除) | — | 所有操作 | 系统刚开始学习,任何调整都会打断 |
|
|
|
+| **早期成长期** | 4-7天 | 仅提价/观察候选 | bid_up / observe / creative_adjust | bid_down / pause | 降价会打断 oCPM 学习,关停更不行 |
|
|
|
+| **成熟期** | >7天 | 正常候选 | 全部 action | bid_up(改走 scale_up) | 投手经验:稳定期不调出价,通过新增广告/创意拿量 |
|
|
|
+
|
|
|
+**说明**:年龄保护由规则层 + 护栏层双重实现。你收到的候选广告已经过年龄筛选,不太可能收到违反年龄保护的广告。万一收到,护栏会兜底拦截。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、信号 → action 映射
|
|
|
+
|
|
|
+```
|
|
|
+收到候选广告(附带 roi_zone / fission_vs_tier / bid_up_candidate 等客观信号)
|
|
|
│
|
|
|
- ├─ roi_low=True
|
|
|
- │ └─ 综合权衡后 → pause / observe / hold(第二章 §1)
|
|
|
+ ├─ roi_zone = "below_pause_line"(ROI 严重偏低)
|
|
|
+ │ └─ 综合权衡后 → pause / observe / hold(§五.1)
|
|
|
│
|
|
|
- ├─ bid_down_candidate=True
|
|
|
- │ └─ 综合权衡后 → bid_down / observe / hold(第二章 §2)
|
|
|
+ ├─ roi_zone = "bid_down_zone"(ROI 在降价区间)
|
|
|
+ │ ├─ fission_vs_tier = "low" → 双低确认 → bid_down 3%-5%(§五.2)
|
|
|
+ │ ├─ fission_vs_tier = "normal" → observe(ROI 低但裂变正常,需观察)
|
|
|
+ │ ├─ fission_vs_tier = "high" → observe / hold(裂变优秀,ROI 低可能暂时)
|
|
|
+ │ └─ fission_vs_tier = "unknown" → observe(数据不足不决策)
|
|
|
│
|
|
|
- ├─ bid_up_candidate=True
|
|
|
- │ └─ 综合权衡后 → bid_up / observe / hold(第二章 §3)
|
|
|
+ ├─ bid_up_candidate = True
|
|
|
+ │ └─ 综合权衡后 → bid_up / observe / hold(§五.3)
|
|
|
│
|
|
|
- ├─ scale_up_candidate=True
|
|
|
- │ └─ 综合权衡后 → scale_up / observe / hold(第二章 §4)
|
|
|
+ ├─ scale_up_candidate = True
|
|
|
+ │ └─ 综合权衡后 → scale_up / observe / hold(§五.4)
|
|
|
│
|
|
|
└─ 以上都不满足 → hold 或 observe
|
|
|
```
|
|
|
|
|
|
-**关键理念**:候选标记是规则层的"推荐",不是"命令"。你需要综合权衡后做最终判断。
|
|
|
+**关键理念**:
|
|
|
+- `roi_zone` 和 `fission_vs_tier` 是客观事实,不是操作建议
|
|
|
+- `roi_zone="bid_down_zone"` **不等于**"应该降价"——必须结合裂变率综合判断
|
|
|
+- 候选标记是规则层的"推荐",不是"命令"。你需要综合权衡后做最终判断
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 二、7 种 action 详解
|
|
|
+## 五、7 种 action 详解
|
|
|
|
|
|
### 1. `pause`(关停)— 明确低效,释放预算
|
|
|
|
|
|
@@ -68,22 +177,33 @@ description: 选择action前必读——7种action的触发前提与权衡要点
|
|
|
|
|
|
---
|
|
|
|
|
|
-### 2. `bid_down`(降价)— ROI 偏低但有优化空间
|
|
|
+### 2. `bid_down`(降价)— ROI 偏低 + 裂变偏低,双低确认
|
|
|
|
|
|
-**触发前提**:`bid_down_candidate=True`(规则已确认 ROI 略低于渠道但未到关停线、消耗足够、近期无调价/换创意)
|
|
|
+**触发前提**:`roi_zone="bid_down_zone"`(ROI 在降价区间)+ `fission_vs_tier="low"`(裂变低于同类)
|
|
|
|
|
|
-**你需要综合权衡的要点**:
|
|
|
+> ⚠️ **核心原则:bid_down 需要"ROI 低 + 裂变低"双重确认。单凭 ROI 低不足以降价。**
|
|
|
|
|
|
-1. **裂变辅助信号**:裂变率低于同类均值 → 降价更合理(ROI低+裂变低=效率确实差)
|
|
|
-2. **近期是否调过价**:规则已检查 7 天无调价,但如果 reason 中提及历史调价效果,更有说服力
|
|
|
-3. **消耗稳定性**:稳定天数较少时,降幅取下限(保守)
|
|
|
-4. **ROI 置信度**:有效天数较少时,降幅取下限
|
|
|
+**条件(全部满足才能 bid_down)**:
|
|
|
+- ✅ 年龄 > 7 天(成熟期)
|
|
|
+- ✅ 7 日均消耗 ≥ 500 元
|
|
|
+- ✅ roi_zone = "bid_down_zone"(关停线 ≤ 动态ROI < 降价线)
|
|
|
+- ✅ **fission_vs_tier = "low"**(裂变率低于同类均值 10%+)—— 核心条件
|
|
|
+
|
|
|
+**⚠️ 即使 ROI 在降价区间,以下场景禁止降价**:
|
|
|
+- ❌ fission_vs_tier = "high"(裂变优秀)→ 改 observe 或 hold
|
|
|
+- ❌ fission_vs_tier = "normal"(裂变正常)→ 改 observe
|
|
|
+- ❌ fission_vs_tier = "unknown"(数据缺失)→ 改 observe
|
|
|
+- ❌ 近 7 天已降过价 → 改 observe(等效果显现)
|
|
|
+- ❌ 近 7 天换过创意 → 改 observe(等数据稳定)
|
|
|
+
|
|
|
+**业务逻辑**:裂变率高 = 用户自传播能力强 = 长期 ROI 潜力大。降价会减少曝光、降低 oCPM 学习效率、浪费优质广告潜力。
|
|
|
|
|
|
**pct 要求**:负数,绝对值在 [3%, 5%]
|
|
|
|
|
|
**幅度选择原则**:
|
|
|
- ROI 偏离渠道P50 较小 → 降 3%(轻度优化)
|
|
|
- ROI 偏离渠道P50 较大(接近关停线)→ 降 5%(上限)
|
|
|
+- 消耗稳定性或 ROI 置信度低 → 降幅取下限
|
|
|
- 更严重的低效走 pause,不要用"大幅降价"代替关停
|
|
|
|
|
|
**禁用于**:`bid_up_candidate=True` 的广告
|
|
|
@@ -170,9 +290,9 @@ description: 选择action前必读——7种action的触发前提与权衡要点
|
|
|
|
|
|
---
|
|
|
|
|
|
-## 三、多因素权衡原则(规则无法覆盖的决策维度)
|
|
|
+## 六、多因素权衡(规则无法覆盖的决策维度)
|
|
|
|
|
|
-这是你作为"医生"真正需要发挥的价值:
|
|
|
+这是你真正需要发挥的价值:
|
|
|
|
|
|
### 1. 裂变 vs ROI 双低判断
|
|
|
|
|
|
@@ -208,9 +328,7 @@ description: 选择action前必读——7种action的触发前提与权衡要点
|
|
|
- **能用 creative_adjust 解决的问题,不要用 pause** —— 保留 oCPM 学习资产
|
|
|
- **降价和关停之间,优先关停** —— 干净的止损,不要用"大幅降价"代替
|
|
|
|
|
|
----
|
|
|
-
|
|
|
-## 四、action 选择优先级
|
|
|
+### 5. action 选择优先级
|
|
|
|
|
|
当多个 action 都"合理"时,按以下优先级取:
|
|
|
|
|
|
@@ -224,11 +342,26 @@ pause(明确低效)> bid_down(有改善空间)> creative_adjust(素材
|
|
|
bid_up(冷启动期优质)> scale_up(成熟期优质)
|
|
|
```
|
|
|
|
|
|
+### 6. ROI 与裂变信号冲突时的处理
|
|
|
+
|
|
|
+当 ROI 信号和裂变信号方向不一致时:
|
|
|
+
|
|
|
+| ROI 信号 | 裂变信号 | 决策 | 理由 |
|
|
|
+|---------|---------|------|------|
|
|
|
+| 低于降价线 | fission_vs_tier="high" | observe/hold | 裂变优秀,ROI低可能是短期波动 |
|
|
|
+| 低于降价线 | fission_vs_tier="normal" | observe | 裂变正常,需观察ROI是否持续低 |
|
|
|
+| 低于降价线 | fission_vs_tier="low" | bid_down | 双低确认,降价合理 |
|
|
|
+| 低于关停线 | fission_vs_tier="high" | observe | 裂变优秀,先观察不急于关停 |
|
|
|
+| 低于关停线 | fission_vs_tier="low" | pause | 双低+ROI极低,关停合理 |
|
|
|
+
|
|
|
+**冲突时 reason 必须显式说明**:
|
|
|
+> "动态ROI为X.XX,低于降价线Y.YY;但裂变率Z.ZZ高于同类均值W.WW的N%,广告质量潜力高,建议观察而非降价"
|
|
|
+
|
|
|
---
|
|
|
|
|
|
-## 五、决策输出规范与自检
|
|
|
+## 七、决策输出规范与自检
|
|
|
|
|
|
-### 5.1 reason 5 元组(每条必含)
|
|
|
+### 7.1 reason 5 元组(每条必含)
|
|
|
|
|
|
**每条 reason 必须显式包含以下 5 个语义元素**,缺任一项视为不合格:
|
|
|
|
|
|
@@ -256,7 +389,7 @@ bid_up(冷启动期优质)> scale_up(成熟期优质)
|
|
|
> ❌ "动态ROI=1.62 < pause_line(1.66), bid_increased_7d=true"(用英文变量名,违反硬约束)
|
|
|
> ❌ "ROI 不好,建议降价"(缺数值、基准、偏离%、辅助信号)
|
|
|
|
|
|
-### 5.2 action 与 recommended_change_pct 的强绑定
|
|
|
+### 7.2 action 与 recommended_change_pct 的强绑定
|
|
|
|
|
|
| action | recommended_change_pct | 违反时修正 |
|
|
|
|---|---|---|
|
|
|
@@ -267,13 +400,13 @@ bid_up(冷启动期优质)> scale_up(成熟期优质)
|
|
|
| `scale_up` | ≥ 0(可 0,可正) | 扩量不降价,不得为负 |
|
|
|
| `creative_adjust` | = 0 | 创意动作,不改出价 |
|
|
|
|
|
|
-### 5.3 reason 与 action 语义一致
|
|
|
+### 7.3 reason 与 action 语义一致
|
|
|
|
|
|
- reason 含 **"表现优秀/保持/维持/微调"** → action **不可以**是 `pause`/`bid_down`
|
|
|
- reason 含 **"严重低迷/持续亏损/关停线"** → action **不可以**是 `hold`/`bid_up`/`scale_up`
|
|
|
- reason 含 **"建议保持或微调"** → action 只能是 `hold` 或 `observe`,**绝不能**是 `bid_down`
|
|
|
|
|
|
-### 5.4 提交前自检(内心默问)
|
|
|
+### 7.4 提交前自检(内心默问)
|
|
|
|
|
|
1. 我这条 action 和 pct 数字方向对得上吗?(降价↔负数,提价↔正数,维持↔零)
|
|
|
2. 我的 reason 结论和 action 语义一致吗?(说"优秀"还建议降价吗?)
|