定价优化入门
四篇短文,一层一层把定价优化的数学骨架搭起来:从单个定价对象,到同时定很多个,到把它们绑在一起的业务约束,最后到互相抢需求的对象。
每一篇都有完整推导、配图,以及「这个参数在你的业务里对应什么、真上线时会踩什么坑」。四篇是递进的,但每一篇都能单独读——想从哪篇进都行。
四篇讲什么
一 · 单对象定价优化 12 分钟
只有一个数要定。价格往上抬,每一单赚得更多,买的人却更少——利润走出一条倒 U 曲线。
求这条曲线的顶点。给出最优价满足的一般条件、线性需求与 Logit 需求两个具体例子,以及「涨价的赚与亏」的边际拆解。
读完能带走:一个可以直接套用的定价公式,和一个不用计算器也能估的基准——最优价大约落在「成本」与「贵到没人买的价格」的中点。
二 · 多对象定价与业务约束 15 分钟
从一个对象变成 N 个,问题并没有变难——它会干净地拆成 N 个互不相干的小问题。真正让它变难的,是那条把所有价格重新绑回一起的业务红线。
先说清楚「无耦合时问题自动分解」这件事,再说明为什么那个解通常不能直接上线。然后加上真实业务里躲不掉的约束,旋钮出现了。
读完能带走:一个标量 \lambda(影子价格),二分它就能拿到最优解;以及这个数本身怎么拿去做投放与预算分配的决策。
三 · 替代品的定价优化 13 分钟
把一个产品的价格抬上去,另一个的销量反而涨了——它们在抢同一批需求。一旦有了这种牵连,价格就不能再一个一个单独定。
用离散选择模型描述替代效应,然后推出这个专题最漂亮的结论:所有产品的「边际 UE」(多卖一单净赚多少)必须被拉平到同一条水位线上。
读完能带走:一个不用重解优化问题、一条 SQL 就能跑的定价健康度诊断;以及一个反直觉的结论——「统一减 X 元」不会破坏最优结构,「统一打 X 折」会。
四 · 大规模定价优化 10 分钟
规模一上来,闭式解就不管用了。这一篇用一点精度换来可解,同时讲清楚:这个近似在什么情况下会悄悄失准。
真实问题是 M 个用户群 × N 个对象加一堆约束,得上运筹求解器。这一篇讲泰勒展开线性化、它的使用边界,以及信任域迭代,最后老实交代整个专题没覆盖的东西。
读完能带走:把非线性定价问题化成线性规划(LP)的标准做法,以及一套判断「线性近似在你的数据上能用到多大幅度」的验证流程。
完整符号表
四篇通用。每篇开头还有一个「本篇新增符号」的折叠小表。
| 符号 | 含义 | 在你的业务里可能是 |
|---|---|---|
| i, j | 定价单元(定价对象)的编号 | 一个 SKU、一个用户分层、一条线路、一个套餐档位 |
| p_i | 单元 i 的价格,决策变量 | 你真正能调的那个数字 |
| c_i | 单元 i 的单位成本,已知常数 | 采购成本、边际服务成本、单位交付成本 |
| u_i = p_i - c_i | 单均毛利 | 每成交一单赚多少 |
| q_i(p_i) | 成交概率 / 转化率 | 曝光→下单、访问→购买、报价→承保 |
| q_0 | 不成交 / 什么都不买的概率 | 用户划走了 |
| k_i | 价格系数,越大表示价格一动、转化率掉得越快 | 需求模型里价格项的系数 |
| \Pi | 总收益(本专题统一指毛利,不是流水) | 你的优化目标 |
| \lambda | 约束的拉格朗日乘子 | 影子价格:多换一单要付出多少利润 |
关于「价格系数」:它和经济学里常说的「价格弹性」有关,但不是一回事。弹性衡量的是两个百分比变化之比,在 Logit 需求下等于 -k\,p\,(1-q)。本专题一律用价格—需求关系 和 价格系数 k 来表述,指的就是那条曲线有多陡。
公式速查
| 场景 | 最优性条件 |
|---|---|
| 单个单元,一般需求 | p^\star = c + \dfrac{q}{-q'} |
| 单个单元,线性需求 q = a - bp | p^\star = \dfrac{a}{2b} + \dfrac{c}{2} = \dfrac{p_{\max} + c}{2} |
| 单个单元,Logit 需求 | p^\star - c = \dfrac{1}{k\,q_0} |
| N 个单元,无耦合 | p_i^\star = c_i + \dfrac{q_i}{-q_i'},各自独立 |
| N 个单元 + 总量约束 | p_i^\star = c_i - \lambda + \dfrac{q_i}{-q_i'},\lambda 全局共享,二分求解 |
| 一张清单(MNL),无约束 | u_j - \dfrac{1}{k_j} = \Pi,对所有 j 相等 |
| 一张清单(MNL)+ 总量约束 | u_j - \dfrac{1}{k_j} = \Pi - \lambda q_0,对所有 j 相等 |
| MNL 自身导数 | \dfrac{\partial q_j}{\partial p_j} = -k_jq_j(1-q_j) |
| MNL 交叉导数 | \dfrac{\partial q_m}{\partial p_j} = k_jq_jq_m \quad (m\ne j) |
| MNL 总量导数 | \sum_m \dfrac{\partial q_m}{\partial p_j} = -k_jq_jq_0 |
| 总转化率的海森 | H_{ij} = \bigl(k_i^2q_i\delta_{ij} - 2k_ik_jq_iq_j\bigr)q_0 |
这个专题不讲什么
四篇都假设你已经有了一条靠谱的「价格 → 成交概率」曲线,讨论的是「拿到模型之后,价格该怎么定」。
怎么得到那条曲线,其实是全流程里最难、最容易翻车的一步(核心难点是内生性:历史数据里的价格不是随机的)。这部分连同大规模求解的工程实现、跨期效应与博弈、不确定性、合规边界,都在第四篇第 4 节里老实列了出来。
参考文献
- Guillermo Gallego, Ruxian Wang. Multiproduct Price Optimization and Competition Under the Nested Logit Model with Product-Differentiated Price Sensitivities. Operations Research, 62(2):450–461, 2014.
- Hongmin Li, Woonghee Tim Huh. Pricing Multiple Products with the Multinomial Logit and Nested Logit Models: Concavity and Implications. Manufacturing & Service Operations Management, 13(4):549–563, 2011.
专题里所有图均由代码根据文中模型直接计算生成,非示意图。所有推导都做了数值验证(用有限差分核对梯度和海森矩阵,用两种独立解法交叉验证最优解)。如果你发现哪一步有问题,欢迎指出。