谷歌数据负责人:处理极大复杂数据的三类实际建议

许多年来,我一直领导谷歌搜索日志的数据科学团队。经常需要我们对一些乱七八糟的结果来赋予意义,对日志记录的操作来挖掘新现象,验证别人的分析,以及用于解释用户行为的度量指标。有些人似乎天生就擅长做这种高质量的数据分析。这些工程师和分析师常常被描述为“谨慎”、“有技术”。但实际上这些形容词是什么意思?您怎么做才能赢得这些标志?

为了回答这些问题,我将Google公司的经验整理进一篇文档,并得意地将他简单命名为“好的数据分析”。令我惊奇的是,这篇文档比我在谷歌过去十一年做的其他任何文档的阅读量都高。在上次大改版之后的四年时间里,每次检查的时候,我甚至发现有许多Goolge员工翻看它。

为什么经过这段时间,这个文档使那么多人产生共鸣?我认为最主要的原因是全文都是关于具体的可以实施的方案,不只是抽象的理想。我见过许多工程师和分析师养成了这些(文中涉及的)习惯,并进行高质量的工作。我将在这个博客中分享那篇文档的内容。

建议总结起来,分为三大类:

技术:如何操作和检测数据的思想和技术。 过程:一些建议,关于怎样处理您的数据,应提出怎样的问题,还有一些需要检查的事情。 沟通:如何与他人合作及交流,关于您的数据和见解。

技术

看看你的数据分布

虽然我们一般会使用总体度量(均值、中值、标准差,等等)和人交流数据分布,但是您应该常常关注分布的更丰富的表示形式。直方图、累积分布函数(CDFs)、Q-Q图,诸如此类给予您了解是否存在重要有趣的数据特征,如多模态行为或是一个明显的异常类,您需要决定如何总结它们。

考量异常值

您应当关注您数据中的异常值。它们会成为煤堆中的金丝雀,是您的分析所暴露的更基本的问题。从您的数据中将他们排除,或把它们放在一起形成一个“异常”类别,这样做可以,但您应该确保您知道为什么一些数据最后被放在这一类。例如,点击率(CTR)最低的查询,可能显示了在用户界面中有一些点击元素是您无法统计的。点击率最高的查询,可能又会反映了您不应统计的点击。另一方面,一些异常值是您永远无法解释的,所以这里投入多少时间您需要特别留意。

报告噪音或者置信度

首要的是,我们必须意识到存在随机性,这很坑。如果您不小心,您发现的模式就混着噪声。每个您生成的估计量,您应当附上估计的置信度。有时这可以相当正式和精确(采取一些测量方法,如估计量的置信区间或可信区间,以及结论的p值或贝叶斯因子),有时也没那么严格。例如,假如一个同事问您,多少查询关于周一我们获得的青蛙数量,您可能会做一个快速分析,看了两个星期一就报告“通常介于1000万到1200万”(而不是真实数字)。

看实例(这里的实例指数据的实际情况)

当您在编写新的分析代码,您需要看下这些底层数据的实例,您写的代码是如何解释这些实例的。不这样做,要用的分析代码复杂一些您基本上就写不出来了。您的分析能从底层数据挖出许多特征,并梳理成有用的总结。通过查看个体实例的全部复杂情况,您会得到合理的总结,从而信心百倍。

您应该做分层抽样,在整个分布中都得到采样,这样就不会只集中在最普遍的例子上。

举例来说,如果您要计算“点击时间”(TimetoClick),确保您能看到整个分布的实例,特别是极端情况。如果您没有合适的工具或者可视化方式来查看您的数据,您需要先完成这个。

划分数据

这里的划分意味着将数据划分为不同的子集,分别看下在这些子集中您测到的值。在网站流量分析中,我们一般按照一些维度来划分,如“移动端还是桌面端”、“浏览器种类”、“所在地”等等。如果底层现象可能在子集之间以不同的方式工作,您必须划分数据看看是否是这样。即使您不期望一段数据能有什么用,看下几个段之间的内部一致性(译者注:原本是一列数据,但是被划分到不同子集中),如果您测量的是正确的东西,那也带给您更大的信心。在某些情况下,个别子集可能存在坏数据、损毁的记录,或者在某种程度上是完全不同的东西。

每次您划分数据来比较两组(比如实验组/控制组,但即使是时间A与时间B的比较),您都需要注意混淆的迁移(mixshift,译者注:按照下文辛普森悖论的推论,这里指原本存在某种特征的两个组,分别讨论时存在这种特征,但是两组混在一起时这种特征却消失)。混淆的迁移出现在当每段的数据量在各比较组之间不同的时候。这可能是辛普森悖论和其他混淆导致的。一般来说,如果在您的两组中,一段的数据量是大致相同的,您可以放心进行比较。