0%
2.8k 字 9 分钟

机器学习业务与工程的区别以及模型上线方案学习

机器学习业务与工程的区别以及模型上线方案学习

前言

先声明,我是数据驱动和计算驱动派的

数据,即特征工程 决定了模型的上限,所有模型都是去拟合这个上限

计算能力,决定了模型能够拟合这个上限到什么程度

综述

在真实的数据科学世界里,我们会有两个极端,一个是业务,一个是工程。

偏向业务的数据科学被称为数据分析(Data Analysis),也就是A型数据科学。

偏向工程的数据科学被称为数据构建(Data Building),也就是B型数据科学。

一般称之为数据科学家 和 数据工程师

软件工程师,数据工程师,数据科学家 数据分析师的区别

国外 ETL 服务商 Stitch 的 CEO Jake Stein,近日对这个话题进行了总结。他还绘制了一张工具图,来呈现他们在日常工具使用上的不同。

软件工程师

软件工程师干的活儿是开发应用和系统。这过程中的每一个环节,从设计、写代码、测试到检查,开发者都要参与。生成数据的产品都是他们开发的。软件工程是三个角色中最古老的一个,并且有相当成熟的方法体系和工具库。

工作内容包括:
前端、后端开发 网页应用 移动应用 操作系统开发 软件设计

数据工程师

数据工程师需要开发能对数据进行整合、存储和提取的系统,并从软件工程师开发的应用和系统中获取数据。数据工程的诞生,是作为软件工程大类下的一个更细分的技能类别。据雷锋网了解,根据国外统计,40% 的数据工程师原本是软件工程师。

工作内容包括:
高级数据结构 分布式计算 并发程序设计 使用 Hadoop, Spark, Kafka, Hive 等新工具 开发ETL/数据流水线(data pipelines)

数据科学家

数据科学家的职责是基于数据作分析。优秀的数据科学家应该全面理解商业运作和数据之于实现高级目标的价值。

工作内容包括:
数据建模 机器学习 算法 商业智能的 dashboards

数据分析师

数据科学家和数据分析师的区别在于,后者不负责编程,统计建模,机器学习等。两者所使用的工具也有很大的区别。数据分析师使用的商业智能工具包括: Microsoft Excel , Tableau, SAS, SAP, Qlik 等。 就数据挖掘和数据建模而言,数据分析师大多使用BM SPSS Modeler, Rapid Miner, SAS, KNIME.;数据科学家倾向于使用R和Python。

工具链

从工具上来看,按由业务到工程的顺序,这个链条是:EXCEL >> R >> Python >> Scala

Data Building 的重要性

在大数据时代,数据工程师的角色愈发地重要。也许,数据架构师的称谓更准确。和数据分析师不同,他们不太关注统计、分析技能、建模等。他们的工作重点在于数据架构、计算、数据存储、数据流等。 因此,数据工程师必须具备相当强的编程能力—包括编写数据查询程序的能力。也就是说,他们的能力必须达到开发高手的级别。

数据工程师还负责数据库设计,数据仓储,建立数据湖。 这就意味着,他们必须十分熟悉现有的数据库技术和数据管理系统,比如和大数据有关的Hadoop与HBase 等。

同时,对模型的实现原理,也必须有所涉及。

此外,非功能性的基础设施问题,如数据的可扩展性、可靠性、韧性、有效性,备份等也由数据工程师来负责。

具体到dpi数据现在的工作,就是从特征的选择,到提取转化,到模型上线。

此外我们希望能够设计出一套更快速的迭代出特征的方法,方便公司其他同事,有选取一些好的特征的想法时,就能快速的实现,并进行建模测试。

实际的工作

实际中,训练集的大小,正样本的大小也就1万多条,算上负样本,也就3万,现在单点计算能力,基本可以hold住,随便玩。但是面对预测集合呢?
需要注意的是,你对训练集进行的一些特征处理的手段,是要应用到训练集上的一旦使用了一些异常值处理,比如计算分位数,这些,sortby 之后再操作,开销是非常可观。

同时,因为分布式计算的特性,所以一些算法,在spark 训练时,效率和性能 都不如 R python 单机训练,这也需要对Spark本身进行优化

模型上线实现方案 及 遇到的坑

R server

因为做数据分析的,大部分是使用R的,但是R这个语言,是搞统计的写的,并不能很好的工程化。

微软买了个R server,类似于提供了一个接口,去调用R训练好的模型。
R Server其实是对开源R从研究角度向工业生产角度的一种努力。微软的R其实包括了微软R Open和R Server。 ROpen是基于开源R的一个改进实现,对开源R从底层基于(英特尔数学核心函数库)提供了多线程的支持。RServer其实主要有两个最重要的功能,第一个是分布式,第二是DeployR,也就是部署。RServer能够支持分析任务运行的时候,数据能够从磁盘读取,不需要在任务开始时就把所有数据加载到内存。在这个基础之上,R Server就可以通过多台机器协同工作进行分布式的R分析任务。这个支持是通过ScaleR完成,并不是所有的开源R包都能实现分布式。DeployR主要是指开发完R脚本之后可以通过简单的Publish Service就把R发布成web服务提供服务,不需要额外的开发和运维成本。

通过三种模式提供R Server服务

第一种是在物理机或者虚拟机上安装R Server, 这种R Server可以提供Web结点和Compute 结点,其中Web结点用来发布模型提供Web 服务,Compute Node则主要用于计算。这两种Node是逻辑概念,可以部署在同一物理机上。多台机器可以组成R Server的服务集群,应对大量请求和Fail Over,通过DeployR发布web服务主要推荐这种方式。

第二种是在Azure上将HDInsight集群和R Server结合, 在Spark的基础之上提供R的分析能力,在这种模式,HDInsight提供了Edge Node作为R的开发环境,开发完成的Rscript可以直接通过rxSetComputeContext切换到 Spark Context在Spark的大数据集上分布式运行。运行结果可以通过DeployR发布在Edge Node或者其他R Server集群上。 Edge Node的发布不具备fail over的能力。

第三种就是SQL Server +R 的模式,这种模式可以把完成开发之后的Rscript嵌入到Sql Server的存储过程中,通过存储过程调用的方式对SQL server数据进行分析,简化了数据移动和处理的过程。在Sql Server上运行R也能支持ScaleR, 但是目前ScaleR的高性能和分布式只有企业版支持,其他版本相对较低。

优势
可以直接使用R模型

缺点
无法处理大规模数据量 R本身的局限性, 环境要求特殊

python sklearn

sklearn是机器学习中一个常用的python第三方模块,里面对一些常用的机器学习方法进行了封装,在进行机器学习任务时,并不需要每个人都实现所有的算法,只需要简单的调用sklearn里的模块就可以实现大多数机器学习任务。

优势
包很多,资源很丰富,发展快

缺点
无法处理大规模的数据

模型转化pmml

全称(Predictive Model Markup Language),利用XML描述和存储数据挖掘模型,是一个已经被W3C所接受的标准。MML是一种基于XML的语言,用来定义预测模型。

它为各个公司定义预测模型和在不同的应用程序之间共享模型提供了一种快速并且简单的方式。通过使用标准的XML解析器对PMML进行解析,应用程序能够决定模型输入和输出的数据类型,模型详细的格式,并且按照标准的数据挖掘术语来解释模型的结果。 

PMML提供了一个灵活机制来定义预测模型的模式,同时支持涉及多个预测模型的模型选择和模型平衡(model averaging)。对于那些需要全部学习(ensemble learning)、部分学习(partitioned learning)和分布式学习(distributed learning)的应用程序,这种语言被证明是非常有用的。另外,它使得在不同的应用程序和系统之间移动预测模型变得容易、方便。

优势
跨语言,跨平台

缺点

  • 当模型表述比较复杂的时候,如 随机森林,PMML会过大,加载报错
  • 使用PMML 需要字段名、字段类型完全匹配
  • 当特征名过多时,创建DataFrame 不可行 (通过hive 建表,然后从hive 读取的方式,但是编写schema 太过冗长,且整个过程过于冗长)
  • PMML 版本问题,spark 1.6.3 只支持4.2
  • 模型必须是单纯的模型,不能包含任何特征处理,如果有特征处理,必须归入pipeline
  • 不同环境下,模型的支持情况不同

Tips

  • 想要使用PMML进行模型跨环境使用,需要满足下列条件
  • 表述模型的兼容性
  • 表述模型的复杂性不可过高
  • 表述模型的字段名,字段类型必须保持一致,这个涉及到各环境模型训练的细节,必须在训练前先设计好

pyspark & Rspark

  • 版本的坑
  • API的坑
  • 环境的坑

Scala 写 Spark

优势

  • 无缝衔接

缺点

  • 效率低,准确度低,慢,难以收敛
  • API 中坑,没有办法存文件
  • 版本的坑,新版的api 支持的功能更多。比如 去除outlier 之后的 MaxAbsScaler,多项式展开 PolynomialExpansion

直接写一个java类

  • 需要对模型有深入了解
  • 需要编程能力较强

ref

一张图看懂数据科学家、数据工程师和软件工程师之间的区别
[原]深入对比数据科学工具箱:Python和R之争[2016版]