什么是数据分析/数据科学?


无论是学术研究还是业界实践,解决问题都是生产力的关键。而解决问题,首先要定义问题。当经验不可靠,实验做不了(或者成本太高)的时候,我们只能依赖历史信息帮助我们做关于未来的决策,特别是在与人有关的社科和商科领域。方法我们大体可以分为两大类,一大类是定性方法,一大类是定量方法。定性方法在社会学和心理学领域等领域仍然发挥着巨大的作用,不过不是本文的讨论重点;另一大类是定量方法,随着统计学方法和计算机技术的发展,定量方法变得越来越可靠,因此发展迅速。大家概念中的“数据分析”或者“数据科学”,通常指的就是定量地定义问题、并基于历史观测数据(而不是实验数据)和定量方法解决问题,让数据自己讲故事而不是通过经验或者通过实验讲故事。因此,所有有可靠的可定量的数据的问题都可以基于数据分析方法解决,而远不止商业问题。那么怎么定量的定义问题和怎么使用历史观测数据定量地解决问题呢?

 

首先讨论定量地定义问题。问题的定义可以分为三步:

 

第一步,把问题目标定量地定义成因变量y。比如说,CPP最近在组织发放问卷的助研项目,那么我们的问题就可以被定义为“助研团队发放的总问卷数”。

 

第二步,把可能的因素定量地定义成自变量x。比如说,给助研更多的激励可以刺激更多助研加入,从而提高总问卷发放数量;给问卷做更多的培训可以让助研更有经验,从而提高每个人平均发放的问卷数。

 

第三步,找出y和x的关系,即y=f(x)+e。这里的f是一个映射关系,不一定一定要是一个含参数的线性或者非线性函数,e是误差项。这里的关系有两大类,一大类是相关关系,关注E(y|x)或者E(y|observe(x)),可以用来做预测,统计学和机器学习比较多关注预测关系或者统计上的因果关系(即如何预测,而不是真正的因果关系);另一大类是因果关系,关注E(y|do(x)),可以用来做因果解释,通常要求我们在前者的基础上结合问题背景和学科背景的准实验方法让observe可以当成do来处理(比如经济学中的自然实验、IV、DID、断点回归等简化模型方法),或者基于问题背景和学科背景的可以解释x到y的逻辑以及do(x)如何影响y的方法(比如经济学中的结构模型方法),这是计量经济学关注的重点。我们希望得到的结论是,有(observe)哪些身体特征(自变量x)的病人更可能得以及在多大程度上可能(相关关系)胃病(因变量y),或者吃了(do)什么药(自变量x)更可能以及多大程度上可能(因果关系)让病人的病好(因变量y,是否病好可以是0、1变量)。

 

下面讨论如何基于历史观测数据定量地解释数据

 

第一步,获取数据。巧妇难为无米之炊,基于观测数据解决问题,首先就要有观测数据。这个问题可以简单也可以复杂,解决这个问题的方法也越来越多。比如大家熟悉的网页爬虫,就是常见的一种收集海量互联网公开数据的方法,网页爬虫技术的进步帮助很多问题提供了数据源。

 

第二步,清洗数据。原始数据通常是很混乱的,很难直接用作分析。比如说,从天猫或者京东获取的商品名通常是极度混乱的,比如“徐同泰豆捞酱油寿司海鲜火锅澳门豆捞调味品生抽日本日式刺身调料”(徐同泰豆捞酱油寿司海鲜火锅澳门豆捞调味品生抽日本日式刺身调料-tmall.com天猫),这是一个酱油,但是如果直接看名字……我们经常需要通过各种自动化程序甚至大量的人工来处理掉这些乱七八糟的情况,通常这部分会占一个数据分析项目80%以上的工作量。

 

第三步,特征提取。传统问题下提取特征是比较容易的,比如说数一下某类商品的数量、把年龄按某个规则分为几组,把字符串变量打标签成离散变量等等。在大数据背景下,我们需要从海量的数据里面挖出新的信息作为自变量x,比如说我们需要挖掘文本的特定词语的词频特征做这个文本的特征,特征提取本身就会成为一个巨大的麻烦。

 

第四步,描述统计。描述统计包括两类,单变量特征和变量之间的联系。比如我们可以去看某一个x或者y的均值、方差、极值、分布等特征,或者去看某一个x和y的关系(比如散点图),或者根据某一个x分组的y的分布,或者根据某一个y分组的x的特征。业界常说的用户画像的一类工作就是基于多变量的描述统计来看根据某一个特征标记的某一用户群体的特征。

 

第五步,建立模型。无论是预测类问题还是解释性问题,通常情况下都可以从相关关系开始,如果需要理解因果关系,再结合相关问题背景和理论背景构建更进一步的模型。根据y是连续变量还是离散变量,可以把定量模型分为离散模型和连续模型两大类,两类模型在建立相关关系和因果关系的处理上有一定的不同,此处不再深入展开。当x是离散变量,特别是分类变量时,也要特别注意在解释模型结果的时候是几个不同类数据的区别,而不是一个增加x可以增加或者减少y的关系。

 

第六步,评估模型。无论是预测类问题还是解释性问题,我们都希望模型本身是可靠的、经得起检验的。最可靠的检验方式自然是放在未来某个(数据分析/数据科学家认为)不超过模型的解释能力范围的场景下检验预测结果和实际结果是不是一致。次可靠的方法是从现有数据中取出一部分来做测试,具体方法有很多。如何定义评估模型的目标呢?统计学和机器学习通常用loss function来作为模型的可靠性的指标,最常用的loss function是MSE,在线性回归里是R^2;传统的计量经济学经常更关注E(y|x)是否有偏;其他的问题背景可能数据分析或者数据科学家会自定义相对可靠的评估方法。

 

最后解释一些关于数据分析常见的问题

 

数据分析一定比传统方法更好吗?不一定,因为可靠的数据分析才更可能比传统方法发现更多insight,而达到“可靠”这个指标通常非常困难,特别是从相关性到因果性这一步特别容易惨死。知乎上有很多打着“数据分析”的名头的文章是有逻辑漏洞的,比如

 

@慧航 老师有很多写的非常精准的批评(比如,慧航:如何评价「城市数据团」的文章《远离你终将衰落的家乡》?),大家可以去阅读一下。在避免了逻辑错误导致的混淆因果、弄反影响方向(系数弄反符号)等不可原谅的错误的前提下,即使是结论比较局限的数据分析也是有意义的,甚至有时候反思清楚错误的结论以后也可以发现局限所在,而这些局限可以帮助我们更好地了解这个复杂问题的一角,很可能就是未来完整解决方案的一角。比如说,我们控制了n个条件以后,我们发现某个线性回归的计量结果可以解释x到y的因果,但是R^2只有不到0.1(这种情况很常见……),从计量角度来说,这是一个有意义的结论;但是从统计学来说,这是一个没有预测力的结论,还可能有很多复杂的因素(x_1,x_2, …, x_10^10,…)影响y,y这个大问题可能还没有被回答完,还需要进一步更深入的研究。

 

建模一定比不建模好吗?不一定,要看问题是不是一定需要模型才能说清楚。建模比不建模复杂,当简单的描述统计就可以看出相关关系甚至因果关系(比如可以假设其他条件相同,E(y|x=1)-E(y|x=0)>0,treatment effect为正,正向因果关系成立)的时候,建模不一定能获取更多信息,错误的建模甚至会得到错误信息或者无效信息,浪费成本。实习的时候有次主管让我做个分组统计,我想看一下模型是不是更好,就没做描述之前直接做了一个logit,结果得到了很奇怪的结果,后来画了散点图才发现y=1和0的数据密密麻麻地分布在每一个x上(数据量很大),所以导致用不合适的模型反而不如不做模型来的直观。当数据量很大的时候,直接从不同的角度描述就有可能得到很多很多有用的信息,很多时候已经可以满足需求,再进一步研究可能对关注的重点没有什么帮助,建模可能成为很低效的问题。

 

因果关系一定比相关关系好吗?不一定,要看问题的关注点。当我们关注“可能是什么”,我们需要做更多预测,这个时候我们应该关注相关关系;当我们关注“为什么是这样”,我们需要做更多解释,这个时候我们应该关注因果关系。比如说我的毕业论文研究电商平台的搜索算法如何影响消费者和生产者决策,我建立了基于consideration set approach的(动态)结构模型,把消费者的选择分为两步:第一步,平台推荐算法推荐商品给消费者,比如第一页的商品通常更容易被看到;第二步,消费者从看到的商品里面做购买选择。第二步的模型是一个基于random utility framework的离散选择模型,是一个标准的用来解释因果关系的结构模型;第一步我尝试了将近一年,用参考文献里面用的可以解释机理的概率模型,已经彻底宣告失败,这里我关心的是算法最可能推荐什么,而不需要非常清楚地推荐的过程(因为算法本身极其复杂,简单的模型不可能准确解释机理,概率模型有利于人理解机理;文章关注的也不是算法的机理,而是算法的影响),更好的办法是通过训练数据找出最好的预测模型。
来源:中国统计网
CPDA课程海报