讲完了数据管理层面,我们看一下数据分析和挖掘,这也是今天的重点。我们在城市数据分析层面会遇到四个方面的挑战。
第一个方面,我们以前很多做机器学习的人,他们提出算法的时候往往都是在video、graphic、text中,现在要把这些算法adapt到时空数据上来。如何将它转换过来是一个难点。
第二个方面,在于多源数据的融合。以前做数据挖掘的时候,往往只是挖掘单一数据。现在我们发现做一个应用需要把多个数据的知识融合在一起。这是一个新的难点,我认为也是大数据里面,相对来说比那个“大”更加有意思更加难的问题。
第三个方面,我们以前做database和machine learning的人是两拨人,相互之间的交集比较少。但是只有将data base以及machine learning的方法有机地融合在一起,做得又快又好才能把系统落地。
第四个难点,以前做挖掘的时候往往是一个单向过程,就是简单静态挖掘。现在变成了交互可视挖掘,英文叫做interactive visual data analytics,就是交互可视分析。刚才所讲就是一个例子,把人带进去交互可视,人机交互,把人的智能也融合进去。
上面是逻辑的框架,再回到实际平台。
我们定义了平台的下半部分,中间是一个分布式系统加上我们的时空索引方法,再往上还有中间数据分析的层面。这里面分成三个子层面。第一个是大家熟知的最简单的一些机器学习算法,包括线性回归这些最普通的方法。再往上我们构造了一些专门针对时空数据的机器学习算法。再往上我们还设计了时空数据融合的方法,尤其是后面会重点讲到的多源数据融合方法。
多源数据融合的方法按照已有的工作可以分成三大类。第一类是阶段性的方法,先用一种数据再用一种数据。第二个是基于特征拼接的方法。我们所熟知的深度学习方法,还有传统的特征串联加上一些正则化方法,都是属于这里面的分支。相对于第二个方法来说,第三类是基于语义信息融合的方法。这里面包括了多视角、基于概率学模型的方法、基于相似度的方法、以及迁移学习的方法。在这一方法里面我们要搞清楚每一纬特征是什么含义,以及特征和特征之间的关联关系、它们的语义信息。在做特征融合的时候则不必。另外这方法是根据人的思维方式设计的类人思考的方法。所以说是基于语义信息的方法。
先讲一个房价的例子来说明这种方法。
这里面我不去预测房屋的价格,而去预测高价值的房子,也就是涨的时候涨得更快,跌得时候跌得更少。同样一个环境里面我们摒弃自然因素和政策因素,房屋的涨幅除以它的基数就是涨幅比,然后按照涨幅比排序。根据这个值做一个量化把北京的房子分成五等。
可以看到有时候一类房和五类房隔得很近。所以房屋的价值是由什么决定的?
李嘉诚说过,房屋的价值第一看地段,第二看地段,第三还看地段。
这个地段其实可以用数据量化。第一个地段就是周边的各类设施水平,这个可以通过POI和路网数据得到。但同样是学区,好学区和坏学区对房子价值拉动有明显区别。
所以还要看第二个数据:popularity。这里面我们又参考了好几个数据。比如社交媒体上对这个地方的点评,以及人们出行的规律等。人们的出行规律一般是不能说谎的,这往往反映了地域的价值。第三个地段,就是你所在的商圈。比如你在望京的话,对你的房子有拉动作用,但并不是望京所有的房子都好,还要看前面两个因素。所以第一个地段、第二个地段、第三个地段可以用六到七种数据量化。
我们可以从每一种数据里面都抽取特征,再进行计算。对于这些特征,以前的方法是简单拼成一个向量然后做一些回归。比如说最简单的方法是做线性回归,欧米伽是系数,X是向量,后面是误差。这种方法不是很有效,因为特征之间不是完全独立的。
因此我们又加了两个约束。
第一个约束是加上pair-wised constrain,把它变成一个Learing to rank的问题,即排序学习.我们不光希望每个房子单独预测要准,还希望两个房子之间的顺序不要搞错,这在机器学习里面叫排序学习。这边简单用两个房屋的涨幅比做差,再通过一个Sigmoid函数变换到(0,1)之间的数值。如果A真的排在B前面的话,那么A本身应该涨得比B多,那么它减出来的值是正的,函数的话是这样值通过Sigmoid函数作用后,输出值比较大,而且越大越接近于1,相当于对正确排序的一个加分。反之,如果A排在B的前面,但B的单点预测值却大于了A,那么A-B的预测结果就是负值,通过Sigmoid函数变换后,就会产生一个小值,而且越小越趋近于零。相当于对错误排序的一个惩罚。
第二个约束,我们对欧米伽有约束,我们刚才说很多欧米伽可能是冗余的,就是这个特征可能是不发挥作用的,我们希望这些冗余的特征权重特别小,所以对欧米伽加上约束,是希望它的欧米伽分布符合均值为零且方差非常小的高斯分布,这样大部分欧米伽在零的附近,我们也允许个别的欧米伽以比较小的概率取得比较大的权重。在这一计算中我们还发现一个有趣的现象,就是真正的高端房子有没有地铁不在乎,但是希望交通很便利开车上下班。这个东西怎么验证呢?我们用2013和2014年的数据做学习来训练模型,然后我们预测2014年房屋涨幅排序,等到2014年结束以后我们就可以知道这个结果对不对。
接下来介绍第二个方法,涉及到深度学习。
因为这个项目也是深度学习在时空数据上第一个真正在顶尖国际会议上发表的工作。我们把城市分成均匀的网格,可以预测每个格子所对应的区域中未来会有多少人进和出。可以想象这是一个非常通用的模型。它包括预测区域内出租车的进出;包括预测有多少人需求共享单车;包括预测未来有多少人在这个区域里面会点餐;包括预测到未来多少人要送快递。这个模型做完以后可以满足很多应用。最开始做这个工作是因为上海的踩踏事件。事后第一时间我发了微博,说这个安全问题可以由大数据和人工智能的方法做一些分析和预测,做到提前分流,甚至能做到在人们的起点就告诉他你不要去了。
我发了微博以后,网上的舆论分成两派,一部分说很好这个确实是可以做的,也有一部分认为我都知道晚上肯定很多人会去了,根本不需要你预测。同样政府肯定是知道有很多人去的,所以它会加派警力。但是政府不知道“多”的程度,也无法知道人群的数量达到峰值的具体时间。而要知道什么时候是高峰点,每个单位时间进出是多少才能做决策。所以这些是政府真正需要的。
北京市地铁站也有这个需求,它希望做到对人流的预知和把握。这个不仅关系到列车调度,也关系到人民的生命安全。这个模型在贵阳市已经实施了。贵阳市划分成一公里乘一公里的格子,我们去预测每个格子里面未来会有多少出租车进和出。这里面绿色的是预测的,黑色的是过去的值,蓝色的是昨天同一时刻对应的值。人流预测是非常困难的事情,因为这个区域过去一个小时多少人进出,周边有多少人进出,还有很远地方的人的进出都会影响到这个区域未来有多少人进出。这跨领域的研究是很缺失的。另外,天气和事件也是影响因素。
这里强调一点,我们做的是时空数据,它跟视频、图象、语音是不同的。这也导致传统的深度学习模型不能直接拿来用。首先,时空数据有空间属性,包括两方面,一个叫空间的距离,一个叫空间的层次。所谓空间距离,根据地理学第一定律很容易理解。另外空间有层次。比如一个城市包括几个区,几个区包括几个街道,每个层次都有特别的语义信息。不像象素里面,虽然有四个象素合并成一个象素,但在四个象素合并成一个象素的时候并没有明确的语义信息。第二个,时间属性。有三个方面的不一样。第一,时间有平滑性,就是这个小时的交通量跟上个小时的比较接近。
第二,时空数据有周期性,交通流量、人群流量都会有周期。这种周期性在视频、语音和文本里面都没有。比如说今天早上八点钟的交通流量可能跟昨天早上八点钟的交通流量很像,但跟今天中午12点钟的交通流量就很不像,隔得远的反而像,这打破了第一点的约束,导致很多算法不能应用。
第三,趋势性。周期绝对不是固定的。随着天亮的时间越来越早,大家出门的时间也越来越早,因此早高峰来临的时间越来越早。早高峰来得时间会有一个趋势性的上扬的过程,这个趋势、周期是很特别的,所以空间加时间这些因素导致了时空数据跟普通的文本、视频不同。我们把城市分成均匀的网格,然后把过去和实时收到的车子GPS轨迹信息投影到网格里面,去计算每个格子里面多少人进出,将其转化成一个矩阵,矩阵中每个单位是一个二元组,进和出,相当于每个象素有RGB一样,它就变成了一个二维的热力图,越红的地方人越多。如果我们有很多不同时间的数据就构成了这样一个像视频流的strain,并且加上事件和天气信息。这是数据的输入。
数据的应用,则是首先把相邻几个小时的数据放到一个深度卷积神经网络里面,来模拟相邻时间的时序的平滑性。然后把几天内一时刻对应的数据输入到一个相同结构的深度卷积神经网络里面,来模拟周期性。再把更大时间范围内同一时间点对应的数据做一个输入,来模拟趋势性。然后这三个数据先做一个融合,融合的时候引入权重系数,因为三个因素的输出结果并不是在每个地方都一样。比如有的地方周期性特别强,像这种主干道。有的地方周期性不是那么强,它的时间临近性就比较重要。
其次需要考虑外部的因素,比如气象事件。把这些数据融合以后,我们去反馈学习下一帧的数据,所以我们要预测下一帧这个时刻的状况。它是一个整体预测,不是分开预测。因为格子和格子之间一定有相关性,我们是同时一下预测出来每个区域有多少人进出。另外是抓住了时空的属性。时间临近性、周期性、趋势性都被抓住了,然后在内部通过深度卷积网络抓取空间性。卷积网络通过一次卷积可以把一个区域的值卷积到一个点上面,描述近距离的空间的局部相关性。经过多次卷积以后可以把越来越远的地方卷积到一起,描述距离较远的空间的相关性。当深度卷积网络比较深的时候它的训练效果就变得很差。
为了解决这一问题,我们引入深度残差神经网络,整个架构称为时空残差网络。这个比较新的模型相对于以前LSTM的模型,不需要进行连续的数据输入,只需要抽取关键帧。这样的结构大大优化了网络结构,只需要用几十帧就达到原先的模型里几百帧、几千帧的效果,甚至更好。这种深度时空残差网络,在人口流动的预测上有很大的应用前景。
下面看一下空气问题。现在环境问题非常严重,这与每个人都相关。政府建了很多的空气质量监测站点在城市里面。然而因为成本问题,子站不能无限量放置。并且城市大范围内空气质量非常不均匀。
这是一个真实数据的回放,每一个图标表示一个真实的站点。上面的数字是AQI污染指数,可以看到同一时刻不同地方的空气质量读数差别非常大,有时候只差一两个街区读数可以差几百。因为空气污染指数是由很多复杂因素决定的,包括地面交通流量、周边是不是有厂矿、周边的扩散条件等。这些因素在城市里面都是非线性、非均匀变化的,所以整个城市的空气质量不可能是均匀的。也就是说,如果这个地方没有建空气站点,测出污染指数,因为污染指数不可能通过周边几个站点做一个线性差,它是非线性的,所以差别会变得很大。
所以我们用大数据的方法来做实时细粒度空气质量分析。实时是每个小时做一次,细粒度是一公里乘一公里范围这么细的状况。用了两部分大数据,一部分是已有站点的实时和历史空气质量读数,另外一部分分为五个数据源,包括气象比如风速、风向、湿度,以及车的平均速度、速度方差,人的移动性,单位时间多少人进出,区域的POI的数目,有多少酒吧、多少餐饮、多少厂矿以及房屋的密度,以及道路结构有多少高速路多少红绿灯路口等。然后采用机器学习算法来建立一个地方空气质量跟这个地方周边对应的这些数据的关系。
在模型建好以后便以这个模型推断其他地方的空气质量。即便这个地方没有建站点,因为这些数据在城市里已经全部有了,不需要额外建任何传感器。
这是一个真实的系统,现在已经部署在环保部内部系统供300多个城市使用。我们可以看到把京津冀、长三角、珠三角、东北、华东分成片区大范围地、细粒度的推断。之所以要做大范围,因为有时候光看北京是看不出问题来的。这种情况需要知道每次空气质量从好到坏的过程中区域的先后顺序,所以国家要求做到细粒度,甚至希望结果做得更细到500米。通过这个例子可以看出,大数据落地要跟行业结合。
这里面每个白圈是政府已有的站点,该区域的空气质量是已知的,蓝色圈是要预测的地方的空气质量是多少,是未知的。平行四边形表示时间点。首先一个地方的空气质量有时序相关性,用纵向的箭头表示,也就是说如果这个小时空气质量不好会影响到下个小时空气质量。第二,不同地方的空气质量有空间相关性,用红色箭头表示,因为污染物会传播飘散。一个好的空气质量模型一定能够同时对一个地方的空气质量的时序相关性以及不同地方的空气质量的空间相关性进行建模。
这里有一个空间分类器和时间分类器。空间分类器可以通过周边的值来计算中心值,而时序预测则根据它自己的读数预测它未来的数值。因为污染物的来源有三:一是外部进入,二是本地排放,三是外部进入的污染物和本地排放在一定的环境因素下面发生了二次化学污染。这三个因素相当于上面提到的空间相关性、时序相关性以及它们两个时空分类器的一个迭代学习的过程。
从污染物成因的角度讲,因为有空间传播和本地排放,所以既要有行业知识也要有数据科学知识,完美结合以后才能定制一个模型让两方面的人都认可。污染物有物理传播过程也有化学过程,原来的方法单一的物理过程或者单一的化学过程都不能解决问题。现在通过数据分析的方法同时考虑到物理过程和化学过程以及它们之间的交互,所以能够把这个问题解决得很好。这个工作在2013年发表论文以后,2015年在环保部落地。
2015年以后我们又做了新的预测未来的工作。按照环保部里的要求是三步走,第一是搞清现状,第二是预测未来。所谓预测未来是知道每个站点未来48小时在不同时间区间里面的预测。这是一个空间细粒度加时间细粒度的预测。不同于预测明天北京有雾霾或者没有雾霾,这个很容易做。第一,雾霾是种天气状况,而不是一个空气质量。只是因为雾霾导致了空气污染物不利于扩散,所以才会出现空气质量变差。当然空气质量还取决于很多别的因素。所以我们做的空气质量预测比雾霾预测要难。
第二个是粒度要细。不是说大范围的整个北京明天大概多少,而是说到某一个站点怎么样。细到这个粒度在空间和时间上都非常难做。
另外,在空气污染物中有一个拐点,就是当出现极端天气状况的时候,空气污染指数可能会从500瞬间变成50。这个拐点是一个小样本事件,因而预测非常困难。而拐点会直接影响到国家的决策。比如APEC期间为保证空气质量,要以北京为圆心关闭一个圈里面所有的工厂,造成的损失可能上百亿。若知道明天是拐点,就可以避免损失。我们要做的一是能够做空气质量预测,第二能够做时空细粒度的预测,第三能够做拐点的预测。现在全国300多个城市都已经用上我们的工作成果,跟环保部的二期已经签完,现在已经部署。
最后一个工作,跟我们的交通、环境、规划、人员都有关系。是对整个城市里面每条路上的速度、流量、油耗以及尾气排放进行实时计算。排放包括PM2.5、PM10、二氧化氮、二氧化硫,一部分GPS轨迹做输入,这边用的是贵阳市的出租车做输入,再加上POI路网还有天气,所以还是一个多源数据融合的问题。
下面展示一个真实的系统(见上图)。这个是在贵阳市落地的真实的全国交通流量图。关于流量可以通过一个问题去理解:交通流量比较大的时候速度是快还是慢?如果一个地方都堵死了,单位时间内每辆车都过不去,那流量是趋近与零的。流量大一定是速度快密度也不小的时候才能形成交通流量大。交通管控以及算油耗、算排放等很多事情都是基于流量来做的,规划也是基于流量做的。所以贵阳市落地了中国第一个交通流量图。
根据流量图后面可以算实时,每个路段上面车的PM2.5排放量是多少。有了这个数据以后再把车的排量跟空气质量监测站点的读数结合在一起就可以更加准确地分析出车的尾气排放到底在空气中PM2.5的占比是多少。这个系统在贵阳商用化了。所以说大数据是能够做到既推动社会的进步,学术价值也能够被认可,最后还能获得收入,是三赢的。
最后跟大家分享一个观念。什么是数据科学家?很多公司招聘数据科学家其实都不是招真正的数据科学家,而是数据分析师。数据分析师是什么概念?他有明确的任务,数据明确、任务明确、结果也明确,他会用一些工具去跑一些报表,然后提交结果。
数据科学家完全不一样。一个很简单的例子,银行发信用卡,我们有用户提交的表格,上面有各种信息,我们拿个人的信用记录去训练一个模型然后做分配器,决定是否发信用卡。这就是数据分析师。
最近北京市建副中心在通州,政府需要知道北京的政府搬到通州以后对北京整个的经济、环境、交通有什么影响。没有具体问题也没有具体数据,这就是数据科学家应该解决的问题,数据科学家要自己找题目。所以最高境界的数据科学家甚至要自己想好,先做出模型,政府觉得好就会实施。
所以,数据科学家首先要懂得行业问题,比如说他要知道雾霾跟什么因素相关,从别人的方法里面怎么吸取经验来定义模式设计特征,也从别人的方法中吸取教训,还要知道怎么去跟行业的人沟通。要知己知彼百战不殆。
第二,在你知道这个行业问题之后,你要知道用什么数据解决这个问题,要懂得数据背后的隐含信息。比如说路面上出租车的GPS轨迹不光反映了路面的交通流量信息和速度,它也反映了人们的出行规律,人们的出行规律进一步反映了这个地方的经济环境和社会功能。只有经过这样的关联和联想才能把领域A的数据拿来解决领域B的问题。你会发现在大数据时代我们真的不再缺数据了,缺的是我们的思维不够开放。只有你的思维够开放、对这个问题理解够深刻以后才能把别的数据背后的知识拿过来做融合,这个很关键。
第三,你要对各种模型都很清楚,要懂得把它们组合在一起。还要对云计算平台有一定的了解。好的数据科学家是站在云平台上面看问题、想数据、关联模型,把这些模型有机组合起来部署到云平台上面,产生鲜活的知识,解决行业问题,这个才是大数据。
要做到这三点才是大数据科学家。很多时候项目推动不了不是人数不够,而是因为缺乏中间灵魂的头脑。培养这样的人其实是非常困难的。以我个人的经验至少七到十年才能培养出这样一个可以解决很多问题的真正的数据科学家来。所以我鼓励大家,你至少读一个五年PHD加两年的实战经验,基本上可以来做这样的事情。
最后总结一下。今天我们在数据科学院还是要讲讲大数据。大数据在我看来是一种从数据的采集、管理、分析、挖掘到可视化这种端到端的服务,解决行业的一种能力。它需要平台的支撑,也需要各种算法,包括数据管理和挖掘分析算法、机器学习算法,还有行业知识,跟行业结合。最后我相信,人工智能在我们的城市领域,在我们的时空大数据领域还大有作为,谢谢大家。
原文链接:http://mp.weixin.qq.com/s/MmtAzalZGUy0pvALRcTrxQ