越来越多企业开始尝试使用机器学习算法来预测业务,并逐渐在线上部署。但机器学习和深度学习的技术栈繁渣。有多种编程语言,运行环境。稳定性,可用性,维护方式不同以往的IT服务。技术负责人需要设计良好的架构,发掘业务潜力也要保障生产系统稳定性。本文主要介绍:
1.理解机器学习算法训练流程。
2.提供线上模型部署架构方案
3.掌握模型治理和运维的方案。
1.机器学习应用的领域:
电商: 推荐系统
金融:反欺诈,打分卡,信用评分
安全:攻击检测
2.什么是模型:
大家都知道机器学习训练是为了得到模型。那什么是模型呢?
假设如下算法用于预测房价。
Y=w1*x1+w2*x2+wn*xn +b
所谓模型训练就是找到预测最准的[w1,w2,wn,b]参数。 训练结束后,将[w1,w2,wn,b] .存储到文件中,可以称为模型。模型就等于训练得到的参数
部署到生产时候,使用保存的[w1,w2,wn,b] 初始化 Y=w1*x1+w2*x2+wn*xn+b。这个模型就可以用来预测房价。
整个过程类似序列化,反序列化过程。
3.机器学习工具集:
Scikit learn (python)
Tensorflow (python,c++)
spark mlib (java)
Mahout (java)
Dl4j
R
各种工具都不能互相替代。生成的模型文件格式不同,编程语言不同。
甚至是同样参数用不同工具预测结果会相差很大。
4.模型表达通用标准:
PMML 是一种事实标准语言,用于呈现数据挖掘模型。预测分析模型 和数据挖掘模型 是指代数学模型的术语,这些模型采用统计技术了解大量历史数据中隐藏的模式。预测分析模型采用定型过程中获取的知识来预测新数据中是否有已知模式。PMML 允许您在不同的应用程序之间轻松共享预测分析模型。因此,您可以在一个系统中定型一个模型,在 PMML 中对其进行表达,然后将其移动到另一个系统中,并在该系统中使用上述模型预测机器失效的可能性等
相关说明可以查看:
http://dmg.org/pmml/v4-1/GeneralStructure.html
https://www.ibm.com/developerworks/cn/opensource/ind-PMML1/
有几点需要注意:
PMML支持部分模型。
各种工具都有生成PMML功能。
可以通过开源Openscoring 来部署PMML模型。Drools 也只支持PMML.
5.模型评测标准:
主要是准确率和召回率,AUC. 比如复杂场景,需要自己设计标准。网上资料比较多这里就不详细说明
6.模型训练过程(离线学习)
数据处理->特征处理-模型训练-模型选择->生产部署
7.模型部署方案:
可以考虑直接dump.然后在生产环境load运行。可以使amazon s3做模型管理,md5做个hash用来管理版本管理。
比较标准做法是使用PMML.特别对外交付的场景。
PMM是一种标准化的模型表示方式。托管平台openscoreing .,
架构模式A:
这种模式优点:
- 可以减少数据交互。比如推荐系统,输入是个user id ,返回推荐列表。
- 外部数据补充。比如征信场景,输入是一个手机号。征信服务提供商就要在数据库中收集这个手机相关信息。再对收集到的数据进行预测。
实现方式有主要两种,数据收集可以在前端完成或者后端,可以考虑实现难度和解耦承担来权衡。
模式B:
所需数据全部由外部传入。基础服务一般使用这种架构。比如自然语言,图片处理,语音识别。
在线学习:
只有生成模型才可以在线学习。不是本文重点就不展开说明了。
8.模型治理:
8.1 模型质量监控:
需要设定一些业务指标,通过阈值,历史数据环比来进行监控和预警。
及时指标:响应时间,通过率,点击率,转化率
长期指标:反馈周期很长的指标。比如违约率,都需要2个月以后才能判断是否违约。所以数据库需要保留,贷款客户和模型版本的关系。
8.2 响应时间:
根据模型算法不同,处理时间10ms到10分钟不等。
建议采用异步服务架构模式,一般可以考虑api-消息队列来处理。预测解决通过通知接口或者轮询获取
8.3 模型版本控制:
PMML有相应的版本说明。如果用原始模型文件需要自己添加一些机制,来处理。比如计算模型文件hash值。
8.4 降级方案:
如果模型一旦出现问题,很难debug. 而且修复时候会很长。只考虑回滚或下线。需要和业务方明确这一点并提前做好预案。
----------
http://www.cnblogs.com/codemind/