如何搭建风控规则引擎？
在消费金融业务场景中，决策引擎扮演的角色重要性不言而喻。作为风控的大脑，决策引擎承载的是风控业务的专家经验，基于变量和模型的输入，经过复杂的决策流逻辑运算，最终输出决策结果。决策引擎产品提供可视化操作，支持判断逻辑的多种组合，流程链路配置，支持0开发部署上线，使得策略迭代速度能够得到最大的优化。 决策引擎是风控运营、风控策略同学的工作台。一款优秀的决策引擎产品不仅能帮助风控策略人员全生命周期管理决策，快速迭代策略，实现高效能的规则管理，灵活的流程配置，还能降低开发人员的维护成本，释放开发人效。 笔者在金融行业的从业经历中，经历过从1到100的决策引擎的优化迭代，也经历过从0到1决策引擎的规划和起步。本文重点介绍如何从0到1规划和落地一款风险决策引擎。 决策引擎要从0到1落地，一方面需要产品经理要具备很强的风控业务sense，能深入理解风险决策全流程，掌握决策组件的构成机制；另一方面，需要掌握如何打造决策引擎的MVP（最小可行性产品）的1.0版本，以及规划到2.0以及3.0版本。 我们先来了解下 金融信贷风控业务的主流程（各公司不同产品决策流程会有细微差异，但基本主干一致）： 决策引擎最底层的抽象就是利用系统配置出可执行的决策流。决策流的组成结构可抽象成： 变量：最小的原子组件，也称指标，比如 年龄，性别，放款金额，逾期天数，信用分等 规则：规则由变量经过组合加上阈值逻辑后形成，一般有单变量规则和多变量规则，比如某条单变量准入规则：年龄 < 18 或者 年龄 > 55 则拒绝 规则集：规则集是一系列规则的集合，或者叫一个决策节点，比如我们会把多个准入规则集合在一起称为 准入规则集，或者反欺诈规则集 决策流：决策流是根据决策节点（规则集）按照先后顺序或者分流顺序连接而成的一个决策模块。比如 申请决策流包括准入规则集，反欺诈规则集等，授信决策流模块包括额度规则集等。一般消费分期业务还有 支付决策流等。 很明显，决策引擎的MVP，即1.0版本要实现以上流程和组件的可配置化，跑通风险主流程 第一阶段：构建决策引擎MVP 功能模块包括：指标管理 + 规则配置 + 决策流配置 在实现以上功能模块后，基本上可以形成业务主流程闭环，投产使用。在具体的业务需求上，我们规划出后续几个阶段的功能模块 第二阶段：支持更多组件和灵活配置 功能模块包括：组件管理（规则+评分卡+模型） + SQL代码配置规则 第三阶段：完善数据和监控服务 功能模块包括：名单管理 + 征信源管理 + 决策监控 第四阶段：抽象公用，支持更多产品线 功能模块包括：产品管理 + 决策流配置 + 决策流复用 基于以上四个阶段的规划，基本形成了一个自用决策引擎，能满足绝大多数风险业务的需求 基于以上四个阶段的迭代后，最终呈现的是一个相对完整的决策引擎产品，包括： 指标管理，组件管理，决策流配置，数据管理，决策监控，权限管理，产品管理 各个功能模块的主要功能点如下： 一、 指标管理 由业务方根据实际业务提出相应需求，后端开发完成后，在引擎内部进行配置、测试、组合新指标等管理功能。指标管理分为 指标维护，指标测试，指标搜索功能模块。 指标维护： 1） 展示所有目前库中指标，可以根据指标名称、征信源、指标分类来搜索指标 点击指标名可以看到指标的开发逻辑； 2） 新增指标：进入指标编辑页面，填写下表信息及开发逻辑； 3） 编辑指标：进入指标编辑页面，对已有信息进行编辑； 4） 上线指标：确认指标无误后，点击上线，规则等可以正常使用； 5） 下线指标：下线后，线上有使用此指标的的规则将失效；在使用中的字段，点击下线后需要提示警告； 注： （1） 指标会在后续规则管理中编辑时使用，如后台无相应字段，规则无法正常使用。 （2） 变量类型为选项：INT/FLOAT/STRING/ARRAY等。 （3） 默认值：在变量开发时约定每个字段的默认值。 （4） 变量分类：对变量进行分类，可以选择多个，搜索时可以根据分类挑选。 （5） 是否依赖征信源：变量是否用到征信源，如有选择征信源名称。 （6） 是否使用中：在线上的策略中是否有用到这个字段，此项不可编辑。 指标测试： 1） 输入测试：选取所需要测试的指标，输入所依赖的数据源内容，获取字段结果； 2） 批量测试：随机从线上数据中获取数据，批量获取字段结果； 指标搜索： 1） 根据指标名称可以搜索相应指标，采用联想搜索 2） 根据分类可以搜索类别下所有字段 二、 规则管理 将指标根据逻辑进行组合成规则，再将规则组合成以下内容： 规则、规则表、评分卡、复杂模型、决策树 测试完成后在决策流中使用。 1. 组件管理 1） 规则：根据指标，选择表达式、指定条件值，得到输出的决策结果（规则决策结果为True/False）： （1） 页面式：通过网页实现拖拽式操作 （2） 脚本式：为熟悉代码的操作人员预留脚本编辑规则的空间。 数学、文本表达式：>,<,=,>=,<=,!=,in, not in ,contain, not contain, isnull , isnotnull（后续可根据业务需求添加） 逻辑表达式：&, || （后续可根据业务需求添加） 操作页面： （1） 输入规则代号、名称、注释保存；（每个代号都是唯一）； （2） 编辑规则逻辑：选择指标，选择表达式，输入条件值；选择逻辑关系，增加条件；（选择时通过关键字搜索或通过下拉框，选择相应指标） （3） 测试：输入对应指标值，点击测试获取测试结果； （4） 测试完成后，点击发布，将组件生效； （5） 测试中如果遇到问题，需要展示错误原因（例：某字段输入值不正确） 规则配置页面：  规则生成代码编辑页面： 2） 规则表：根据规则，选择逻辑关系，得到输出的决策结果（可以为多个结果，文本、数值等）： 逻辑关系：&, ||，contain, not contain （1） 输入规则表代号、名称、注释保存；（每个代号都是唯一）； （2） 先配置兜底结果（默认值）； （3） 点击新增一行条件，在左侧选取规则，选择逻辑关系，右侧配置指定输出参数；（选择时通过关键字搜索或通过下拉框，选择相应指标） （4） 测试：输入对应指标值（规则中用到的值），点击测试获取测试结果（所有出参部分）； （5） 测试完成后，点击发布，将组件生效； 3） 评分卡：根据字段，选择表达式、指定条件值，得到输出的决策结果（仅评分）： 数学、文本表达式：>,<,=,>=,<=,!=,in, not in ,contain, not contain, isnull , isnotnull, 逻辑表达式：&, || （1） 输入评分代码，名称和注释。（每个代号都是唯一）； （2） 选择增加“评分项”，填写此项权重； （3） 编辑左侧选择指标，表达式，在右侧输入Score；（选择时通过关键字搜索或通过下拉框，选择相应指标） （4） 整体评分卡（整体评分如何计算：最终得分 = 评分项1 * 权重1 + 评分项2 * 权重2 +...）和每个单一的评分项，均可以测试，点击评分项，测试单独评分项，显示此项内指标；点击空白处，测试整个评分卡，显示所有指标； （5） 测试完成后，点击发布，将组件生效； 三. 决策流 将规则、规则表、评分卡、模型等进行串联，形成决策流，实现对贷前、贷中、贷后或运营的全流程处理。 （1） 绘制决策流图，设置节点； （2） 在节点中配置规则、规则表、评分卡等组件；（选择时通过关键字搜索或通过下拉框，选择相应组件） （3） 在节点中允许配置：A/B Test（设置命中比例）、命中但不执行决策结果、控制征信源启用； （4） 允许复制决策流，复制的决策流包含所有使用内容； （5） 点击发布前对决策流整体流程进行在测试环境进行测试，确保流程没有任何问题，后进行预发布。 （6） 点击预发布，查看发布后结果，无问题正式发布上线； （7） 选择节点时，可以查看到其所用到规则、规则表、评分卡等组件，点击相应组件可以直接去到对应的组件页面  版本管理 规则、规则集、评分卡等组件和决策流，在测试完成后都需要进行发布生效。 （1） 预发布：在正式发布前，有一道预发布，决策会同时运行线上正式版本和预发布的版本，待观察预发布版本无问题后，点击正式发布，替换线上版本。 （2） 版本回退：保留之前版本，点击发布，允许旧版本替换现有线上版本 （3） 可以新增一个版本，也可以编辑当前版本，但编辑当前版本保存后自动会生成新的版本； 四. 数据管理 数据管理分为 名单管理和外部数据源管理两个功能模块 1） 名单管理 在页面中维护（新增、删除、修改）客户名单，分黑、白、灰3类。支持名单的新增，修改，上传，查看来源，禁用以及修改记录。 2） 外部数据管理 管理外部数据源，控制数据源是否调用，以及调用节点 五. 决策监控 针对线上使用内容，进行数据监控，并可以进行报警。 1、 监控线上决策内容是否报错，如有问题，按小时颗粒度进行报警； 2、 监控征信源数据是否异常；如：开关关闭，仍有调用； 3、 可以选取对应的决策流节点，选择时间端，查的策略命中情况； 六． 权限管理 权限管理是通用的模块，业内比较成熟，一般产品会基于用户，角色，资源三个维度来设计权限管理模块。满足风控决策引擎如下功能即可： 设置管理员、用户、设置权限组（角色），对相关用户或组配置相对应的页面（资源）权限。 1、 管理员：最大的使用权限, systemadmin 2、 用户：普通使用人员，可单独配置相应权限； 3、 角色（权限组）： 根据组配置相应权限，下属用户能直接获取相应权限； 七． 产品管理 对产品进行区分，每个产品有单独的决策流分支，对所属规则、字段进行组合配置。 1）维护产品（新增、删除、修改产线名称） 2）维护事件（新增、删除、修改事件类型）（例：新户额度流、新户决策流）。 3）产品下只能看到本产品下的事件。但允许复制产品下事件至另一产品下，保留本事件下所有内容。  总结一下 决策引擎的功能模块： 金融风控决策引擎产品的前身来自于规则引擎，是规则引擎在金融场景的应用。金融场景决策引擎的鼻祖当属FICO推出的Blaze，在互联网金融出现前，传统金融机构几乎清一色使用的是商用的Blaze产品。随着互联网金融，金融科技，大数据，实时场景的到来，Blaze已经不能满足多样化个性化风控场景的需求，各家大厂纷纷自研决策引擎，比如美团的Zeus规则引擎，蚂蚁的智能风控引擎AlphaRisk，携程Argis风控引擎等，都是业界优秀的决策引擎产品，值得每一个风险/数据产品经理 研究。在开源社区也涌现出很多开源优秀的规则引擎产品，比如drools，urule，radar等，一般中小型公司会直接参考开源引擎，在此基础上二次开发来满足自身风控业务的需求。业界自研加上开源支持，让决策引擎产品不断发展完善。 金融风控只是规则引擎的一个应用场景，风险领域或广义上的大安全领域还包含 交易风控，内容风控，流量风控。多种复杂的业务风控场景都需要一款规则引擎来进行策略的快速迭代。 未来随着更多场景的应用，规则引擎也会不断进化，展望下更高阶的规则引擎，未来可能的两个发展方向： 实时化：大数据发展，计算能力的发展，将提升现有决策引擎的算力和处理时效 智能化：在现有的风控决策引擎上融入了自言语言处理平台、流计算平台、实时预警、深度学习、可视化科学计算等，比如风控规则的自动探索生成。 智能规则引擎或许在不远的将来会引领人们走向一种新的思维模式与编程行为，一切皆规则，人们要做的事情就是把能够采集到的业务数据直接扔给智能决策引擎，剩下的，就让智能决策引擎自己去处理吧。