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

news2024/9/20 22:29:20

个人博客:无奈何杨(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.coloradmin.cn/o/2114215.html

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

相关文章

C++万字解读类和对象(上)

1.类的定义 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。 为了区分成员变量&…

SprinBoot+Vue应急信息管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

远心镜头选型公式

在当今的机器视觉领域,远心镜头凭借其独特的远心光路设计以及超低畸变、高远心度和高景深等特点,成为尺寸测量和视觉对位中的得力工具。然而,如何进行快速而准确的选型呢?答案就在于选型公式:倍率 焦距 N.A.Sensor 尺…

移动端视频编辑SDK解决方案,AI语音识别添加字幕

对于众多Vlog创作者而言,繁琐的字幕添加过程往往成为提升内容质量的绊脚石。为了彻底改变这一现状,美摄科技凭借其深厚的AI技术积累与创新的移动端视频编辑SDK解决方案,推出了革命性的AI语音识别添加字幕功能,让视频创作更加高效、…

再论大模型做内容消费

前言 今天咱们再体验几个有关大模型聚集内容创作的工作。 之前也专门介绍过一些大模型在该方面的工作,感兴趣的小伙伴可以穿梭:《提升大模型内容创作能力》:https://zhuanlan.zhihu.com/p/716240950 废话不多说,一起来看看吧&a…

【技术调研】三维(0)-webGL、三维基础知识、前置知识、数学知识以及简单示例

前言 ​ 因业务需要了解网页端三维相关技术,故对webGL相关技术学习并记录。旨在了解网页端三维的基本原理。 什么是webGL? ​ WebGL全称叫做Web Graphics Library,它是JavaScript API。用于在任何兼容的Web浏览器中渲染交互式的3D图形,并且无需使用插件。它基于 OpenGL …

参会邀请 | 第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)

第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)将于2024年9月13日-15日在中国张家口召开。 MVIPIT 2024聚焦机器视觉、图像处理与影像技术,旨在为专家、学者和研究人员提供一个国际平台,分享研究成果,讨论…

上海大学《2022年836+915自动控制原理真题及答案》 (完整版)

Part1:2022年上海大学真题题目 学硕836 专硕915 Part2:2022年上海大学真题答案 学硕836 专硕915

Linux学习之路 -- 线程概念

本文主要介绍线程的相关概念与基础控制 什么是线程&&线程的相关知识 按照书本上的定义,线程就是进程内部的一个执行分支,而线程是cpu调度的基本单位。 如果直接按照书本上的定义理解,线程这个概念是比较模糊的,而且我们…

013.Python爬虫系列_re正则解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI

BAPI作为SAP中的重要概念,在SAP系统的开发中几乎是必须的。 本章来学习一下BAPI 的直观印象,以及在ABAP代码中的调用。 目录 1, BAPI概述 1,从画面角度来直观体验一下BAPI 1-1,MM:購買依頼変更BAPI - …

日志服务管理

系统日志管理 sysklogd 系统日志服务 在 CentOS5 以及之前的发行版中,其采用的 sysklogd 服务来记录和管理系统日志的。 sysklogd 服务有两个模块: klogd: 用于记录 linux kernel 相关的日志 syslogd:用于记录用户空间应用日志…

OCC开发_箱梁梁体建模

概述 OCC(全称OpenCascade)是一个近年来比较受欢迎的开源三维CAD建模平台,曲线、曲面、实体、渲染等方面功能强大,并且在机械、航空、船舶等许多领域应用广泛。基于OCC的强大功能考虑,本人尝试将其引入桥梁领域。桥梁设计中,比较常…

Nginx核心配置文件结构

一、简单介绍 源码安装的Nginx的核心配置文件默认是放在/usr/local/nginx/conf/nginx.conf yum安装的Nginx的核心配置文件默认是放在/etc/nginx/nginx.conf 使用命令:nginx -t,可以检查测试nginx的配置文件(nginx.conf)语法是否…

6.1排序——插入排序与希尔排序

本篇博客来梳理两种常见排序算法:插入排序与希尔排序 常见的排序算法如图 写排序算法的原则:先写单趟,再写整体 一、直接插入排序 1.算法思想 先假定第一个数据有序,把第二个数据插入;再假设前两个数据…

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrlv 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Univer…

2024整理 iptables防火墙学习笔记大全_modepro iptables

Iptables名词和术语 2iptables表(tables)和链(chains) 2表及其链的功能 2  Filter表 2  NAT表 2  MANGLE表 2iptables的工作流程 3iptables表和链的工作流程图 3 二、 iptables实战应用 4iptables命令参数详解 4  iptable…

Python基础part1

Python基础 语法 字面量 数字 整数浮点复数布尔 字符串列表 list元组 Tuple集合 Set字典 Dictionary 注释 单行# 单行注释的内容多行“”“ 多行注释的内容 ”“” 单行注释#后要加一个空格再写注释 变量 变量无类型,但数据有类型 语法: 变量名 …

java黑马微项目

1 飞机票 代码实现: import java.util.Scanner; public class F1 {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print("请输入票价: ");double jia input.nextDouble();System.out.print(&…

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-o…