dutiyanwang 2015-09-15
此版本为吴甘沙院长亲自确认版,值得收藏!
演讲人|吴甘沙 英特尔中国研究院院长兼首席工程师
大数据文摘编辑整理,素材来自经管之家(bbs.pinggu.org) 组织“中国数据分析师行业峰会”。
亲爱的各位同仁,各位同学,早上好。大数据时代数据分析师应该做什么改变?我今天的标题是大数据分析师的卓越之道。这个演讲信息量比较大,我讲的不一定对,即使对的我也不一定真懂了,所以请大家以批判的方式去理解。
这是一个典型的数据分析的场景,下面是基础设施,数据采集、存储到处理,左边是数据处理,右边价值输出。连接数据和价值之间的是知识发现,用专业词汇讲,知识就是模型,知识发现就是建模和学习的过程。问题来了,大数据时代带来怎样的变化?首先数据变得非常大,数据是新的原材料,是资产、货币,所以大家对价值输出的希望值也非常高。但是大数据洪流过来,我们原有基础设施都被冲的七零八落。所以过去十几年事实上业界都在做大数据基础设施,做大规模水平扩展,PC级服务器的容错,MapReduce简化编程模型,对数据密集型应用提高吞吐量,因此有了分布式操作性能,磁盘闪存化,接着内存计算,内存需要越来越大,呼唤闪存内存化,更灵活的编程模型,最近又有了像深度学习那样的计算密集型应用,所有这些都需要基础设施的升级。
改变思维方式
基础设施升级了,知识发现的过程是不是能自然升级?我跟大家说天下没有免费的午餐。今天的主题是基础设施已经改朝换代了,我们分析师也应该与时俱进,体现在三个方面:第一、思维方式要改变;第二、技术要提升;第三,分析的能力要丰富起来。
首先,说一下思维方式。改变思维方式最重要的就是改变世界观,这个就是牛顿机械论、确定论的世界。有个所谓拉普拉斯恶魔的说法,如果在这个时刻宇宙当中所有原子的状态都是可确定的话,就可以推知过去任何一个时刻和未来任何一个时刻的宇宙状态。虽然爱因斯坦发展了经典物理,但本质还是确定论,决定论,他的经典说法是“上帝不掷骰子”。但是今天的世界事实上是不确定的,世界是基于概率的。大家都知道薛定谔的猫,猫在盒子里可能同时是死的,也同时是活的。但是一旦打开这个盒子,它就变成确定了,要么就是真的死了,要么确实活着。所谓”好奇心害死猫“,打开盒子,有一半的概率杀死这只猫。
这就是海森堡的测不准理论,你的观测行为会改变被观测的现象。很多大数据事实上也是测不准的,像Google流感的预测,大家可以看在2013年1月份的阶段,Google预计的流感情况远高于疾控中心实际测到的数目。所以《科学》和《自然》就发话了,《自然》认为是大数据测不准,《科学》说这是大数据的傲慢。我们常常说舍恩伯格的大数据三大理念,要全集不要采样,拥抱混杂性、无需精确性,要相关性、不必有因果性。我提醒大家,这些理念是适合吹牛用的,分析师千万不能把这个当作绝对真理。在这个案例来,即使Google那么牛也拿不到全量的数据。纵然考虑了混杂性,Google融合了关键词和疾控中心的数据来调整模型,数据还是不精确。另外,相关性对于商品推荐确实够用了,但涉及健康的问题还是要究其原因,要有因果性。大家看这个预测的过量就导致了局部时间和地区内流感疫苗准备过量,而其他时间/地区形成了短缺。
所以数据的方法论需要升级。
这是一个典型的数据分析的流程,可以先由假设采集数据,也可以先采集了各种数据,然后从中发现假设。有了数据以后下一步就要做数据的准备,数据准备往往是最花时间的。然后分析,分析完了要考虑怎么解释这个结果。大家知道,数据分析有两种目的,一种是把结果给机器看,像精准营销、商品推荐等,不需很高的可解释性。另一种是给人看,需要可解释性,有时甚至为了可解释性可以损失一些精确性,比如美国的FICO积分计算模型,只有五六个参数,一目了然,具有可解释性。对分析结果的另外一个处理就是验证,从随机对照实验到现在的A/B测试。
到了大数据时代这个方法论要怎么改变呢,首先我们说测不准,所以需要加一个反馈循环,我们循环反复地验证假设、收集数据。数据7天24小时进来,里面有很多噪声,有些随机噪声是可处理的,还有一些是系统噪声,可能因为污染的数据源,就要特别的数据准备阶段。接着我们做数据分析需要实时,交互,要快,这样才能赶得及世界的变化,最后的解释和验证同样需要升级。所以,下面我一一来做阐述。
一、假设
首先看假设。大数据思维需要我们先有很多数据,然后通过机械的方法发现其中的相关性,将其变成假设。但有时候相关性确实太多了,弱水三千只取一瓢饮,这里面就需要我们的直觉。直觉就是不动脑筋、在潜意识里完成的逻辑推理。怎么训练直觉?就是像读侦探小说和悬疑小说里面的推理过程。如果说这样的推理过程只是模型,也还需要数据,需要很多先验的知识。这个知识怎么来呢?首先就是广泛的阅读。第二个,跨界思想的碰撞,跟很多人聊。这两个是背景知识,还有一个前景知识,就是上下文的知识、融入到业务部门。我们希望把数据分析师放到业务部门,和业务人员融入到一起,这才能防止数据采集和分析脱钩,数据分析和业务应用的脱节。
二、数据采集
第二个,数据采集,这里我非常夸张地强调“数据!数据!数据!”为什么?因为大数据碰到的第一个问题就是数据饥渴症。我们有一次跟阿里聊,他们说也缺数据,只有网上的销售记录,而缺乏无线的数据。所谓无线的数据就是物理世界的行为,你在网上买了一个东西,前面发生了什么?用户的意图是什么?怎么形成的?他们也没有。所以我们强调全量数据,而不是采样的、片面的数据。
同时现在我们企业已经从小数据到大数据,从数据仓库转为Enterprise Data Hub或Data Lake,意味着什么?有人说传统数据仓库的缺点是数据结构变化太困难,太贵了,其实更本质的是对于数据仓库来说,是有问题,然后根据这个问题搜集和组织数据,数据结构是确定的。从现在的EDH来说,需要先把各种原始数据送进来,然后不断的提问题,相应地改变数据表示,这就是一种新的思维。
我们需要大量的外部数据源,从social media,到开放数据,到从data broker/aggregator那儿买。处理的数据从传统的结构化数据到半结构化、非结构化数据。传统结构化数据是什么,交易数据。而现在我们企业里面经常面对的是两种非结构化数据。
第一个就是日志分析,大家知道大数据第一家上市公司Splunk就是从事这一业务。
第二个就是文本数据,现在我们经常听说情感分析,topic modeling,呼叫中心需要的问答系统,甚至是最新的交互式对话系统,都需要文本分析。
第三个是从文本到图片再到视频,需要计算机视觉、模式匹配、语义分析。
第四个是很多数据都是有时间和空间的标签,比如微博,物联网数据,怎么保证数据的时空一致性,怎么能够实时、流式地处理这些新的数据。
最后,还有很多数据是网络数据和图数据,比如说社交网络,我们怎么来通过PageRank这样的方式判断个人的影响力,怎么来判断网络的控制中心在哪里,都需要一些新的处理方式。
是不是前面说的这些都是合理的?我这里连用了三个问号。
比如说要n=all全量,事实上是不可能采集到数据,有时候你也不必要有全量数据。
首先,是不是数据更多就越好呢?未必。我们拿中国作为一个例子,新疆、青海、西藏、内蒙古占的面积是我们国土面积的一半,我们采集这四个地方的数据,是不是比采样更能代表中国呢?未必!
第二个是“原始数据”是不是一个矛盾修辞。因为原始数据可能并不原始、客观,它受到采集人文化、背景、价值取向的影响。
第三,大数据里面的噪声很多,但是有时候在数据里面信号看上去是噪声。比如说大数据要求倾听每一个个体的声音,提供个性化服务,但有一些个体的声音是非常少的,他们在长长的尾部里面,但是你不能忽略它。
还有,采样本身是有偏差的。有一个经典的故事,二战的时候对飞回来的战机进行分析,相应地对要害部位加固。人们发现机翼上有很多弹孔,那是不是加固这个地方很重要?人们没有想到的是那些没能飞回来的战机并没有采样到,因为击中座舱的都坠毁了。因此加固座舱才是最紧要的。大数据的采样偏差尤其体现在它有各种子数据集,而每一个数据集都采取不同的抽样规范,缺乏全局的控制,这样就有采样偏差。
同时你要考虑数据权利的问题,这些数据是属于谁的,有没有隐私问题,使用许可是不是有范围,是不是按照许可的范围做了,我能不能审计,知情,这些都是数据的权利。未来数据交易的话还要解决数据的定价问题,这是非常困难的。
当我有了数据以后,需要生命周期的管理,大数据生命周期管理非常重要。一是provenance,英语原意是出处或者是来源,但现在把它译为世系,或数据的的家族谱系,它最早是哪里来的,它又移动到什么地方,经过什么样的处理,又产生了什么样新的子后代。
另外,现在我们强调数据永不删除,是不是有这个必要?我们发现其实很多数据没用以后,就应该删除。例如,有个互联网公司用用Cookie采集了鼠标移动踪迹的数据,来了解用户的浏览行为。但是过一段时间网页的格局和内容都变化了,这些数据还有什么用呢?应该删除掉。所以并不是说数据永远都要保存。但是,另一方面反映了,数据来了一周之内,一个月之内必需要分析,不然就永远不会再碰它了,失去意义了。
三、数据的准备
下面讲数据的准备,大数据的质量非常重要。要混杂性、不要精确性是有问题的。一个非常著名的研究机构做了统计,询问大数据分析师什么是你single biggest problem,回答”数据质量“的人数是“数据大”人数的两倍。
面对大数据,要有“有罪推定”,认识到大数据本身就是有噪声的,有偏差的,也是有污染的数据源。你的目标是建立一个模型,一方面对噪声建模,另一方面对信号建模,这个模型恰到好处得复杂,太复杂了模型会“造出”数据当中并不存在的结构。
一般的处理方法有两类:一是数据清洗和数据验证,二是data curation数据治理,和wrangling。
前者关注的是数据是否错的,数据有些是丢失的或者有些数据是相互矛盾的。我通过清洗、验证的方式把它做出来,大数据非常大怎么做清洗呢?有没有可能从一小部分子数据集开始做清洗,进而推至全部?有没有可能把整个过程自动化,这是研究的前沿。另外一个前沿是数据的清洗能不能跟可视化结合起来,通过可视化一下子发现了那些不正常的地方,outliers。通过机器学习的方式来推理不正常现象的原因,是哪些字段出了问题。
对data curation和wrangling,它的目的是把数据转化为合理的表示、以便分析。我觉得现在最热的研究课题是,你怎么能够通过自动学习的方式来发现非结构化数据当中的结构,把entities解析出来,并且对数据做必要的规整和转换。比如你怎么能够把哪些看似不同、实则相同的数据normalize。比如说有些的字段是IBM,有的是国际商业机器公司,有的是蓝色巨人,你能不能将其归为同一个值。
大数据的特点是大,稀疏,高维,异构,长尾。数据准备最重要的是把大数据转变为合理的数据表示,使得它便于分析。
数据表示首先考虑怎么能够降低计算通讯的代价。
大家看我们大数据经常是稀疏的,所以可以采用稀疏数据结构。大数据太大了我们有没有可能压缩?大家知道我们原来的数据仓库,一个表可能有成千上万个列,最大、最麻烦的问题就是我要给数据表增加列。而通过列存储的方式可以使增加列变得非常简单,而且计算更有局部性。
还有一种降低计算代价的方式就是近似计算,比如Bloom filter、hyperloglog,通过降低时空复杂性,虽然误差稍微增加几个百分点,但是计算量和内存占用下降几个数量级。
下一个是怎么能够降低统计的复杂性?大数据经常是高维度数据,怎么办?通过降维和聚类等方式能够降低它的复杂性。
另外大数据还是需要采样的,大家知道随机性采样,并不代表用一个均衡的概率采样,可以对不同的组采用不同的权重采样。但大数据常常要非随机采样。因为有些个体你根本不知道在哪个组里,如果有人吸毒,ta肯定不会说;人们的技能也没有确定的分组。你可能需要一种新的采样的方式,比如说雪球采样,你先从隐藏组找到一些种子,然后再慢慢的扩大,像滚雪球那样,这是非随机抽样。另外,对于信号稀疏的数据集,可以采用compressive sampling,你能压缩得很小,但还是可以恢复原始数据。
我想请大家注意,数据分析师不能只考虑数据表示、模型的问题,最终还是要考虑计算是怎么实现的,响应地选择最好的表示。比如说数据并行的计算就用表或者是矩阵,如果是图并行,我就要选择网络和图的格式。
最后,我想请大家关注UIMA(Unstructured Information Management Architecture),这个框架能够帮助你来保存各种各样数据表示,以及跟数据分析对接。IBM的沃森在人机知识竞赛中获胜,它就是采用了这个框架。
四、数据分析
我们再看分析阶段。
数据分析师真是越来越不容易。最早只要懂数据库就行了,数据分析就是查询,接着要学统计学了,比如做参数的估计、假设的验证、模型评估等。接着要学机器学习,所以我们说数据挖掘是这三个学科的交叉。机器学习和模式识别是从人工智能脱胎出来,随着处理非结构化数据的要求,这两样也要学了。慢慢的在数据挖掘外面又包了一层KDD,knowledge discovery和data mining。现在又有最新的神经计算,比如神经网络形式的类脑计算算法,sparse coding等。尤其重要的是,这些工具都要跟相关的计算的模型和架构对接起来。数据分析师必须是持续学习的。
我们数据分析师还是有些装备的,这是现在最流行的四种分析的语言,SAS,R,SQL,还有python。学会这些基本可以覆盖两类分析任务,简单的基于SQL的查询分析,以及复杂的、往往是基于线性代数的分析计算。当然,hard core的分析师可能还需要学习JAVA、Scala这样的语言。这个可能还不够,现在你用D3这样的可视化库,必须学习JAVAScript,所以需要来更新我们的装备。但是有人质疑这些装备都是为传统的数据分析师准备的,大家不要担心,因为在这些语言下面都已经有了大数据的基础设施,比如SQL,各种SQL over Hadoop,另外R、SAS都可以跑在MapReduce和Spark的大数据基础设施上,就连Python也与Spark能够很好地接起来。
更方便的是现在所有做基础设施的人都在考虑一个词,Machine Learning Pipeliine,最早是scikit-learn里出现的,现在Spark都在往这个方向发展,把机器学习的整个流程在pipeline上一站式完成。而且现在更多的东西都可以放到云里做了。07/08年的时候Cloudera其实就在考虑是不是能把大数据在云里做,你看它的名字就是这个意思。但那时条件还不成熟,现在很多中小企业都愿意用基于云的大数据基础设施了。原来on premise的大数据基础设施像上面这样,各种工具,很多都是拿动物做吉祥物的,我们开玩笑说要开整个动物园,太麻烦。现在所有的这些模块都部署在云里,所以这给我们带来了很多方便。
说完了工具,再说分析模型。
统计学大师George Box说,所有模型都是错的,但是有些是有用的,关键是选择什么样的模型。
以赛亚柏林有个比喻,有一种人是刺猬,一招鲜吃遍天,还有一种是狐狸,一把钥匙开一把锁,以更开放的态度处理分析、选择最合适的模型。一个技术用到极致是非常厉害的,像贝叶斯,有个很著名的分析师叫Nathan Silver,写《信号与噪声》那个书的,成功地预测美国大选、奥斯卡,就是把贝叶斯用得滚瓜烂熟。但是,还是需要根据问题,选择合适的模型和方法。
模型的复杂度必须与问题匹配的。这就是所谓的奥卡姆剃刀原理,有多种模型能解释数据的时候,就选择最简单的一个。
我们现在做数据分析碰到两个问题:一个是过拟合,还有一个是数据量大了以后,模型没办法提升。所以大数据的模型必须在数据增多时获得更大的边际效益。
有一个很著名的科学家,叫Peter Norvig,他写《人工智能现代方法》一书,好像是吴军博士在Google的老板。他说,简单模型加上大数据,比复杂模型加小数据更好,这个对不对?这个在很多情况下是对的,但是并不完全对。他的所谓简单模型n-gram,其实特征是非常多的,每个单词就是一个特征,所以这个模型其实不简单,所以大数据能够带来不可名状的提升效果。
Ensemble是另一种解决单个模型与数据量不能匹配的办法,做模型的组合。沃森电脑采用了这种方法,在很多数据竞赛中大量使用了ensemble,大家可以参考Kaggle和Netflix竞赛里的博客和讨论,了解一些技巧。
一般来说线性模型适用小数据,非线性模型适用大数据;带参模型适用小数据,无参模型适用大数据;discriminative模型适用小数据,generative模型适用大数据。但是有个问题,那些非线性模型、无参模型等计算复杂度可能比较高,怎么办呢?针对高维、稀疏的数据,可以考虑混合模型:把线性和非线性,带参和无参结合起来,分别应用于不同的维度,这样又能够提升大数据的效用,又能够解决计算量的问题。
我刚才讲到长尾信号非常非常重要,我们现在不能忽略长尾信号。传统的分析很多都是基于指数模型、指数分布假设,就是割尾巴,低频的信号都被过滤掉了。那怎么能保持长尾上的信号呢,可能需要通过分级训练、做模型组合、采用一些新的概率图模型、基于神经网络的模型。
分析要快,对于交互查询,60秒完成跟6分钟完成难道只差几倍?不是的,一旦延迟超过某个阈值,数据科学家会改变行为,他们失去一些创造力。
针对时空的数据,需要流计算,数据流过的时候完成分析,甚至未必要存下来。
现在机器学习强调的在线学习,增量的学习,流式的学习,数据一边进来一边学习,一边更改模型,一边生产部署。
最后当你的数据又大,又需要快的时候,你不懂系统是不行的,你必须懂系统,要考虑并行化,数据并行,模型并行,任务并行,并行要考虑一致性,如果数据直接有依赖、不能很好并行的话,考虑采用陈旧的数据,虽然损失精度,但可以加大并行度,靠更多的数据把精度补回来,这里的副作用是收敛变慢,因此要考虑是否合算。
你必须与基础设施的人合作,做系统调优。前一段时间与Databricks的Reynold讨论,讲到现在分析任务优化到极致,应该把所有的随机访问都放到CPU的cache里,磁盘上只有顺序访问。又比如现在大数据栈都基于Java,内存大了有garbage collection的问题,所以要考虑怎么减少单个任务heap的大小,把不大改变的数据放到内存文件系统里。
深度学习已经进入了数据分析师的兵器库。它最早是语音识别DNN,到图像理解CNN,再到向量化表示的自然语言理解,现在RNN、LSTM很火。下面是特化到不同的领域里,比如医学的图像分析。
以前深度学习完成的是人可以做的认知任务,下一步会进入非认知任务,像百度用来做搜索广告,Netflix做深度学习推荐,以后做药物的发现,甚至我们现在做机器人,都有深度学习的应用,比如深度的reinforcement learning。
大家的福音是现在深度学习很多的代码都是开源的,我们去年的时候虽然有Caffe,但还是花了很多力气去做各种各样的模型,像AlexNet、VGG和GoogLeNet,今年所有这些模型全部都开源。下一步的发展趋势是开放协作的计算机科学,值得关注GitXiv,这时各种开发、协作工具集于一身,论文在arXiv上,开源代码在GitHub,还有各种链接和讨论,这种开放极大降低了技术的门槛,让知识更快传播。有了Pylearn2, Theano和Caffe,现在哪个分析师说不会深度学习都不好意思。
还没有学Sparse coding的话大家可以看一下,这个是我从哈佛的孔祥重教授,HT Kung,那里拿来的。它跟深度学习有点沾亲带故,本质上还是一个数据表示的问题,与特定的分类器结合,展现了极大的能量,这里列出了很多的应用。
还有数据标注的问题,这张PPT是基于吴恩达的文章,列出了几种新的思路。大家注意橙色背景的都是标注数据,最上面是监督学习,你要分别有大象和犀牛的标注数据,才能认大象和犀牛。接着是半监督学习,一部分标注的大象/犀牛数据和一部分非标注的大象/犀牛数据结合起来学习。第三章是transfer learning,就是在其他地方学到的东西,能够在这里举一反三,你看这里试图利用羊和马的标注数据来帮助识别大象和犀牛。最后是self taught learning,比较神,一部分标注数据,加上另一部分完全不相关的数据,号称也能帮助学习,但这块最近不大说了。
在机器和工具不断进化的过程中,人的角色在变化,前一段时间王煜全老师提出一个概念叫human machine intelligence,就是人利用机器和工具来提升智能的能力。数据分析师要懂机器,懂工具,要跟工具更好的配合,而不是一味的此消彼长。
原来机器学习最重要的就是特征学习,很多人做特征工程,但一段时间以后边际效益就不行了。现在无监督学习,深度学习,可以帮助你学习特征,而且很多分析和可视化工具开始自动化了。那么你怎么跟它工作搭配,能够获得最好的效率呢?exploratory anlaytics/可视化是一种方式,你一边在利用工具获得一些结论,一边又据此重新提出问题,循环往复,这是纯机器完成不了的。
另外一个趋势是大规模的人跟人,人跟机器协同配合。
比如算法可以外包,Kaggle上让其他人替你完成。
你可以众包,比如现在大量数据标注都通过众包方式完成,CrowdDB通过众包解决数据归一性这个DB-hard的问题。
还有协作分析,现在开放数据,光开放还不行,还要允许在这个数据上进行多人协作分析,所以要对数据进行版本的管理,对多种语言序列化支持,比如DataHub。
还有现在所谓的人类计算,现在最有名的是Duolingo,这是一个大众学习外语的平台,有趣的是,你在学语言的过程,也是对互联网进行翻译的过程,100万个用户学习80个小时,就将wikipedia从英文翻成了西班牙文,大家可以想象这种力量有多强大。
五、解释和验证
最后,就是解释和验证。现在分析师所学要从STEM到STEAM,STEM是Science, Technology, Engineering, Mathematics, STEAM多出的这个A是art。今天的大会标题是要懂技术,也要懂艺术。
艺术不只是这种优雅美观的可视化,还有一个很重要的就是讲故事,你有了分析结果之后怎么讲出来。
比如说啤酒加尿布,它就符合了讲故事的3D:戏剧性Drama、细节Details、参与这个对话的感觉Dialogue。当然啤酒加尿布,这个案例是编出来的,但是它包含了这个story telling的精髓,所以它马上传播出去了,它的启发性使得更多人愿意去投入数据分析。
魔球(电影Money ball)也是这样,用一个精彩的、抑扬起伏的故事讲述数据分析怎么来改变棒球运动,但是它也没有说出来的是,其实很多分析工作是球探做的,有些非客观的因素,像意志力,像抗压力,在当时的情况下由人做更合适。所以,故事要做适当的加工,源于生活高于生活。
讲故事的唯一目的就是像TED倡导的,发现一个值得传播的idea。作为分析师,你还要清楚你的idea是不是真正值得分享。比如Target发现未婚少女怀孕的事情,确实是一个不错的数据分析案例,但是从隐私和伦理的角度有点cross the line了,传播未必是好的选择。还有像Facebook做控制情绪的实验,还有Uber从午夜叫车的数据分析一夜情,都不是好的故事,值得分享的故事。
无论如何,我还是想强调好的讲故事能够使分析事半功倍。
最后,我认为数据分析流程需要更加丰富。首先,我们希望能够把大量的分析案例和方法文档化,能够做一个开放的数据库。光开放数据还不行,要开放数据分析的方法和实践,这样知识能够更快、更广泛地传播。
另外,我们前面讲的很多是归纳推理,其实实际工作中还有演绎推理,典型的方式是仿真和模拟。根据已经存在的模型,加以一些假设和初始数据,就可以通过模拟来预测和处理没有发生过的事情,比如灾难发生时的疏散,特定事件下的交通情况等。
这是最后的总结,现在我们的大数据基础设施已经改朝换代了,我们的数据分析师,我们怎么来改变我们的思维方式,怎么来提高我们的技术,怎么来丰富我们的分析能力?这是需要我们不断思考的问题,谢谢大家。