在淘宝反作弊的评测中,评测算法上线前的准确率时,使用最多的是单纯随机抽样和分层抽样。这两种方法都属于随机抽样方法,也就是照随机的原则,即保证总体中每个单位都有同等机会被抽中的原则抽取样本的方法。
一、反作弊算法评测概况
反作弊,简单理解就是“打击作弊”,对使用各种作弊手段达到搜索排名靠前的行为进行处理。目前有虚假交易、广告商品等10种作弊类型。
在淘宝海量的宝贝中,要把有作弊行为的宝贝识别出来,不可能靠人工case by case的寻找,而是通过总结宝贝的特征,用算法来实现批量处理。而算法是否可靠,则需要人工来验证,当人工验证的准确率达到预期的指标后,算法才能上线生效,对作弊宝贝进行处理。
二、为什么用随机抽样
在前面说到,随机抽样是“保证总体中每个单位都有同等机会被抽中”的抽样方法。在一个算法中,宝贝是通过同一个算法逻辑来识别的,大家都“生而平等”,想要知道这些宝贝的状况,将用到随机抽样中的单纯随机抽样和分层抽样即可。
三、具体操作方法举例
1、单纯随机抽样
单纯随机抽样:从总体中抽取一定比例的样本。比如算法A,召回了5万宝贝(召回:即算法识别了5万作弊宝贝,称作召回),从中抽取1%的样本量进行评测,来估算算法的准确率。但是这种抽样方式适合召回数量不多,算法逻辑较为单一,召回总体无法再区分的评测。
2、分层抽样
分层抽样:先依据一种或几种特征将总体分为若干个子总体,每一子总体称作一个层;然后从每层中随机抽取一个子样本,这些子样本合起来就是总体的样本。稍微不同的是,一般的分层抽样重视的是整个样本的评测结果,而算法评测中,更重视单个子样本的评测结果。这是在算法准确率评测中使用最频繁的抽样方法。
适用场景1:算法逻辑一致,分层变量清晰且相对独立。
拿“标题滥用关键词”的算法来说,算法逻辑中滥用的关键词有“非”(非檀木匠),“比”(比江南布衣美),“不是”(不是百丽/达芙尼),这里分层就可以以关键为依据分成3个子总体,3个子总体各自抽自身数量的1%,合成一个总样本。当然每个子样本都设有一个下限,当1%不足下限时,自然补足,这样相对能保证评测结果的可信度。(为何是1%的比例?是根据经验在人力与置信度之间取的平衡点,暂不赘述。)
分层类型 | 召回量 | 抽样 | 抽样说明 |
滥用“非” | 50000 | 500 | 抽样1% |
滥用“比” | 20000 | 200 | 抽样1% |
滥用“不是” | 10000 | 200 | 样本补足 |
总和 | 80000 | 900 | / |
适用场景2:算法逻辑一致,分层变量本身有连续性。
“标题滥用关键词”分层后,各子总体之间比较独立,没有连续性。而“虚假交易”算法的分层维度往往是数值,有一定的连续性。如,根据识别特征的不同,不同数值水平的宝贝或卖家会体现出明显的差异性,所以需要分阈值区间进行数据提取。
像这种连续性的变量,应该怎么来分层呢?不可能50个变量值就要分50个子总体来进行评测与统计。所以在目前的评测中,一般用到2种划分方法。
(1)分层后,每个子总体的召回数量相近。
假设以下1-10是一个连续的变量:
主变量 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
召回数 | 100 | 10 | 20 | 30 | 50 | 10 | 45 | 20 | 40 | 20 |
各区间合 | 100 | 120 | 95 |
从表格可以看出,以“每个子总体的召回数量相近”的原则来分层的话,区间应该是:1,(2,5],6以上。当然,临界点的数据能取到一个舒适的数值就最好不过了,比如,取5的倍数、10的倍数等,这也是为什么上表不取“变量6”为临界点的原因。
(2)借助算法的其他维度分层。
假设算法中有一个主变量,有一个辅助变量,则可以根据辅助变量来分层:
主变量 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
辅助变量 | 1 | 0.98 | 0.96 | 0.95 | 0.92 | 0.9 | 0.8 | 0.83 | 0.82 | 0.8 |
分层阀值 | 1 | (1,0.9】 | (0.9,0.8】 |
总的来说,分层抽样的好处在于:
A.清晰的看到子总体个自的算法准确率,其中一个子总体没有达到指标时,可以更有针对性的进行算法调优,来达到预期的指标,免去了对整个召回大动干戈。
B.假设其中一类无法达到指标,又没有调优的空间,可以暂时不处理,先处理已达到指标的类型。免去了因一种类型导致整体准确率未达到指标而无法上线的情况。
C.当算法召回量过于庞大,需要较长的时间停留在评测环节时,可以用分层的方法,把召回分成几个部分,评一部分,流动到下一环节,逐步在线上生效,不至于将“战线”拖得太长。