支持模型复用的通用大数据分析平台
2020-09-14崔晓龙边胜琴张德政
崔晓龙, 郭 茜,b, 边胜琴, 张德政,b
(北京科技大学a.计算机与通信工程学院;b.材料领域知识工程北京市重点实验室,北京100083)
0 引 言
大数据时代,数据已经成为各企业的重要资产,利用大数据进行主题分析挖掘,不仅可以对数据进行宏观监控,还可以帮助企业降低成本、提高效率、开发新产品,做出更加科学、准确的业务决策。随着数据量的增多,企业面对多方面的主题分析时往往将其视为独立的项目,即每次进行主题分析时均需重新获取数据、重新进行数据预处理、重新构建模型。在进行多主题分析时,这种方式往往导致主题间数据源及算法模型重用性差等问题。同时在可预见的未来,互联网的发展必然带来数据量爆炸式的增长,数据分析人员对数据的预处理能力落后与数据快速增长之间的矛盾将会更加突出,同时也伴随着数据分析性能遇到瓶颈,缺少数据分析挖掘的高级方法,数据分析人员无法直观查看数据分布并进行预处理等问题的发生,这些问题制约着大数据分析的发展[1-3]。本文建立一个集多主题构建于一体的通用大数据分析平台,实现多个主题构建,各类型大数据存储与抽取,主题间的数据共享,主题间算法模型共享,大数据自动分析并给出相应处理建议是解决以上问题的一个可行方案[4]。
1 相关技术
1.1 数据分析
数据分析流程主要包括:确定分析主题、获取数据、数据描述、数据预处理、构建算法模型5个步骤。确定分析主题需结合业务背景来分析需求,确定分析及研究方向;通过爬虫技术、ETL技术、日志采集工具可分别获得网络数据、系统数据、日志数据;通过查看数据基本描述属性可查看数据分布,如中心趋势度量(均值、中位数、众数)、数据分布度量(极差、四分位数、方差和标准差)、统计描述可视化(分位数图、直方图)对数据进行描述;通过数据清理、数据集成、数据规约、数据变换等方法对数据进行预处理[5];结合数据特点构建相应的算法模型,如分类算法、聚类算法、关联规则算法等。
1.2 大数据
针对海量的数据,一味提高硬盘容量和内存只会导致成本提高以及数据处理效率遇到瓶颈等问题发生。为解决海量数据分布式存储及计算问题,Google在2006年前公布了GFS、MapReduce,这也直接支持了Apache Hadoop 项目的诞生[6]。
Hadoop的分布式文件系统为HDFS(Hadoop Distributed File System)[7-9],它是一个高度容错性的系统,解决了分布式计算中数据存储管理问题,适合部署在廉价的机器上。随着数据种类的增多,非关系型数据库受到更多关注。如MongoDB是基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案;HBase是一种构建在HDFS之上的分布式、面向列的存储系统,利用Hadoop MapReduce来处理HBase中的海量数据。
大数据算法库需具备大数据的批量计算、流式计算能力,其中批量计算主要针对静态数据的离线计算,吞吐量好,但是不能保证实时性;流计算主要针对动态数据的在线实时计算,时效性好,但是难以获取数据全貌[10]。针对不同的数据类型,平台需具备可结合各类业务逻辑的算法、海量数据的离线分析与处理能力。目前存在的多种大数据算法库中以Mahout、Spark下的Spark MLlib较为流行。
Mahout是一个基于Hadoop的机器学习和数据挖掘的分布式计算框架,在MapReduce模式下封装实现了大量数据挖掘经典算法,为Hadoop开发人员提供了数据建模的标准,从而大大降低了大数据应用中并行挖掘产品的开发难度[11]。
Spark是UC Berkeley AMP Lab开发的开源集群计算平台,是以内存计算为基础的集群计算框架[12]。Spark MLlib是Spark中可扩展的机器学习库,它由一系列机器学习算法和实用程序组成,包括分类、回归、聚类、协同过滤、降维,还包括一些底层的优化方法[13]。
2 平台总体设计
2.1 平台架构
基于目前各企业分析主题时的难点和痛点,对大数据分析平台的总体设计如图1所示。硬件层采用商业PC服务器,可靠性和性能均能满足通用大数据平台要求;经济方面采用商业PC服务器也是可行的;系统硬件是可扩展的,可以通过增加服务器的数量提升对大量数据的处理能力。
图1 平台总体架构图
存储/计算引擎层采用流行的Hadoop/Spark大数据处理引擎,同时采用NoSQL数据库(MongoDB、HBase)负责非结构化数据的存储;结构化数据采用MySQL进行存储;批处理数据采用HDFS进行存储。该层以硬件层为基础负责为应用层为提供数据存储和计算服务[14-15]。
应用层包含主题管理模块、数据探索模块、数据预处理模块、大数据算法模块。主要负责调动存储/计算引擎的存储资源和计算资源,同时也为展示层进行互动并提供计算结果。
展示层主要负责数据分析人员与系统的交互,如数据分析人员可通过Web页面或命令行请求数据,应用层可基于展示层的请求调动资源对数据进行处理并呈现给展示层。
2.2 数据架构
大数据分析平台各层之间均需要接口进行衔接,数据架构关系着整个平台是否能够按照预期需求运行,其数据架构整体设计如图2所示。外部系统对数据存放路径或IP地址进行配置生成配置文件,数据采集接口通过读取配置文件来访问数据,通过数据采集对数据进行转换并加载,为数据处理提供服务。数据可分为少量数据、大量数据、实时数据3种,不同种类的数据处理策略不同,针对少量数据,可将其存储到单机节点,利用本地内存进行计算;离线批量数据,则需进行分布式存储,可利用集群进行并行计算;在线实时数据,可利用集群进行流式计算。数据处理过程需记录到历史版本库,同时加载模型库及已处理好的文件进行模型构建,最终将结果文件传递给外部系统如Web页面、客户端或交互终端如API请求等。
图2 数据架构设计概图
3 功能模块设计
大数据分析平台分为主题管理模块、数据探索模块、数据预处理模块、算法模型模块,如图3所示。
图3 平台功能架构图
3.1 主题管理模块
主题管理主要为解决数据安全性而设计的,数据分析人员基于业务对主题进行描述,选择相应数据源,最终确定主题,每个主题对应一套针对自己业务的数据集以及数据处理流程。由于同一数据分析人员业务背景相同,其分析不同的主题可能用到相同的数据,而不同的数据分析人员可能用到相同的算法模型,主题管理模块便于对数据分析人员复用权限的管理,复用权限表如表1所示。
同一用户可构建不同主题,主题之间可共享数据源、数据半自动处理流程、数据半自动化处理结果以及该用户所有模型;不同用户之间可共享公开的数据模型。这就避免了重复上传数据和重复构建数据预处理过程,同时也便于用户管理自己的模型。
表1 复用权限表
3.2 数据探索模块
主题分析中,数据分析人员需根据数据特征的分布来判定如何对数据进行预处理、选择什么样的特征以及如何构建合适模型,当加载数据源后,针对不同数据类型,数据分析人员往往看重的分析的指标又不尽相同。此时,该模块可根据数据列类型给出基本的数据描述字段,数据列类型主要包括离散型和数值型,对不同类型可展示数据分析人员关心的指标。离散型主要展示频次、数据条数、空值个数等统计描述,同时以柱状图、饼图、表格等可视化手段进行辅助展示;数值型主要展示标准差、均值、最大值、最小值、四分位点、中位数、总条数、空值个数等统计描述,以盒图、折线图等图表进行辅助展示。该模块可使数据分析人员更清楚地认识数据,为数据预处理和模型构建做准备。
3.3 数据预处理模块
数据预处理模块可对待分析数据进行半自动化预处理,之所以称为半自动化预处理,主要是由于数据处理与业务紧密结合,而该平台又可构建不同业务的主题,由于无法学习各个主题对应的业务背景,系统只能通过数据分布提出相应的数据处理建议,处理建议最终执行权交给数据分析人员来判定。如平台对某一列给出填充的建议,但具体填充0、最大值还是最小值,则需要数据分析人员结合业务来确认。
该模块主要包含数据清理、数据集成、数据规约、数据变换4个功能,功能结构图如图4所示。
图4 数据预处理模块
数据清洗主要包括对缺失值的处理,可按照行、列来区分,通过后台程序制定的策略算法,根据缺失值的缺失程度给出相应处理操作建议;数据集成主要包括冗余特征发现与多表合并,冗余特征发现主要找出冗余的特征并建议删除,如果是离散型则使用卡方检验算法求相似度,如果是数值型则使用皮尔逊相关系数求相似度;数据规约包括维度规约和数据离散化,维度归约主要通过特征选择或特征提取来减少数据集中的维数(变量)数量,而不会显著损失信息,而数据离散化主要是将连续属性的特征切分为若干“段”来减少给定连续属性值的个数;数据变换主要实现属性构造,可以选择多个属性并构建新属性的公式,并通过后台程序识别公式进行新属性的构造。
为避免对同一数据源进行重复的数据预处理操作,平台可记录数据预处理过程,并将新的数据预处理结果记录到版本库中供数据分析人员直接使用。如图5所示。对于同一数据集,平台可记录不同的数据预处理过程并将最终的预处理结果存储为相应版本。数据分析人员可重用数据处理操作并可基于现有版本库对数据继续进行预处理。
图5 历史版本库操作
3.4 算法模型模块
数据分析人员可以通过该模块进行算法模型的定义并上传已实现的算法模型文件,其余数据分析人员可输入指定的参数来调用模型,最终平台按照输出类型将结果输出。
数据分析人员可上传自定义模型,其中模型名称以及相应的参数字段约定如表2所示。
表2 算法模型上传字段约定
当调用模型时需要利用算法引擎进行处理,其中算法引擎设计如图6所示。数据分析人员通过API或交互平台来构建输入参数,主要包括选用的模型、模型类型、模型的相应参数以及选择的数据。算法引擎通过输入参数来加载算法模型和数据,首先通过依赖包调用引擎判断是否已加载所有的包,如果没有,则加载相应的包;根据数据存储位置(本地存储或集群存储)来加载数据。当两者均准备就绪后,根据模型类型选择SparkMLlib或单机算法调用引擎来进行模型运算;将执行结果返回到模型输出引擎,该引擎通过判断模型输出类型(字典、数组或json字符串)将结果输出到平台。
图6 算法引擎设计图
4 平台实现与应用
4.1 平台实现
大数据分析平台涉及大量的数据处理,而目前数据分析挖掘中较常使用Python语言,同时有大量的数据操作基础库是基于Python开发的,因此选用Python作为大数据分析平台的主要开发语言。
平台选择基于Python的Web框架,这有利于与底层语言的结合。考虑到Django具有文档最完善、强大的URL路由配置、容易数据迁移等特点,最终选择Django框架作为平台的Web框架。
前台展示以Bootstrap作为前端框架、Echarts作为图表展示、Jquery Ajax异步请求与后台action进行交互。底层以MySQL数据库作为大数据分析平台的信息存储数据库、以Hadoop HDFS集群作为大数据存储、以Spark MLlib算法库作为大数据分析平台的算法库。
整体技术架构可将系统分为不同的逻辑块,通过相应的组件相互访问,如图7所示。其中展示层只接受Json格式数据,可作为API供第三方或Web直接解析;ORM可将关系型数据库和业务实体进行映射供控制层直接使用;由于涉及到大数据的分布式存储,本平台需利用python进行HDFS的访问,可利用pyhdfs对HDFS内容进行操作;同理,对于大数据算法模型的计算,可利用pyspark与Spark对接进行操作。这种方式将数据访问和逻辑操作进行分离,增强了系统的复用性及系统的扩展性,同时也大大降低了应用系统开发和维护的成本。
图7 各层间访问接口
4.2 平台的部署
平台部署环境如表3所示,Web服务器仅负责维护平台系统,配置相对较低。平台使用Hadoop2.7.0以及Spark1.6.1构建的16个节点集群对数据进行存储和计算,配置相对较高,可根据业务需求对硬件进行调整。该平台部署在linux系统中,需安装表3所示的Python包用于数据处理及集群的操作。
4.3 应用案例
以2016年电网大数据助力2016CCF大数据竞赛的两个分析主题为例,一个为客户画像;另一个为客户用电异常行为分析。
表3 平台所需软硬件环境
客户画像以电力用户的95598工单数据、电量电费营销数据等为基础,综合分析电费敏感客户特征,建立客户电费敏感度模型,对电费敏感用户的敏感程度进行量化评判,帮助供电企业快速、准确的识别电费敏感客户,从而对应地提供有针对性的电费、电量提醒等精细化用电服务。客户用电异常行为分析基于国家电网公司提供的关于用户用电量、电能表停走、电流失流、计量门打开灯计量异常情况、窃电行为等相关数据,以及经过现场电工人员现场确认的窃电用户清单,希望参赛者利用大数据分析算法与技术,发现窃电用户的行为特征,形成窃电用户行为画像,准确识别窃电用户,以帮助系统更快速、准确地识别窃电用户,提高窃电监测效率,降低窃电损失。其中应收电费信息部分信息如表4所示,各列代表含义分别为应收年月、用户编号、供电单位编号、用户类别、用电类别、电费金额、总电量,其余信息数据格式与之类似,在此不展开详述。
尽管两者属于同一行业不同主题分析,但分析步骤相同。
客户画像的一种分析步骤如下:将现有数据按照用户编号进行合并,根据业务对数据进行预处理,构建相关特征,利用Kmeans算法或其余聚类算法对用户进行群分,利用决策树算法或其余分类算法构建评价模型对客户构建评价标签,利用该标构建用户画像。
客户用电异常行为的一种分析步骤如下:将现有数据按照用户编号进行合并,根据业务对数据进行预处理,构建相关特征,利用决策树算法或其余分类算法构建用电行为识别模型,利用该模型识别异常客户。
表4 应收电费信息表数据展示
由于两个主题会用到相同的数据,如用电客户信息、电能表相关信息、电量相关信息;同时两者会用到相同的算法模型,如决策树算法,因此可以利用该系统进行数据数据处理的重用及模型的重用。
4.3.1 客户画像
(1)基于平台创建客户画像主题,上传相应数据并进行数据展示与描述,如图8所示,其中字符型可看到频次最高列、频次、数据总条数、空值个数、非空个数;数值型可看到类型、标准差、均值、最小值等数据分布。
图8 数据描述
(2)数据预处理。根据平台给出的对行和列的处理建议,数据分析人员可进行数据预处理操作,平台默认将数据处理记录到版本库中,这样就能保证当该数据源再次被用到时,其数据处理过程可被复用。如图9所示,系统根据各列数据的分布,给出删除和填充的建议,并给出理由,当缺失率高达80%时,建议删除,存在部分缺失值时建议填充,同时给出数据的分布,便于数据分析人员结合业务选择填充的具体值。
图9 针对于列的预处理
(3)算法模块的构建。该主题需要构建决策树算法模型,如图10所示,数据分析人员输入算法模块名称,算法描述,选择模块类型为单机-分类算法,选择公开可被其余用户调用,上传算法文件并配置输入输出参数。
图10 构建决策树模型
4.3.2 客户用电异常行为分析
(1)基于平台创建客户用电异常行为主题,选择已存在的数据源,避免重复上传数据,该主题复用了客户画像主题中的用户基本信息,电量信息等数据源。
(2)选择数据源时可选择相应的版本以及相应的数据处理操作进行数据处理的重用。如图11所示,用户基本信息目前有4个版本,每个版本记录详细的数据处理过程,可直接使用v2版本的数据集,同时也可以应用该版本下的某个操作。
图11 重用数据预处理模型
(3)该主题直接复用客户画像主题构建的决策树算法,避免了算法模型的重写,利用已构建好的特征及客户异常预测目标进行决策树模型训练,选择相应的训练集和测试集,最终返回一个json字符串显示预测结果,其中1代表窃电用户,0代表正常用户,预测准确度约为0.802。决策树算法模型复用和预测结果分别如图12和图13所示。
图12 决策树模型调用
图13 决策树预测结果
客户用电异常行为分析主题重用了客户画像主题的用户基本信息数据、预处理结果及处理过程,减少了数据分析人员重复上传相同数据并进行数据预处理的操作。同时,客户用电异常行为分析主题重用了客户画像的决策树算法模型,避免了数据分析人员对同一种算法的重复构建,实现了算法模型的重用。基于该平台实现的两个主题有力地证明了数据重用、预处理过程重用及算法模型重用的可行性。
5 结 语
通过构建通用大数据分析平台初步解决了数据以及模型的复用,对大数据分析流程、大数据存储技术、大数据算法库等技术展开研究,对主题模块、数据探索模块、数据预处理模块、大数据分析算法模块进行了详细设计,提出了相应的数据清洗策略、数据集成策略、数据规约策略、数据变换策略,制定了算法自定义规范并设计了算法引擎。借助平台对真实数据集数据进行了分析和展示,对该数据的处理和分析过程及结果证明了数据重用、预处理过程重用及模型重用的可行性,减少了数据分析人员在主题分析中的重复操作,有利于企业在较短的时间内构建多个主题分析,帮助企业提高主题分析效率,以便其更加快速、科学地做出业务决策。
·名人名言·
任何人都承认实验是科学之母,这是确定不移的真理,谁也不会否认。
——米丘林