首页 > 编程知识 正文

qpython,linux python

时间:2023-05-03 09:41:28 阅读:49493 作者:2907

风控业务背景

经过漫长的离线模型设计开发之旅,我们终于迎来了最终的在线部署的一环。 这也是你需要密切注意的步骤,也是一个需要规范的过程。 那么这个流程到底是什么样的呢?

本文主要介绍模型引入(在线)技术方案和在线一致性比对的注意事项。 目录

Part 1.风控模型部署框架

Part 2.统一数据源建设

Part 3.变量完整性匹配

Part 4.模型一致性匹配

Part 5. Python部署在线

Part 6. PMML部署在线

第7部分.总结

谢谢您

版权声明

参考资料

Part 1.风控模型部署框架

在《风控模型开发流程标准化》中,我们的系统介绍了模型开发流程。 但是在实际工作中,不仅仅是在这个过程中开发模型。 我们需要和上下游的同学沟通。 模型先生:根据业务需求,根据离线数据建立风控模型,负责模型的部署、监控、维护等。

战略学生:根据离线预测的模型分数,制定相应的风控战略方案,配置战略包等。

开发同学:支持基础数据源访问、问题排除、在线部署、平台建设等工作。

风控模型通常在正式上线运行后,至少持续运行半年以上。 这就要求模型的稳定性、可控性放在首位。

在实际的在线环境中,存在着数据源API接口调用失败、输入变量被错误操作覆盖、客户层发生了变化等各种干扰,这些因素导致风力发电系统(型号)发生异常这将引起决策失误,最终导致巨大的经济损失。

为了在第一时间发现在线问题,我们一般采取各种监测手段。 在线部署过程中,我们主要关注一致性监测,关注数据层,即实时数据和离线数据的字段名、格式、取值等三个匹配维度。

变量级别:匹配联机变量和脱机变量的字段名称、逻辑、可能的值等。

分数级别:模型的在线分数和离线分数值匹配。 图1 -风控模型部署框架

模型脱机放置通常涉及数据预处理,如准备数据、生成输入模态变量的宽表、输入缺少值、映射变量名称和类型转换。

加载模型:输入模型的pkl文件并将模型加载到内存中。

评分预测:整理业务逻辑流程,输入特征变量,对总量申请订单T 1进行批量预测评分。

匹配:用于检查与用于建模的呆帐销售订单的预测得分相比,模型文件版本存储错误、数据预处理与建模阶段不匹配等问题。

模型的实时部署通常采用几种利用Java、Spark等创建微服务API接口输出的方案,但这要求建模学生具有较强的工程开发能力。 或者,通过开发同学协助在线,交流成本很高。 另一方面,风力发电系统往往需要隐私,知道影响决策的因素越少的人越需要隐私。 所以,这不是个好方案。

平台工作流部署:例如蚂蚁金服的PAI平台,业务学生可以自行搭建工作流,快速实现在线部署。 这是一个比较友好的方案,可以对业务学生屏蔽很多技术细节,像积木一样构建业务工作流程。

虽然还有其他方案,如策略包SMG3自部署,但存在配置复杂的问题。

笔者倾向于推荐建立算法平台,当然这不是一件容易的事。 因此,根据公司的规模和业务需求,可以灵活选择合适的在线计划。

Part 2.统一数据源建设

在线数据=离线数据

数据治理是数据驱动的业务关键。 统一数据源意味着在线数据源是一致的。 建设统一数据源的必要性是变量一致性的前提:建模阶段的样本特征基于离线数据,在线预测基于实时数据。 数据源匹配是保证在线变量匹配的基本前提。

数据源质量监控:在线数据可能出现异常,需要长时间持续监测,比较检测异常值,发出报警。

因此,我们通常采用将实时数据快照T 1落在库中并生成离线数据的技术方案。 这包括限额、定价和支出等多个环节的数据源。

设立数据集市(Data Mart、DM ),监测数据分布(EDD )和记录数量等数据质量。

线下特征开发完成后,我们经过多次论证,确认符合变量命名规范、业务逻辑、可实时上线等要求,最后进入特征市场进行统一管理。

Part 3.变量完整性匹配

变量=数据逻辑

影响变量不匹配的主要因素分为数据源和逻辑两部分。 在前文中,首先确保数据源一致,需要故障排除的其余要素是计算逻辑。 实时变量开发:根据脱机变量结构逻辑,可以利用实时SQL引擎、Java、Spark等完成实时变量开发。 即使在线逻辑是离线错误的,也必须积极匹配在线逻辑。

变量匹配:自定义数值精度(例如小数点后3位),实时变量与脱机变量之间的匹配匹配通常要求至少95%以上的匹配。

Part 4.模型一致性匹配

模型分数=输入变量业务逻辑

在保证内模式变量一致性的前提下,在构建业务工作流的阶段仍然有可能出现问题。 特别是在需要设计变量有效性判断、多个分支(降级、分组等)、集成学习架构等复杂逻辑的情况下,细小的错误往往会引起预测结果的错误。

因此,我们需要和离线部署预测的模型分数进行比对,检查在线部署逻辑是否正确。为了能在真实环境中批量比对,我们一般会dry run(只打分,不决策)一段时间,等一致性评估达到预期标准后,才由灰度上线切换为正式上线。

Part 5. Python部署上线

pkl文件是Python独有的格式,我们通常会将模型保存为该格式,实现快速读取和使用。但在模型保存中,常有一些注意事项:入模变量和顺序是否保存?

模型文件命名是否规范?

多个版本保存时是否覆盖?

附A1:PKL文件保存和载入方法

def pkl_save(model, save_file_path):

'''------------------功能:将训练完成的模型保存为pkl文件------------------:param model: sklearn机器学习包实例化后训练完毕的模型:param save_file_path: str, 保存模型文件的目标路径------------------:return None------------------'''

import pickle

if not save_file_path.endswith('.pkl'):

raise Exception('参数save_file_path后缀必须为pkl, 请检查!')

with open(save_file_path, 'wb') as f:

pickle.dump(model, f, protocol=2)

f.close()

print('模型文件已保存至{}'.format(save_file_path))

def load_pkl_model(save_file_path):

'''------------------功能:模型使用,载入pkl文件。注意此时预测时列名为['x0', 'x1', ...]------------------:param save_file_path: str, 保存模型文件的目标路径------------------:return model: sklearn机器学习包实例类型。预测时用法: model.predict_proba(df[feat_list])[:, 1]------------------'''

import os

from sklearn.externals import joblib

if not os.path.exists(save_file_path):

raise Exception('参数save_file_path指向的文件路径不存在, 请检查!')

model = joblib.load(save_file_path)

return model

Part 6. PMML部署上线

我们利用预测模型标记语言(Predictive Model Markup Language,PMML)可实现跨平台的机器学习模型部署。

PMML是一套基于XML的标准,通过 XML Schema 定义了使用的元素和属性,主要由以下核心部分组成:1. 数据字典(Data Dictionary),描述输入变量的取名、类型。

2. 数据转换(Transformation Dictionary和Local Transformations),应用在输入数据字段上生成新的派生字段。

3. 模型定义 (Model),每种模型类型有自己的定义。

4. 输出(Output),指定模型输出结果。

PMML预测过程符合数据挖掘分析流程:利用Python将离线训练得到的模型保存为PMML模型文件。

利用Java将PMML模型文件载入在线预测环境,进行预测。

附A2:PMML文件保存和载入方法

def pmml_save(model, feat_list, save_file_path):

'''------------------功能:将训练完成的模型保存为pmml文件------------------:param model: sklearn机器学习包实例化后训练完毕的模型:param feat_list: list, 最终入模的特征变量列表。若不指定feats_list, 那么写入的pmml中特征名默认取值为['x0', 'x1', ...]:param save_file_path: str, 保存模型文件的目标路径------------------:return None------------------'''

from sklearn2pmml import sklearn2pmml, PMMLPipeline

from sklearn_pandas import DataFrameMapper

if not save_file_path.endswith('.pmml'):

raise Exception('参数save_file_path后缀必须为pmml, 请检查!')

mapper = DataFrameMapper([([i], None) for i in feat_list])

pipeline = PMMLPipeline([('mapper', mapper), ("classifier", model)])

sklearn2pmml(pipeline, pmml=save_file_path)

print('模型文件已保存至{}'.format(save_file_path))

def load_pmml_model(save_file_path):

'''------------------功能:模型使用,载入pmml文件。------------------:param save_file_path: str, 保存模型文件的目标路径------------------:return model: sklearn机器学习包实例类型。预测时用法: model.predict(json_input_data)------------------'''

from pypmml import Model

if not os.path.exists(save_file_path):

raise Exception('参数save_file_path指向的文件路径不存在, 请检查!')

model = Model.fromFile(save_file_path)

return model

Part 7. 总结

本文系统梳理了模型上线部署的解决方案,主要内容在于:论述建设统一数据源的意义,以及线上线下一致性监控(数据、变量、分数维度)的框架。

将模型文件保存为pkl和pmml文件,并载入模型的相关方法。

致谢

感谢参考资料的作者带给我的启发。本文尚有理解不当之处,在此抛砖引玉。

版权声明

欢迎转载分享,请在文章中注明作者和原文链接,感谢您对知识的尊重和对本文的肯定。

⚠️著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处,侵权转载将追究相关责任。

参考资料Data Mining Group​dmg.org漫漫成长:PMML实现模型上线​zhuanlan.zhihu.comAI-Predict:使用PMML部署机器学习模型​zhuanlan.zhihu.com阿里重磅发布机器学习平台PAI 3.0​blog.csdn.net

关于作者:

在某互联网金融公司从事风控建模、反欺诈、数据挖掘等方面工作,目前致力于将实践经验固化分享,量化成长轨迹。欢迎交流

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。