

(1)样本准备,产品业务团队定义业务范围,确定建模的目标,选择样本人群准备训练集。(2)数据处理,需要对数据进行缺失值、异常值、错误值、数据格式的的清洗,使用连续变量、离散变量、时间序列等进行数据转换。(3)特征开发,数据处理完成后就可以进行特征衍生,金融特征主要通过审批逻辑衍生,行为总结量化,穷举法,去量纲,分箱,WoE,降维,One-Hot 编码等进行特征衍生,之后依据特征质量,比如特征指标(ks、iv、psi)或者预计逾期率等进行特征筛选。(4)模型开发,要进行算法的选择和模型的拟合。(5)模型训练,使用测试数据集进行模型算法的测试验证,进行参数的调优。(6)模型应用,模型开发好之后就需要进行线上化的一个部署。(7)模型监控,上线后需要持续的监控和模型的迭代优化。
众安金融,一方面为普惠人群提供公信征信支持,另一方面也为银行等资金机构来提供风险缓释,助力普惠金融。众安金融为无抵押的纯线上消费贷款平台提供信用保证保险服务,也为其他金融机构提供信用保证保险服务。众安保险作为保险公司在其中承担理赔的责任,所以就要求我们需要对风险进行全面识别、准确计量、严密监控。我们搭建了以大数据为基础、以风控规则与模型为策略,以系统平台为工具的大数据风控体系。通过利用大数据与个人信用的关联挖掘出大量的用户风险特征和风险模型,从而提升风控的预测能力。随着风控策略的精细化,模型应用的规模化,特征使用的实时化,对我们的特征开发和模型应用提出了更快速更实时的要求,所以我们就开始尝试进行特征平台体系化的实践。
(1)大数据平台:数据开发工程师使用大数据平台的能力采集到相关的业务数据,构建基于主题域的离线数据体系,同时把相应的数据回流同步到在线 NoSQL 存储引擎,提供给实时特征平台使用。(2)特征工程:数据科学家在大数据平台进行特征工程的建设,使用离线数仓进行特征的挖掘和特征的选择。(3)机器学习平台:数据科学家借助机器学习平台可以进行一站式的模型开发和应用。(4)实时特征平台:开发好的特征和模型需要在实时特征平台进行注册,在实时特征平台配置好相关的信息后,就可以通过实时特征平台的数据服务能力,提供上游业务的特征查询和模型应用的能力。
众安金融实时特征平台服务于金融业务全流程,包含金融线上的核心业务场景如登录,准入,授信,支用,提额等实时前台场景,后台业务场景更多是批量的特征调用场景,此外还有催收也有对于特征和模型的使用,一开始特征平台的初衷是为风控体系服务,随着业务的发展,模型也逐渐使用到了用户营销场景和一些资源位的用户推荐服务中。这里值得注意的是,对风控业务了解的同学就会知道,一次风控策略会有多个风控规则,每个风控规则会查询多个特征数据,所以一次业务交易对于实时特征平台来说可能就会放大到几百倍的调用。
(1)交易行为数据:包含授信,借款申请、还款的数据,调额和逾期数据等业务数据。(2)三方征信数据:需要对接三方征信机构的接口。(3)设备抓取数据:在用户授权允许的情况下获取设备相关信息。(4)用户行为数据:通过用户行为埋点获取。
面对众多的特征数据源,这就要求我们实时特征平台具备丰富的数据接入能力,实时的数据处理能力,对于大量的特征需求也要求特征平台具备高效的特征加工配置化能力,实时的业务调用要求平台有快速的系统响应能力,我们也是围绕这些核心能力的要求进行特征平台的技术选型和架构设计。经过了技术迭代选型,我们采用了 Flink 作为实时计算引擎,使用阿里云的 TableStore 作为高性能的存储引擎,然后通过微服务化的架构实现了系统的服务化和平台化。
这张图是我们的实时特征平台的业务架构图,可以看到图的底层是特征数据源层,中间层是实时特征平台的核心功能层,上层是整个特征平台体系的业务应用层,特征平台主要有四个数据源:(1)征信数据网关:提供人行征信等征信机构的用户信用数据,需要通过实时的接口对接来查询征信数据。(2)三方数据平台:提供外部数据服务商的数据,通过调用三方数据接口服务完成实时数据对接。(3)实时计算平台:实时接入业务系统的交易数据,用户行为数据和抓取设备数据,通过实时计算后回流到 NoSQL 在线存储引擎。(4)离线调用平台:离线数据在阿里云的 MaxComputer 计算后同步到 NoSQL 存储,实现历史数据的回流,从而支撑用户全业务时间序列的特征计算,此外一些非实时指标也需要在离线数仓加工完成后再回流到 NoSQL 存储引擎。实时特征平台的核心功能:(1)特征网关:特征网关是特征查询的出入口,具备鉴权限流,特征数据编排等功能。(2)特征配置:为了支持特征的快速上线,特征平台实现了特征的配置化能力,包含三方数据特征配置,实时业务特征配置,互斥规则特征配置,模型特征配置能力。(3)特征计算:特征计算是通过微服务化的子系统来实现的,主要有三方特征计算,实时特征计算,反欺诈特征计算,模型特征计算。(4)特征管理:特征管理后台提供了特征变量生命周期管理能力,模型的元数据管理,还有特征跑批的任务管理。(5)特征监控:具备特征调用全链路查询能力,对于特征计算失败,特征值异常值,模型PSI值波动进行实时告警,此外也提供了特征使用情况等统计分析大盘报表。
(1)查询方式:调用三方征信机构的实时接口获取报文数据然后进行数据处理获取特征结果,出于降本考虑,我们还会实现一套缓存机制,对于离线场景减少调用三方的次数。(2)创新点:三方数据接入引擎可以通过纯配置化的方式接入三方的数据接口,通过特征加工引擎实现自动化的特征生成,通过可视化界面提供配置化的能力,最后通过接口提供给上游使用三方特征计算服务。(3)解决的难点:三方数据与配置化接入的难点是数据服务商的加密方式、签名机制多样性、复杂性,三方数据接入引擎通过内置一套加解密函数和支持自定义函数的能力,结合函数的链式组合方式,完成了各种复杂的三方数据加解密的配置化的实现。
实时业务数据的接入由两部分组成,首先是通过 Flink 实时监听业务数据库的 Binlog 数据写入到实时数仓,还有一部分使用 Spark 完成历史数据的回补,结合离线数据和实时数据就可以支持基于全量时序数据的特征加工能力,为了支持高性能的实时特征查询,实时数据和离线数据都会回流到 NoSQL 存储引擎。对于不同的数据,我们也会考虑不同的存储引擎,业务交易数据主要是用 TableStore 作为存储引擎,用户行为特征数据使用 Redis 为主,用户关系图谱数据用图数据库进行存储,从整个流程来看,现在的数据体系是采用成熟的 Lambda 架构。
我们实时特征平台的架构基本如上图,上游业务经过特征网关进行特征的查询,特征网关会进行特征查询权限的验证,限流控制和特征查询任务异步分发,特征网关首先根据特征元数据信息路由到不同的特征数据源,从特征数据源查询到原始数据之后会再路由到不同的特征计算服务进行特征的加工。三方特征是从三方数据平台和征信网关查询到的原始报文数据之后加工成为对应的特征;业务特征计算用于加工内部业务系统的实时特征。信贷特征是通过实时业务数据同步后进行特征加工计算,离线特征服务是在离线数仓 MaxComputer 完成的特征加工计算。反欺诈特征计算用于对用户登录设备信息,用户行为数据和用户关系图谱等相关特征的加工。在基础的三方特征,业务特征计算完成后,就可以直接提供给上游业务使用,此外模型服务也会依赖这些基础特征,模型特征计算是借助机器学习平台的能力来实现的,我们的机器学习平台提供了模型的训练,测试,发布等一体化功能,特征平台集成了机器学习平台的能力从而实现了模型特征的自动化和配置化。
我觉得实时特征计算方案有两种,第一种实时同步原始业务数据,然后在实时计算任务同时实现特征的加工,这是传统的 ETL 模式,这种方式的优点是特征查询非常高效,查询性能好,但是实时任务计算复杂,需要大量实时计算资源,需要特征衍生的话也是比较困难;另外一个方式是实时同步原始业务明细数据,但是特征加工是即时进行,也就是说特征查询时再进行特征的计算,这样方式特征查询计算繁重,需要高速特征查询引擎支持,但是实时任务比较简单,特征衍生也比较方便,这个较新的 ELT 模式。出于我们业务对于特征频繁衍生的要求和节省实时计算资源的考虑,我们选择了第 ELT 的即时加工特征的方案。
实时特征数据流通过 Kafka+Flink 实现实时数据的同步,同时也使用 Spark 从离线数仓数据回补完成全量时序数据的采集,实时业务数据主要是用 TableStore 作为存储引擎,结合实时特征计算引擎和 ID-Mapping 的多主体查询能力实现了特征的配置化生成。除了通过 Flink 实时采集的数据外,还有部分数据需要调用业务系统的接口来获取,这种数据也可以注册为特征数据引擎的元数据,和存储在 TableStore 里的数据一样进行配置化使用。我们采用了阿里云的 TableStore 这个比较稳定的高速查询引擎来支持实时特征查询,但是其实云产品的成本也需要考虑的,所以大家也需要根据本身的现状选择合适的方案。
早期的特征加工是通过开发人员写代码来实现的,随着特征需求增加,为了支撑特征的快速上线,我们借助表达式语言和 Groovy 实现了一套基于特征计算函数的特征配置化能力,结合 ID-Mapping 实现了一个特征计算引擎,计算过程可以分为如下几步:(1)创建实时 Flink 任务把用户关系数据同步到 ID-Mapping 表,从而支持用户多维数据查询。(2)创建实时 Flink 任务把用户业务数据回流到阿里云的 TableStore,实现业务明细数据的实时同步。(3)在特征平台的实时特征配置页面把上一步同步到 TableStore 的用户业务数据表注册为特征计算引擎逻辑数据。(4)接下来在特征计算配置页面选择相关的特征元数据,填写特征基础信息,特征加工的函数,通过测试和上线等过程后这个特征就可以提供在线使用。(5)特征查询时首先会根据特征查询入参查询 ID-Mapping 表获取用户 ID,然后根据用户 ID 查询 TableStore 里面的用户明细业务数据,特征计算引擎会把根据配置的特征计算表达式进行特征数据查询,计算出来的数据结果就是特征值,就和第四步提到的,会把特征组下面的所有特征都计算出来。
随着金融欺诈风险不断扩大,反欺诈形势也越来越严峻,特征平台也不可避免的需要支持反欺诈特征的查询需求,总结下了我们的反欺诈特征分类如下:(1)用户行为特征:主要是基于埋点的用户行为数据进行特征的衍生。比如用户启动的 APP 的次数、页面访问的时长,还有点击的次数和在某个输入框输入的次数等。(2)位置识别特征:主要是基于用户的实时地理位置信息,加上 GeoHash 算法能力,实现位置特征的数据计算。(3)设备关联特征:主要是通过用户关系图谱来实现,通过获取同一个设备下关联到用户的情况,可以快速地定位羊毛党等欺诈行为。(4)用户图谱关系特征:通过实时的获取用户在登录、注册、授信、资用等关键业务场景的设备信息,结合用户三要素和他的一些联系人信息,构建图谱关系,然后通过查询用户的邻边关系、用户关联的用户是否有黑灰名单的情况,进行风险识别。(5)用户社群特征:通过判断社群的大小、社群里用户行为的表现,提炼社群规则特征。
反欺诈特征计算的数据流程和实时特征计算数据流程类似,除了数据源来源于实时业务数据外,反欺诈场景更关注是埋点的用户行为数据,抓取的用户设备数据,提取的用户关联关系数据,用户行为的数据会通过埋点平台(XFlow)上报到 Kafka,这些数据也会是使用 Flink 进行实时加工计算,不过和实时业务特征处理的区别是反欺诈特征是在实时数仓里面直接计算好之后存储到 Redis,图数据库等存储里面,这个是为了满足反欺诈特征查询的高性能要求,此外反欺诈场景也更关注实时的数据变化。从上图可以了解到,反欺诈特征通过 HTTP API 的接口方式为特征网关提供特征计算服务。
用户关系图谱的建设情况,整体设计思路如下:(1)首先是对于图的数据源的选择,要想构建比较有价值的用户关系图谱,一定要找到准确的数据进行图建模。关系图谱的数据源主要来自用户数据,比如手机号、身份证、设备信息、用户三要素,联系人等相关数据(2)第二就是图数据存储引擎选型,需要关注的是引擎的稳定性,数据的实时性,集成的方便性,查询的高性能,存储引擎的选择非常重要,现在市面上有不少图数据库的技术,选型的过程中其实也碰到过不少的坑,一开始我们选择的 orientdb,在大数据量的情况下就出现了很多不稳定的问题,所以需要重点考虑大数据量的处理能力和存储引擎的稳定性,一定要经过全面的技术调研才能进行生产的实践(3)其次就是需要考虑图数据相关的算法支撑能力,除了基本的相邻边查询能力,是否有比较丰富的图算法支持,比如在反欺诈场景使用到的是社群发现算法(4)最后需要通过 API 的方式提供图数据服务,反欺诈应用场景提供图数据特征的服务外,还可以赋能给营销推荐场景经过多方位的选型调研,最终选择了 NebulaGraph 作为图数据库,它采用的是 shard-nothing 的分布式存储,能够支持万亿级别的一个大规模的机型的图的计算。NebulaGraph 的相关信息可以从他们的官网了解,这里就不赘述了。
通过模型团队对用户关系图谱的数据挖掘,从用户社群的年龄分布,消费预估水平分布等多维度统计数据出发,我们提取出了一些图特征,这边列举了一批以供大家参考:(1)第一方欺诈:通过图认为同一个人申请多次,而且每次提交的联系人等关联信息都不太一致,可以认为它是有第一方欺诈的嫌疑。(2)疑似中介代办:有部分人的申请人都关联到了相同一个联系人的手机号。(3)疑似信息冒用:就是一个人的手机号可能被很多人使用,可能它出现了信息的泄露。(4)疑似团伙欺诈:看关系图谱社群节点的规模数量是否超过了一定的规模。反欺诈策略规则。通过一两个特征可能没办法精确地对反欺诈行为进行定位,需要来组合多类的特征,形成反欺诈策略规则,从而在多方面提升对用户反欺诈识别的准确度。很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion