badcase 探索与召回分析
1. badcase 探索
1.1 一个fid对应多个品牌
这样的指纹一般都有问题
select fid, count(1)
from (select fid, brandfrom test.table_namegroup by fid, brand
) t
group by fid
having count(1)>1;
2. 1122
2. 召回分析
基于线上指纹召回真实数据情况,统计设备指纹命中策略及其对应分布,及子指纹覆盖度,分析指纹召回准确性及是否存在过度召回等情况。
2.1 首次匹配到的子指纹分布
策略编号 | 策略规则 | cnt | rate | 备注 |
gk2 | A + B1 + C1 | 15310 | 46.23% | |
新设备 | 9631 | 29.08% | ||
gk1 | A + B2 + C2 | 7508 | 22.67% | |
gk6 | A + B3 + C3 | 654 | 1.97% |
2.2 匹配到的多个子指纹分布
备注:A、B等指标覆盖度高,唯一性也相对较高。
策略编号 | 策略规则 | 子指纹匹配数量 | 匹配率 | 备注 |
gk8 | A + B + C | 23469 | 70.86% | |
gk10 | A + B1 + C1 | 23464 | 70.85% | |
gk2 | 22816 | 68.89% |
2.3 指纹表命中结果解析
指纹命中结果字段res1存储35个子指纹是否匹配的情况,是一个长度为35位的字符串,
需要通过sql解析出,每一个子指纹是否匹配,以及命中(从前往后第一个匹配)的子指纹。
-- select '00000111010000100000000000000000000' as res1
select t.*,
coalesce(gk1_res, gk2_res, gk35_res) as res1_new -- 第一个非null的
from (select t1.*,if(split(res1, '')[0]='1', 'gk1', null) as gk1_res,if(split(res1, '')[1]='1', 'gk2', null) as gk2_res,if(split(res1, '')[34]='1', 'gk35', null) as gk35_resfrom test.table_namewhere length(res1)=35 or res1=''
) t;