在金融风控领域,很多从业者都面临一个尴尬的现状:

传统的统计学评分卡(Scorecard)虽然解释性强,但在应对海量非线性数据时,模型效果往往触碰到了“天花板”;而纯粹的黑盒机器学习模型,又因为无法通过监管审计、难以解释逻辑,被长期束之高阁。

如何在保持严苛解释性的同时,压榨出数据的最后一丝价值?

在最近 InfiniSynapse 落地的一个头部金融案例中,我们尝试通过机器学习算法对评分卡进行了深度重构。本文将介绍如何在 InfiniSynapse 中使用机器学习功能来完成金融评分卡建模。本案例使用UCI信用卡违约数据集,这是一个高质量的金融评分卡数据集。通过用户的年龄、还贷等各种特征,来判断用户下一个月是否会违约。

准备数据

首先需要连接数据,点击 数据源/创建数据库:

新建数据库 UCI_Credit_Card:

接着上传UCI信用卡违约数据集:

了解数据和算法

然后先了解当前数据集的情况:

询问 InfiniSynapse 是否有和评分卡相关的机器学习算法:

可以看到,InfiniSynapse 会提示系统内置了专门的 ScoreCard算法(该算法内部使用了线性回归来做预测),并且说明了该算法的用途和场景。

开始工作

经过实际测试,ScoreCard 依赖的 Binning 算法在当前版本的效率有待优化,因此本案例采用SQL 进行特征工程,然后使用随机森林等分类算法来做预测。

通过 InfiniSynapse 进行特征工程:

接着训练模型:

评估模型效果:

测试集效果:

如果效果不理想,可以让 InfiniSynapse 调整参数再次训练模型,设定目标准确率后系统将自动迭代优化。

模型部署

现在将模型进行部署:

在 InfiniSynapse 中,模型可以被注册成一个SQL函数,之后即可使用该SQL函数进行预测:

然后统计准确率,或者对数据做预测保存起来。

外部使用特征工程和模型

关于特征工程以及训练好的模型是否可被外部使用,InfiniSynapse 提供了标准的 Rest 接口,可以通过如下方式访问:

curl -X POST "http://localhost:9003/model/predict" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "dataType=row" \ --data-urlencode "owner=<你的用户id>" \ --data-urlencode "sessionPerUser=true" \ --data-urlencode 'data=[{"LIMIT_BAL":80000,"SEX":2,"EDUCATION":2,"MARRIAGE":1,"AGE":35,"PAY_0":0,"PAY_2":0,"PAY_3":0,"PAY_4":0,"PAY_5":0,"PAY_6":0,"BILL_AMT1":25000,"BILL_AMT2":22000,"BILL_AMT3":18000,"BILL_AMT4":15000,"BILL_AMT5":12000,"BILL_AMT6":10000,"PAY_AMT1":5000,"PAY_AMT2":4000,"PAY_AMT3":3000,"PAY_AMT4":2000,"PAY_AMT5":1500,"PAY_AMT6":1000}]' \ --data-urlencode 'sql=vec_argmax(predict_credit_risk(vec_dense(array(CAST(LIMIT_BAL AS DOUBLE) / 10000.0, CAST(SEX AS DOUBLE), CAST(EDUCATION AS DOUBLE), CAST(MARRIAGE AS DOUBLE), CAST(AGE AS DOUBLE) / 100.0, CAST((CASE WHEN PAY_0 > 0 THEN 1 ELSE 0 END) + (CASE WHEN PAY_2 > 0 THEN 1 ELSE 0 END) + (CASE WHEN PAY_3 > 0 THEN 1 ELSE 0 END) + (CASE WHEN PAY_4 > 0 THEN 1 ELSE 0 END) + (CASE WHEN PAY_5 > 0 THEN 1 ELSE 0 END) + (CASE WHEN PAY_6 > 0 THEN 1 ELSE 0 END) AS DOUBLE), (CAST(BILL_AMT1 AS DOUBLE) + CAST(BILL_AMT2 AS DOUBLE) + CAST(BILL_AMT3 AS DOUBLE) + CAST(BILL_AMT4 AS DOUBLE) + CAST(BILL_AMT5 AS DOUBLE) + CAST(BILL_AMT6 AS DOUBLE)) / 60000.0, (CAST(PAY_AMT1 AS DOUBLE) + CAST(PAY_AMT2 AS DOUBLE) + CAST(PAY_AMT3 AS DOUBLE) + CAST(PAY_AMT4 AS DOUBLE) + CAST(PAY_AMT5 AS DOUBLE) + CAST(PAY_AMT6 AS DOUBLE)) / 6000.0, CASE WHEN CAST(LIMIT_BAL AS DOUBLE) > 0 THEN ((CAST(BILL_AMT1 AS DOUBLE) + CAST(BILL_AMT2 AS DOUBLE) + CAST(BILL_AMT3 AS DOUBLE) + CAST(BILL_AMT4 AS DOUBLE) + CAST(BILL_AMT5 AS DOUBLE) + CAST(BILL_AMT6 AS DOUBLE)) / 6.0) / CAST(LIMIT_BAL AS DOUBLE) ELSE 0.0 END, CASE WHEN (CAST(BILL_AMT1 AS DOUBLE) + CAST(BILL_AMT2 AS DOUBLE) + CAST(BILL_AMT3 AS DOUBLE) + CAST(BILL_AMT4 AS DOUBLE) + CAST(BILL_AMT5 AS DOUBLE) + CAST(BILL_AMT6 AS DOUBLE)) > 0 THEN (CAST(PAY_AMT1 AS DOUBLE) + CAST(PAY_AMT2 AS DOUBLE) + CAST(PAY_AMT3 AS DOUBLE) + CAST(PAY_AMT4 AS DOUBLE) + CAST(PAY_AMT5 AS DOUBLE) + CAST(PAY_AMT6 AS DOUBLE)) / (CAST(BILL_AMT1 AS DOUBLE) + CAST(BILL_AMT2 AS DOUBLE) + CAST(BILL_AMT3 AS DOUBLE) + CAST(BILL_AMT4 AS DOUBLE) + CAST(BILL_AMT5 AS DOUBLE) + CAST(BILL_AMT6 AS DOUBLE)) ELSE 0.0 END, CAST(CASE WHEN AGE < 25 THEN 0 WHEN AGE < 35 THEN 1 WHEN AGE < 50 THEN 2 ELSE 3 END AS DOUBLE))))) as prediction'

其中 owner 设置为用户ID:

然后data 是要预测的数据。 sql 是对要预测数据先做特征工程然后加模型预测。 下面是预测结果:

总结

尽管当前ML功能还处于Beta 阶段,但可以看到,从数据特征工程、模型训练到模型部署(内部或外部使用),InfiniSynapse 都能够自主完成全流程操作。通过大幅降低数据分析和传统机器学习算法的使用门槛,InfiniSynapse 致力于让全球所有个人和企业都能真正实现数据驱动的决策与创新。

更多推荐