本发明涉及计算机科学软件信息技术领域,特别是涉及一种基于半结构化文本数据的企业风险规则引擎运算方法。
背景技术:
规则引擎近年来被广泛应用于金融及反欺诈领域,帮助监控和发现目标客户群体中的异常、风险、商机等。大多规则引擎在整体设计上大致可划分为两个大块,其一为规则体系的构建,其二为数据流的运算体系构建。目前,业内对于被规则引擎使用的数据而言,主要包含了用户行为(如登录、注册、浏览、收藏、消费等)数据、企业财务数据等;这类数据大多有着结构化、可度量的特性。例如用户行为数据就离不开次数、频率、价格、时间等概念。然而在面对处理互联网上爬取的大量非结构化、半结构化数据时,传统的规则引擎面临难以量化文本信息的挑战。
传统的规则引擎,其底层存储通常是结构化的数值型数据表。认知上,某条规则的触发,是由计算的指标数值与阈值比较的结果决定的。我们把这一类运算划分为4个角色:左变量、运算符、右变量、结果值。通常这类数值与数值之间的运算体系,可能涉及到的变量类型包括整形、浮点型、布尔值等。字段之间的运算方式则包括四则运算、函数运算、逻辑运算等。然而在非结构化、或者半结构化文本数据领域,“可计算”却变得不那么容易实现,规则配置的灵活性受到极大地挑战。例如一篇新闻提及某企业的法人代表时,会对该企业产生怎样的影响?如果人来观察,会有一个感性的认知,但机器却无法在未定义某一目标时,给出一个可能的量化指标。因此更谈不上规则的配置与触发了。
技术实现要素:
针对上述现有技术的不足,本发明提供了一种基于半结构化文本数据的企业风险规则引擎运算方法,使规则引擎能够在半结构化文本数据中得到量化指标。
为了解决上述技术问题,本发明采用了如下的技术方案:
一种基于半结构化文本数据的企业风险规则引擎运算方法,所述企业风险规则引擎包括数据融合层、数据筛选层、数据标准化层以及指标运算层,所述指标运算层包括指标配置模块和指标运算模块,所述数据融合层包括数据接入模块,所述数据筛选层包括m个条件筛选器,m为不小于1的正整数,所述数据标准化层包括数据标准化模块;所述企业风险规则引擎运算方法包括以下步骤:
s1、构建底层量化模块:枚举企业基础信息与文本抽取信息的数据类型组合,定义各数据类型之间的计算方式,所述企业基础信息与文本抽取信息的数据类型为底层量化模块;
s2、根据底层量化模块的类型,定义底层量化模块的运算体系;
s3、根据指标需求制定指标依赖的字段,并通过s2定义的运算体系将字段串接得到符合用户业务需求的指标,所述用户业务需求的指标通过逻辑运算得到指标组,所述指标组通过逻辑运算得到规则;
s4、数据接入模块根据指标配置模块设置的指标读取外部数据库的数据并传输至数据筛选层;
s5、所述数据接入模块读取外部数据库的数据通过所述m个条件筛选器进行筛选;
s6、筛选后的数据通过数据标准化模块得到格式统一的数据并传输至指标运算模块;
s7、指标运算模块根据指标配置模块配置的规则对所述格式统一后的数据进行运算,得到数据量化指标。
作为优化,步骤s4的具体步骤如下:
s4.1、在所述指标配置模块中定义指标依赖的字段及字段类型;
s4.2、将所述指标依赖的字段以约定的规范配置在脚本代码头部并将指标上传至所述数据接入模块中;
s4.3、所述数据接入模块通过解析脚本代码中所述指标依赖的字段读取与所述数据接入模块连接的数据源、接口的相应字段的集合。
作为优化,s7中,指标运算模块对数据的运算为以脚本驱动的指标集群运算,具体步骤如下:
s7.1、将所有指标和数据进行匹配;
s7.2、设置指标脚本驱动模块,通过执行指标驱动模块传入逻辑控制参数;
s7.3、脚本驱动模块将指标运算任务指派给spark集群,通过mapreduce模型将整体的指标运算任务拆解;
s7.4、spark集群将拆解后的指标运算任务依据运算器的“繁忙程度”,挂载到相对闲置的运算器;
s7.5、每个运算器通过运算后将结果合并返回。
作为优化,步骤s2中的运算体系包括四则运算、函数运算、逻辑运算、集合运算。
作为优化,每个运算器的运算结果在特定的时间区间内被存入至缓存模块。
作为优化,在所述脚本驱动模块内设有sparkcontext,用于连接脚本驱动模块和spark集群中的cluster管理器。
本发明的有益效果是:
本发明使规则引擎能够在半结构化文本数据中得到量化指标。同时,本发明还一定程度上克服了与既有系统对接困难,部署复杂等问题。本发明只需要实施人员熟悉相关业务,能够根据脚本实现风险点的计算逻辑,即可把整个对接、分发、计算、归并的规则引擎数据流程走完。最终在客户端,其呈现的是场景可选的、逻辑可配的规则集配置问题。
附图说明
图1为本发明所述的一种基于半结构化文本数据的企业风险规则引擎运算方法的流程图。
图2为指标的集群运算的系统结构图。
具体实施方式
下面结合附图对本发明作进一步的详细说明。
图1是本申请提供的一种基于半结构化文本数据的企业风险规则引擎运算方法的流程图。该实施例的方法一旦被用户触发,则该实施例中的流程通过终端自动运行,其中,各个步骤在运行的时候可以是按照如流程图中的顺序先后进行,也可以是根据实际情况多个步骤同时进行,在此并不做限定。
运行本申请的运算方法的企业风险规则引擎包括数据融合层、数据筛选层、数据标准化层以及指标运算层,指标运算层包括指标配置模块和指标运算模块,数据融合层包括数据接入模块,数据筛选层包括m个条件筛选器,m为不小于1的正整数,数据标准化层包括数据标准化模块;企业风险规则引擎运算方法方法包括以下步骤:
s1、构建底层量化模块:枚举企业基础信息与文本抽取信息的数据类型组合,定义各数据类型之间的计算方式,企业基础信息与文本抽取信息的数据类型为底层量化模块。通过统计,底层量化模块分为5类:字符串类(string)、数值类(numeric)、时间类(datetime)、地址类(string,继承字符串类,含经纬度属性)、布尔类(boolean)。
s2、根据底层量化模块的类型,定义底层量化模块的运算体系。本实施例中,运算体系包括四则运算、函数运算、逻辑运算、集合运算。
四则运算包括+(加)、-(减)、*(乘)、/(除);函数运算包括len、sum、avg、max、min、log、sqrt(平方根)、square(平方)、ceil、floor、power(指数幂)、mod(取余数);逻辑运算包括not、and,or、
其中,四则运算,左变量类型为numeric,右变量类型为numeric,结果类型为numeric;
函数运算,对于符号len,左变量类型为list(string)、list(numeric)时,右变量类型可以为任意类型,结果类型为numeric;
函数运算,对于符号sum、avg、max、min,左变量类型为list(numeric)时,右变量类型可以为任意类型,结果类型为numeric;
函数运算,对于符号log、sqrt(平方根)、square(平方)、ceil、floor,左变量类型为numeric时,右变量类型可以为任意类型,结果类型为numeric;
函数运算,对于符号og、sqrt(平方根)、square(平方)、ceil、floor,左变量类型为list(numeric)时,右变量类型可以为任意类型,结果类型为list(numeric);
函数运算,对于符号power(指数幂)、mod(取余数),左变量类型为numeric时,右变量类型为numeric,结果类型为numeric;
函数运算,对于符号power(指数幂)、mod(取余数),左变量类型为list(numeric)时,右变量类型为numeric,结果类型为list(numeric);
逻辑运算,对于符号not,左变量类型为boolean时,右变量类型可以为任意类型,结果类型为boolean;
逻辑运算,对于符号and,or,左变量类型为boolean时,右变量类型为boolean,结果类型为boolean;
逻辑运算,对于符号
逻辑运算,对于符号
逻辑运算,对于符号startswith、endswith,左变量类型为string,右变量类型为string,结果类型为boolean;
集合运算,对于符号∩(交集),∪(并集),diff(差集),左变量类型为list(numeric)时,右变量类型为list(numeric),结果类型为list(numeric);
集合运算,对于符号∩(交集),∪(并集),diff(差集),左变量类型为list(string)时,右变量类型为list(string),结果类型为list(numeric)。
其中,list(numeric),表示以数值类型填充的列表数据,list(string),表示以字符串类型填充的列表数据。
在逻辑运算中:
对于
startswith:字符串以特定文本作为开始;
endswith:字符串以特定文本作为结束。
startswith和endswith是函数,需要入参。比如:
“book”.startswith(“bo”)→true,指book这个字符串以bo开头。
这里”bo”作为入参,就是一个由规则配置者决定的特定文本。
执行本申请的方法的规则引擎需要能够支持数值列表之间的交、并、差集运算、字符串列表之间的交、并、差集运算。
s3、根据指标需求制定指标依赖的字段,并通过s2定义的运算体系将字段串接得到符合用户业务需求的指标,用户业务需求的指标通过逻辑运算得到指标组,指标组通过逻辑运算得到规则。指标配置模块为用户使用端,用户可以通过指标配置模块对指标进行配置。
例如f1(int),f2(listofint),f3(string),f4(listofint)为4个字段,通过自定义的串接形式得到的指标可能为:(f1+max(f2∩f4))/length(f3)。具体根据人为的设定条件进行设定串接方式。
而某规则的表现形式可以抽象为:
rule=index_set_aandindex_set_borindex_set_c
index_set_a=(index_a1orindex_a2)andindex_a3
index_set_b=index_b1orindex_b2
index_set_c=index_c1
其中,index_a1、index_a2、index_a3、index_b1、index_b2、index_c1是指标,index_set_a、index_set_b、index_set_c是指标组,rule是规则。其中,指标组和指标为1对多关系;规则和指标组为1对多关系,指标组、规则均为布尔类型。
s4、数据接入模块根据指标配置模块设置的指标读取外部数据库的数据并传输至数据筛选层。具体步骤为:
在指标配置模块中定义指标依赖的字段及字段类型;
例如,需要某企业的判决文书(judgedoc)进行判断,
其中,litigant描述了判决文书中涉案当事人的相关信息、涉案类别以及判决结果;lawsuit则描述了判决文书涉及的相关金额和判决金额信息,judgedoc则描述了包含了litigant、lawsuit及判决文书的时间信息。符号”!”表示该字段必须非空,符号”[]”则表示返回的结果为列表类型。
【指标a】:“判决文书中,1年内主体累计涉及的金额”时,依赖的字段有:
·litigant.name,当事人名称
·lawsuit.amount,涉案金额
·trialdate,判决时间
将指标依赖的字段以约定的规范配置在脚本代码头部,配置如下:
src:search-law-xxxxxxxx.amazonaws.com.cn
-litigant.name
-lawsuit.amount
-trialdate
-type
src:jdbc:mysql://ip:port/db
-companyname
-frname
这里的约定的规范是根据指标的实现所依赖的计算机语言的编码特性,在系统开发方和系统使用方(在业务场景中为配置规则的一方)之间约定的规范,用以让系统运行指标时能够明白,从哪些数据源获取依赖的数据字段。不同的计算机语言环境有不同的约定规范。本实施例的语言环境是java的计算机语言环境,所以运用的是java的规范。
将指标上传至数据接入模块中:
其中,name、amount为指标a依赖的字段,litigant、lawsuit为指标,judgedoclist为数据接入模块代码。当指标被上传时,被上传的指标获得一个唯一的指标id,并且每一次编辑指标会更新指标的版本号。对指标的编辑是在用户页面上进行的,版本号可以通过系统内置的版本号命名,也可以根据用户的习惯进行命名,根据用户习惯命名指标版本号是在用户界面上进行。
数据接入模块通过解析脚本代码中指标依赖的字段读取与数据接入模块连接的数据源、接口的相应字段的集合。
例如有s1,s2,s3这3个数据源,f11、f12、f13、f14为相关字段集合,f11、f12属于s1,f13属于s2,f14属于s3,数据接入模块的脚本代码配置有f11、f12、f14的字段,所以,数据接入模块读取s1、s3的数据。
s5、数据接入模块读取外部数据库的数据通过m个条件筛选器进行筛选。
数据筛选层包括m个基于自选条件的数据筛选器,用于对数据融合层读取的数据做进一步筛选,通过设置n个条件的与或逻辑来配置数据筛选器;其中,m、n均为不小于1的正整数。
数据筛选层对数据接入模块读取的数据做进一步筛选:
例如【指标a】有关的数据中,“trialdate”的数据可能会有:“2010/04/30”、“2012-11-30t00:00:00”、“2016.09.30”、“2018-10-31t00:00:00”。
在数据筛选层设置数据筛选器,例如数据筛选器的条件为trialdate>2015.12.31,则经过筛选的“trialdate”为“2016.09.30”、“2018-10-31t00:00:00”。
s6、筛选后的数据通过数据标准化模块得到格式统一的数据并传输至指标运算模块。
在数据标准化层对“trialdate”进行标准化,“2016.09.30”转化为“2016-09-30t00:00:00”。
本实施例中,数据标准化模块为基于graphql的模块。
graphql是一种标准化的语言,本实施例中,将筛选后的数据的数据类型通过graphql标准化工具将数据格式转化为json格式,由于json格式的数据有着较复杂的数据结构,使得与关系型数据库数据的字段联合使用时,存在格式一致性转换的难点,因此将所有数据通过graphql标准化工具解决了后续数据运算存在格式难转换的问题。graphql标准化工具是已经现有的技术,这里就不在赘述了。
graphql定义了以下几种类型的数据:
·标量类型,囊括了以下几种基础数据类型的规范化:
οint:有符号32位整数
οfloat:有符号双精度浮点值
οstring:utf-8字符序列
οboolean:布尔值
οid:唯一标识符
图2为指标的集群运算的结构图。指标运算模块对格式统一后的数据进行运算,得到数据量化指标。具体运算为以脚本驱动的指标集群运算,具体步骤为:
s7.1、将所有指标和数据进行匹配。
数据是根据指标所依赖的字段进行读取的,所以数据可以通过字段与指标对号入座,一一匹配。
s7.2、设置指标脚本驱动模块,通过执行指标驱动模块传入逻辑控制参数;根据不同的场景不同的规则可以设置不同的逻辑控制参数。
s7.3、脚本驱动模块将指标运算任务指派给spark集群,通过mapreduce模型将整体的指标运算任务拆解,在脚本驱动模块内设有sparkcontext,用于连接脚本驱动模块和spark集群中的cluster管理器。
spark集群是专为大规模数据处理而设计的快速通用的计算引擎。
sparkcontext是连接脚本驱动模块和cluster管理器的api接口。
mapreduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题。mapreduce由两个阶段组成:map和reduce。map的应用在于我们需要数据一对一的元素的映射转换,比如说进行截取,进行过滤,或者任何的转换操作,这些一对一的元素转换就称作是map;reduce主要就是元素的聚合,就是多个元素对一个元素的聚合,比如求sum等,这就是reduce。
s7.4、spark集群将拆解后的指标运算任务依据运算器的“繁忙程度”,挂载到相对闲置的运算器。实际上就是spark集群中的cluster管理器将拆解后的指标运算任务依据运算器的“繁忙程度”,挂载到相对闲置的运算器,运算器也就是mapreduce中的map。
本实施例中,判断运算器的“繁忙程度”是根据nginx负载均衡进行判断的。cluster管理器会监控运算器的响应速度,这里的运算器是指服务器,也就是电脑,cluster管理器监控电脑的cpu的占用率,将指标运算任务分配至cpu占用率低的电脑上进行运算。若其中有一个运算器宕掉,cluster管理器会判断并将其自动剔除,并将指标运算任务分配到下一个运算器中。
s7.5、每个运算器通过运算后将结果合并返回,也就是说运算后将结果在reduce合并,每个运算器的运算结果在特定的时间区间内被存入至缓存模块。
举例说明:若有多个指标运算任务,分别为(a1:1+1)、(a2:2+2)、(a3:3+3)、(a4:name1∩name2)、(a5:date1∩date2);其中,a1、a2、a3、a4、a5为指标,五个指标运算任务分别放到了map中进行运算,得到五个结果值:(a1:2)、(a2:4)、(a3:6)、(a4:name1∩name2)、(a5:date1∩date2),mapreduce模型在map将指标运算任务处理完成之后,将指标对应的结果值进行分类并缓存到存储模块中,本实施例是根据指标运算所依赖的字段进行分类的,依赖同一个字段的结果值分到同一组,相同的组放到一个reduce中进行运算。例如,a1、a2都是依赖同一个字段,那么,在reduce中最终运算的结果值是(a1+a2:6)、(a3:6)、(a4:name1∩name2)、(a5:date1∩date2),最后将结果值返回至客户端。本实施例中的缓存模块是cache,即高速缓冲存储器。
最后应说明的是:本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等统计数的范围之内,则本发明也意图包含这些改动和变型。