阅读字数:4809 |6分钟阅读python
嘉宾演讲视频地址:suo.im/4Nm9F3c++
Apache MADlib是Pivotal与UCBerkeley合做的一个开源机器学习库,提供了精确的数据并行实现、统计和机器学习方法对结构化和非结构化数据进行分析。MADlib提供了丰富的分析模型,包括回归分析,决策树,随机森林,贝叶斯分类,向量机,风险模型,KMEAN汇集,文本挖掘,数据校验等。MADlib支持Greenplum,PostgreSQL 以及 Apache HAWQ, In-Database Analytics的特性使其大大扩展了数据库的分析功能,充分利用MPP架构使其可以快速处理海量数据集。本主题将为你们介绍MADlib的基本架构,工做原理及特性,分享MADlib在互联网,金融,零售等行业的用户案例,展望In-Database Machine Learning的广阔前景。算法
MADlib是一个基于SQL的数据库内置的可扩展机的器学习库。让咱们来逐一解释这个定义。提及机器学习库,同行的朋友应该比较熟悉python上的scikit-learn。咱们的库实现了相似的功能,可是咱们的语法是基于SQL的,也就是说,你能够用select + function name的方式来调用这个库。这就意味着,全部的数据调用和计算都在Database内完成而不须要数据的导入导出。因为应用在大规模并行处理的数据库内,它的可扩展性也很是好,可以处理较大量级的数据。sql
咱们的整个项目和代码是在Apache上开源的,到目前为止,咱们已经有6个release, 而且于今年从阿帕奇孵化器毕业,成为apache的顶级项目。数据库
咱们是一个在大规模并行处理系统上的可扩展应用,目前支持PostgreSQL和Pivotal Greenplum。apache
MADlib具备强大的数据分析能力。咱们支持大量的机器学习,图形分析和统计分析算法。api
MADlib创始于2011年,当时属于EMC/Greenplum,后来Greenplum变成了pivotal的Greenplum。主要由UC Berkeley的一位学者,Joe Hellerstein发起,Stanford, University of Wisconsin-MADISON和University of Florida也有参与。安全
MAD这个名字来源于三个词。session
M表明Magnetic,有吸引力的,意味着这个系统可以吸引不少的用户和数据。传统的数据仓库对新数据不够友好,导入的数据每每须要很是干净和完整。然而MADlib能够作到即便在数据不够整齐的状况下,也能帮助数据科学家进行一些有意义的计算和推断。架构
A表明Agile,敏捷,意味着这个系统可以帮助数据科学家快速有效地处理数据。这有赖于在MADlib在数据库内的集成。
D表明Deep,深刻。在大规模并行集成系统上的应用使得数据科学家可以使用完整的大数据,而不是在单核的内存内对数据集的子集进行分析,从而提升了分析的精准性。
三个字母连在一块儿,mad这个词在英语中除了咱们所熟知的疯狂这个意思,还有一个意思是“极好的”。咱们但愿MADlib能给数据科学家们提供一个极好的机器学习和数据分析平台。
MADlib有很是普遍的用户群体。
目前,咱们的用户涉及金融,保险,互联网,医疗,媒体,娱乐,汽车,制造等等行业。能够说咱们提供的机器学习方法可以覆盖大部分行业的需求。
如上图所示,这个列表是目前MADlib所支持的算法。
监督学习,咱们支持Neural Network, SVM, regression, decision tree;非监督学习,咱们支持clustering,topic modeling等;图形处理,咱们支持apsp, bfs等等。
另外还有时间序列处理,模型选择,基本统计和数据类型转换。到目前为止咱们支持了超过50种算法,是一个复杂而成熟的数据科学学习库,可以支持各类复杂的机器学习场景。
更好的并行度。咱们在算法设计阶段就充分考虑了与大规模并行处理系统,基于不一样的算法,设计不一样的分布方式来保证更快的并行处理速度。
更好的可扩展性。随着数据量的增加,咱们的扩展性很是稳定。
更高的预测精度。处理大数据使得更多有效数据被利用,从而实现更加精确的预测效果。
咱们是Apache ASF上的顶级开源项目,咱们的开发是在Pivotal的支持下基于Apache community的,与社区有很是好的互动。
相信不少Greenplum用户对这幅图很熟悉,这是Greenplum的架构,当一个query进来的时候,master server会对query进行处理,按必定规则把query分配到多个segment上并行处理,最后的结果再返回master server。
MADlib就是构建在Greenplum这个架构之上的。MADlib经过定义postgres上的UDA和UDF创建in-database function。当咱们用sql, r调用MADlib的时候,MADlib会首先进行输入的有效性判断和数据的预处理,将处理后的query传给Greenplum, 以后全部的计算在Greenplum内执行。
上图中是整个过程的执行流程。
在客户端,咱们可使用jupyter, zeppelin, psql等等工具链接数据库并调用MADlib function,MADlib处理后根据算法生成多个query传入database, 以后Greenplum执行query并返回String, String通常是一个或多个存放结果的表。
这是MADlib的基本架构,咱们的user interface就是sql, 代码的上层主要是python, 会作一些input validation和pre-processing. 咱们调用plpy来执行查询。代码的中间层和底层主要是c++, 咱们用c++来调用eigen libraray. Eigen是C++里处理代数和几何的包。C++也调用了c的API来和DB进行交流。
下面是一个MADlib使用示例,以pagerank这个算法为例。
PageRank是一种由搜索引擎根据网页直接相互的超连接来进行计算的技术,是网页排名的一个重要算法,以google创始人Larry Page的名字来命名。
在MADlib中,计算一个图的pagerank,须要两个表格做为输入数据,第一个表格是vertex(节点),用来保存节点的信息,第二个表是edge(边),用来保存节点指向节点的状况。使用MADlib调用pagerank的步骤以下:select MADlib.pagerank(),这里须要几个输入。第一个输入就是vertex表,第二个输入是vertex id这一栏在该表中的名称,在示例中的这个vertex表里,这就是id这一栏。第三个输入是edge table这张表的名称,第四个输入,指出边的起点和终点所对应的栏在表里的名称,最后一个输入是用户定义的输出表格,计算结果将返回这个表格。
上图是计算结果,查看pagerank_out这张表格,能够看到每一个节点的pagerank分数。另外,咱们有一个表格,pagerank_out_summary,存放了收敛迭代的次数,在这个例子中,计算迭代了16次以后收敛并返回结果。
MADlib具备良好的可扩展性,可以处理较大量级的数据。以pagerank为例,这张图显了随着边数的增长,完成计算所须要的时间。咱们能够看到,1亿个顶点,从6亿条边到50亿条边,运行时间几乎保持了线性增加。
这是SVM的Performance
咱们能够看到在一亿条记录范围内,运行时间也是接近线性的增加。对一亿条记录的处理能够在10分钟内完成。
以上就是对MADlib的初步介绍,相信你们已经对MADlib有了一个初步的了解。接下来是两个用户案例。
首先介绍一个下案例的背景。咱们的客户是某大型跨国多元化传媒和娱乐公司,是Greenplum的用户。
在这个案例中,他们想要提升邮件营销的精准度。他们面临的主要问题有:邮件广告点击预测模型不够精准,须要更好的模型和营销策略。其次,他们现有的数据分析流程比较繁琐,速度较慢而且有不少手工的步骤,容易出错。在与Pivotal Data Science Team合做以后,咱们为他们提供了一套解决方案。首先,咱们充分利用了MADlib的多种功能,简化了整个data pipeline,用MADlib从新建模和预测,而且实现了流程的全自动化。
此次合做的影响很是显著,首先,对于邮件点击率,咱们有了更快,更高效和更精准的建模和预测,其次,该客户一直是Greenplum的用户,但对Greenplum內建的各类资源并无充分利用,此次合做让他们看到了in-database analytics的高效和快捷,使得他们实现了in-Greenplum analytics一体化。
客户的数据源包含了如下信息:user 在mobile 端的购买,预订,注册,邮件营销历史,网页浏览历史,地理信息等等,数据量是TB级别,总共的特征超过1000项。整个过程都在Greenplum这个平台上进行。建模工具主要是MADlib,以及一些PL/pgSQL。
如下是该客户当时的数据分析工做流程。原始的数据都导入并存在Greenplum中。以后,数据被导入SAS中,进行了数据清洗和准备。再以后数据又从SAS中导入了EXCEL,在EXCEL中建模计算Information Value 和Weight of Evidence, 即信息量和证据权重。以后,数据被导回SAS,计算Pairwise Correlation,一种变量相关性。根据计算的结果,在EXCEL中去除高度相关的变量。以上步骤都是为了减小变量的数量,由于SAS上并不能很好地处理超过1000个的变量。这以后,数据被再次导回SAS,在上面进行逻辑回归,最后把分析结果导回Greenplum。因为SAS可以处理的数据量有限,客户只能用Sample进行建模,因此在最后,数据又导回Excel进行KS-Score Test, 进行Model Validation。KS-Score Test验证的是样本分布是否能有效表明整体分布,从而验证模型的有效性。通过Validation以后结果最终被导回Greenplum,手动用该模型对新数据进行预测。
从这个流程中咱们能看到一些问题:
首先,很明显的,数据在Greenplum, SAS和Excel之间屡次导入导出,比较繁琐,这期间也会存在数据格式转换,数据丢失等等问题。
其次,咱们能够看到,在SAS和Excel之间来回的好几个步骤其实都是为了下降维度,减小SAS上的变量数,因为许多变量没有获得利用,这从必定程度上下降了模型预测的准确度。
最后,因为SAS和EXCEL能处理的数据有限,客户只能用样本数据来进行建模,没有充分利用Greenplum里的大数据,这也影响了建模的精确度。
在与Pivotal Data Science合做以后,咱们创建了一个新的工做流程。
能够看到,全部SAS和EXCEL内的步骤都被移除了,整个流程都在Greenplum内完成。在存放好数据以后,首先,用MADlib的feature generation来提取特征,以后运调用不一样的MADlib函数,计算Information Value, pairwise correlation,完成特征选择。建模阶段,直接调用相关的逻辑回归函数和elastic net,(用elastic net进行变量选择,而后创建逻辑回归)。验证阶段,MADlib提供了不少validation的函数,最后,MADlib函数能够对新的data进行预测。
从数据准备到特征选择,再到建模,验证和预测,MADlib提供了全部的相关函数。对比以前的步骤数量,也从8步变为了6步。另外一个明显的优点是,这个模型用到了Greenplum里的全部数据,而且可使用更多的feature来建模。
这次优化使得数据分析的整个环节效率都大大提升。在生成数据阶段。原来的时间是75分钟,优化后只须要8分钟,整个过程速度提升了9倍。Attribute compilation阶段,速度是以前的3倍,而且运用了更多的495个attribute。在计算Information Value阶段,平均每一个变量的计算速度是以前的13.7倍。建模阶段,以前一次迭代须要大约30分钟,而且只能运用小于50个变量,而在优化以后,平均一次迭代只须要1.86分钟,而且能够用376个变量进行回归分析,平均每次迭代速度是原来的16倍。能够看到,整个数据分析流程获得了很是显著的提速。
这是建模的结果。
原始模型的准确率是99.7%,可是true positive rate是0%。也就是说,原始的模型只能很好地预测不会点击邮件的用户,而没有把握预测会点击邮件的用户。改良后的模型,准确率是62.8%,看上去好像下降了,但true positive rate是66%,这意味着,该模型有66%的把握预测出会点击邮件的用户,而这些用户正是给公司带来核心价值的用户群体。
这个案例的用户是某大型跨国金融服务公司。他们的case主要是手机mobile app API的分析。
他们主要面临如下问题:1.如何利用API日志更好地理解不一样种类的用户,2.如何更好地理解用户与APP的交互 3. 如何对实时API请求进行分类和安全检测 3. 现有API日志数据量很大,现有数据分析团队缺少大数据分析技能。
在与Pivotal合做后,咱们为他们提供了如下解决方案:使用MADlib进行聚类分析,创建一个sessionization模型。创建一个scoring pipeline,对新的访问进行评估,使用visualization tool更好地呈现结果。
此次合做的商业影响也是很是显著的。首先,咱们针对不一样的分析师创建了多个用户类型分类,可以及时把某种特定类型的用户信息传到相应的分析师手上。其次创建了实时访问安全评分系统,对可疑访问进行及时处理,最后使用Greenplum + MADlib的形式,使得大数据的获得了更加充分的挖掘。
这个项目的数据源主要包括用户的api 访问日志和customer profile,涉及45天的访问状况,50亿行数据,百万级别的用户信息。平台依然是Greenplum,建模主要用到了MADlib, PLR, PL/PYTHON和PDLTools。PDLTools是Pivotal data science 的另外一套数据科学包。可视化主要在Tableau上进行。
如图所示是整个建模的过程。因为篇幅关系在此不作详述。
首先,在改良以前,用户虽然使用了Greenplum,但依然在R上对data sample进行分析,DCA闲置。改良后,用户使用Greenplum+MADlib对大数据集进行了更充分的分析。
第二,在改良前,用户没有创建起良好的用户分类体系,合做完成后,他们创建了两套模型对典型用户进行聚类分析,对用户群体和用户习惯有了更深刻的了解,制定相应的营销策略。
第三,以前的model不能高效检测可疑的session,改良后,客户创建起了对可疑session实时评分体系。
最后,在合做以前,客户在评估是否转换到Teradata上,可是改良后,他们决定放弃Teradata,增长GREENPLUM cluster的数量,充分证实了Greenplum在数据分析方面的优秀表现。
经过使用MADlib,咱们可以进行graph, clustering, regression, classification等统计和机器学习分析,此外,咱们还有GPText进行文本分析,Geospatial进行地理空间分析。Greenplum也能很好地支持BI reporting tool,实现快速的数据可视化。咱们的理念就是ALLIN ONE DATABASE,让分析变得更便捷和更高效。
咱们很快将要发布版本1.13,在这个版本中,将会加入一些新的图形方面的算法,包括HITS和Graph cut,咱们会支持mini-batching,加快计算的速度,同时,随着新版postgres 10的发布,咱们也会加入对新版本的支持。
下一个版本发布是2.0,咱们会有一些Interface方面的改动,算法方面,在图形方面会加入特征向量中心性,中间中心性等。SVM,咱们会加入Multiclass,另外,咱们会加入gradient boosted machines(GBM)作boosting。最后,咱们会加入更多的utility function来预处理数据。
2018年,咱们的开发重心会放在deep learning上,相信咱们能为你们提供更多深度方面的支持。
上图是MADlib相关的resource,咱们是全开源的,欢迎你们浏览或者和咱们一块儿contribute,让MADlib越作越好。