作者:Claude(资深投流专家视角) 目的:对 auto_put_ad_mini 做系统性 review,从业务目标 / 业务理解 / 数据层 / 工程实现 四个维度识别缺口,为后续迭代提供专家级分析留档。 使用方式:后续每轮迭代前回读此文档,确认"当前走到哪一步、下一步该做什么、为什么"。
当前系统架构是对的(fetch → merge → roi → classify → llm → validate → approval → execute),但决策成熟度停在 L1-L2,离"最优效果"还差三块关键升级。
| 级别 | 能力 | 当前状态 |
|---|---|---|
| L1 | 单指标阈值决策 | ✅ 有 |
| L2 | 多维度组合决策 | 🟡 部分(ROI + 消耗,缺创意 + 生命周期 + 大盘) |
| L3 | 趋势 / 结构感知 | ❌ 无(只看当前快照,不看变化) |
| L4 | 反馈学习 | ❌ 无(决策效果不回流) |
| L5 | 大盘联动 | ❌ 无(缺跨账户基准) |
核心洞察:ROI 是结果,不是原因。只盯 ROI 做决策是"后视镜驾驶"。真正预示未来的是领先指标(点击率趋势、进入小程序转化率、裂变系数变化、创意级 ROI 分布)。
基于 ROI + 跑量双维度,对在投广告做调价 / 暂停。
只有 ROI,但投流的真实目标是"在预算约束下最大化利润"。当前系统缺 3 个隐式但关键的目标:
当前系统只有日级,时间维度折叠。
到底是 7 日?30 日?LTV?每个定义下,决策逻辑不同。
主目标:account_daily_profit = daily_revenue - daily_cost
约束 1:budget_utilization >= 85%(预算别闲置)
约束 2:audience_portfolio_health(各 R 值层有健康广告数)
约束 3:max_blast_radius_per_decision <= 5%(单次调整不动摇 > 5% 的日消耗)
时间窗口:滚动 7 日利润最优,兼顾 30 日趋势不恶化
当前 skill 已经讲了 R 值含义、回流模型、f_7日动态ROI 公式(上一轮重构加的)。但还缺 4 块投流专家必备的心智模型。
| 阶段 | 时长 | 核心信号 | 核心策略 |
|---|---|---|---|
| 冷启动期 | 0-4 天 | 点击率、CVR 爬升速度 | 绝对保护,不做负向(已有) |
| 学习期 | 4-14 天 | ROI 是否收敛 | 观察,谨慎微调 |
| 稳定期 | 14-60 天 | ROI 波动范围 | 正常调控(当前系统主要服务这里) |
| 衰退期 | 60+ 天 | ROI 斜率下降 | 判断是创意疲劳还是人群饱和 |
| 僵尸期 | 任意 | 连续无消耗 | 回收预算 |
当前系统只区分"冷启动 / 正常",把学习期、衰退期、僵尸期混在"非冷启动"里,决策粒度太粗。
核心洞察:在腾讯 3.0"少广告多素材"策略下,广告层级的 ROI 问题 80% 是创意问题。
oCPM 出价是拍卖,ROI 下降的原因可能是:
当前系统全部归因于"自己",没有"同时段大盘参考",导致大盘涨时所有广告都在降价 → 量更少 → ROI 更差的死亡螺旋。
腾讯 oCPM 对"提前花完 day_amount"的广告会自动降量(防止一小时烧光)。
day_amount 字段但未在决策中使用daily_cost / day_amount = 预算利用率:
< 50%:广告跑不动(出价低?创意差?人群窄?),不应再降价50-90%:健康> 95% 且时间早:可能触发平台降速,提价反而有害| 字段 | 现状 | 影响 |
|---|---|---|
bid_increased_7d |
ad_decision.py:400 算了,没写进 metrics CSV |
LLM 无法识别"已干预但无效"的衰退信号 |
creative_changed_7d |
同上 | 同上 |
audience_tier(R 值) |
能从 ad_name 提取,但 metrics CSV 没这一列 | LLM 做人群间比较时要靠 ad_name 文本匹配,容易错 |
这三个字段是 LLM 做衰退判断 + 人群比较的必需品,现在缺席 = skill 里说了也用不起来。
| 维度 | 当前现状 | 需要做的 |
|---|---|---|
| 创意级 ROI | merged CSV 有 creative_id 和所有指标 | 按 creative_id 聚合 creative_metrics.csv,LLM 能看到"哪个创意在拖后腿" |
| 人群包级汇总 | ad_name 可提取 R 值 | 按 R 值分组汇总 ROI 均值 / p25 / p75 / 广告数,提供"R 值基线" |
| 账户级汇总 | 每个 ad 有 account_id | 日级账户消耗、收入、ROI,看账户整体健康度 |
| 预算利用率 | day_amount + daily_cost 都有 | budget_utilization = cost / day_amount |
| 趋势(斜率) | 7 日数据都有 | 计算 ROI 最近 3 天 vs 前 4 天的差值 / 变化率,判断是变好还是变差 |
| 数据 | 来源 | 价值 |
|---|---|---|
| 小时级消耗速率 | 腾讯 Reporting API 支持 group_by=[date,hour] |
止损 + 预算 pacing |
| 创意上线 / 更新时间 | 腾讯 dynamic_creatives/get |
识别"新创意冷启动" vs "老创意衰退" |
| 账户级大盘(所有账户汇总) | 跨账户查询 | 大盘对比基准,避免死亡螺旋 |
| 同 R 值同地域大盘 | ODPS | 同可比人群的基准 |
| 数据 | 价值 |
|---|---|
| 决策 → 实际效果的回流数据 | 自学习的基础,知道"ROI=1.5 降 5% 的广告,通常 3 天后 ROI 变多少" |
| 运营拒绝 / 修改决策的原因 | 积累人类知识,修正模型偏见 |
| 历史的"救活"案例 | 哪些暂停后又开启的广告后来跑得好,那就不该暂停 |
EXECUTION_ENABLED=False:整个系统当前是"纸面决策机",不实际执行(config.py:113)outputs/data/adjustment_history.json,无数据库、无并发安全、重启易丢(guardrails.py:61)recommended_bid 被钳到下限,但 change_pct 还是原值,报告里数据矛盾(guardrails.py:316)roi_review_factor=0.8)和 skill 里说的"均值×0.5 关停 / 0.8 降价"边界有错位本轮只做前 4 步。后面 2 步留给下一轮。
ad_id, account_id, ad_name, create_time, configured_status, bid_amount, creative_count,
cost_7d_total, revenue_7d_total, cost_7d_avg,
动态ROI, 动态ROI_7日均值,
cost_30d_total, cost_30d_avg, stable_spend_days_30d, ad_age_days
在 7.2 基础上追加:
# P0 字段(Phase 1)
bid_increased_7d, creative_changed_7d, audience_tier
# 预算 pacing(Phase 2)
day_amount, budget_utilization_7d, budget_headroom_pct
# 额外(可能衍生)
dominant_creative_id, dominant_creative_cost_share,
audience_tier_roi_baseline_p25, audience_tier_roi_baseline_p75
| 功能 | 文件:行号 |
|---|---|
| 数据拉取 SQL 构建 | tools/data_query.py:78-217 |
| 创意→广告聚合 | tools/roi_calculator.py:47-118 |
| f_7日动态ROI 公式 | tools/roi_calculator.py:123-202 |
| ROI 计算入口 | tools/roi_calculator.py:320-462 |
| 干预信号计算(待迁移) | tools/ad_decision.py:400-460 |
| A/B/C 分类 | tools/ad_decision.py:798-920 |
| apply_decisions 合并 | tools/ad_decision.py:973-1103 |
| modify_decisions upsert | tools/ad_decision.py:1240-1461 |
| 6 道护栏实现 | tools/guardrails.py:190-451 |
| AdjustmentHistory | tools/guardrails.py:61-140 |
| 护栏链执行 | tools/guardrails.py:458-547 |
| Tier 分级 | tools/execution_engine.py:193-223 |
| 执行主逻辑 | tools/execution_engine.py:230-565 |
| 审批请求发送 | tools/im_approval.py:270-546 |
| 审批回复解析 | tools/im_approval.py:248-262 |
| 报告生成 | tools/report_generator.py:182-256 |
| 决策阈值 config | config.py:70-97 |
| R 值匹配规则 | config.py:164-175 |
何时回读此文档?
何时更新此文档?
🟡 → ✅