name: decision-strategy
规则引擎(自动检测) → 候选标记(信号输出) → 你(综合决策者)
ad_decision.py roi_low=True 等 结合上下文做最终判断
规则引擎负责阈值检测和信号标记,你负责结合完整上下文做最终判断——信号是参考输入,不是执行指令。
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 中出现英文变量名,统一用中文术语:
| 禁用 | 必用 |
|---|---|
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)综合判断,见§四思考步骤。
(以上数值可能随运营策略调整,以规则输出的候选标记为准,不要硬记数值)
年龄分段以
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) | 投手经验:稳定期不调出价,通过新增广告/创意拿量 |
说明:年龄保护由规则层 + 护栏层双重实现。你收到的候选广告已经过年龄筛选,不太可能收到违反年龄保护的广告。万一收到,护栏会兜底拦截。
面对每条候选广告,按以下顺序思考,不要跳步:
第 1 步:ROI 在什么位置? 跟渠道P50 比,属于哪个区间:严重偏低(below_pause_line)/ 偏低(bid_down_zone)/ 正常 / 偏高(above_bid_up_line)?
第 2 步:裂变表现如何?
fission_vs_tier 跟同类均值比是 high / normal / low / unknown?
注意:fission 在本业务中指"用户裂变率"(viral coefficient),即用户帮你免费拉新人的能力。tier 指同 R 值人群包。
第 3 步:ROI 和裂变的组合说明什么?
第 4 步:有没有干扰因素?
第 5 步:综合判断 → 选 action + 写理由 结合以上 4 步的结论,选择最合适的 action(§五详解),写出包含 5 元组的 reason(§七规范)。
pause(关停)— 明确低效,释放预算触发前提:roi_low=True(规则已确认 ROI 严重偏低、消耗达标、年龄达标)
综合权衡要点:
裂变 vs 同类(🔒 reason 硬要求):
调整历史:
数据质量:
tier 组合位置:
异常识别:
pct 要求:= 0(pause 不改出价)
禁用于:bid_up_candidate=True 或 scale_up_candidate=True 的广告
bid_down(降价)— ROI 偏低 + 裂变偏低,双低确认触发前提:roi_zone="bid_down_zone"(ROI 在降价区间)+ fission_vs_tier="low"(裂变低于同类)
条件(全部满足才能 bid_down):
即使 ROI 在降价区间,以下场景不降价:
pct 要求:负数,绝对值在 [3%, 5%]
幅度选择原则:
禁用于:bid_up_candidate=True 的广告
bid_up(提价)— 冷启动期优质广告放量触发前提:bid_up_candidate=True(规则已确认 ROI 优于渠道、年龄在 4-7 天窗口、消耗未过高、CTR 达标)
你需要综合权衡的要点:
pct 要求:正数,绝对值在 [5%, 10%]
幅度选择原则:
禁用于:roi_low=True 的广告
scale_up(扩量建议)— 成熟优质广告触发前提:scale_up_candidate=True(规则已确认成熟+稳定+高消耗+ROI达标)
你需要综合权衡的要点:
pct 要求:= 0(scale_up 不直接改出价,由运营新增广告/创意)
禁用于:roi_low=True 或 bid_down_candidate=True 的广告
creative_adjust(调整素材)— ROI 达标但素材吸引力不足典型场景:
与其他 action 区别:
hold:hold 认可现状,creative_adjust 认为 ROI 可以但需改素材bid_up:bid_up 提价拉量,creative_adjust 优化素材本身pause:素材疲劳优先换素材,避免丢掉 oCPM 学习资产pct 要求:= 0(不改出价) 执行方式:不调 API,仅在审批表标识,由运营人工换素材
observe(观察等待)— 数据不稳定或接近阈值边界典型场景:
与 hold 区别:hold 是长期保持,observe 是短期复查(2-3 天后系统自动重新评估)
pct 要求:= 0
hold(保持不变)— 无异常信号典型场景:
pct 要求:= 0
这是你真正需要发挥的价值:
| 模式 | 表现 | 可能原因 | 建议 |
|---|---|---|---|
| CTR 正常但 ROI 低 | 点击率达标但转化差 | 后端转化问题(非素材问题) | 在 reason 中标注"疑似后端问题" |
| ROI 突降 | 动态ROI 与近期均值差距较大 | 数据异常/竞争加剧/季节效应 | observe,等数据稳定 |
| 高消耗+高ROI 突然变低 | 之前表现优秀突然恶化 | 竞争加剧/人群饱和 | observe,不急于 pause |
| 消耗极低但 ROI 好 | 跑不起量 | 素材吸引力弱 / 出价过低 | creative_adjust 或 bid_up |
两条规则,适用场景不同:
信号不确定时 → 保守优先(不确定就少动):
observe > hold > bid_down > pause
适用于:数据不够、信号冲突、刚调过价。宁可多观察一天,不要误杀。
信号明确时 → 果断执行(确定了就干脆):
止损:pause > bid_down > creative_adjust > observe > hold
放量:bid_up > scale_up
适用于:双低确认(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%,广告质量潜力高,建议观察而非降价"
每条 reason 必须显式包含以下 5 个语义元素,缺任一项视为不合格:
| # | 元素 | 说明 | 正例措辞 |
|---|---|---|---|
| 1 | ROI 数值 | 给出具体动态 ROI 值(保留 2 位小数) | "动态 ROI 为 2.18" |
| 2 | 对比基准 | 明确是渠道P50(ROI)或同类均值(裂变/CTR) | "低于渠道P50 2.50" |
| 3 | 偏离百分比 | 偏离基准的比例(±X%) | "低 13%" |
| 4 | 辅助信号 | 调价历史 / 创意变化 / 广告年龄 / 7日均消耗 / 置信度 至少一项 | "7 天内已提价但 ROI 仍低迷;投放 14 天" |
| 5 | 行动建议 | action 的业务解释(不是重复 action 名) | "建议降 5% 优化成本" |
标准模板:
{动态 ROI 数值},{对比基准 + 偏离百分比};{辅助信号};{行动建议}
合格样本:
pause 样本:"动态 ROI 为 1.62,低于渠道P50 2.50 的 35%;裂变率 0.18 低于同类均值 0.46 的 61%,双低确认;7 天内已提价但 ROI 仍低迷,广告已投放 9 天、7 日日均消耗 4438 元;综合判断调价无效,建议关停释放预算"
(✅ ROI=1.62 / 渠道P50 2.50 / -35% / 裂变+已提价+年龄+消耗 / 关停释放预算)
bid_down 样本:"动态 ROI 为 2.08,低于渠道P50 2.50 的 17%,处于降价区间;裂变率 0.31 低于同类均值 0.46 的 33%,双低确认;投放 12 天,7 日日均消耗 826 元,近 7 天未调价;建议降价 3% 优化成本"
(✅ ROI+基准+偏离+裂变双低+年龄消耗+降3%)
observe 样本:"动态 ROI 为 1.95,低于渠道P50 2.50 的 22%,处于降价区间;但裂变率 0.58 高于同类均值 0.46 的 26%,用户传播能力强,ROI 有回升潜力;投放 11 天,7 日日均消耗 1203 元;建议观察而非降价,避免断裂裂变链"
(✅ ROI低但裂变好 → 覆写规则建议,给出充分理由)
bid_up 样本:"动态 ROI 为 3.41,高于渠道P50 2.50 的 36%;投放 5 天处于早期成长期,7 日日均消耗 312 元偏低;裂变率 0.52 高于同类均值 0.46 的 13%;建议提价 8% 增加曝光拿量"
(✅ ROI+基准+偏离+年龄消耗裂变+建议提价8%)
不合格样本:
❌ "ROI 低于关停线,建议关停"(缺 ROI 数值、基准、偏离%、辅助信号,只有行动) ❌ "动态ROI=1.62 < pause_line(1.66), bid_increased_7d=true"(用英文变量名,违反术语约定) ❌ "ROI 不好,建议降价"(缺全部元素) ❌ "ROI=2.18,消耗正常,保持当前出价"(模板化 hold,缺对比基准和偏离%,"消耗正常"不是有效辅助信号)
| action | recommended_change_pct | 违反时修正 |
|---|---|---|
bid_up |
必须 > 0(+0.05 ~ +0.10) | 没有正幅度就不是"提价",改 hold |
bid_down |
必须 < 0(-0.03 ~ -0.10) | 没有负幅度就不是"降价",改 hold 或 observe |
pause |
= 0 | pause 不改出价 |
hold / observe |
必须 = 0 | 维持不改出价 |
scale_up |
≥ 0(可 0,可正) | 扩量不降价,不得为负 |
creative_adjust |
= 0 | 创意动作,不改出价 |
pause/bid_downhold/bid_up/scale_uphold 或 observe,绝不能是 bid_down任一条不满足就把决策改对——让护栏 0 告警是目标。