一台一分钱领的体重秤,撑不起一个全国总量目标

一、难点不在采集,在一个指标里混进了三种性质的数
有报道描述过这样一类健康主题活动:低价甚至近乎免费领取的体重秤,早上站上去自动同步;午饭前拍一张餐盘照片算热量;晚上对着手机摄像头跳绳计数。个人的这些量再被汇总进一个“全国总量”的活动池。采集环节本身的工程含量不高,传感器、拍照、上传都有现成通路。真正撑不住的是最后一跳:把三种可信度完全不同的数加在同一个数字上,然后对外说这个数代表成果。
这不是道德问题,是口径问题。混合之后的指标失去了可审计性,因为它把“这个人确实瘦了多少”和“这个人上报了多少”这两件事实同了。一旦外界要核验,你没有任何办法拆开——除非从第一天起就分层存。分层不是事后补的标注,是采集时就要写进记录的字段。这是我们做数据交付时对任何带运营指标的系统的第一个要求。
二、三类来源,失真方式各不一样
分层要分得开,判据是“这条数据离事实隔了几道加工”。
| 来源层 | 定义 | 典型失真方式 | 可用于什么判定 |
|---|---|---|---|
| 用户自报 | 人在表单里填的数值 | 社会期望偏差导致整体偏低或偏高;漏报;为完成任务随意填 | 只做参与率,不做成效结论 |
| 设备直采 | 传感器或设备产生、未经人改写 | 传感器自身误差;使用姿势错误;设备被误用或挪作他用 | 可作为成效口径的主干 |
| 算法推导 | 由模型或规则从其他信号算出 | 识别失败代偿、类别覆盖不全、把缺失值当零 | 只能进带置信度的辅助口径 |
自报数据最容易被人情世故污染,它天然带一个方向性偏差,而不是随机噪声,所以平均也拉不回来。设备直采常被当成“客观”,但它有另一类问题:秤可能被人当垫子、可能被移动后放在不平的地面、两个人共用一台。这些情况数据完全合法、时间戳完全正确,读数却和体重无关。算法推导的问题最隐蔽,识别失败时系统往往不会报错,而是给出一个看着合理的默认值,于是误差以“看起来正常”的形式沉淀进总量。
三、元数据字段与最小必要采集
要能分层,每条记录必须自带出身。我们要求的最小字段集:采集方式标识、设备标识与型号、时间戳及其来源(设备时钟还是服务器时钟)、该条数据的置信度或概率、是否经过人工确认、参与计算的算法或模型版本号。最后两项最常被省掉,而它们决定了出问题后能不能把某一批数据单独剔出来重算。版本号的用途很具体:某个识别版本被发现系统性偏高时,我需要精确知道影响面覆盖哪些记录,而不是把全部历史数据一起作废。
健康类数据还要同时定最小必要集。哪些字段必须落库、哪些算完就能丢,取决于用途而不是取决于“能不能采到”。原始照片、精确位置、连续时序这类高敏感数据,如果业务判定只需要一个数值结果,那就不该进长期存储;采集端能本地算完只上传结果的,就不要上传原始件。保留期要按字段分别定,而不是一句“数据保留若干年”。这一条在设计阶段是几句话的成本,在事后是删不掉的历史包袱。
四、聚合之前必须做的五步
把每个人的量相加之前,先做五步处理,缺一步,总量就只是一个大数而不是一个指标。
第一步,单位统一。重量、时长、次数、热量分属不同量纲,任何一个“总量”都要写清它到底是哪一种的加和,跨量纲合并的数没有物理意义。第二步,去重。同一设备多次上报、同一人跨账号、同步重试产生的重复记录,去重规则要按人还是按设备来定,这个决定会直接改变结果。第三步,异常值处置。设一个生理上可能的区间,区间外不删而是单独归到一个隔离层,人工抽检后再定去留,直接删会让阈值本身变成不可讨论的黑箱。第四步,缺失值处理规则写死。缺失当零会压低总量、当均值会制造不存在的数据,两种都要明确排除,缺的就是缺,按参与人数分列报告。第五步,来源权重。如果三类来源要合并,权重必须显式写在计算式里,而不是靠“我们综合了多方面数据”这种说法带过。
还有一件事要写进设计文档:总量指标不能反推个体真实性。这是聚合的数学性质,不是信任问题。一个由大量可信个体加出的总数完全正常,反过来,总数漂亮也不构成任何单个记录可信的证据。谁把总量当成效证明用,谁就在用一个不可拆解的数做可拆解的决策。
五、摄像头计数与拍照识别:把精确值改成概率与分桶
跳绳这类动作计数,摄像头方案的失效来源是三类:遮挡(身体或手臂挡住关键部位)、视角(机位高度与角度使动作幅度失真)、节奏不规则(停顿、减速、中途捡东西)。这三类的共同后果是同一份物理动作会产生差别很大的计数,因此工程上必须把计数当概率输出而不是精确值:记录置信区间或者给一个分档(明显可靠、边界、不可用),由分档决定这条数据进哪一层。把一次带遮挡的计数原封不动当成精确次数写进扣减逻辑,是把传感器误差直接换成了用户权益损失。
拍照识别餐盘要按食物类别分桶来验收,而不是只看一个总准确率。不同类别的误差量级差得很远,油与含糖量的估法又叠加一层系统偏差。识别失败时的降级策略必须预先定义:要么标记为不可用并提示用户手动,要么落到类别均值并显式标注这是估计值,绝不允许悄悄给一个默认热量。有一条红线我们看得很重:算法推导的结果不得直接写进任何扣减权益、发放奖励或计算名次的字段。这类字段必须以人工确认或者设备直采作为前提,算法结果最多用来做提示和辅助排序。
六、防作弊与误伤的不对称成本,以及三档披露口径
阈值设严还是设松,代价是不对称的。设严会误伤真实用户,误伤的后果是申诉、人工复核、信任流失,这些成本分散在每个人身上不易统计;设松则指标被灌水,后果集中在对外承诺上,一旦被指出就是整体口径失信。所以判据不能只有一条规则,要按证据强度分档:单一信号触发的进观察层,不打扰用户也不计入对外数字;多个独立信号同时触发的进复核层,由人判;只有复核确认的才剔除并留记录。
人工复核的预算要提前估:按观察层命中量乘一个抽检比例算工时,而不是按“发现多少作弊”算。在洹拓接手的活动类系统里,我们通常把申诉通道当成设计项而不是善后项——申诉入口位置、需要的材料、答复时限三样要在规则上线前就存在,因为它同时是阈值校准的数据来源。如果没人申诉,通常是阈值太松或者申诉太难找,两种都不是好消息。
对外披露的口径分三档:最严的一档只报设备直采且经过人工抽检覆盖的部分,并给出抽检比例与通过率;中间一档按来源加权,同时把每一层的原始量和权重一起公布;最松的一档全部相加,但如果选了最松,就必须同时披露三件事——其中有多少来自用户自报与算法推导、缺失与异常值按什么规则处理、这个总量与个体成效之间不构成推断关系。愿意把这三件一起说出来的数字,才有讨论价值。一个只报总数、不报结构的指标,无论大小都不该写进任何对外承诺。