#60 与丁磊聊机器学习和数据科学
本文是 Teahour 第 60 期 『与丁磊聊机器学习和数据科学』 的录音文本,欢迎大家订阅 Teahour,iTunes URL 是 http://itunes.apple.com/cn/podcast/teahour.fm/id608387170。Android 用户可以使用 AntennaPod 来订阅。
Part 1 - Data Science 的前世今生
Kevin:大家好,欢迎再一次来收听我们 Teahour.fm 的节目。今天是第60期,是由我- Kevin 和玎玎来主持。今天我们邀请来的嘉宾是丁磊。丁磊,你好!
丁磊:Kevin,玎玎,你们好!
Kevin:丁磊是 Paypal 公司的研发经理,负责电子商务和在线广告大规模数据系统。今天我们请来丁磊是要讨论大数据和机器学习方面的题目。丁磊,先来给大家做个简单的自我介绍吧。
丁磊:非常谢谢邀请我到这里来讲讲我自己的经历和对它的理解。我自己的经历就从我对它的学习和研究开始说起吧。我一直对这方面很感兴趣,大学毕业以后我就去读了机器学习的博士。当时主要做的东西是跟计算机视觉和多媒体相关的问题。例如,如何从图像上来识别问题,视频当中识别人物之间的关系这种比较研究性的课题。大概在四五年前,我进入到工业界,广告和电商,以及营销领域,一直在这个领域里面工作到现在。现在的我个人的职位是在 Paypal 里领导一个数据研发团队,我们就是做一些电子商务和营销方面的数据产品,研发如何从数据中提取价值,来增进客户的体验方面的工作。
Kevin:我觉得大数据这个话题是近期非常火的一个话题,很多公司都在这方面有很大的投入。那么丁磊,你能不能先给我们介绍下大数据,或者叫 Data Science,数据科学整个领域的一些东西,比如它的历史,要解决的一些问题,它有什么分支等等?
丁磊:大数据,或者叫 Data Science ,我觉得基本上是同一个东西,是从不同的领域来叫它。如果是从数据本身是非常大的,你可以叫它大数据或者超大数据,极大的数据。数据科学更像是从 science 的这个程度来看这个问题。因为你的数据一旦大了,不但是有很多工程上的挑战,同样有很多 science 上的挑战。所谓 science 就是你如何从这些数据当中发现规律,从这些数据当中提取价值,然后如何把这些价值用到产品中去。这不是一个简单的过程。这个领域非常大,如果我们真的想要聊这个话题可能要讲很长很长时间。我就从我自己的一些看法,从几十年前开始讲起,看这个是怎么一步一步进化过来的。
丁磊:其实它是在过去三四十年里,一些也不是特别相关的领域里面的子领域,一起通过不同的途径进化才有了今天的 Data Science 。上个世纪六七十年代的时候,人工智能显然不是今天的完全意义上的 Data Science 或者是机器学习,但是有很大的交集。好比上个世纪六七十年代,你们肯定听说过知识系统或者专家系统的这个东西,对不对?
Kevin:好像有一个叫神经网络的东西挺火的概念,是吧?
丁磊:神经网络可能比那个稍微后一点。这个知识系统是上个世纪六七十年代,一些著名的学校、研究机构,发明了一些大规模的知识库和专家系统。在这些人工审下来的知识的基础上进行推导演绎,他们觉得这个好像能解决很多很多的现实问题。当时确实火了很一阵子。但是由于这些系统本身的局限性,导致它并没有很大规模的应用到实际当中去。这些东西在很多学校,在研究机构很多方面受一些资助方面的影响,后来这个事情进展的不好。到上个世纪八十年代,神经网络火了好一阵子。神经网络在当时有一个比较大的突破叫做反传算法,这个反传算法能解决很多优化问题。一开始不是特别好解决的神经网络或者没有理论依据的神经网络突然变得有理论依据了,而且能够比较工程化的解决出来了。但是当时个人消费、电子类、计算机远远没达到那个程度,所以很多东西就停留在实验室或一些比较原型的系统中,并没有让很多人都用到实际生活中去。想想看上个世纪八十年代,可能有电脑的人都不多。很难想象有什么人工智能的产品能够用到人的生活中去。这都是随着时代大潮来推进的。
Kevin:神经网络解决的是解决的一个什么样的问题?
丁磊:神经网络现在又改了一个名字叫深度学习。
玎玎:对,Deep Learning。
丁磊:Deep Learning 实际上就是一个分类或者识别算法。只不过它的结构更像是一个人的神经网络,其实是一个人的神经网络的一种模型。用这种计算的模型能帮你识别它的图像上是一个人或者是一个其它的物体,叫神经网络。它可以用来做识别。比如说,如果你有一个手写识别的 pad ,有可能它的算法就是神经网络。它通过识别你的笔画来识别出你写的字。而且它会逐渐跟你的习惯、你的风格来改变它内部的神经上的权值,可以更好的识别你的手写。
Kevin:它和专家系统实现的方法不一样,但是解决的问题是相似的,还是专家系统更侧重其它的一些领域?
丁磊:专家系统和神经网络首先它整个构架和技术都不同。专家系统更是基于规则的演绎,如逻辑和代数。神经网络更接近现在的学习算法,它是一个基于数值、代数的结构。解决的问题肯定有相似的地方,也有不同的地方。比如说,专家系统更倾向于规则、演绎、推导方面的,当然也可以告诉你治什么病哪一种方法最好,这是根据规则推导出来的。如果从神经网络的角度出发,就是学习的一个分类器,就告诉你哪一种方法治疗疾病最好。
丁磊:这个时间又往前发展了。到了九十年代,我们都知道发生了什么事情——整个 Internet 火起来了,Google 这些大公司纷纷建立了。这个时候搜索出现了一个非常大的问题。早期的搜索引擎像 Google ,Yahoo 都有很多革新。他们后面其实有很大的推动力,或者说是很重要的组成部分,就是现在意义上的机器学习。虽然机器学习这个东西本身并不新,你可以把神经网络也叫做机器学习,但是九十年代的机器学习就很大程度上是用到 Internet 上。数据量相当大,很容易就是上亿或上几十亿的数据,有大规模的更新,每天、每小时、每分钟都有很大的更新。有几个原因导致这个结果:首先是应用决定的,因为有很多网络基本的需要进行预测,需要进行排序,需要进行个性化的应用,这是一个重要的一个驱动力。第二个是计算资源变得越来越便宜了。可能在九十年代之前计算机是一个相当贵的东西,九十年代初如果家里买台电脑的话,还是一个比较贵的东西。到九十年代后,计算机就变得便宜了,尤其是存储系统变得相当便宜。这两个是让机器学习在九十年代中后期变得 popular 的重要因素。
近期又有一些 technology 方面的革新,导致整个 Data Science 这个领域或者 Big Data 变得比较时兴起来。当时有一个家喻户晓的东西是 Hadoop。Hadoop 是在2008年变得火起来的。2008年之前是一些大公司包括雅虎还是大规模的用 Hadoop 的机群。因为开源导致 Hadoop 有了一个 community 。有很多人都来写,来 commit 代码。Hadoop 这个分布式的计算平台变得非常的热门起来。因为这个因素就进一步加强了机器学习包括整个数据处理和数据分析这个领域变得更加主流。机器学习原来是一个在实验室中的东西,但是由于数据处理能力的逐渐提高,尤其是 Hadoop 出现以及变得时兴以后,数据处理包括机器学习变得越来越容易了,门槛越来越低了。这也是很重要的一个原因。很多人都可以去做,整个这个社区变得比较壮大。越来越多的应用,尤其是企业级应用越来越多,也在用 Hadoop ,也更新了 Spark。Spark 在2013年左右变得很热门。用这些平台做的这些应用和分析逐渐产生了真正的商业价值,使整个领域变得非常的热门。
Kevin:这个 Hadoop 还有 Spark 我们一会儿再详细谈一下。
玎玎:我们现在平常可以看到很多大数据的应用出来。大数据在我看来越来越像一个 buzzword,是纯商业上的。然而,大数据到底是什么,它是为了解决什么问题?
丁磊:大数据具体解决的问题是一个需求产生的。很多公司因为他们的商业模式积累了很多的数据。他们想从这个数据中提取价值,来更好的给消费者服务,导致必然要在大数据上建立这些企业级的应用。举个简单的例子,一些推荐系统,一些个性化的网页,都是为了让客户体验变得更好。但是如何让客户体验变得更好,这些都是通过数据来驱动的,就是所谓的大数据,或者说是数据科学。
玎玎:你可以把大数据的应用划分为几类来介绍一下吗?
丁磊:大数据的应用大多数还是企业级的,即企业来建造一个应用的平台,在上面进行数据分析,进行大数据的优化。企业级的才有那么大的数据。如果要具体划分的话,整个生态系统分几类,
-
数据公司,专门做数据平台的,像现在比较火的 Databricks 是做 Spark 的,提供 Spark 的平台,原来的 Cloudera 提供 Hadoop 。甚至包括一些做机器学习的人,他建立了一些公司,比如说 Graphlab,提供了一些基于图的机器学习的算法平台。这些是纯做平台的公司,不是在一个 Industry 的垂直领域。
-
做具体的 Application 的公司。做 application 的公司,因为我个人背景的原因,我接触的大数据集中在广告电商这块。这些公司相对来说数量比较多,需要用到很多大数据的应用。所以你可以说它们是在一个垂直领域的大数据的平台。电商领域也是这样的。现在越来越多在传统领域都想建立大数据,甚至是在保险做广告方面的有很多广告平台公司金融公司包括医疗信息系统公司,都想建立大数据系统的应用。但那些相对于广告和电商才是刚刚发展起来的领域。
Kevin:我们现在讲的大数据,最近几年的概念,比如说商业、智能、BI、数据分析甚至统计上的很多东西都已经有很久了。我们现在讲的这个大数据和以前意义上的大数据是一个什么样的关系?
丁磊:很多人都对数据科学都对这个名词很困惑。甚至有的时候开玩笑会为什么要叫 Data Science。首先,因为我们找不到更好的名字。你叫它数据处理不只是数据处理,叫他机器学习,它也不只是机器学习。现在意义的数据科学包括了很多成分,而且这些成分在过去存在的空间比较小。首先,它包括了所谓的 science,统计、machine learning 这些东西,一些分析方面比较科学化,不是完全机器学习的东西,而是一些比较有理论依据的东西。第二方面是在工程实现上,也就是刚刚我们所说的 Hadoop,分布式系统,包括软件工程的流程。实时系统,大数据系统是工程上的东西。第三,你做某些东西,比如 machine learning ,未必是直接的去改进企业 revenue ,或者是它的 sales ,但是现在大数据的这些应用直接影响了企业的 sales 或 revenue ,甚至它的 bottom line。所以这和 business 结合非常的紧。
总而言之,是三个因素,一个是 science ,一个是 engineering ,一个是 business 。他们这三样结合的很紧,而且你能做出的成效差不多有 Data Science 了。还有一点,Data Science 是非常致力于行动的东西,也就是我们说的洞察都要有行动在上面。如果仅仅是做一个报表肯定不是 Data Science ,而是必须能够去执行,甚至要把程序放到算法中,放到产品中。在这样,它才可能是现在真正意义上的 Data Science 。
Kevin:所以某种程度上,它应该是站在以前的这些工程、研究基础上的,比如像数据挖掘,BI ,可能现在都笼统的划在 Data Science 里面了?
丁磊:可能各个公司定义不一样吧,尤其是比较传统的公司,可能有很大的 BI 部,可能没有任何现在意义上的 Data Science 部门。但是,比较一线的互联网公司,一般都会有一些 Data Science 方面的投资。在这个领域中热度比较高,界限不是那么明显,传统的 BI 也可以做数据挖掘。只不过过去的思路并不是一个可以直接创造利润的工具,可能是个辅助的工具。但是现在这些比较热门的 Data Science 的公司、application 公司,更有直接创造价值的空间。这纯粹去看是在哪一方面创造价值。
Kevin:那在这个领域的从业人员,一般做算法的和做比较倾向于 science 这方面科学类的人和做工程的是分开的还是都做?
丁磊:在一些比较主流的,比如说互联网公司,越来越大的趋势是 science 和工程越来越多的交叉,甚至汇聚到一起。Data Scientist 和 Data Science 的工程师的要求是一样的:要会写机器学习算法,包括实现一些简单算法或者实现一些更加复杂的算法,以及使用一些现有的库,要把这些写到 production 的库里去,甚至要关心整个 production 的流程,这一切跟其它的工程师没有任何区别。只不过你的特长可能是在机器学习方面。
Kevin:丁磊,你刚才说的数据科学分为三个部分,一个是科学方面的分析和算法层面的,一个工程层面的,一个商业的一些洞察。能不能分开给我们再每一个方面再讲一下,这三点在这个领域里面怎么在一起互相互动的?
丁磊:大家谈数据科学,也谈数据分析,在有些地方数据分析又等于数据科学。这本身没什么界限。不同的人可以得到很多不同的答案。一个搞研究的人,他可能觉得数据分析可能是得用微分方程的叫做分析;对于企业中的一些分析员,可能分析就是做一个 excel 报表。分析这个词存在很多的定义。数据分析有八个层次。
-
第一个层次是一个标准的报表,发生了什么事情。比如说月度报表、季度报表。用 excel 就能做出来,甚至用不到 MySQL。
-
第二层是即席查询,也就是 Ad hoc 的查询。比如说,一周内门诊病人的数量。这个报表即席的做出来。应该 MySQL 就可以了。
-
第三层是多维分析。相当于 BI 上面的 OLAP 的分析。分析多个变量之间的关系。比如说,碰到一个商业问题,可以分析出来这个问题在哪里。 哪种手机类型的用户的行为是什么样的。这种叫做多维的分析。这也是一种查询,但可能用一些其他的技术,比如 OLAP 的技术。
-
第四种叫做警报。当一个事情发生以后会告诉你采取哪些行为。这比简单的分析要求更高的东西。
-
第五层叫做统计分析。比如说可以进行一些频域分析,或者回归分析,从数据中提取规律,是一些比较探索性的统计分析的问题。
-
第六种叫做预报或者预测,预测一个商品在未来的需求量。比如说进行一些时序分析或一些更高级的统计分析。
-
第七种叫做预测建模。这是更加像我刚刚所说的机器学习,比如说给他展示某些广告以后,他会进行哪些行为。这些东西就是预测建模。
-
最后一种叫做优化,如何提高 ROI ,提高投资回报比。这个东西不光要能预测事情发生的规律,还得能优化它 ,从而使企业的利润更好,使 ROI 更高。这就是它说的最高的一个层次。
Kevin:我觉得这个讲的比较抽象,能不能请你给我们讲几个详细的案例,把那些东西展开在一个案例中具体的说一下。
丁磊:我可以按照你说的把这三点给展开,再举案例。首先,最重要是商业洞察。要是想做好一个企业级的数据科学应用,必须要有很强的商业洞察。这需要在业界的一定经验积累,跟不同背景的人交流,就可以获得这方面的知识。商业洞察这本身就是一个很抽象的东西。我觉得有三点东西可能比较有趣。第一点是观众。你需要把你的产品、你的服务介绍给别人。比如你想营销你的网站,你肯定对哪些人是你的目标客户感兴趣。商业洞察就是告诉你怎么去找到你的目标客户的过程。并不是所有人都对你的产品同样感兴趣。或许你的产品一些青少年更感兴趣,或许你的产品一些年纪大的人更感兴趣,或许一些收入高的人更感兴趣。从数据科学的意义上来说,你可能需要把这些人的这些特征都提取出来,然后通过建模的方法可以学习出模型。用这些模型可以从巨大的人群库中找出你需要去向他营销的人的。再比如说,现在的一些广告营销平台,它可以帮你去定向一些特征的受众。你跟广告平台合作,你可以跟他说我想要哪些年龄段,哪些兴趣,有哪些特征的这些数种,然后可以把这些广告投放给他们。
Kevin:你讲的这个是不是说,我必须知道了我这个产品大概会对哪个类型的人会感兴趣。如果说我不太清楚,我想让你告诉我,我的产品什么样的人会感兴趣,这有办法么?
丁磊:这些所有的数据都必须要有数据来解决,如果你没有数据,这就是市场研究要做的问题。市场研究可能会采访一些客户,然后从中提取他们的特征。我说的受众是根据你现有的一些数据,来发现哪些用户更可能成为你的受众,哪些用户更不可能。一般来说,有一定的规模以后你才能做这些分析。
Kevin:它的分类已经是做好的,你分析的时候可以沿着这些分类来进行考虑。有没有可能存在一个潜在的分类,比如说不是按照人群的分类,其它的我现在还没有意识到的一种分类,但是可以通过一些算法来发现这些分类?
丁磊:一个公司运营一段时间以后,会有一些消费者的行为数据,或者有一些其它的注册数据。你可以通过聚类的算法能够分析出有哪些类别,然后根据不同的类别可以制定不同的营销策略。举个简单的例子,基于企业的发展阶段、数据阶段和种类,会有不同程度和不同种类的策略,这些策略都是为了寻找到最适合这个产品的受众,然后从营销方面来向他们投放广告、优惠券,让他们来能够跟企业进行交互。
玎玎:但是这整个过程已经脱离了 business insight 的问题。你涉及到的是你做的比较后面的一些做预测的东西。
丁磊:我当时想把这个东西说的抽象一点,但是发现抽象以后你们会有一些问题,所以我把后面的这些过程都说出来了。
Kevin:我们后面可能还有案例,可能会讲的比较详细一点。现在是把一些概念讲的比较清楚一些。
丁磊:第二个是内容。内容也是商业洞察方面很重要的东西。内容是一个很广的词,对不同的 business 他的意义是不同的。比如说 Netflix 包括国内的这些视频网站,它的内容就是这些向用户展示的本身的内容。不同的用户对不同的内容感兴趣。这就是这种视频网站如何跟客户交互的问题。电商网站又有一些其它内容的不同。内容就是一个如何去个性化网站的过程。根据内容的好坏,消费者跟你的网站交互的频率、热度都会有区别。这也是一个 business 它要来优化自己的网站或者 revenue 的方面。第三个是策略,如何吸引消费者。如果有些已经有了消费者,但发现消费者有衰退迹象,越来越少在你的网上买东西,你如何把他吸引回来,这就是一个策略的问题。比如说你可以跟他进行一些沟通,一些 Email 的沟通,或者可以给他投放一些你的优惠券等东西。这后面对 business 确实有一些数据科学方面的算法,可以帮他留住他现有的用户,也可以给增进他跟用户之间的交互,让用户去更多的购买,让用户跟商家之间有更良性的关系。
Part 2 - Data Science 在预测分析中的应用
Kevin:我觉得这个部分你可能比较适合,因为你在 Data Science 方面也读了博士,在算法、科学方面比较有长处。
丁磊:做 Data Science 对各方面都会有点理解。我个人是技术背景,在这方面会比较深厚一些。预测分析,或者叫它机器学习,甚至包括统计方面的东西,是处在比较高层次的东西,通常会跟优化想结合。你预测一个变量,你并不是结束了,你是用预测的结果去优化 business ,优化做决定的过程。这就是现在 Data Science 上很侧重的东西。也就是我刚刚所说的第七和第八个层次——预测建模和优化。预测分析包括了这几方面的因素。
Kevin:那机器学习基本上是做预测分析的方法对吗?
丁磊:机器学习是做预测分析的核心方法。但是,纯学术的学习有很大的局限性,跟工业界具体使用的方法还有一定的区别。预测分析这里面有很多业界的经验,一些很特殊的算法,很特殊的模式,是一些纯机器学习不包括的东西。举个例子,uplift ,或者叫它劝服的建模,是一种改变人行为的建模。比如说,你买一个东西,商家要给你进行营销,会给你一个优惠券。他不会对你本身就会购买的人感兴趣。商家更感兴趣的是这些可以被优惠券说服的人。这种说服的建模是在预测建模中是比较重要,但是实际应用中很容易被忽视的领域。这个东西直接关系到营销和广告方面的东西,关系到投资回报比。如果一个人本身就会买,你给他offer优惠券并不会增加你的 ROI 。同样道理,如果一个人,他不管你给不给优惠券,他都会去买,那同样对他进行营销的话,你也不会增加投资回报比。在这种情况下,你最需要去给他刺激、优惠券的人,实际上是你不给他优惠券他不会买,你给他他就会买的人群。你对他进行广告投放的效果是最好的。这就是 uplift ,就是指产生提升的意思。这是在预测分析领域中比较前沿的东西,也是很多公司比较想做的东西。事实上是有点难度的。你不可能给一个人既投放又不投放一个广告,或者一个优惠券。你必须在人群的层次上做 A/B testing 。这是一个预测的 A/B 测试,不是你进行 A/B 测试后去读数,去汇报结果,而是利用A/B testing 的实验构造来进行投放,然后再进行建模的过程,是一个比较 tricky 的过程。好处是,你如果进行了这样的预测,而不是形成了简单的纯学术的东西,你就可以最有效的提高你的 ROI 。这其实是商家和进行营销的团队最应该关系的东西。后面的技术就是预测分析。
Kevin:我想在由这个例子再展开一下。我对算法这个层面比较感兴趣。拿这个例子来说,在统计意义上来讲,它是 supervised-learning ,还是 unsupervised。你是有练习的数据,还是有一边学习来一边分析的。
丁磊:这实际上是一个有尖度的训练,Supervised Learning 。这个 Supervised Learning 不只是一个简单的 Supervised Learning 。简单的 Supervised Learning 只有一组简单的数据和一组简单的模型,你只需要简单的训练就好了。实际上比这个更复杂,uplift 训练过程中需要有两个数据集。一个是受影响的数据集,即在优惠券的影响下的人的行为的数据集;一个是没有在优惠券的影响下的行为。最好这两个数据集的人,是随机的。这两个人的数据集事先没有任何倾向性或者偏差。用这两组之后才能继续做 uplift 的预测和优化。
Kevin:现在我有这两组的数据,是不是做一个 Regression Analysis 来画一条曲线,发现有多少个 variable ,看跟是不是收入高相关度非常大,比如和每天上三个小时的网是不是相关度非常大。
丁磊:其实,你用一组数据训练一个模型,你实际上学的是一个函数。你现在有两组数据,这里现在更感兴趣的是同一个人在两种情况下行为的偏差。如果想讲的更数学化一点,你预期的购买是一个期望值,是一个平均数。在优惠券影响下的期望值和在优惠券不影响下的期望值,分别从这两组数据中,通过监督学习。做他们的差值,这个差值就是你要进行行动的依据。差值越大,投放的优惠券越能产生效果,也就是所谓的 uplift。
Kevin:是对同一个人做 A/B test ?
丁磊:是在人群基础上做的 A/B test 。不可能我既给你投放,又不给你投放。但是可以在人群基础上,在统计上没有偏差的分开。先做这一步,然后再训练模型。
Kevin:同一个人群是怎么定义的是用一个已有的 classification ,我把人群分这些类,通过刚刚说的商业洞察,我知道这个领域人们就分为这几类,有针对的去学习,还是连分类本身都是机器学习出来的?
丁磊:首先,你可以说我拿我所有的客户群做所有的事情;第二,你可以说我已经做了洞察方面的分析,把人分成几个种群,比如说客户群A,客户群B,同样可以在子客户群上做类似的分析。主要还是看你想实现什么样的目标。所有的这些数据科学都是为了实现一个商业目标而做的,提供 ROI 。不管在哪一个群体上做这个东西,通过机器学习、数据科学学习出来的东西,数据科学的模型用在同一个人群上就没有问题。
玎玎:像丁磊刚才介绍的用的 Supervised Learning ,有一个目标是投放 coupon 对购买力是有提升的。但现在的目的是测试到底提升的度在哪里。所以用 A、B test 做两种人群作为 sample ,这两个是随机构建的人群,通过比较来确定影响度是多少,对吗?
丁磊:大致是这样的。我再强调下,这两个人群唯一的差别一个是投放以后的行为,一个没投放的行为,其它的在统计上没有任何区别。通过这两个没有偏差的人群可以最好的学习如何通过模型来预测 uplift 。有了这个东西以后,就可以采取 action 了。哪些人更容易提高价值,通常去营销、去投放广告就会去寻找这些人。这就是在整个营销领域整个业界开始关注的东西。像 A/B test 这种东西,在实验之后读数都有一定的困难。会有很多统计的变量,不是很简单的过程。在事前预测和优化难度就会更大。事前做了之后,同样要在事后读数,可能有上亿个数据点,有上亿的客户,而且每天都会有变化。可以想象这背后的既有 science 又有工程的难度。
玎玎:其实刚刚提到的三个属性的人群。第一个属性的人群是不管给不给 coupon 都是要买的;第二个属性是本来不打算买,给了以后会买的;第三个属性是给不给都不买。那你在训练的时候,会不会把某一种,比如说第一种这种不管给不给都会买的先剔出去,还是都放进去?我觉得这会对这个训练的结果产生误差。
丁磊:实际上是有四种人,还有一种是你给他他不买,你不给他他反而会买。这种人比较少。他可能烦了,他看到你的 e-mail 就烦了,直接就登出来,不用你的 service 了。但是这个意思实际上我举这四种人,其实我们并不是把这四种人给拎出来。通常做机器学习算法并不是完全按照人的理解。人对这四种人的理解可能非常 easy ,但是机器并不是这样学习的。机器只知道差值,所以预测和分析都仅仅是差值,而不会真正把人给分到四个类中去。除非那个 business 真的很 care 这种东西,也许我们要产生一个这种报表,我们会做这种东西。但是从机器学习和数据科学的角度出发,一般不做强行的分类。有经验的人都知道,这会降低预测效果。
Kevin:下一方面我们本来想说一下工程方面,但是前面说的多了一点,我想我们今天进入一下案例学习。想让丁磊给我们举一个案例。
Part 3 - Case Study
丁磊:Netflix 是一个电影租赁网站,在美国这边比较 popular ,他们做推荐引擎做的比较有名。是他们在好几年之前组织了一个竞赛,叫 Netflix 大奖赛。它公布了一些数据集,让大家来做推荐算法。赢了的这个队可以拿到很多钱。很多做机器学习和做数据挖掘的高手都来参加这个竞赛。Netflix 的推荐算法对工业界推动挺大的。在 IEEE Computer 有一篇文章,它大概说了一下他们的推荐算法怎么工作的。Netflix 有一个很大的矩阵,一个是客户的维度,一个是电影的维度。它合并在一起就是一个很大的矩阵。比如说玎玎,你看过五部电影,你在你那一行就有一个不是零的数据,来表示你看电影的时间长度,或者看的次数。这是矩阵在每种信息的表示。Netflix 做的比赛获胜的团队根据这篇文章做的算法是矩阵分解的算法。把巨大的矩阵分解成两个小的矩阵。这就是降低维度的算法。降低度是指把巨大的空间用低维的子空间去拟合,即降维的思想。比如说,你有很多的数据点,在很大的空间中,你用相对低维的空间,比如说几百的上千的,来拟合原来更高维的矩阵。
Kevin:这个降维的目的是工程上太大的数据没办法支持吗?
丁磊:这里降维的更重要的目的提取本真特征的行为。矩阵有特别多的信息,但特征向量基本上定义了这矩阵最本质的东西。这么大的矩阵,分解成两个小的矩阵实际上分解到相对低维的平面上。降维在这里的作用实际上是提取原来在巨大的矩阵中本真的信息,表示兴趣中最核心的部分,可以预测的部分。人看电影的这个行为可能有很多随机的东西,比如我今天听你说了一个电影我随机点了一下,但未必是我的兴趣。预测算法是把这些人本真的兴趣提取出来,然后把这些原来这些很稀疏的矩阵,从 0 的那些项填上非 0 的值。这样可以预测出新的信息,这是这个算法核心的内容。做法就是把它分解成两个小的矩阵,然后把它乘起来,重构成一个原来大的矩阵,你现在这个矩阵就会有很多非 0 的元素,比原来的矩阵要稠密的多。再根据新的矩阵中哪些非 0 的元素,比如对一个人,选取一个预测出来最大的非 0 的值,把那些信息、电影投放给你。根据这些算法,可能那些就是你最感兴趣的。这个是做协同过滤算法核心的算法。通过所有的人所有的电影中的规律,通过矩阵降维,再通过重构原始的信息来预测出本来矩阵中是0,但是它觉得你可能感兴趣的电影推荐给你这样的过程。
Kevin:我觉得你讲的比较学术性,我看我能不能按照我的理解再把这个说一遍,你来帮我纠正一下。你开始讲的是一个原来维度比较高的,可能是 Netflix 给的变量,比如说几点开始看,看过什么样的电影,年龄,收入等等,这些都是维度对不对?
丁磊:其实我说的维度是它的行是它的客户,它的列是电影本身,不涉及内容的部分。事实上,你可以把内容的信息也放进去。但原始的算法更侧重吗,你看了一个电影,那么你对应的是在哪一行,哪一列有一个非0的元素。这样一种矩阵的形式。
Kevin:那这本身就是一个二维的矩阵,那降维还是降成了两个小的二维的矩阵。
丁磊:但是,虽然矩阵是二维的,但是中间每个向量都是超高维的,都是几十万维的。
玎玎:它从稀疏的里面,相对规律比较难找,所以要把稀疏的变成密集的?
丁磊:流程上是这样。比如说你的每一行是你看的一个电影的表示,它都是几十万维的,它都是很高的向量,虽然它不是那些内容向量,但是是你看过电影的向量,这是这种预测算法核心的数据表示。
Kevin:虽然是一个二维的矩阵,但是你每个元素里面可能是一个高维的矢量。包含了很多信息,包括我刚才看了多久等等。
丁磊:可以想象的更简单一点,更人性化一点。比如说可以找出你看的电影的相似的电影。定义这个电影的相似是根据看的电影的人来定义电影的相似度。你看的电影的相似的电影再推荐给你。通过这种数学的方法来实现的,肯定不会用这种算法,肯定是用降维这种线性代数的方法来做。但是如果想很形象一点,可以选择你看过的电影的相似的电影,也就是 item to item 的 similarity 这种过程。当然也有具体算法做 item to item 的相似度的。这种是通过矩阵来实现的,本质上 item to item 的 similarity 是比较相似的,虽然算法本身不同,具体实现起来肯定不同,但可以这样形象的理解。
Kevin:所以你刚刚讲的这种提炼特征矢量也是类似的,这几个电影之间有什么共同的特性。
丁磊:对。很多相似的人看了两部电影,可能这两部电影就比较相似。你不知道电影其它的信息,虽然可以用,但是在这个基本矩阵中可以建立起来的基本的信息。根据哪些人看过它这个信息来分析电影的相似。同样把矩阵换个角度来看,人之间的相似又是他们看过电影的向量间的相似。所以把这个矩阵分解为两个相对低维的矩阵,然后在一个相对于原来的矩阵的向量在一个更低维的空间中把信息重构起来。这个根据矩阵的特征向量等里面的信息是一些比较本质的信息。这相对比较难解释。但是如果你相信特征矩阵向量,同样可以相信那两个小矩阵有你和电影的本真的信息。通过那两个想矩阵再重构成原始的维度,就可以发现有很多非 0 的项就出来了。根据那个非0项的值进行排序,然后选取出最大的投放给一个客户,给他推荐的列表。
玎玎:你现在是二维的话,相当于只是通过用户看过哪些电影,这个电影哪些人看过这些比较 common 的东西。但其实整个推荐领域,有很多其他的影响因子,比如说,历史、时间这些,这是怎么把它映射到整个推荐算法里面的?
丁磊:你说的那些都是可以通过推荐算法来实现。如果我们硬要把它加到我们刚刚说的框架中,我也不知道这种算法应该怎么实现。那篇文章没有讲那么多,只是大概提了一下。这个算法也未必是 Netflix 用的,只是说 Netflix 大奖赛得奖的算法。其实你可以把你刚刚讲的东西变成一个数值放到你的矩阵中去,你最近看的那个值就相对比较高,你两年前看过的,可以随着时间的发展把值变小,逐渐衰减。时间可以放到数字中去。用户的 feedback 几颗星也可以通过某种方式放到矩阵中去。很多信息都可以放到矩阵中去,虽然矩阵未必是唯一的信息表征的工具。
Kevin:还有,这种算法出来之后怎么来评价一个算法的优劣?有的地方可能比较好的评价,它是不是还是需要 A/B test 来说同样的 demographics ,用算法和不用算法的差异是多少?
丁磊:其实所有的在线的东西,最核心的所有的检测方法就是 A/B test 。比如说,你有两个算法的不同 version ,运营一个很大的网站,你可以做一些 A/B test 来分开你的流量,或者随机的流量一个经过算法 A ,一个经过算法 B ,来比较它们的结果。这是最佳的无偏的方法,来测量算法本身的 performance 。
玎玎:所以也是通过 A/B test 来做不同因子的影响的因素是多少,哪些属性可能相对重要,哪些因素是噪音可以忽略的,也是通过 A/B test 来建模找到一个合适的方法,对吧?
丁磊:你如何去测试一个数据科学的算法,这也包括离线测试和在线测试。我们刚刚说的 A/B test 都是在线测试。其实也有很多测试是在离线的情况下做的。一个团队测试 100 个算法,不可能每一个都放到线上去测试。在线下也有很多要做的工作。根据线下的数据集,线下的模拟实验,可以在很大程度上知道一个算法的优劣。虽然不是100%,也不是知道他们特别细微的差距,但是一个算法能不能很大的提升或者会不会让效果变差很多,这种方向性的结论是可以做出来的,即使是在线下的实验中。
玎玎:假设说,Netflix 给了 100 万的数据,我拿了 50 万数据作分析,另外 50 万做预测,这是算线下么?
丁磊:你训练完你的数据,训练中没有用到数据中进行测试,就是一个线下的实验。虽然最客观最没有偏差的是线上实验,但是:第一有成本,第二周期比较大,第三你的算法如果比较不好,相对还是有一点风险的。所以一般来说会先做一下线下的测试,然后把最好的模型放到线上去再进行进一步的测试。
玎玎:如果我要去做推荐算法参加比赛,有哪些工具在功能角度上了来说是可以用的,比如一开始我们讲了 Hadoop 、Spark 之类的,类似于这种做大数据、机器学习的东西?
丁磊:做机器学习的工具有很多。Hadoop 肯定是一个数据处理的很热门的工具。任何机器学习,任何算法分析都要做很多ETL数据处理的过程。ETL肯定离不开 Hadoop 。现在的趋势是 Spark 变得非常的火。Spark 相对于 Hadoop 也有很多优点:
-
首先,可以很有效的利用内存,减少I/O方面的操作,节省很多时间。这是 Hadoop 做的比较差的地方。
-
第二,对于一些循环的算法、迭代的算法,Spark在这方面很强。机器学习有很多算法都是非常迭代性的,而 Hadoop 在这方面做的比较差。Spark 现在有个很强的社区,有很多很好的算法都是开源的,都可以使用。
-
另外,做一些一般的处理,比如说单机上的处理,采用 Java ,Python ,有的人比较喜欢用 R ,或者是 Scala 等,这些语言,都是很好的工具。
Kevin:像 Matlab 现在还有人用么?
丁磊:Matlab 在学术界用的很多,在工业界用的比较少。最大的原因是它太贵了。买个 Matlab 再买个工具箱在美国要将近 2000 美元。第二 Matlab 本身效率非常差,作为程序猿的一部分效率非常差。所以在工业界 Data Science 的社区里 Matlab 用的很少,几乎没人用。
Kevin:我看 R 用的很多。现在学校里面教统计都很少用 Matlab,都是用 R。
丁磊:R 确实相当多的人在用,统计界里面特别喜欢用。也有些分布式的 R 系统,比如说 MapR,一些商业的实现,可以把 R 放到各个节点上。确实 R 有 R 的优点,我用 R 用的比较少,所以没有太多的评论。
Kevin:刚才讲到你讲的那些算法,有数据集来进行试验。我有个朋友做股票交易的,他是做 future ,我觉得你讲的和他们做的非常的相像。他们基本上是自己大概有个想法,这种算法可以比较好的来模拟它的走向,进行预测,它可以在以往的数据集上来进行试验,如果好的话就运用到实际的交易当中自动交易。
丁磊:这个挺正常的。做这些实验分析、预测本身并不是特别新的东西。在发展过程中,很多领域都会用到相似的流程。不过是做到科学的流程,都差不多。实验设计本身在统计上有很多研究,实验过程都是从那方面发展过来的,所以有些相似度是很正常的。
Kevin:现在统计方面在算法层面上,前沿是在学术里面,还是在工业界里面,是哪一个方面来进行推动的?学术界进行推动还是工业界继续推动?
丁磊:正常是工业界推动,事实上在很多年也是这样的。最近有个很好玩的事情是学术界反而逆袭了。Spark 完全就是一个学术类的项目起来的。Graph Lab 做的也很好。有一些在学术界做的也非常好的组,他们的实力不亚于一个小型的公司。他们有很好的人在那里,跟工业界接触很多,接触的都是工业界的最棘手的问题,而工业界又没有资源去解决。学术界有一些自由度来研究一些非常有影响力但是非常棘手的问题。工业界绝大多数的公司根本没有资源做这个事情,它首先得创造价值,创造利润。学术界在近几年反而能够很好的运用他们的资源,很多事情确实很好的推动到整个业界来使用,尤其是在近几年,在这些大数据和机器学习接口的地方做的更好。
Part 4 - 大数据在其他领域的应用
Kevin:我们可以讲一下大数据在其他领域的一些应用,或者讲机器学习这些话题。斯坦福那边进行 translation ,和 Google 联合来进行翻译、自动驾驶的汽车这些应该都算是机器学习的一些分支吧,或者一些新的研究方面。还有无人驾驶的飞行器。我想听听丁磊对这方面的看法。
丁磊:机器学习这几年应用特别多,好像不管什么领域,都想用一点机器学习。这个趋势是有一定的意义的。数据越来越多,想提取价值,用传统的手段就捉襟见肘了,得用一些自动的或半自动的方法来提取价值,机器学习就是来提供这种平台。我个人感兴趣的领域,主要是现在移动的传感器,健康设备比较热门的这些领域。在国内小米手环,或者其他可移动穿戴式的设备,都可以采集到很多数据。在美国比较热门的像 Jawbone 就是一个例子。我最近买了一个 Misfit ,也是一个可以戴在手上的产品,可以监控睡眠、活动、消化的卡路里等。很多数据就被收集起来,这些仪器你使用一个星期或一天,你都可以跟你的手机传递信息,可以把数据放在云上。我用这个 Misfit ,它给你几个功能,你只要在上面拍几下,就可以开始监测你的动作。你想知道一天骑车骑了多少车,游泳游了多长时间。你的手在上面拍拍,开始监控,然后结束,这就是一个数据标记的过程。它有很多用户群,上百万、上千万,用户越多,收集到的标记数据就越多。这其实是为这种设备提供一定机器学习的可能性。我可以想象在以后类似这种设备可能会更智能、更自动的识别这些行为。不用去告诉它什么时候在骑自行车,它已经告诉你什么时候可以骑自行车了。这样一种平台就可以给消费者提供更大的便利。就不用再费力去告诉可穿戴式设备,它可以自动监测你的行为,并告诉你如何去改善习惯,从而让你更健康。有很多对消费者有益的应用给建立起来。
玎玎:现在人们都开始自己来创造数据。以前大数据只在工业界是因为没法获得数据,但现在可穿戴在健康领域,数据每天创造的量太大了,而且每天人们根本没意识到给这些厂商在提供数据。
丁磊:我个人觉得现在可穿戴设备还是用起来稍微难了点。比如我采用可穿戴手环几天,后来我可能就不带了。可能每个人都不一样。我听说有些人戴是因为他公司有项目,如果大家都戴,相当于有种激励制度,比如一个团队超过多少点,就会得到一种奖励。有种激励机制在,所以天天都戴着。像我个人买了很快就失去热度了。
玎玎:我那个 Fitbit 自从腕带坏了以后我其实就再也没戴过。
丁磊:最大的问题还是让这些变量自然交互,然你感觉不到它的存在。如果感觉到它的存在,可能就不是最自然的交互方式。
Kevin:整个机器学习方面一直是一个比较难入门的领域。首先,你要想学这个东西,想去玩这个东西,必须有数据。这个数据在企业层面上比较容易获得。在一个业余的爱好者这个层面上,好像很难有数据试验和学一些东西。可能这些穿戴设备在这方面会推动一下——我自己的数据如果我能存下来我会很有动力的去研究。
丁磊:我甚至想过自己做一个自己数据的 dashboard ,每天从中可以提取这些 insight ,我每天可以做什么事。这是非常有意义的事情。但我觉得还是相对来说我不可能花很多时间来做这个事,让一个普通的消费者不想花时间来有效利用数据,这个门槛还是比较高的。虽然,作为程序猿如果想用机器学习,现在门槛越来越低,现在有很多很好的开源的库,包括 Java 的,Python 的,甚至 Hadoop、Spark 上。这些库,好的 developer 想用起来难度都不大。但是,真正的想做好 Data Science 需要有一点的 background ,很多的积累。但如果仅仅想用 Data Science,想用这些算法的话,现在的门槛越来越低。比如说,有一些公开的数据集,有一些开源的代码,任何领域的工程师都可以拿到自己的环境当中去看看它到底是怎么工作的。
玎玎:丁磊说的是从 software engineering 的角度来说是比较容易了,但是从 business insight 和 predictive analytics 这两块其实还是很依赖于行业背景。
丁磊:真正要做好 Data Science 百分之百的工程师是不行的。肯定要很强的工程,但是还需要其他的背景。
Kevin:我们最后再讨论一个问题——今天讲了这么多关于数据,关于机器学习方面的东西,那么如果现在想成为一个数据科学家,Data Scientist ,现在应该做一些什么东西,应该怎样进这个门?
丁磊:作为一个 Data Scientist ,跟传统的工程师是有差异的,是两种完全不同的工作的种类。跟传统的工程师的区别在于:
-
数据科学家特别是好的数据科学家,对东西的数字看的非常清楚,不是仅仅的去写个程序,这是一个最基本的素质。当然他必须得保证程序中整个 flow 中的数据完全准确。
-
数据科学家可能还有另外一个作用是能够驱动产品的需求,能够自己提取产品的需求。传统软件工程师的工作,可能是产品经理有一些需求,然后工程师实现,很多公司都是这样构建的。虽然有很多很聪明的工程师,可以非常创造等,但是作为数据科学家,你可以自己探索需求,发现需求。对于一个数据产品,数据科学家对数据产品最清楚,他自己去分析数据。进入数据、分析数据才可能分析这些需求,才可能把数据产品做好。从这点意义上来说,数据科学家是可以驱动产品需求的过程。
Kevin:它最大的不同,是一般的传统工程师在企业里的结构是从上到下的,指令从上面下来的;而数据科学家是从下到上的,对数据研究研究之后,发现一个东西可以影响上面的管理、策略方面的东西。所以它的影响力在合适的环境里影响力是比较大的。
丁磊:在比较合适的环境里是一个比较大的限制。但是,我觉得即使在一个比较入门级的领域,数据科学家,应该也会起到驱动产品需求的作用。因为只有分析了数据才能理解产品的需求,才能理解一个数据产品的需求。还有个特点,数据科学家会戴不同的帽子,从事不同的角色,在一个时刻可能回去参加销售的会议,在其他时候肯定会跟其它工程谈合作、交流。作为一个数据工程师,会在公司里从事不同的结构,跟公司各方面打交道,也是从事这个职业比较有意思的一点。你可以在比较短的时间内学到公司商业包括运营的各个方面。
Kevin:我问一个比较直接的,要做数据科学家,是不是一定要读 PhD ?
丁磊:我很肯定回答——不一定。但是好的数据科学家,一定要对数字有很强的感觉。一般来说,如果是读计算机或者读了机器学习的 PhD,对数据有感觉,是没有问题的。但是未必要读 PhD 才能有那种感觉。我跟一些很好的数据科学家工作过,他们本身没有 PhD,但是他们绝对有很强的数量的意识,并且能够驱动产品的需求,同样能跟各个团队打交道。在我看来他们是很好的数据科学家,确实在某些方面比一些专业的人才更有优势。他们能够很好地对一些新的领域进行适应。
Part 5 - Share Picks
Kevin:这个话题我们今天就聊到这里吧。今天聊了很久,感谢丁磊过来。那么我下一个 Teahour.fm 惯有的节目是给大家分享一些东西。丁磊,你先开始吧。
丁磊:我随便看了一个消息,从微博上看来的。Risk O Meter 这个系统,一个在西雅图的初创公司。它通过机器学习的算法算法帮助医生从数据中提取健康的指数,病人健康指数,从而让医生更好的为病人解决问题。相当于是一种医生的病人的数据平台,能够帮助医生更好的服务病人。比如说,通过大量的数据,能够让医生更有效率的分析医疗的电子记录,让医生变得更加敏捷和高效。
Kevin:我今天分享的其实是两个在线的课程,一个是 Udacity 的课,叫 Introduction to Artificial Intelligence,是 Sebastian Thrun 讲的。另一个课程 Andrew Ng 讲的 Machine Learning Course,在 Coursera 上面。这两个课程的第一个我上过,主要侧重理论方面的阐述,第二个课现在正在上,目前感觉讲的比较详细,比较慢,比较适合没有基础不是这个背景的学习。我觉得这方面对我来说平常工作接触的比较少,但是还是比较有兴趣的一个新兴的领域。有兴趣的同学可以去看看这两个公开课。
玎玎:我今天介绍的是一个叫 Papers,一个个人的图书馆。它可以很方便的让我管理文件、书籍和论文,能很方便的查找到论文库里的相关领域的论文,比如我们今天讲的机器学习和数据科学方面的一些东西。可以在上面去找一些论文,做阅读,甚至很多年以前的都能很方便的找到。是一个个人知识库的软件。
Kevin:我们今天的节目就录到这里。丁磊,很感谢你过来。
玎玎:感谢感谢。
丁磊:也谢谢你们。
Kevin:再见
丁磊:再见
玎玎:拜拜。