skill-revenue-model · 技能收益建模
0. 埋点
每次执行本技能,先追加一行调用记录(纯本地,无网络):
echo "{\"skill\":\"skill-revenue-model\",\"ts\":\"$(date +%s)\",\"cwd\":\"$(pwd)\"}" >> "$HOME/.workbuddy/skill-calls.jsonl"
1. 一句话定位
给定一个技能的价格、曝光与转化假设,把它产出成三种情景下的十二张量化测算表,
并回答三个问题:能赚多少、几个月回本、结论在什么条件下不成立。
2. 适用场景与触发条件
适用(满足任一条即可触发):
| 场景 | 用户的典型问法 |
|---|---|
| 已过审技能准备开付费,要定价格 | 「这个技能卖 29 元一年能赚多少」 |
| 在买断与订阅之间犹豫 | 「买断还是订阅划算」 |
| 想知道多久能收回开发投入 | 「几个月回本」 |
| 打算降价冲量,想先看结果 | 「降到 9 元是不是更好」 |
| 怀疑这件事本身不划算 | 「这个值不值得收费」 |
不适用(请直接分流到对应技能):
- 「该不该收费 / 会不会违反平台红线」→
skill-monetization-audit(SMAM 五闸门 + 七红线) - 「这个选题有没有市场」→
skill-topic-validator - 「别人同类技能都卖多少钱」→
qizai-skill-pricing-officer - 「这个类目有多少流量」→
category-supply-demand-radar - 「帮我发布上架」→
open-platform-web-publish
一句话判据:问「值不值」归别人,问「多少钱」归本技能。
3. 术语约定(全文统一,不要混用)
| 术语 | 含义 | 常见误写 |
|---|---|---|
| 三种情景 | 保守 / 中性 / 乐观三档假设 | 「三档场景」(不统一) |
| 五种收费模式 | 买断 / 订阅 / 按次 / 试用解锁 / 分层 | 「五模式」 |
| 月曝光 E | 每月看到该技能详情页的人次 | 「流量」「下载」(不精确) |
| 付费转化率 C | 曝光转化为付费的比例 | 「购买率」(口径不明) |
| 可触达独立人数 R | 该技能面向人群的总量上限 | 「用户量」 |
| 付费人群池 | R × C,这批人一生愿意付费的总人次上限 |
无 |
| 买断终身天花板 | R × C × 单价 × (1-费率),内容型产品的收入上限 |
无 |
4. 四步法(顺序不可换,缺一步结论就不可信)
第一步:定月曝光 E(不要拍脑袋)
按优先级逐级降级,拿不到上一级才用下一级,并在报告里写明降级到了哪一级:
- 该技能真实下载量 —— 目前详情接口返回 405、
search不含该字段,基本拿不到 - 同类同期子集的分位数(推荐主力口径):拉 SkillHub 排行榜快照,筛「同月新发 + 同类目或同关键词」子集,
保守偏中性档取 p50,乐观档取 p75-p90 - 用户直接给定的假设值 —— 标注为【纯假设】
> 2026-10-27 实测参照见 references/platform-rules.md:
> 当月新发全量 p50=18;而认知拆解/成长类子集(n=18)中位数仅 22。
> 不要用全量分位数给垂直内容类技能估曝光,否则系统性高估。
第二步:定付费转化率 C
平台内暂无付费转化数据(paid 榜两次快照均空,304 个样本无 price 字段)→
取外部提示词/知识付费市场经验值 1-3%:保守档 0.5%,中性档 2%,乐观档 5%。
报告里必须标注【外部经验值,非平台实测】。
第三步:算买断「终身天花板」(最容易漏的一步)
一次性内容产品的买家不会复购:终身净收入 = R × C × 单价 × (1 - 费率)。
- R 同样拿不到 → 用假设值并给出区间(如保守 3,000 / 中性 20,000 / 乐观 100,000)
- 若终身天花板低于「开发投入 + 维护折算成本」,模式直接判死,不必再算月度收益
- 同一约束也适用于其他模式:脚本会把每月新增付费限制为
min(月曝光 × 转化率, 剩余付费人群池),避免出现「终身只能卖 100 份、
却让订阅在 24 个月里做出 240 人次」的自相矛盾
第四步:做维护成本敏感性
对中性情景算一张表:月维护 0.5 / 1 / 2 / 4 小时各自的月净现金流。
内容型产品最常见的死法不是定价错,而是「月维护一超过某个小时数就转负」。
这条生死线要在报告里明确标出。
5. 输入参数
全部通过命令行传入,均带默认值;--help 查看完整说明。
| 参数组 | 关键参数 | 说明 |
|---|---|---|
| 价格 | --buyout --sub --call |
买断价 / 月订阅价 / 按次单价(元) |
| 三档曝光 | --e1 --e2 --e3 |
保守 / 中性 / 乐观月曝光(人次) |
| 三档转化 | --c1 --c2 --c3 |
保守 / 中性 / 乐观付费转化率(小数) |
| 订阅流失 | --ch1 --ch2 --ch3 |
三档月流失率(小数,不含 0) |
| 人群池 | --reach1 --reach2 --reach3 |
三档可触达独立人数;<=0 表示不做人群池约束 |
| 成本 | --invest-incremental --invest-full --maint-hourly |
增量投入 / 全成本投入 / 维护时薪 |
| 费率 | --fee |
平台费率合计,默认 0.016 |
| 输出 | --months --out |
测算月数(1-120)、报告落盘路径 |
参数合法性会被强制校验:转化率越界、曝光为负、费率为 1、流失率为 0、价位填小数等情况,
脚本会直接以退出码 2 报错中止,不会带病产出一本看起来专业的错账。
6. 跑模型
在工作区根目录下执行(脚本为纯标准库实现,无需安装任何依赖):
python skills/skill-revenue-model/scripts/revenue_model.py \
--buyout 29 --sub 19 --e2 300 --c2 0.02
换技能就是换价格与三档假设。默认参数是一份示例场景(某人物拆解技能的实测口径),
不代表你的技能——务必用你自己的假设覆盖。
> Windows 若提示找不到 python,把命令里的 python 换成你的 Python 解释器完整路径。
> 下文示例统一用 python 简写,实际执行时同样替换。
7. 使用示例
下列示例把脚本路径简写为 revenue_model.py,实际路径为
skills/skill-revenue-model/scripts/revenue_model.py(在工作区根目录下执行)。
示例一:内容型技能准备定价,先看值不值
> 用户:我有一个已过审的人物拆解技能,打算卖 29 元买断,一年能赚多少?几个月回本?
python revenue_model.py --buyout 29 --e2 300 --c2 0.02 --reach2 20000 --out 收益报告.md
输出要点(示例场景实测值):中性情景 12 个月净收入 2,055 元;买断终身天花板 11,414 元;
中性情景月维护超过 1 小时后月净现金流转负。先看最后一条再决定要不要认真维护它。
示例二:垂直工具类技能,人群很小
> 用户:我做的是面向某个细分岗位的工具,全行业也就几千人,订阅会不会更好?
python revenue_model.py --e2 500 --reach2 5000 --months 24
输出要点:报告头会打印「中性:池 100 人,第 11 个月耗尽(之后新增归零)」;
订阅模式的累新增被卡住,不会无限增长。人群耗尽月份是关键结论,务必写进报告。
示例三:用户想定 9.9 元
> 用户:我想定价 9.9 元,帮我算算。
python revenue_model.py --buyout 9.9
脚本会拒绝执行并提示:
[参数校验失败] 价格含小数:--buyout=9.9。
WorkBuddy 开放平台付费设置的价格框是 type=number step=1(仅 1-9999 整数),
实测输入 9.9 会被吞掉小数点变成 99。小数价格算出来的是平台上根本设不了的方案。
请改成整数;若确实是在给其他平台建模,加 --allow-decimal-price 跳过本校验。
原因:算一套平台无法设置的价格没有意义。正确做法是先告诉用户「只能用整数」,
再由用户在 9 元与 10 元之间选择。
示例四:要不要改成 Expert 形态
python revenue_model.py --buyout 29 --expert-price 199
对照「同样的方法论做成专家包卖 199 元」的收益,判断值不值得升级形态。
8. 输出产物
脚本输出一份 Markdown 报告,共十二张表:
| 表 | 内容 | 用途 |
|---|---|---|
| 表 1-5 | 五种收费模式 × 三种情景的月流水与 12/36 月净收入 | 模式横评 |
| 表 6 | 买断终身天花板 | 必看,判生死 |
| 表 7 | 回本周期(增量投入口径) | 决策投入与否 |
| 表 8 | 维护成本敏感性 | 必看,找出生死线 |
| 表 9 | 费率敏感性 | 证明费率不是关键变量 |
| 表 10 | Expert 形态对照 | 判断是否升级形态 |
| 表 11 | 买断 vs 订阅 3 年期 | 长期收益对比 |
| 表 12 | 价格阶梯敏感性 | 找出收入最优点 |
报告头部还会打印人群耗尽约束说明(各情景的付费人群池大小与耗尽月份)。
9. 平台规则(写报告时引用)
完整事实卡见 references/platform-rules.md(核实日期 2026-10-27,超过 90 天需重新核实)。
其中三条最影响结论:
- 价格只接受 1-9999 的整数 —— 小数会被静默改写成别的数字(9.9 → 99)
- 仅支持一次性买断与按月订阅 —— 按调用次数官方明确不支持,报告中只能作为对照出现
- 改价入口可能不存在 —— 首发价可能就是永久价,因此本报告给出的定价建议要一次定准
⚠️ 事实卡带核实日期运行。平台规则变化快,过期的事实卡比没有事实卡更危险。
10. 报告输出规范
- 结论先行:第一段就给出「建议 X 元买断 / 建议转 Expert / 不建议收费」
- 每个数字标注来源类型:【实测】【媒体口径】【外部经验值】【纯假设】四选一
- 必含「拿不到的数据」一节:明确列出无法核实的字段与采用的替代口径
- 必含「结论不成立的条件」一节:哪些假设被推翻会翻转结论
(例如后台实时费率不是 1.6%、技能进了头部推荐位) - 中文内容写完后必跑 FFFD 与外文混入双检(命令见用户级 MEMORY.md)
11. 边界声明
本技能只做量化测算,不替用户决定发布。所有输出是「在给定假设下的账」,不是预测。
假设一变账就变——参数全部开放在命令行里,用户可自行复算。
本技能不读取、不上传任何个人信息或平台账号数据。
12. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
直接 exit 2 并提示参数越界 |
输入超出合理值域 | 按提示修正,转化率请写小数(0.02 不是 2) |
| 提示价格含小数 | 平台不支持小数价格 | 改成整数,或加 --allow-decimal-price |
| 三档曝光/转化不是递增 | 参数顺序可能填反 | 检查 --e1<--e2<--e3、--c1<--c2<--c3 |
| 报告出现「第 N 个月耗尽」 | 可触达人数设得太小 | 属正常结论;重新审视 R 的假设是否合理 |
| 想跳过人群池约束 | 没有可靠的可触达人数 | 把对应 --reachN 设为 0 或负数 |