加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

让AI造福金融,支付宝端到端AI系统SQLFlow实践

发布时间:2020-07-10 19:52:39 所属栏目:动态 来源:站长网
导读:导语: 端到端机器学习是一种由输入端的数据直接得到输出端结果的AI系统,它可以对业务人员屏蔽复杂技术细节,同时给模型以更多自动调节空间,增加模型整体契合度。近两年来,端到端机器学习成为AI领域研发热点,蚂蚁集团于2019年4月发布端到端AI系统SQLFlow开源

对于这样的一个包含许多语句的 SQL 程序,SQLFlow 会将其解析,编译成一个可以在Kubernetes + Argo集群上运行的 workflow。workflow 中每一个步骤(step)可以是执行标准的 SQL,也可以是执行分布式模型训练或预测任务。这个Workflow 会被提交到 Kubernetes 集群上,交由Argo Workflow Engine调度执行。这个workflow的执行结果会从Kubernetes集群返回到用户。

通常情况,使用SQL语句编写的一个SQL程序,会被编译成一个顺序的 workflow,step by step 地执行。但有些 SQL 语句的 step 不是相互依赖的,可以并发地执行。如果我们使用如Hive 这样的引擎,同时提交两个 SQL 语句,其实是可以生成2个 Map-Reduce 任务并发的在集群上执行的。SQLFlow 会自动的分析 SQL 程序中的 SQL 语句之间的依赖关系,并尽量的增大SQL程序的并发度,生成一个具有依赖关系 workflow 执行,最大限度的利用集群资源,降低整段 SQL程序的执行时间。这个功能,省去了很多传统平台上,用户需要手动的构建任务和任务之间依赖关系的工作,因为所有的任务都可以用 SQL 语言描述,计算的依赖图自然可以自动生成。

让AI造福金融,支付宝端到端AI系统SQLFlow实践

使用 SQLFlow Model Zoo 沉淀模型

在构建AI应用时,另一个关键的任务就是需要编写模型定义的代码。SQLFlow 社区提供了 Model Zoo 框架,方便模型开发的同学不断的沉淀应用场景为通用的模型,并贡献到私有或公有的模型库,减少业务和开发之间的沟通成本。

SQLFlow 为快速构建AI任务提供了足够的模型弹药库。使用 ModelZoo 框架,算法开发可以将模型贡献成公开的模型,让更多的 SQLFlow 用户享受便利,也可以定向地分享给部分用户,保证模型的安全使用不泄密。基于模型库,业务同学可以直接使用 SQL 语句引用模型库中的模型,探索业务应用,发布业务应用;算法同学可以更加专注于提升模型效果、开发、更新模型的工作上面。这样不仅可以减少沟通成本,也可以提升工作成果的复用能力。

另外,Model Zoo 平台的代码也是完全开源的。用户完全可以在公司内部搭建自己的 Model Zoo 并且只在公司内分享模型。同时,用户可以连接到公开 Model Zoo 获取或者贡献新的模型。这样不便于对外公布的,和业务场景强绑定的一些模型,就可以在公司内逐步沉淀,构建公司自己的核心算法库。

应用 SQLFlow 的场景案例

下面,我们结合一些蚂蚁的实际场景,解释SQLFlow 在实际业务应用中的使用方法。

第一个例子是资金流入流出预测。我们这里展示的是使用天池的公开数据集,其实蚂蚁内部的业务也在使用相同的方法。这个数据集包含了资金的申购,赎回在一段时间内的详情(脱敏),我们需要预测未来时间内资金申购、赎回的量。

SELECT time, purchase FROM fund.train

TO TRAIN sqlflow_models.ARIMAWithSTLDecomposition

WITH model.order=[7, 0, 2],

model.period=[7, 30],

model.date_format="%[2]s",

model.forecast_start='2014-09-01',

model.forecast_end='2014-09-30'

LABEL purchase

INTO purchase_predict_model;

在示例SQL语句中,我们使用了模型 sqlflow_models.ARIMAWithSTLDecomposition 应对此类场景。ARIMAWithSTLDecomposition 模型在金融领域有较为广泛的应用,该模型将输入的时间序列数据自动的提取不同时间窗口的周期性特征构建模可以获得比较好的结果。另外,SQLFlow也提供了基于LSTM的深度学习模型用于训练时间序列模型。

因为此数据集数据量不大,这个训练任务可以在一台机器上完成训练。此模型训练之后可以达到MAPE 5%的表现。

第二个例子是较为复杂的场景,使用SQLFlow构建点击率预估模型。我们以kaggle的一个开源数据集 (https://www.kaggle.com/c/criteo-display-ad-challenge/data) 为例,蚂蚁在类似的场景中,也会使用同样的方法构建模型。这个数据集中,列 l1~l13 是脱敏之后的连续值特征,c1~c26列是离散类别特征,离散类别特征存储为hash string。

SELECT label,COALESCE(NULLIF(l1, ''),0) AS ll1,COALESCE(NULLIF(l2, ''),0) AS ll2,

COALESCE(NULLIF(l3, ''),0) AS ll3,COALESCE(NULLIF(l4, ''),0) AS ll4,COALESCE(NULLIF(l5, ''),0) AS ll5,

COALESCE(NULLIF(l6, ''),0) AS ll6,COALESCE(NULLIF(l7, ''),0) AS ll7,COALESCE(NULLIF(l8, ''),0) AS ll8,

COALESCE(NULLIF(l9, ''),0) AS ll9,COALESCE(NULLIF(l10, ''),0) AS ll10,COALESCE(NULLIF(l11, ''),0) AS ll11,

COALESCE(NULLIF(l12, ''),0) AS ll12,COALESCE(NULLIF(l13, ''),0) AS ll13,C*

FROM alifin_jtest_dev.sqlflow_ctr_train_raw

TO TRAIN DNNLinearCombinedClassifier

WITH model.dnn_hidden_units=[64,32], train.batch_size=32, validation.throttle_secs=300

COLUMN NUMERIC(“^ll[0-9]+$”, 1) FOR linear_feature_columns

COLUMN EMBEDDING(CATEGORY_HASH(“^C[0-9]+$”, 100), 8, "sum") FOR dnn_feature_columns

LABEL 'label'

INTO my_ctr_model;

我们可以使用以上的 SQL 语句描述训练一个「Deep and Wide」模型,将l1~l13列作为模型的线性部分的输入,将c1~c26特征作为模型的dnn部分输入。其中 COLUMN 语句分别可以使用正则表达式指定哪些些列作为模型哪部分的输入。我们将离散特征通过 HASH 分桶,然后增加 embedding 层的方法,将原始字符串特征输入传递给模型。注意这条 SQL 语句同时也可以包含部分预处理功能,使用COALESCE 函数填充l1~l13列中的缺失值。

在蚂蚁点击率预估实际任务中,我们通常会有很多的预处理SQL语句,获得这张训练数据表,然后将训练数据再切分成训练集和验证集,再使用SQLFlow进行训练。这些步骤在蚂蚁都是使用MaxCompute 的 SQL 语句编写的。所以整个点击率预估应用,从预处理到训练只需要编写一段 SQL 语句即可。不同于其他图形化平台,SQL 程序也可以存入代码仓库,方便code review。

最后一个例子是 SQLFlow 的重要贡献者滴滴在去年云栖大会分享的一个应用:滴滴司机出车偏好分析。探索出不同类别的司机,可以为后续策略投放和管理提供信息。左侧数据表中为每个司机的每天的出车时长数据,每一列表示10分钟,一天有144个10分钟,就是144个数据点,每个点是在这10分钟内司机出车的时间比例。这样我们就可以在JupyterNotebook使用 matplot 得到如下图的这样的可视化展示,这张图里明显看不出来任何规律。

让AI造福金融,支付宝端到端AI系统SQLFlow实践

然后我们使用DeepEmbeddingClusterModel来进行聚类分析,编写如下的SQL:

SELECT * FROM driver_log.train

TO TRAIN sqlflow_models.DeepEmbeddingClusterModel

WITH model.n_clusters=5

INTO cluster_dirver_model;

其中 model.n_clusters=5 指定把数据聚成5类。然后使用下面预测SQL语句输出聚类结果:

SELECT * FROM driver_log.train

TO PREDICT dirver_log.predict.class

USING cluster_driver_model;

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!