P paper2skillsPlaybook
AI 路线图 →

自动化竞价与预算动态分配 — 跨平台广告Autobidding与ROI约束下的预算优化

Skill-Autobidding-Budget-Allocation-Optimization · 13-广告分析

causalexperimentoptimizationpricing广告与投放定价与利润WF-B 广告优化WF-F 动态定价WF-I 智能体工程WF-J DTC 独立站增长WF-L 内容营销增长
年化 ROI4.5万
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色广告优化师 / 投放负责人 · CMO · 运营负责人
适用平台Amazon PPC(SP/SB/SD)· TikTok Ads · Meta 广告 · 多平台归因
什么情况下用广告账户几十个系列,不知道哪个在真正赚钱;ROAS 看起来好看但实际利润没有提升;预算有限想集中打高价值用户
成功是什么样的每分广告预算有明确 ROI 追踪,砍掉低效渠道后同等预算 ROAS 提升 30-50%
业务痛点
ROAS 好看但利润没有涨不知道哪个素材真的有效归因窗口期不同数据打架TikTok/Meta/Amazon 广告数据整合不了

1. 解决的问题

手动竞价耗时8小时/周且ROAS仅2.1x——KKT最优竞价+PID预算控制将ROAS提升至3.2x并节省30%低效广告支出,月化$1.5万节省

2. 核心算法逻辑

反直觉洞察:大多数母婴出海卖家用手动竞价或"自动竞价",但平台自动竞价是为平台利益最大化设计的,不是为了卖家ROI。反直觉的是:最优广告策略不是"出价尽量高以获取最大流量",也不是"削减预算保利润",而是在ROI约束下的拉格朗日对偶预算分配——数学上可以证明存在一个唯一的最优乘子λ,使得"每一美元广告预算的边际ROI相等"时,总ROI最大化。

3. 业务应用场景

场景A:Amazon婴儿用品SP广告智能竞价

- 业务问题:某母婴卖家同时运营80个SP广告活动,手动调价耗时每周8小时,且总ROAS仅2.1x(行业基准3.0x+)。广告预算$5万/月,约30%浪费在低ROI词上 - 数据要求:过去90天广告数据(关键词维度:展现量/点击量/花费/销售额)、竞价历史、竞品出价估算(第三方工具) - 算法应用: 1. 计算每个关键词的历史转化价值 v_i = 平均订单价值 × 历史转化率 2. 用KKT竞价公式设定初始出价:`bid = v_i / (1 + λ_0)`,λ_0=0.3(初始保守) 3. 每天运行一次PID更新:根据昨日预算执行率调整λ 4. 每周一次跨活动预算重分配(Markowitz优

场景B:TikTok+Amazon跨平台预算动态分配

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI 预估:月广告预算$5万的卖家,ROAS从2.1x提升至3.0x,相当于月增收$4.5万;年化$54万增量收入,系统建设成本$6万,ROI≈900%
  • 实施难度:⭐⭐⭐☆☆(KKT出价公式简单,主要工作是API接入和历史数据处理;PID控制器调参需要2-4周迭代)
  • 优先级:⭐⭐⭐⭐⭐(广告是母婴出海最大可控成本,ROI提升直接体现在利润上)
  • 适用规模:月广告预算>$2万的卖家均可受益,预算越大收益越显著
  • 数据依赖:90天以上广告关键词维度报告(Amazon/品牌分析)、转化率历史数据

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
自动化竞价与预算动态分配系统
功能:KKT最优竞价 + PID预算控制 + 跨平台Markowitz分配
"""
import numpy as np
import pandas as pd
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from scipy.optimize import minimize
import warnings
warnings.filterwarnings('ignore')


@dataclass
class KeywordBidContext:
    """关键词竞价上下文"""
    keyword: str
    historical_cvr: float          # 历史转化率
    avg_order_value: float         # 平均订单价值(USD)
    avg_cpc: float                 # 当前平均CPC(USD)
    weekly_impressions: int        # 周展现量
    campaign_id: str = "default"
    
    @property
    def conversion_value(self) -> float:
        """转化价值 = 转化率 × 订单价值"""
        return self.historical_cvr * self.avg_order_value


class KKTAutoBidder:
    """
    基于KKT条件的最优竞价系统
    实现 bid* = v / (1 + λ) 的动态竞价策略
    """
    
    def __init__(self, target_roas: float = 3.0, initial_lambda: float = 0.3):
        self.target_roas = target_roas
        self.lambda_val = initial_lambda  # 预算影子价格
        
        # PID控制参数
        self.pid_kp = 0.5   # 比例增益
        self.pid_ki = 0.1   # 积分增益
        self.pid_kd = 0.05  # 微分增益
        self._integral = 0.0
        self._prev_error = 0.0
    
    def compute_optimal_bid(self, keyword: KeywordBidContext) -> float:
        """
        计算最优出价
        bid* = conversion_value / (1 + λ)
        """
        optimal_bid = keyword.conversion_value / (1 + self.lambda_val)
        # 出价不低于$0.10,不超过转化价值的2倍(防止极端竞价)
        return np.clip(optimal_bid, 0.10, keyword.conversion_value * 2)
    
    def update_lambda_pid(self, budget_target: float, budget_consumed: float, dt: float = 1.0):
        """
        PID控制器更新λ
        超支 → 增大λ(压低出价)
        欠消耗 → 减小λ(提高出价)

8. 论文来源

  • 2407.14025