风控系统之指标回溯,历史数据重跑

个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview


回顾

默认你已经看过之前那篇风控系统指标计算/特征提取分析与实现01,Redis、Zset、模版方法。

其中已经介绍了如何利用rediszset结构完成指标计算,为了方便这篇文章的介绍,还是在正式开始本篇之前回顾一下。

时间窗口

zsetredis中的一种数据结构,表示有序集合,正因此我们可以利用其做时间窗口来计算指标,value为事件标识,score为事件时间戳。

如下图表示次数、关联、求和类型各两条指标在时间窗口下随着时间分布,其中的黑点也就是事件,散列且线性的分布在时间窗口中。

image

指标字段

关于指标我们需要哪些配置?

来看指标字段有哪些:

  • type:指标类型,有次数计算、关联次数、最大值、最小值、求和等等
  • calcField:计算字段,必须为数值类字段,而且仅用于计算类指标,如次数统计类指标计算的就是事件本身,不需要设置计算字段
  • winSize:窗口大小,与其讲是窗口大小不如说是窗口单位,取值有M/d/H/m/s,表示月/天/时/分/秒
  • timeSlice:时间片,与窗口大小对应,单位为秒
  • winCount:窗口数量,与窗口大小组合起来是整个指标计算的窗口大小
  • winType:窗口类型,目前取值只有last/cur,表示最近或是当前
  • masterField:主字段,如:计算某客户登录次数,主字段就是客户唯一标识
  • salveFields:从字段们,可以是多个,如:计算客户在某设备的登录次数,主字段是客户唯一标识,从字段是设备唯一标识
  • sceneType:场景类型
  • scenes:场景,与场景类型组合起来用于隔离的指标

计算流程

1、对于未知的输入,根据指标配置计算。

如下图,未知的事件经过指标计算在指标时间窗口上记录。

image

2、时间窗口记录事件,并设置过期时间。

如下图,横轴表示时间,黑色的点是已有事件记录,竖线表示当前时间,红色是当前这笔事件的记录。

因为Redis只能给整个key设置过期时间,所以要整体上要设置过期时间。如果前面配置的窗口类型winTypelast,表示最近,那么设置的过期时间就是timeSlice*winCount;如果设置的是cur,标识当前,那么设置的过期时间就是timeSlice

image

3、窗口移动并计算结果。

如下图,竖线表示当前时间,红框表示窗口,根据指标类型计算窗口内事件的值就好。

image

问题

已知指标都是随事件的发生实时计算而来的,指标的一些字段是一次创建后不可更改的,如上梳理的type:指标类型、calcField:计算字段、winSize:窗口大小、timeSlice:时间片、winCount:窗口数量、winType:窗口类型、masterField:主字段、salveFields:从字段们、sceneType:场景类型、scenes:场景,都是一次创建不可更改的,因为一旦修改了其中的字段数据相对就不准确了。

由此会产生一个严重的问题,两种场景下都会出现很大问题。

1、新创建的指标并不能及时使用

因为新创建的指标并没有任何数据,这时并不能用。什么意思?如我需要设置一个规则“最近90天没有登录的账号要进行一次短信验证”,那么我设置的一个指标是“最近90天账号登录次数统计”,设置规则为“最近90天账号登录次数统计”为空则决策结果为“短信验证”。这个新的指标并没有跑已有数据,那么这就是不准确的,直接上线指标那么全部账号都将会多一次短信验证,短信产生的费用不讲,用户带来的体验也是很差的。

2、修改已有指标会错误

对于已有的指标通常都会设置不允许更改的字段,如上,这个并不需要过多解释了。那么如果已有的指标设置错了,但又不可更改,那么这个问题又回到上面了👆

所以,总结问题的解决方案就是:对于新增和修改的指标能支持对已有数据的重跑。

正向计算

正向计算就是和普通的流式实时动态计算没有差别,虽然将是这么讲,但是其实涉及到的是整体数据存储的设计考验。前面很多篇文章也讲了,风控数据最终会通过Kafka存储在ElasticSearch中,所以数据是有的,关键是怎么取,在何时跑数据。

另外的问题随之产生了,如何避免对生产数据的影响并保证指标的准确性。

如:刚刚创建的指标“最近90天账号登录次数统计”想要对历史数据重跑。

如下,指标创建时间触发了历史数据重跑,那么就是对于历史90天的数据进行重跑计算指标,开始时间和结束时间就是[T-90day,T]需要注意此时指标状态要保证不参与生产任务,不然数据会更乱。

生产任务不会因为你重跑而停止啊!假如在指标重跑完成也就是图中T+x的时候,其实生产已经跑到了T+n,那么指标数据还是少了n的这段时间,怎么办?

image

其实我上面埋了一个小坑。

就是这句话“需要注意此时指标状态要保证不参与生产任务,不然数据会更乱”,其实这句话并不是没有道理,很合理。但是其实是可以放开的,啊?为啥呀?

如下,重跑任务和上面一样其实也只是蓝色的部分,但是如果放开了指标产于生产任务,那么指标就和生产任务步调一致,不会有差别。已有数据只是迁移,本身就和生产有时间差,而且记得我们的计算方法吗?RedisZset啊,Set啊!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

反向查询

本来我还以为这是一条可行的路,但是细致思考后,好像确认了,这是一条不可行的路。

上面的图我用一下,可以知道生产数据是未知的,不管是指标还是后面的Kafkaes存储,都是为了结构化数据,其实感觉编程的本质都是这样🤤

那么既然对已有结构化数据的查询会不会对于历史数据重跑意义更大,而且更简单呢?

image

还是这个指标“最近90天账号登录次数统计”,我直接按照指标配置的条件查历史数据将数据塞到指标里不是更简单?

的确如此,查询要比生产任务跑出来的指标更直观且简单。

关键的问题在于问题的关键!😂

还是那句话数据是未知的!如果已经指标需要计算的账号,那么查询历史数据就好,但是问题根本就不知道要计算的账号和条件。如果要通过查询的方式,那就必须对要计算的目标先搞清楚,但是本身指标就是多变的不确定的东西就更难搞了。

也许讲的有些抽象,具体一点吧。“最近90天账号登录次数统计”中账号就是未知的${账号},如果要计算那么就要先从历史数据确定90天内有记录的账号,然后才是查询历史数据这些账号有多少次登录,塞进指标里。

注意这还只是因为“最近90天账号登录次数统计”指标设置的比较简单,要是遇到计算字段、主字段+从字段、还有很多变量的,很难有一套统一的方法计算的。

写在最后

拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。


个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精通Java微服务

第1章 微服务是在面向服务架构SOA的基础上进一步发展而来的,它比SOA做得更加彻底,其单体服务被更加彻底地划分,最大限度地实现了服务的单一职责。 1.1.2互联网 即计算机网络,连接了世界上数以万计的计算机设备(可联…

15、Django Admin添加自定义字段功能

修改模型类HeroAdmin admin.register(Hero) class HeroAdmin(admin.ModelAdmin):change_list_template "entities/heroes_changelist.html"... # 此处原代码不动,只增加此前后代码def get_urls(self):urls super().get_urls()my_urls [path(immort…

最新版 | SpringBoot3如何自定义starter(面试常考)

文章目录 一、自定义starter介绍二、自定义Starter的好处及优势三、自定义starter应用场景四、自定义starter1、创建autoconfigure的maven工程2、创建starter的maven工程3、在autoconfigure的pom文件中引入MyBatis的所需依赖4、编写自动配置类MyBatisAutoConfiguration5、编写i…

pdf文件编辑器有哪些?分享适合新手用的5个PDF编辑器(解锁教程)

pdf是一种通用文件格式,也是一种夸操作系统平台的文件格式。 好用的PDF文件编辑器可以让您更改和添加文本、编辑图像、添加图形、签署签名、填写表单数据等。下面整理了关于pdf文件编辑方法介绍,以及一些好用的pdf编辑器,有需要的可以了解下…

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 引言 在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStylenone时&#…

LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 商类型(Quotient Type)

商类型(Quotient Type),也称划分类型,通过给定义一个定义在某一类型 α 上的关系R:α → α→ ℙ,将类型α 中,满足关系R的元素摘出来,组成该商类型(Quotient&#xff09…

2024国赛数学建模C题完整论文:农作物的种植策略

农作物种植策略优化的数学建模研究(完整论文,持续更新,大家持续关注,更新见文末名片 ) 摘要 在本文中,建立了基于整数规划、动态规划、马尔科夫决策过程、不确定性建模、多目标优化、相关性分析、蒙特卡洛…

20:HAL--RNG

一:RNG 伪随机数就是rand函数产生的数。 F1系列的没有RNG,使用本次说的都是F407的,我使用的是STM32F407VET6 B:框架 C:寄存器 /*RNG_SR寄存器的DRDY位*/ while ((__HAL_RNG_GET_FLAG(&rng_handle, RNG_FLAG_DRDY) RESET) …

Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算直方图的反向投影。 cv::calcBackProject 函数计算直方图的反向投影。也就是说,类似于 calcHist,在每个位置 (x, y)…

PostgreSQL的repmgr工具介绍

PostgreSQL的repmgr工具介绍 repmgr(Replication Manager)是一个专为 PostgreSQL 设计的开源工具,用于管理和监控 PostgreSQL 的流复制及实现高可用性。它提供了一组工具和实用程序,简化了 PostgreSQL 复制集群的配置、维护和故障…

CSS解析:定位和层叠上下文

许多开发人员对定位的理解很粗略,如果不完全了解定位,就很容易给自己挖坑。有时候可能会把错误的元素放在其他元素前面,要解决这个问题却没有那么简单。 一般的布局方法是用各种操作来控制文档流的行为。定位则不同:它将元素彻底…

虚幻地形高度图生成及测试

虚幻地形高度图生成及测试 虚幻引擎地形系统将高度数据存储在高度图中,这是一个灰阶图像,使用黑白色值来存储地貌高程。在高度图中,纯黑色值表示最低点,纯白色值表示最高点。支持16位灰阶PNG、8位灰阶r8及16位灰阶r16格式。 本文…

硬刚苹果还得是华为

文|琥珀食酒社 作者 | 璇子 牛皮啊 华为发三折叠不意外 意外的是 这各种翻转简直颠覆想象 市面上没见过这么能“翻转”的? 要不怎么说硬刚苹果 还得看华为 就跟你同天怎么了? 拼创新、拼技术、拼热度 你就说哪比你差吧&#xff1f…

基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于VUE的校园二手物品交易管理系统8拥有两种角色 管理员:闲置物品管理、订单管理、用户管理 用户:登录注册、购物车、发布闲置物品、评论、发货、收货地址管理等…

电力设计院10大排行榜!这个大院屠榜!

今天晚上阅读了中国电力规划设计协会《2022年度电力勘测设计行业统计分析报告》,这本报告是依据协会会员企业统计报表数据进行编制分析的。报告共收集了167家勘测设计企业上报的数据信息,统计的企业数量较2021 年166家企业增加1 家。 按业务板块划分为&…

element ui form 表单出现英文提示的解决方案

场景再现: 在使用 form 表单的时候,一般都需要对表单元素进行验证,错误就出现在了这里,除了配置的错误信息,还会出现一个 英文校验提示,如下图: 解决方案 出现的原因是在el-form-item中使用…

Tensorflow2 如何扩展现有数据集(缩放、随机旋转、水平翻转、平移等),从而提高模型的准确率 -- Tensorflow自学笔记14

实际生活中的数据集,往往不是标准的数据,而是有倾斜角度、有旋转、有偏移的数据,为了提高数据集的真实性,提高模型预测的准确率,可以用ImageDataGenerator函数来扩展数据集 import tensorflow as tffrom tensorflow.k…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建,可参考: 1.webAPI的访问地址 1) 启动时,选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是:applicationUrl"\"launchUrl 2) 启动时,选择IIS Expre…

Ansys Zemax | 在OpticStudio中仿真单模光纤耦合

附件下载 联系工作人员获取附件 准确分析耦合效率在光纤耦合系统的设计中至关重要。本文演示了如何在OpticStudio中使用多种光纤耦合效率分析。 概要 OpticStudio序列模式可以很好地模拟单模光纤耦合效率。本文演示了如何设置耦合系统,并研究了序列模式下可用于…

redis分布式锁和lua脚本

业务场景:多个线程对共同资源的访问:库存超卖/用户重复下单的原因 解决方法一:利用jvm内置锁,将非原子性操作变成原子性操作 Synchronized锁的是对象,对象必须是单例的。锁的是this,代表当前所在的类,这个…