让我们的数字更好看的那个错误:我们如何发现并清除它
CODE Eternal
简要
我们测量网站的可达性:不使用鼠标的人能否用键盘走完一个页面,并拿到他要的东西。 过去一周,我们扫描了数万个美国商业网站。
9 月 8 日,我们在自己的扫描中发现了两个错误。两个都让我们的数字看起来更好。 我们把它们清除了。下面讲讲它们从内部看是什么样子——因为这恰恰是别人的报告通常 不会展示的东西。
第一个错误:把拦截页算成了完美网站
大型连锁企业会防范自动化请求。我们的爬虫访问这类网站时,收到的不是网站本身, 而是一张验证页:「Robot or human?」
接下来发生的事情是这样的。服务器返回状态码 200——"一切正常"。页面完成渲染。 可达性引擎对它运行检测,检出零项违规。这是真的:一张只有一行文字和一个 勾选框的页面,本就没有可违规的内容。
日志里写下的是:已测量,无违规。
也就是说,一个拒绝让我们进入的网站,被统计成了典范。这样的记录有四千多条 条,其中 3 227 条是整齐的零。
第二个错误:一家连锁企业顶上一千家公司
我们从公开的组织登记册中取得网站地址。对连锁企业而言,每一个门店都是一条独立 记录,而它们的"网站"字段里填的是同一个地址。
测量结果:57 401 次检测分布在 8 170 个唯一域名上。平均每个域名七次。某个 知名咖啡品牌被测了 5 739 次——按门店数量计。
如果按检测次数来计算"存在违规的网站"占比,一家连锁企业就获得了五千家独立公司 的权重。而大型连锁的网站通常做得不错:背后有整个部门在维护。
核心数字发生了什么变化
存在违规的网站占比 按检测次数(错误) ............ 60.0 % 按唯一网站、剔除验证页 ........ 77.9 % 偏移 .......................... 17.8 个百分点
请注意方向。我们此前是在低估自己的结果。修正错误之后,得到的数字反而对我们 更有利。
这正是我们要写出来的原因。让结果变差的修正,出于谨慎自然会做。让结果变好的修正, 很容易不被察觉、也不会有人去找——而这正是这两个错误最危险的性质:它们不引起 怀疑。数据看上去正常。什么都没崩。没有人抱怨。
我们是怎么发现的
这两个我们都不是在找的。
我们检查的是完全另一件事:每一个被测网站是否有属于自己的截图,而不是被替换 过的。为此我们统计了截图校验和的唯一率。结果是 74.4 %——也就是说四分之一的截图 是重复的。
随后我们把重复的打开,用眼睛看。头三个例子里就出现了一家大型零售连锁的网站, 标题是「Robot or human?」,违规数为零。
由此得出一个我们要写进方法论的简单结论:截图校验和是一项廉价而极强的检查。 它一次能抓住两类不同的错误——被替换的测量,以及重复的输入数据。今后我们的每一次 扫描都会带上它。
我们没有做的事
我们没有停止正在运行的扫描。
检查表明,需要修的是计数,而不是采集:每一条日志记录都保留了页面标题、域名、 响应码和截图校验和。这足以在扫描结束之后剔除拦截页、并把连锁合并。数据是完整的, 不需要重新采集。
这已经是第二次,我们的数字向着对自己不利的方向减少
9 月 1 日,我们数出市政网站中有 1 498 个失效域名。9 月 8 日重新统计:1 441。 我们此前判为失效的域名中,有五十五个在重试时作出了响应,另有两个在第三次尝试时 响应。
更大的数字看起来更有冲击力。我们保留了更小的那个。
一个可以当众验算的校验:1 441 + 10 461 = 11 902——这是我们样本中全部的市政网站。
我们额外核对的部分
我们用同样的方法核对了市政扫描——那份数据已经公开发布。那里不存在偏差:95 524 次检测分布在 11 902 个唯一网站上,每个八个页面,拦截页为零。市政网站不使用验证页。
已发布的数据无需修正。 需要修正的只有仍在进行的商业扫描。
我们为什么要写这件事
因为没有分母的数字不是测量,而是印象。当有人说"78 % 的网站不可达"时,唯一诚实的 问题是:78 % 是相对于什么,以及你们把什么从分母里拿掉了?
我们提前回答:这个比例按唯一网站计算,而不是按检测次数;拦截页不计入分母。 没有这项修正,我们会得到 60 %;有了它,是 78 %。我们选择了自己能够站得住脚的 那个数字。
数据、代码和截图都是开放的。请核验我们。