手续费的算法分几种,先分清再动手算
口径这个词听上去有点抽象,可是落到手上其实只等同于一个问题。这一笔到底拿哪个数去乘,乘完之后还要不要再加减一次。把这个问题答清楚,口径就定完了。答不清楚的话,后面要走的每一步都只能靠猜。所以口径不是一道理论题,它本质上是一道取数题。
算法先按形态分,大致是四种。按比例走的那一种看基数,基数换了结果就换。按固定额走的那一种看笔数,跟金额没什么关系。按档位走的那一种先归类,再看落在哪一档。按阶梯走的那一种看跨越点,迈过去整体换算法。
分形态的意义在于,四种形态的出错方式完全不同。比例型错在基数选错,固定型错在笔数漏算。档位型错在归错类,阶梯型错在没看清跨越条件。先分对形态,才谈得上查错。形态分错,查得再细也是白费。
同一笔名义身上还可能叠着两种形态。常见的是比例项配一个下限,低于下限时按下限收。也可能是比例项配一个上限,超过上限的部分不再计。叠了形态之后,判断顺序就成了关键。先判哪一层,结果会不一样。
下限和上限这两样东西,最容易被忽略。它们平时不出现,只在订单特别小或者特别大的时候起作用。订单集中在两端的时候。它们的影响就不小了。看算法时要专门问一句有没有上下限,别等出了偏差才发现。
基数的选择是口径的核心,其他都是外围。同一个费率乘不同的基数。结果差得比费率本身的变化还大。所以先定基数,再看档位,最后看上下限。顺序颠倒过来,很容易在一个次要问题上纠缠很久。
哪几个数可以做基数,常见的候选并不多。标价是一个,成交价是一个。扣掉优惠之后的实付又是一个。含税和不含税也是两个不同的数。这四个选项中挑哪一个,决定了这一套算法的基准线在哪里。
基数这个东西不会写在费率数字里。它通常写在规则的说明段落里。很多人只看费率表,不看说明,基数就默认成了标价。默认错了,算出来的结果会长期偏高。偏高的部分会被误当成费率上调,然后白查一圈。
基数的选择还跟订单状态有关。有的算法拿下单时的数,有的拿下单完成后的数。中间如果改过价,两个数就不一样了。同一笔订单在两个状态下算是两个结果。这个差异在小额订单上不明显,在大额订单上很显眼。
在知虾的定价计算页面上,同一项费用在不同条件下的算法可以并列摆在一起。几个候选基数能够同时看到,不必一条条去翻规则说明。看的人可以自己把差异对出来,不用等别人来讲解。对差异的过程本身就能加深理解。它给的是把口径摆开来的角度,并不替谁决定该选哪一个。
口径的第二种差异来自档位的划分方式。档位是按金额区间切的,切点在哪里就很要紧。切点附近的订单会因为差一点而落到不同的档。这类边界效应在统计上会被平均掉,在单笔上却实实在在。所以在做定价模拟时,切点附近这一段要多留一点余量。
口径的第三种差异来自计数的口径。比例的算法里没有计数问题,固定的算法里有。一笔订单算一笔,还是按商品件数算,结果差得很远。多件订单在一笔和按件两种口径下差别最大。这一点在件数多的类目里尤其突出。
口径的第四种差异来自时间。同一个名义在不同时间点取数,结果是不同的。下单时取一次,完成时再取一次,中间的价可能已经变了。两套算法在大多数订单上一致,只在有改价的订单上分岔。分岔的比例不高,量却不小。
四种差异里,基数差异影响面最广。时间差异最难发现。因为前者每一单都会体现,后者只在部分订单上出现。排查时先查基数,能解释掉大部分偏差。剩下的零头再往时间口径上去找,效率会高很多。
把算法分成几种之后,会发现它们并不是互斥的。一笔订单上,不同名义各自走的可能是不同的算法形态。有的按比例,有的按固定,有的还带着档位。所以要一项一项地定口径,不能一整套照搬。逐个定完,整体才准。
这一节做的是把算法形态分开,还没有进入具体差多少。差多少要靠基数、档位、上下限三件事一起算。三件事都定下来,结果才有意义。口径这一层到这里完成了分类。下一步是把两种基数的差别说清楚。

口径在这五步里的位置,前三步定错后两步白算
按成交额还是按实收算,差在哪一层上
成交额和实收这两个词。日常很容易混着用。成交额是订单成立时的那个数,实收是钱真正到手时的那个数。中间隔着优惠、退款、部分退货这些东西。用哪一个当基数,是口径里第一个要拍板的事。
按成交额算的好处是口径稳定,不容易受后续变动影响。订单一旦成立,那个数就固定下来了。坏处是它与最终拿到的钱脱节。如果订单后来退了或者折了,基数就没跟着变。算出来的费用看着偏多。
按实收算的好处是贴近现实,费用跟着钱走。退款之后基数自动变小,费用也跟着变小。坏处是它依赖一个会变动的数。这个数在订单走完之前并不确定,预扣和实扣就会不一致。对账时会看到两套数并存。
两种基数在正常订单上差别不大。真正拉开是在有优惠或者有退货的订单上。优惠越大,两个数离得越远。退货越多,两个数的差额越不稳定。所以业务的优惠力度和退货率,会直接决定这个口径选择值不值得在意。
从数学形态上看,这个差别属于乘数上的差别。基数变了,等于给结果乘了一个小于一的系数。系数本身随订单不同而变化。它不是一个固定折扣,不能用统一比例去折算。所以只能用逐单核对的办法来看。
最容易被忽略的是优惠的分摊方式。一张订单里有多个商品时,优惠怎么摊到每个商品上,会带出不同的基数。平均摊和按比例摊是两种不同的做法。做法不同,单件商品承受的费用就不同。合起来看总费用一样,拆开看每件不一样。
还有一个隐形的中间数。是扣掉一部分之后的应付金额。有些算法拿的不是成交额也不是实收,而是两者中间的那个数。这个数在账单上不一定单独列出来,需要自己算。看不到它,就会以为基数只有两个选项。
含税与不含税是基数的另一个切面,两个数之间差着税额。比例上看着不算大,可是在低毛利品类上不能忽略。含税口径算出来的费用,会比不含税口径略高一点。差的那部分不会消失,它只是换了一个位置被减掉。选哪一个,取决于自己的账本来是怎么记的。
不同站点对基数的默认选择并不一致。有的站点默认走成交额,有的站点默认走实收。跨站经营时如果只按一套口径算,就会有站点长期算偏。偏的方向还不一定相同,有的偏高有的偏低。分站点核对是必需的。
口径一旦定下来,就要在账上保持一致。不能这个月用一套下个月换一套。换了之后历史数据就失去可比性。看不出是费用真的变了还是口径换了。所以换口径要留下时间标记,不然回溯时找不到分界点。
口径切换的成本通常被低估。切换当月的数据会同时受两套口径影响,看着像是异常。要解释清楚,就得把切换时点前后的数据分开看。分开之后,两段各自是干净的。混在一起,谁看都像出了问题。
同一类目在不同站点的档位落差。可以借分类目底下的销量与价格分布反推出来。把两边的分布放在一起,档位差异往往就有了线索。这样的比对不需要来回切换页面。它给的是把差异摆出来的角度,不替谁做选择。
对于退货率低的店,两种基数的差别可以暂时忽略。对于优惠力度大的店,这个差别必须单独处理。判断标准是自己订单里带优惠的比例有多高。比例高到一定程度,口径差异就不能当成噪声。这是先看结构再决定要不要深究。
退货带来的口径问题更麻烦,因为它发生在订单走完之后。已经按成交额计过的费用,要按实收做一次调整。调整的金额和时点都会体现出来。如果只看单月总数,很容易把这部分当成新费用。当成新费用之后,判断方向就偏了。
有一部分算法天然就绕开了这个问题。它们直接按实收计。这类算法不需要事后退调,账面上会干净一些。代价是预扣阶段的数字只能是估算,实际数要等订单走完。两种做法各有各的账期特征,不能说哪一种更好。
把两种基数的差别说清之后,判断这件事就变得简单了。先问自己订单里带优惠的比例高不高,再问退货的比例高不高。两个比例都低,这件事的优先级就往后放一放。只要有一个偏高,就得把基数当成正经的口径问题来对待。判断的门槛就是这么一条,不需要更复杂的模型。
基数这一层说到这里,还没有涉及档位怎么划。基数决定的是整条曲线的位置。档位决定的是局部的跳变。两件事要分开看,混在一起没法归因。基数这一层定完之后,下一步才是看档位之间的落差有多大。

同标价的一批订单,基数每换一档结果就降一截
不同类目的费率档位,档与档之间差多少
档位这个词来自分类,同一类东西按某种标准分成几段,每一段用不同的数。费率档位通常按类目来分,也可能按价格区间来分。分段的依据不同,落到单上的结果就不同。所以看清分段依据,是看懂档位这件事的第一步。依据没看清,后面的比较都会跑偏。
按类目分档是最常见的一种。同一件商品,挂在类目甲和类目乙下面,费率可能不同。这个不同不是因为商品变了,而是因为归类变了。所以档位问题有时候本质上是归类问题。归类错了,档位自然就错了。
类目分档的落差有多大,跟类目之间的距离有关。相邻类目之间往往只差一点点,远一点的类目之间差得明显。这种落差在选品阶段就会影响判断。同一件货放在不同类目下,成本结构就不一样。落差大的地方,值得在选品时就留意。
价格区间分档是另一种,常见于按金额切的规则。比如低于某个金额一档,高于一档。价格区间分档的特点是它在切点附近最敏感。差一点点就跨档,跨档之后费率变化。定价刚好落在切点上方的商品,最容易受影响。
档位之间的落差还有一种隐藏形态,就是某些档位带着附加条件。有的档位只看类目,有的档位还要求额外的资质或者地区条件。条件不满足的时候,就会退回上一档。退回之后结果当然不同了,但账单上未必会明说原因。遇到说不清的落差,先往附加条件上想。
档位的归属在跨站时会出现不一致。同一件商品,在一个站点落在一档,在另一个站点落到另一档。原因是两个站点的类目树不一样。类目树不一样,档位规则自然对不上。跨站经营时,档位要按站点分别确认。
类目树的变化会引起档位漂移。平台调整类目结构时,原来属于甲类的商品可能被归到乙类。归属一改,档位跟着改,费用也改了。这种变化不会以费率调整的名义出现,看上去很安静。但它对成本的影响是实打实的。
有一类商品天然跨类目,功能和用途都沾边。这类商品的档位选择余地大,但选择也更容易出错。选错了之后不会被系统自动纠正,只会一直按错的那一档走。所以跨类目商品值得单独做一次确认。确认一次,后面省事。
档位差异对定价的影响,取决于价格区间的宽度。价格带很窄的商品,一旦落错档就是整条线都错。价格带很宽的商品,影响会被摊薄一些。所以在做定价区间设计时,先看一眼档位的切点在哪里。切点位置会约束可选的价格带的。
如果两个档位之间的落差很小,追求落对档的收益有限。这时候可以把精力放在类别归属更清楚的地方。判断落差大小,靠的是把两个档位放在一起比。比过之后再决定要不要为归对档花力气。有比较才有优先级。
同一件商品在不同站点的类别归属可以放在一起对照。如果两边的归属不同,那么档位大概率也不一样。这种对照能把跨站的档位差异提前暴露出来。把两站的类目归属放在同一个视图里,比对时不用来回切换页面。它提供的是对照的角度,并不给出该归到哪一档的意见。
档位规则偶尔会提供一条降档的路径。比如满足某些条件就可以走更低的档。这类路径通常带着前置条件,并不是自动生效的。错过了条件,就得一直按原档走。知道有这条路存在,才能判断自己够不够条件。
同一笔订单里如果有多个不同档位的商品。合并计算时怎么处理,属于另一层问题。可能按主商品算,也可能分段算。两种做法的结果差别不小。多商品订单占比较高的店,这一点需要单独确认一次。
档位与基数的关系是:档位定的是乘数。基数定的是被乘的数。两者都错的时候,偏差会叠加,方向还不一定一致。所以排查时要分开动,一次只改一个变量。改完对照一次,才能知道是哪一个起了作用。
档位的落差再大,也要先确认自己有没有跨档的必要。有些品类根本没有更低档的路径。讨论落差就没有实际意义。先看自己所在的类目有没有分档空间,再看落差。这个顺序能把无效的分析挡在外面。
档位这件事说完之后,视线还没有回到单笔的对比上。档位本身只是规则里的一项参数。它需要跟基数放在一起才能成形。成形之后才谈得上差多少。档位说清之后,下一步就是把两套算法放到一起跑一遍。
| 口径维度 | 候选做法 | 差异何时显现 | 排查优先 | |||||
|---|---|---|---|---|---|---|---|---|
| 基 | 数 | |||||||
| 标 | 价 | 或 | 成 | 交 | 价 | 或 | 实 | 收 |
| 带 | 优 | 惠 | 的 | 订 | 单 | |||
| 最 | 高 |
最容易算反的,是把折扣前的价当基数
折扣这件事在算法里造成的问题。比大多数人以为的要深。折扣把成交的数压低了,但基数不一定跟着降。基数不降的时候,费用是按原价算的。看上去打了折,费用没打折,这就是最容易算反的地方。
算反的典型场景是这样的:商品挂一百,打个八折卖八十。如果费率按标价算,费用仍按一百算。卖家心里的算法是按八十算的。两个数之间的差别,就是这笔账对不上的原因。对不上之后,很多人会去怀疑费率,其实费率和折扣都不冤。
除了整单折扣,还有单品折扣和组合优惠。单品折扣只压一件商品的价格,其余不动。组合优惠压的是整单,分摊方式又各不一样。不同的优惠形态,对基数的影响不同。所以不能用一个笼统的折扣率去折算。
优惠券的分摊是最复杂的一种。一张券用在一笔订单上,摊到几件商品上各有各的数。如果基数按商品分别算,每件商品的基数都变了。如果基数按整单算,只有一个数变了。两种处理方式的结果不同,容易互相混淆。
折扣叠加的时候,基数怎么定就更需要事先确认。多张优惠叠加在一单上,最终支付数只有一个。而基数可能取叠加前的某个中间数。中间数取哪一层,结果就不一样。这种差别在促销期间会集中出现。
促销期的数据最容易出问题,也最容易被误读。促销期的费用占比看着上去了。很可能只是基数没有跟着降下来。如果拿促销期的数据去跟常态期直接比,就会得出一个夸大的涨幅。比完之后,很容易据此做出错误的决定。
折扣对基数的影响还跟时间点有关。有些算法取下单时的价格,有些取履约时的价格。促销期间改价的订单,两个时点的数不一样。同一笔订单在两个口径下就是两个结果。改价越频繁的店,这种差异越明显。
有一类折扣是平台出的,有一类是卖家自己出的。这两类在基数处理上不完全一样。有的算法会把平台出的那部分从基数里扣掉,卖家出的那部分不扣。规则不同,落到单上的数就不同。分不清来源,就会把差额算成费用。
想验证自己有没有算反,有一个简单的办法。挑一笔带折扣的订单,把几个候选基数各自乘一遍。哪一个结果跟账单上的数一致,基数就是它。这个方法不需要看规则说明,只要有一笔真实订单就够。一笔对上,一套口径就清楚了。
如果几个基数算出来都对不上,说明还漏掉了一个环节。可能是档位不同,也可能是上下限正在起作用。这时候把档位和上下限逐个代进去试,试到对上为止。对上了,这一套口径也就还原出来了。过程慢是慢了些,但得出来的结论可靠。
用错基数的后果不只是当月的数字偏了。它会一路传到定价判断上。按偏高的成本定价,价格就会定得偏高,竞争力受影响。按偏低的成本定价,可能卖出去了但没赚到。两种偏差的方向相反,代价都不小。
同一类目的价格带分布能看出商品集中在哪个价格区间。知虾的关键词分析把同类词下的价格分布摆出来。基数口径的影响大小可以据此判断。价格带越集中,基数口径的一致性就越重要。它给的是价格区间这个参照,而不是定价结论。
折扣口径这件事还有一个反向的坑,就是拿折扣后的数去倒推费率。用折扣后的基数算出来的比例,会高于真实费率。用这个偏高的比例去做预算,会高估成本。高估之后可能会放弃本来可以做的品。误差就这么传下去了。
有一类商品常年挂着折扣。实际成交价与标价长期分离。这类商品的基数口径必须一次定死,不能每个月重新猜。定死之后写进自己的核算规则里,长期照着执行。这样历史数据才有可比性,趋势才读得出来。
折扣处理还有一个操作层面的细节,退整单和退单件对基数的影响不同。退整单之后,与成交绑定的费用通常会一起撤掉。退单件时,基数按剩余商品重算。两种情形下的基数都不等于原始基数。看退款数据时要把这两种分开。
折扣与基数的关系说完了,它讲的是这个数到底从哪里来。它没有处理两套算法放在一起差多少的问题。那是比较,这是来源。来源搞准了,比较才有意义。折扣这一环理顺之后,下一步就可以做单笔对比了。
两套算法放到一起,单笔能差出多少
把两套算法放到同一批订单上跑一遍。差异才会真正显形。单看某一笔订单,差异可能只有几毛钱那么小。放到一批订单上,差异就会累积成一个看得见的数。这一节说的就是把差异读出来这件事,以及读出来之后怎么用。
比较的前提是订单范围必须一致。同一批订单、同一段时间、同样包含退款单或者同样不包含。范围一旦不一致,比较出来的差异里就混进了结构差异。结构差异不是算法差异。混进来就分不清是谁造成的。
差异的第一个来源是基数选择,这个前面提过。在正常订单上它贡献的差异很小。在带优惠的订单上贡献明显。所以差异的大小其实反映的是订单结构。结构里带优惠的比例越高,这个来源的贡献越大。
差异的第二个来源是档位归属。归属不同,乘数就不同。这个来源的差异更直接,一次错档就是整批都错。它的特点是差异比例稳定,几乎不随订单大小变化。稳定比例的差异通常来自档位,这可以当成一个判断线索。
差异的第三个来源是上下限。它只在极端订单上起作用。特点是差异集中在两端。如果把订单按金额排序再看差异,就会看到两端差异大、中间差异小。这个形状很有辨识度,看到它基本就能定位到上下限。
差异的第四个来源是取数的时点不同。它只在有过改价的订单上出现。特点是差异分散、完全不成形状。这类差异最难靠肉眼找出来,只能靠一单单核对去发现。好在它的总量通常不大,优先级可以往后排。
读差异的时候,先看这些差异是集中还是分散。集中说明有明确的规则在起作用。找到规则就能解释。分散说明是零碎的取数问题,只能一单一单去查。两种形态对应的处理成本差很多,先分清能省下不少力气。
再看差异的方向是否一致。所有差异都朝一个方向,说明是某一条规则的系统性偏差。方向有正有负,说明是多个因素叠加。系统性偏差优先处理,因为它的影响面大而且可修正。方向混杂的,先放一放。
差异的价值不在于算出精确到分的数,而在于判断这一套口径能不能用。如果差异长期保持在一个可接受的范围内。这套口径就是可用的。如果差异经常越过某个门槛,就得重新看基数或者档位。判断标准是相对意义上的,不是写死的。
比较的时候容易犯一个错,就是只比总额。总额一致不代表逐单一致,正负差异可能互相抵消。抵消之后总额看着没问题,单笔却错得离谱。要看得细,就得比分布。至少看几个分位数,不要只看平均。
同一批商品在不同站点产生的费用差异,其实可以放在一起看。这种对照能把站点之间的口径差异直接显出来。看的时候同样要注意范围保持一致,否则差异里会混进结构因素。混进来之后,归因就会变复杂。它给的是对照的角度,差异到底怎么归因还是得自己去判断。
差异大到什么程度才值得动手,这是个很实际的问题。如果差异带来的成本偏差小于调价带来的扰动,那就不值得动手。如果差异已经影响到定价策略,那就必须处理。判断依据是它有没有影响到决策,不是它看起来大不大。影响决策的差异,再小也要处理。
有一个容易被忽略的比较对象是自己历史上的一套口径。把去年和今年的口径放在一起跑同一批订单。差异反映的是规则变化。这个比较对判断长期趋势更有用。多数人只看横向比较,忽略了纵向这条线。
比较做完之后,建议留下一条结论:这套口径的偏差主要来自哪一环。结论不用写长,一句话就够用。写清是哪一环就收。下次再出现偏差,可以直接往那一环去看。没有这条结论,每一次都得从头再来一遍。
还有一种情形是两套算法各有各的适用条件,不存在谁替代谁。比如本地单用一套,跨境单用另一套。这时候比较的目的不是选出一套,而是确认两套之间的切换点是否清楚。切换点模糊的地方,就是最容易出错的那条边界。边界清楚了,比较才算做完。
单笔和批量两个层面的对比做完了。结论是差异既能读出来,也能归因。归因之后该做什么,属于下一型的范围。口径这一层到这里基本完整了,该确认的几件事都确认过。再往下走,就该谈这套口径什么时候需要变。

取值表示影响强弱:强、有、无三种
什么变化一来,这一套口径就得跟着动
一套口径不会永远有效。它会因为各种原因需要调整。有些调整是平台改规则带来的,有些是自己业务变了带来的。两类调整的应对方式不一样,混在一起处理容易乱。先分清是谁引起的,再决定怎么办。
平台改规则是最直接的一种。费率变了,档位切点变了,或者基数的定义改了。这三种变化在账单上的表现不同。费率变化表现为结果整体位移,档位变化表现为部分订单跳变。基数变化最隐蔽,表现为结果与预期整体不匹配。
规则变化的公告通常只讲变化本身,不讲对具体业务的影响。所以看到公告之后,得自己推一遍影响范围。推的办法是拿一小批订单试算。试算不需要全量,几十笔代表性的订单就够了。试完就能知道影响落在哪一类订单上。
自己业务变化引起的口径失效,往往比规则变化更早发生。开始做新类目、新站点、新价格带,都会带来新的口径问题。因为原有的那套是按老结构定出来的。结构一动,老口径就不合适了。这类变化没人会通知你,只能自己盯。
类目扩张带来的口径问题最容易被低估。新类目的档位规则和老类目不一样,但人的习惯会延续过去。用老类目的口径去套新类目,误差会持续存在。所以在开新类目时,顺手把口径重新确认一遍。这一步花的时间不多。
站点扩张也是同理,甚至更明显。站点之间的档位、基数默认、币种处理都可能不同。把一套口径复制到另一个站点上,几乎一定会出偏差。从知虾公开的站点分析里,同类目在两站的价格分布能并排看到,档位落差通常藏在这条分布线上。所以正确做法是每个站点单独确认一遍,确认过的站点后面就省心了。
价格带的变化会触发档位问题。原来集中在低价区间的商品,往高价区间挪之后可能跨档。跨档之后费用比例变了,但人的判断还停在老印象里。所以调价带的时候,顺手看一次档位切点在哪里。看一眼,能避免很多返工。
活动策略的变化会触发折扣口径问题。优惠力度加大之后,基数与实收的差距被放大。原来可以忽略的基数差异,变得不能忽略。这时候口径要跟着调。调整的时点是活动开始前,不是活动结束后看结果再调。
结算币种的变化会触发另一类口径问题。涉及多币种的店里,换汇相关的那一环会带出差异。这一块的处理方式跟比例项完全不同。它更像一个阶段性的数。币种结构一变,这一环的算法也要重新确认。
判断一套口径是否已经失效。有一个简单的信号:账单数与自己的预估数开始系统性不一致。偶尔不一致是正常的,长期不一致就说明口径变了。系统性这个词很关键,它指的是方向稳定而不是随机波动。方向稳定就意味着有一条规则在起作用。
发现信号之后,先要做的是定位而不是修改。定位是找出到底哪一环造成了偏差,修改是直接换一个算法。定位没做就修改,等于把问题盖起来。盖住之后它下次还会以别的形式冒出来。所以定位这一步不能省,哪怕它看起来比改口径费事。
修改口径的时候要记录下修改前后的差异,哪怕只是粗略的一笔。记录的用处是在下次看趋势时能解释那个跳跃。没有记录的话,跳跃会被当成异常,然后白查一轮。一条简短的记录,省下的是未来大把的排查时间。记录这件事的成本很低,收益却很持续。
口径的调整不需要追求一步到位,可以先局部再整体。先改影响最大的那一环,观察一段时间之后再动下一环。一次改太多,差异归因就做不出来了。分开改虽然慢一些,但每步结论都是清楚的。清楚比快更重要。
有些差异其实不需要改口径,它属于业务本身的波动。比如某个月促销特别多,费用占比自然上去。这不属于口径失效,属于结构变化。区分这两者,看的是结构恢复之后差异是否回落。回落了就是结构,不回落才是口径。
不同条件下的算法结果可以并列摆出来,用来做变更前后的对照比较顺手。变更前后各跑一次,差异就能直接看出来。有了这一步,就不必再去翻旧记录。它提供的是并列对照的角度,口径该怎么定仍然要自己判断。对照给的是事实,选择还得由自己来做。
口径需要跟着变,但变的频率不该太高。频繁调整会让历史数据失去可比性,反而看不清趋势。理想的状态是一套口径能用较长时间。只在结构真的变了的时候调整。判断结构是否真的变了,比判断某一笔差异更重要。
口径什么时候需要动,这一问的答案落在变更的触发条件上。它没有讲变更之后该怎么用。那是下一型要处理的问题。口径这一层到这里可以收束了,该说的几件事都说过。最后还需要把这一层的边界再明确一次。

基数差异在大额单上被放得更大,在小额单上不明显
算法这一层说清了,名目不重复列一遍
口径这一层的工作可以概括成一句话:同一笔名义按什么数算、用什么形态算、最后落在哪一档。这句话答完,这一层就算完成了。剩下的问题都不属于这里。硬塞进来只会让它的边界变得模糊。边界清楚的层,才有办法被别人接手。
它不重列名目,是因为名目回答的是有没有这一笔。口径回答的则是这一笔怎么算。两个问题一旦混在一起,就会出现一种常见错误:用算法上的调整去解释名目上的缺失。方向一错,查多久都查不出来。所以先把两个问题的边界分开。
它也不处理钱在链路上停留多久。基数取哪一个数,和钱什么时候能够到账是两件事。前者决定的是算多少,后者决定的是什么时候拿到。一件影响金额,一件影响节奏。两件事都重要,但不能放在同一节里讲。
它同样不处理最后归到哪本账。算法给出的是一个数,这个数进到哪一本账、和哪些别的数放在一起,是另一层的事。归置方式不同,读出来的结论不同。这一层只负责把数算出来。不负责把它放到该放的位置。
把这三件事分开的价值,在于排查效率。费用对不上时,先判断是漏了一项、算错了一层,还是放错了位置。三种原因的查法完全不同。分开之后,通常几分钟就能定位到是哪一类。合在一起就得挨个排除。
口径层也值得留一份自己的记录,不用复杂。记三样东西就够:基数是什么、档位在哪一档、有没有上下限。三样记齐,下次核对时直接照单对。不用重新翻规则,也不用重新试算。这份记录的价值随时间增加。
记录里加上一条时间标记。写明这份口径从什么时候开始用。规则变了之后,旧的记录不要删掉,标注作废就可以。保留作废的记录,回溯历史数据时才有依据。删掉之后,那一段历史就解释不清了。
跨站经营的店,记录要按站点分开来做,不要合并成一份。合并之后,站点之间的差别会被抹平。分开之后,哪个站点的口径和别人不一样会很清楚。清楚之后,做站点比较时才不会把口径差异当成经营差异。这一步只要花一点耐心,不需要任何计算。
口径层的判断不依赖精确计算,依赖的是对比。同一个数放在两套口径里跑一遍。差异的方向和量级就出来了。多数时候不需要知道精确到分的差别,只需要知道哪一套更贴近实际。这个判断靠对比就能完成。
口径还牵着一个容易被忽略的点:同一批订单里。不同商品的算法形态可能并不一样。不能用整批的平均结果去代表每一类商品。要想分商品看,就要先把商品按形态归类。归完类之后再比较,结论才立得住。
对单量还小的店来说,口径这件事的优先级可以往后放一放。样本少的时候,差异主要来自个别订单,而不是来自算法。把精力放在扩大样本上更实际。等到单量真正上来,口径差异才会变成主要矛盾。什么时候该管,取决于样本量够不够读出规律。
对单量已经上来的店来说。口径是必须先定死的一件事。因为它影响的是每一个订单,累积效应很大。定死之后还能减少解释成本,团队里所有人用同一套数。统一的数比精确的数更有用,因为它是可对话的。
口径定死之后也不该完全不动。要留一个定期复核的节奏。比如每季度拿一批订单试算一次,看结果是否仍然落在预期范围内。这个动作很轻,却能及时发现问题。发现问题越早,处理的代价就越小。
同类目在不同站点的档位可以并列摆开来看。用它来做定期复核比较省事。差异很快就能对上号。这种并列对判断口径有没有发生漂移是够用的。它给的是摆开的口径,并不是该调成什么样的答案。
口径这一层的完成标志。是自己能说清一笔费用是怎么算出来的,并且能预判下一笔大概是多少。说到这一步,算法层就算理顺了。至于算出来的这个数最后去了哪里,那是另一层的活。这里只把它算准,不替它找位置。