用边际贡献决定定价测试与渠道预算
目标
用边际贡献来判定定价实验,并根据订阅记录计算流失率、LTV、各渠道 CAC、回收期、LTV/CAC,按事先定好的规则,决定价格和渠道预算。
为什么重要
如果按转化率或收入来定价,只看 CAC 来挑渠道,那么一旦成本和流失加进来,就会变成越增长现金越流失的结构。单位经济是把一位客户留下的钱,与为了带来这位客户而花的钱,放在同一个标准下来计算。
材料
/opt/fixtures/founder/pricing/price_test.csv—arm,price_krw,visitors,purchases,refunds(含增值税的月价格)/opt/fixtures/founder/pricing/costs.json—vat_rate, payment_fee_rate, payment_fee_fixed_krw, infra_krw_per_customer_month, support_krw_per_customer_month/opt/fixtures/founder/pricing/subscriptions.csv—customer_id,channel,start_month,end_month,price_krw(end_month 是最后一次付款的月份,为空则到观测结束的 2026-06 仍在付款)/opt/fixtures/founder/pricing/marketing.csv—month,channel,spend_krw(2026-01 至 2026-06)
定义
- 供货价 = 价格 × 100/110。支付手续费 = 价格 × payment_fee_rate + payment_fee_fixed_krw。月边际贡献 = 供货价 − 支付手续费 − infra − support。
- 每位访客的首月边际贡献 = (purchases − refunds) × 月边际贡献(该价格)÷ visitors。
- 客户在月份 M 付了款 ⇔ start_month ≤ M ≤ end_month(为空则为 2026-06)。月流失率 M = 在 M−1 付了款而在 M 没有付款的客户 ÷ 在 M−1 付了款的客户。平均流失率 = 2026-01 至 06 这六个月的简单平均。
- LTV = 月边际贡献(14,900 韩元)÷ 平均流失率。CAC(渠道) = 2026-01 至 06 的广告费合计 ÷ start_month 在该时期内的该渠道新客户。回收期 = CAC ÷ 月边际贡献(14,900 韩元)。
- 舍入:比率保留小数点后第四位,边际贡献和每位访客的金额保留第二位,LTV、CAC 取整数(round),回收期和 LTV/CAC 保留第二位。
步骤
- 在
/root/founder/pricing/arms.json中,为每个价格格子(A、B、C)写入conversion、refund_rate、revenue_per_visitor(购买 × 价格 ÷ 访客)以及best_by_conversion。 - 在
/root/founder/pricing/unit.py中创建contribution(price, costs)——costs 是读取 costs.json 得到的字典,返回的值是月边际贡献(小数)。 - 在
/root/founder/pricing/pervisitor.json中,为每个格子写入contribution_per_visitor,以及best_by_contribution、best_by_revenue。 - 在
unit.py中加入churn(fix, month, channel=None),并在/root/founder/pricing/churn.json中写入monthly(2026-01 至 06 各月)和average。 - 在
/root/founder/pricing/ltv.json中写入contribution(14,900 韩元的月边际贡献)、avg_churn、ltv,以及按常见错误得出的ltv_on_revenue(= 14900 ÷ 平均流失率)。 - 在
/root/founder/pricing/cac.json中写入by_channel(五个渠道)、blended(全部广告费 ÷ 全部新客户)、paid_only(广告费 > 0 的渠道的广告费 ÷ 这些渠道的新客户)。 - 在
/root/founder/pricing/channels.json中,为每个渠道写入churn(只用该渠道客户算出的平均流失率)、ltv、payback_months、ltv_cac(广告费为 0 则为 null)。 - 在
/root/founder/pricing/decision.json中写入price_arm(每位访客边际贡献最大的格子)、scale(广告费 > 0 且 LTV/CAC ≥ 3、回收期 ≤ 12 的渠道,排序)、cheapest_cac_paid(广告费 > 0 的渠道中 CAC 最便宜的渠道)、cheapest_is_scalable(该渠道是否属于 scale)。
参考
- 月份比较,像
"2026-01" <= m这样用字符串也可以(格式是固定长度)。上一个月:2026-01 的上一个月是 2025-12。 - 常见错误:把不扣增值税的价格当作收入,在 LTV 中放入价格(收入),用混合 CAC 来判断付费渠道,把流失率的分母定为本月付款者,对各渠道的 LTV 使用整体流失率。
只看转化率的话
在 /root/founder/pricing/arms.json 中写入 A、B、C 的 conversion、refund_rate、revenue_per_visitor 以及 best_by_conversion。
conversion = 购买 ÷ 访客,refund_rate = 退款 ÷ 购买,revenue_per_visitor = 购买 × 价格 ÷ 访客。
一位客户的月边际贡献
在 /root/founder/pricing/unit.py 中创建 contribution(price, costs)。
从含增值税的价格中求出供货价(× 100/110),手续费用含税价乘以比例,再加上固定金额。然后减去服务器和客服成本。
按每位访客的首月边际贡献重新判定
在 /root/founder/pricing/pervisitor.json 中,为每个格子写入 contribution_per_visitor,以及 best_by_contribution、best_by_revenue。
(购买 − 退款) × contribution(该价格) ÷ 访客。也请看看按收入的赢家与按边际贡献的赢家是否相同。
月流失率——分母是上个月的付款者
在 unit.py 中加入 churn(fix, month, channel=None),并在 /root/founder/pricing/churn.json 中写入 monthly(2026-01 至 06)、average。
“在 M 付了款”是 start ≤ M ≤ end(为空则为 2026-06)。分母是在 M−1 付了款的客户,分子是其中在 M 没有付款的客户。1 月的上一个月是上一年的 12 月。
LTV——分子不是收入,而是边际贡献
在 /root/founder/pricing/ltv.json 中写入 contribution、avg_churn、ltv,以及用于比较的 ltv_on_revenue。
LTV = 月边际贡献(14,900 韩元)÷ 平均流失率。比较用的值,是把 14,900 直接放入分子。请记住,这个模型假定流失率恒定、没有折现。
渠道 CAC 与混合 CAC
在 /root/founder/pricing/cac.json 中写入 by_channel(五个渠道)、blended、paid_only。
广告费是 2026-01 至 06 的合计,新客户是同一时期 start_month 在其中的客户。混合 CAC 的分母中,也包含广告费为 0 的自然流入客户。
各渠道的流失、LTV、回收期
在 /root/founder/pricing/channels.json 中,为每个渠道写入 churn、ltv、payback_months、ltv_cac(广告费为 0 则 ltv_cac 为 null)。
渠道 LTV 使用只由该渠道客户算出的平均流失率。回收期 = CAC ÷ 月边际贡献。
按事先定好的规则作决定
在 /root/founder/pricing/decision.json 中写入 price_arm、scale、cheapest_cac_paid、cheapest_is_scalable。
规则就按计算前定好的——广告费 > 0,LTV/CAC ≥ 3,回收期 ≤ 12 个月。请另外确认 CAC 最便宜的付费渠道是否通过了规则。