一种数据生成方法和装置
技术领域
本公开涉及互联网应用技术领域,特别涉及一种数据生成方法和装置。
背景技术
随着机构间业务合作越来越频繁,对于不同的业务场景,需要根据不同的数据结构设计一套业务模型,来支持业务运行。例如,在信贷业务中,风险控制是其中一个重要因素,通过风控可以获取优质客户,降低资金信贷风险;实际实施中,可以设计一套授信模型,以及预警规则、校验规则等确保风险控制。
仍以信贷业务为例,在设计上述的预警规则、校验规则和授信模型等之后,为了校验这些模型规则的正确性,需要生成对应该信贷业务场景的数据结构的全量数据集,再利用该全量数据集去测试上述的模型和规则是否正确可行。在生成全量数据集的过程中,现有技术所使用的数据生成方法支持的是扁平的数据结构的全覆盖,然而实际业务合作中还将遇到复杂数据结构的场景,目前的全量数据集生成方法无法满足实际应用的需要。
发明内容
有鉴于此,本公开提供一种数据生成方法和装置,以实现对复杂数据结构下的全量数据集的覆盖。
具体地,本公开是通过如下技术方案实现的:
第一方面,提供一种数据生成方法,所述方法用于生成一种数据结构下的全量数据集,所述数据结构包括至少一个数据模块,每个数据模块下包括至少一个数据字段;各个数据模块中均包括归类字段,对于所述全量数据集中的每一个数据,所述归类字段在不同数据模块下具有相同取值;所述方法包括:
设置所述归类字段的多个取值;
对于每一个数据模块,执行如下操作:将所述归类字段的每一个取值,分别与所述数据模块中归类字段之外的其他字段的字段配对集进行组合,得到分别对应各个取值的模块全量集;
将各个数据模块中对应归类字段的同一取值的模块全量集,根据所述数据结构的关联关系进行联合,得到所述数据结构的全量数据集。
第二方面,提供一种数据生成装置,所述装置用于生成一种数据结构下的全量数据集,所述数据结构包括至少一个数据模块,每个数据模块下包括至少一个数据字段;各个数据模块中均包括归类字段,对于所述全量数据集中的每一个数据,所述归类字段在不同数据模块下具有相同取值;所述装置包括:
取值设置模块,用于设置所述归类字段的多个取值;
组合处理模块,用于对于每一个数据模块,执行如下操作:将所述归类字段的每一个取值,分别与所述数据模块中归类字段之外的其他字段的字段配对集进行组合,得到分别对应各个取值的模块全量集;
全量获取模块,用于将各个数据模块中对应归类字段的同一取值的模块全量集,根据所述数据结构的关联关系进行联合,得到数据结构的全量数据集。
本公开的数据生成方法和装置,通过使用归类联合配对算法,通过归类字段找到各个模块中对应同一用户的数据,并可以通过配对算法对模块中的其他各个字段进行配对,还可以根据数据结构的层级关系将各个模块进行联合,从而形成该数据结构下的全量数据集,这种方法能够支持复杂数据结构,可以满足复杂数据结构下的全量数据集的生成需求。
附图说明
图1是本公开实施例提供的一个树形数据结构示意图;
图2是本公开实施例提供的一个数据生成方法的流程图;
图3是本公开实施例提供的一个数据生成装置的结构示意图。
具体实施方式
在设计出一套业务模型后,需要测试该业务模型的正确性和可行性。可以根据所述业务模型应用的业务场景,生成该业务场景下使用的数据结构的全量数据集,以通过该全量数据集测试模型。所述的全量数据集,指的是覆盖业务场景下所有可能的数据,使用全量数据集进行测试有助于准确检验模型或业务规则的正确性。所述的数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,以及该集合中数据元素之间的关系。
如下本申请的例子中,以信贷方面的应用场景为例来说明如何使用本申请的数据生成方法生成全量数据集,但是,该方法同样可以应用于其他需要生成全量数据集的业务场景。
下面以“供货交易”业务为例,来说明在这个业务场景下,数据结构的形式,以及如何根据本申请的方法生成该数据结构下的全量数据集。
数据结构:
数据结构可以包括至少一个数据模块,每个数据模块(后续描述中将简称“模块”)下包括至少一个数据字段(后续描述中将简称“字段”)。在数据结构中,可以定义上述的各个模块或字段之间的关系,比如,某模块下包括两个字段;数据结构中还可以定义各个字段的取值。
上述的数据结构中的模块或字段的关联关系,可以配置成如图1示例的模板的形式。在供货交易业务场景中,数据结构可以包括两个模块,一个是用户基本信息模块(User)11,一个是订单信息模块(Order)12。其中,订单信息模块12下又可以包括三个子模块,分别为采购订单模块(Purchase Order)121、预付订单模块(Advance Order)122和订单汇总信息模块(Order Summary)123。上述的各个模块下,还分别包括至少一个字段,例如,用户基本信息模块11可以包括用户标识字段(用于唯一标识一个用户)111和用户名字段112。其他模块的字段后续以表格示出。由图1可以看到,这是一个树形的数据结构。此外,校验规则、预警规则等规则可以定义在整个模板域下。
图1所示的树形数据结构中,订单信息模块12是用户基本信息模块11的兄弟节点,采购订单模块121是订单信息模块12的子节点(反之,订单信息模块12是采购订单模块121的父节点),这种父子或兄弟关系可以称为层级关系。
表1用户基本信息模块
表2采购订单模块
表3预付订单模块
表4订单汇总信息模块
在上面提到的层级关系之外,数据结构中还可以包括一种相等关系,该相等关系代表树形结构中的字段取值相同。举例来说,假如三个字段A、B和C是相等关系的字段,那么如果A的取值是value1,就可以得出B和C的取值也等于value1。具体到本例子的供货交易的数据结构来说,表1中的用户标识字段User Id、表2中的用户标识字段userId、表3中的用户标识字段userId以及表4中的用户标识字段userId,这四个字段就可以称作是相等关系的字段。例如,在一个例子中,某一个用户的数据,可以包括上述的表1至表4中的各个字段,并且,分别位于表1至表4中的用户标识字段的取值相等,都是该用户的标识。
在通过类似图1的模板定义数据结构时,模板的生成遵循重复原则,比如,模块A和模块AA中包含相同的字段,例如上述例子中,用户基本信息模块和采购订单模块中都包括用户标识字段User Id,那么在字段定义时可以重复创建,即在用户基本信息模块下创建一个用户标识字段,在采购订单模块也创建一个用户标识字段,这样能做到分层次隔离。同理,如果在不同模板中模块相同,那么模块定义时也重复创建。
模块或字段之间的关系通过模板创建之外,数据结构的确定,还需要定义各个字段的取值。例如,某一个字段的取值可以是枚举类型的取值a/b/c。本例子中,对于字段的取值,可以设置用于定义取值规则的配置文件,用于执行本申请方法的数据生成装置可以通过获取执行配置文件,自动生成字段的取值。
例如,对于枚举类型,在规则定义中可以设置所有的枚举值。对于数值类型,配置文件中可以定义【0-100】、【200-300】、【500-max】,那么数据生成装置可以自动识别该数值类型分为三段,从每段中随机选取一个数值。又例如,对于字符串类型,可以根据该字段类型做特殊的生成规则,如手机号、邮箱、工商注册号等。对于时间类型,可以同样做一个时间分区,不同时间断选择一个代表性的时间点等。
本例子在字段取值的生成,相比现有技术可以大大提高字段取值的生成速度;因为现有技术不管字段是何种类型,都需要人为设置固定可选的几种取值,本申请的例子中可以根据配置文件的约定规则,自动生成字段的取值。
通过上述描述可以看到,对于一套数据结构,可以通过模板定义该数据结构中的各个模块或字段之间的关联关系,并且可以通过配置文件来定义字段的取值规则,从而快速生成所述的数据结构。
数据结构下的全量数据集的生成:
如下通过图2说明对于上述例子中的供货交易的数据结构,生成全量数据集的流程如下,数据生成装置根据获取到的数据结构模板和字段取值的配置文件,结合本申请的数据生成方法的流程,就可以自动的快速生成全量数据集。如图2,该方法可以包括如下处理,实际实施中不限制各步骤的执行顺序。
在步骤201中,设置数据结构中的归类字段的多个取值。
本例子中,所述的归类字段分别位于不同的模块中,可以用于将所述不同模块中的数据进行关联。
举例来说:在供货交易的例子中,可以包括用户基本信息模块、采购订单模块、预付订单模块等多个模块,每一个模块都可以包括很多用户的数据,对于某一个用户来说,如何由各个模块中将该同一个用户的数据关联起来,就可以依据用户标识字段User Id。可以将同一个User Id下的各个模块的数据关联起来,均为同一个用户(即该User Id唯一标识的用户)的数据。例如,上述的表1至表4中都包括用户标识字段User Id,将同一个User Id下的各个模块的数据关联起来,就是该用户的基本信息、采购订单信息、预付订单信息等数据。
本步骤中,还可以设置该归类字段的多个取值。比如,可以根据配置文件,自动生成不相同的100个32位数字组成的字符串,作为User Id的取值。
在步骤202中,对于每一个模块,执行如下操作:将所述归类字段的每一个取值,分别与所述模块中归类字段之外的其他字段的字段配对集进行组合,得到分别对应各个取值的模块全量集。
本步骤中,可以遍历用户基本信息模块、采购订单模块、预付订单模块、订单汇总信息模块,对于其中的每一个模块,将模块中归类字段userId之外的其他字段,可以根据pairwise配对算法,得到其他字段的字段配对集。
例如,由字段的取值中选择固定的几个可选值,如采购订单模块中的额度字段,可选值为250000、750000、1250000、1750000和2250000。所有字段的可选值做正交,会得到一个全量的组合集,设置一个配对率,从所有的全量组合集中过滤所需要的组合,即得到字段配对集。这里的字段配对集,即使用配对算法找到模块中归类字段之外的其他字段的可能组合。
然后,可以由模块中的归类字段的多个取值中,选择一个取值,将选择的所述取值与上述获得的字段配对集组合,得到所述模块的对应所述取值的模块全量集;再由所述归类字段的多个取值中,选择另一个取值,将选择的另一个取值与字段配对集组合,得到所述模块的对应所述另一个取值的模块全量集。
以用户基本信息模块为例,可以由步骤201中生成的100个取值中选择一个取值,将该取值与本步骤得到的用户基本信息模块的字段配对集进行组合,得到该用户基本信息模块对应所述取值userId的模块全量集。然后,再由100个取值中选择另一个取值userId,与字段配对集组合成对应该另一个取值userId的模块全量集。如此循环,直至得到用户基本信息模块中分别与各个取值userId对应的模块全量集。
采购订单模块、预付订单模块等其它模块,都可以按照上述用户基本信息模块的操作处理,直到所有的模块都遍历到,得到各个模块的分别对应各个归类字段取值的模块全量集。
在步骤203中,将各个模块中对应归类字段的同一取值的模块全量集,根据所述数据结构的关联关系进行联合,得到所述数据结构的全量数据集。
例如,对于归类字段的一个取值,获取各个模块中对应所述取值的模块全量集;将所述各个模块中对应所述取值的模块全量集,根据所述数据结构中定义的模块之间的关联关系进行联合,得到对应所述取值的数据;对于所述归类字段的另一个取值,获取各个模块中对应所述另一个取值的模块全量集;将所述各个模块中对应所述另一个取值的模块全量集,根据所述数据结构中定义的模块之间的关联关系进行联合,得到对应所述另一个取值的数据。如此循环,直至得到分别对应各个取值的数据,即得到所述数据结构的全量数据集。
以供货交易为例,可以将userId相同的不同模块的模块全量集,根据供货交易数据结构进行联合,得到最终全量的具有相等和层级关系的数据集。
本申请的数据生成方法,可以称为一种归类联合配对算法,比如,在供货交易的例子中,可以通过归类字段找到各个模块中对应同一用户userId的数据,并可以通过配对算法对模块中的其他各个字段进行配对,还可以根据数据结构的层级关系将各个模块进行联合,从而形成该数据结构下的全量数据集。这种方法能够支持复杂数据结构,例如本例子的树形数据结构,可以满足复杂数据结构下的全量数据集的生成需求。此外,还通过模板和配置文件定义数据结构,只要提供一个模板和配置文件,就可以根据本申请的数据生成方法自动生成百万甚至千万级别的全量数据集。
为了实现上述方法,本申请还提供了一种数据生成装置,如图3所示,该装置用于生成一种数据结构下的全量数据集,所述数据结构包括至少一个模块,每个模块下包括至少一个字段;该装置可以包括:
取值设置模块31,用于设置所述数据结构中的归类字段的多个取值,所述归类字段分别位于不同的模块中,用于将所述不同模块中的数据进行关联;
组合处理模块32,用于对于每一个模块,执行如下操作:将所述归类字段的每一个取值,分别与所述模块中归类字段之外的其他字段的字段配对集进行组合,得到分别对应各个取值的模块全量集;
全量获取模块33,用于将各个模块中对应归类字段的同一取值的模块全量集,根据所述数据结构的关联关系进行联合,得到所述数据结构的全量数据集。
在一个例子中,组合处理模块32,具体用于根据pairwise配对算法,得到所述模块中归类字段之外的其他字段的字段配对集;由所述模块中的归类字段的多个取值中,选择一个取值;将选择的所述取值与所述字段配对集组合,得到所述模块的对应所述取值的模块全量集;由所述归类字段的多个取值中,选择另一个取值;将选择的所述另一个取值与所述字段配对集组合,得到所述模块的对应所述另一个取值的模块全量集。
在一个例子中,全量获取模块33,具体用于对于归类字段的一个取值,获取各个模块中对应所述取值的模块全量集;将所述各个模块中对应所述取值的模块全量集,根据所述数据结构中的层级关系进行联合,得到对应所述取值的数据;对于所述归类字段的另一个取值,获取各个模块中对应所述另一个取值的模块全量集;将所述各个模块中对应所述另一个取值的模块全量集,根据所述数据结构中的层级关系进行联合,得到对应所述另一个取值的数据。
在一个例子中,取值设置模块31,还用于获取用于定义取值规则的配置文件;根据所述配置文件,生成所述数据结构中的字段的取值。
在一个例子中,所述数据结构是树形数据结构。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。