13.2 显著性、样本量与常见陷阱
显著性不是「p 小于 0.05」这么简单。本节不引入 scipy,用 numpy 手写正态 CDF、两比例 z 检验、Welch t 检验与样本量公式,再用蒙特卡洛实测第一类错误率,量化偷看、多重比较、SRM 与辛普森悖论四个陷阱,并用 B 基准把模拟值与理论值逐项对照。
tag
显著性不是「p 小于 0.05」这么简单。本节不引入 scipy,用 numpy 手写正态 CDF、两比例 z 检验、Welch t 检验与样本量公式,再用蒙特卡洛实测第一类错误率,量化偷看、多重比较、SRM 与辛普森悖论四个陷阱,并用 B 基准把模拟值与理论值逐项对照。
A/B 实验的第一步是把用户稳定地分到对照组与实验组。本节用确定性 PRNG mulberry32 与 user_id 的 FNV-1a 哈希实现可复现的稳定分流,本机跑出 10 万用户的分桶比例、偏差与稳定性,并量化「每次曝光都重抽」的不稳定分流会让多少用户同时看到多个变体,说明为什么分流必须先于显著性。
留存曲线的形状在第 11 章讲过,这一节讲怎么把新手漏斗和 D1/D7/D30 队列算出来并做分群诊断。用 config/n12_retention.json 定义漏斗各步与三类分群的逐日生存参数,S 层脚本用确定性 PRNG 跑出漏斗人数与 D1/D7/D30,P 层用 TypeScript 同种子复算并断言逐位一致。
LTV 不是一句「人均值多少」,而是一条逐日累计的曲线。本节用 config/n11_ltv.json 的留存曲线与 ARPDAU 口径,把 D1 到 D365 的每安装收入累加成 LTV 曲线,跑出 D180 4.67 元、回本周期第 116 天,再用 B 基准把逐日递推与闭式几何级数对照,并用 P 层测试守住跨语言逐位一致。
折扣的需求响应不能靠猜。本节用 config/n10_elasticity.json 的需求表算出各价格点的收入与弧弹性,定位收入最大价,用 B 基准对照解析最优价,并量化两个副作用:原价购买者的价值差、弹性误判造成的收入损失,回答「降价到底赚不赚」。
折扣不只是「便宜」。本节用 config/pricing.json 的折扣档与 config/n10_pricing.json 的限时窗口、稀缺限购,仿真每个折扣档在无限购与限购两种情形下的收入,再用 B 基准量化「折扣击穿价格锚点」:低档折后的单位价值超过了满价顶档。
定价不是拍脑袋。本节用 config/pricing.json 的 5 档定价算出每档「每元玉璧数」与相邻档位的梯度,跑出可复算的档位梯度表,再用 B 基准把梯度与目标区间对照,并用 TypeScript 原型与 Python 逐位对照,守住这条梯度红线。
版本迭代不断往战力里加属性,加法公式会越来越不准。本篇把「队伍强度 = 各乘区之积」当设计假设,把乘积按泰勒展开成一阶、二阶与精确三层,用 240 支采样队伍跑出三种公式的反演对数随属性数 k 的变化,并给出跨语言用 BigInt 复算的 TypeScript 实现。
战力公式是玩家看得见的排序依据,必须与真打一场的结果一致。本篇用确定性回合战斗做真值,把「单位类型 × 兵力」的 12 支队伍两两对撞 66 场,跑出同型 1000‰、跨型 791‰ 的排序一致性,再用最小二乘反推权重、报告残差,暴露加法战力在克制环上的结构性盲区。
属性是 SLG 数值的地基。本篇把属性分成基础、派生、全局修正与状态四类,用一棵整数表达式树描述派生属性的依赖关系,跑出拓扑排序、层号与环检测,并以《王朝纪元》骑兵样板队伍算出从有效攻击、减伤率、有效生命到战力的完整派生链,同时给出应进 CI 的两项配置自检。
《SLG 游戏产品设计》卷二《数值平衡与商业化运营》全书目录:16 章 48 节,第三部分讲属性与战力、成长曲线、战斗数值、兵种阵容、掉落概率、抽卡礼包、匹配分段、赛季膨胀控制,第四部分讲付费点、定价折扣、LTV 与回本、留存漏斗、A/B 实验、活动赛季、联盟 GVG 运营与设计案装配。每一节都配可跑的 Python 仿真或 TypeScript 原型。
《SLG 游戏产品设计》卷二《数值平衡与商业化运营》全 50 篇。第三部分(第 1–8 章)讲属性与战力模型、成长曲线、战斗数值基础、兵种与阵容数值、掉落与概率、抽卡与礼包、匹配与分段、赛季数值膨胀控制;第四部分(第 9–16 章)讲付费点、定价与折扣、LTV 与回本、留存与漏斗、A/B 实验、活动与赛季制、联盟与 GVG 运营,以及把两卷装配成一份可交付的设计案。每一节都配可跑的 Python 仿真或 TypeScript 原型,围绕虚构 SLG《王朝纪元》与贯穿工具链 bastion 展开。
一款小游戏不止一个「世界」:菜单、对局、结算、弹窗各自是一个场景。本节用场景栈 + 生命周期状态机管理它们——进入、暂停、恢复、退出四个动作,按动作而非目标态判定合法迁移,非法迁移一律拒绝且不改动任何状态,并配可跑的 TS 内核与断言测试。
引导状态机把「教玩家认识玩法」变成一串可断言的步骤:每步只认自己的完成事件,未开始、已结束、事件不匹配、不可跳过的步被跳过、第一步没有可回退的步这五种非法迁移一律拒绝且不改状态;再配跳过、回退与幂等重入,用 P 层内核与单测把整条新手路径钉死。
小游戏引擎不是只有 Cocos。本节把 Cocos Creator、LayaAir、Egret、Defold、Phaser、PixiJS、Unity WebGL 与原生 Canvas 八条路线放进一张公开可观察的格局对照表,并用一段 S 层脚本统计各引擎开箱内置的能力轴覆盖:从 8 条全内置到 0 条全自建,看它们如何排成一条引擎到框架再到渲染库的谱系。
bastion 的配置表字段字典与 schema:resources / buildings / units / battle 四张核心表的每个字段含义、类型与取值范围,整数比与整数百分比的表达约定,以及一份可跑的 schema 校验脚本——它能在仿真和原型跑之前,先把配错字段的配置拦下来。
卷一的复现手册:本机实测环境(Python 3.14 + numpy/pandas、Node 26 原生 TypeScript、无 matplotlib、无 tsc/npm)、bastion 完整目录结构、全部实跑命令、跨语言逐位一致的三条硬规则、以及一份可一键复现的校验脚本。遇到「书里的数字对不上」时先看这一页。
小游戏不是「缩小的手游」。包体上限、首包加载时间、无 DOM 渲染与平台 API 这四条平台约束,会一路反向决定做什么品类、把核心循环设多长、界面能铺几层、社交怎么接进分发。本文讲清《小游戏开发实战》三卷本要回答的问题、六档可运行性主张,以及它与站内既有内容的分工与边界。
产品设计书最容易写成散文:道理都对,落不了地。这篇序讲清楚这套书的写法——把 SLG 的设计写成可验证的模型,每一节配可跑的仿真或原型,一份配置两处消费,改一个数字两边结果都变。也讲清楚它与站内既有的 SLG 技术架构、经济平衡、赛季运营等内容的边界。
卷一的阅读指南:三条阅读路径(产品经理的系统课、经济策划的建模课、只看闭环)、可运行性五档口径(S 仿真 / P 原型 / D 静态 / X 不可复现 / B 基准)、贯穿项目 bastion 的目录结构、需要准备的环境(Python 3 + numpy/pandas、Node 26,无需 tsc 与 npm),以及怎么验证书里的代码真的能跑。