全量算清楚还是抽样估一下,看这个数最后要拿去干什么
同一个数,全量跑一遍和抽样估一个,差往往不到一个点。但这两个数落到不同用途上,错的代价能差两个量级。
·
同一个数,全量跑一遍和抽样估一个,差往往不到一个点。但这两个数落到不同用途上,错的代价能差两个量级。
分岔点是这个数最后要拿去干什么
抽样估本身不脏。随机抽 5000 行,每个站点按销量比例分配,跑出来误差在千分之三以内,这个精度拿去判断一个品要不要砍,绰绰有余。
问题出在它被拿去对账。月末跟仓库的数对不上,全量跑出来的和抽样估出来的差 9 万,这 9 万里有 6 万是估出来的余量,不是真的差异。对账只认一个数。
分岔点因此很具体:这个数是拿去判断的,还是拿去对账的。判断用抽样,对账必须全量。
全量算还是抽样估,取决于这个数最后要拿去干什么
两条路摆在这张表里
| 维度 | A 路 全量算 | B 路 抽样估 |
|---|---|---|
| 触发场景 | 月末要和仓库的数对上 | 只用来决定砍不砍一个品 |
| 前提条件 | 上游能留 24 小时快照 | 抽样框覆盖全部站点 |
| 执行动作 | 整表跑一遍,出确定值 | 抽 5000 行,估一个区间 |
| 选错的代价 | 机时 40 分钟,每周一次,一年 34 小时 | 误差 0.3%,月流水 3000 万,差 9 万 |
| 回退方案 | 不用退,抽样是它的子集 | 改回全量,机时 40 分钟 |
| 什么时候必须停 | 上游不留快照,重跑要两天 | 差值没有上限,没人敢签这个数 |
全量的好处是结果唯一,坏处是每次都要占机器和人的注意力。抽样的好处是快,坏处是它永远给不出一个能签字的数。
选错的代价差在哪
A 路选错的代价是时间。全量每周跑一次,一次 40 分钟,一年 34 小时机时。这个数看得见,也能补。
B 路选错的代价是决策偏差。月流水 3000 万,误差 0.3% 就是 9 万。这 9 万摊进备货,就是错判一个品的库存水位。我带过的团队里,抽样估出来的数被财务拿去对账,账上被追着改了三天,那三天里财务做的全是无用功,因为两个数本来就不该相等。
退回来要花多少
全量改成抽样不用退,抽样本来就是全量的子集,随时可以切。
抽样改回全量,代价是 40 分钟机时,前提是上游还留着 24 小时快照。上游不留快照就没有退路,重跑要两天。退成本最低的时间窗是这次抽样结果发出之前——发出去了,业务方已经在用这个数做判断,那时候再改全量,等于承认前面那个数不能用。
优劣在什么条件下翻转
上游快照能力会翻转优劣。上游能留 24 小时快照,全量的成本降到几分钟,抽样就没有意义了。反过来上游不留快照、每次全量都要从头重跑两天的场景里,抽样是唯一能用的路。
另一个翻转在用途。同一个数,月初用来判断、周末用来对账,那它两条路都得走,月初抽样、月末全量。让一个数服务两种用途,通常是把两个数混成了一个。
两条都不该走的情况
三条同时命中,全量和抽样都别选:上游不留快照、这个数要进对外报表、月流水低于 100 万。100 万的流水用抽样省下的时间,还不够抵一次口径理解错带来的决策偏差。
我自己的做法是先问一句这个数要拿去干什么,再问它出去之后有没有人拿它签字。两个问题都答不上来的时候,我先不做这个数。
登录后可点赞
← 返回数据团队板块