【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计
【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计
- 1. **欺诈场景分类与案例说明**
- 1.1 **大额交易欺诈**
- 1.2 **异地交易欺诈**
- 1.3 **高频交易欺诈**
- 1.4 **异常时间交易欺诈**
- 1.5 **账户行为异常**
- 1.6 **设备指纹异常**
- 1.7 **交易金额突变**
- 2. **普适性软件架构设计方案**
- 2.1 **总体架构**
- 2.2 **核心组件**
- 3. **表设计**
- 3.1 风控规则表(`risk_rules`)
- 3.2 交易数据表(`transaction_data`)
- 3.3 风控结果表(`risk_results`)
- 4. **Flink 实现方案**
- 4.1 数据接入
- 4.2 规则加载与动态更新
- 4.3 规则匹配
- 4.4 告警与拦截
- 4.5 数据存储
- 5. **总结**
概要:
作为软件架构师,设计一个银行反欺诈风控系统需要综合考虑多种欺诈场景,并针对每个场景设计相应的检测规则和实现方案。以下是详细的设计思路、欺诈场景分类、软件架构设计方案以及表设计。
1. 欺诈场景分类与案例说明
1.1 大额交易欺诈
- 场景描述:单笔交易金额异常高,可能是盗刷或洗钱行为。
- 案例:
- 用户平时交易金额在1000元以内,突然出现一笔50000元的交易。
- 短时间内多次大额交易。
1.2 异地交易欺诈
- 场景描述:用户在短时间内出现在不同地理位置的交易,可能是卡被盗刷。
- 案例:
- 用户在北京有一笔交易,5分钟后在上海又有一笔交易。
1.3 高频交易欺诈
- 场景描述:用户在短时间内进行多次交易,可能是恶意套现或盗刷。
- 案例:
- 用户在1分钟内进行了10笔交易。
1.4 异常时间交易欺诈
- 场景描述:用户在非正常时间进行交易,可能是欺诈行为。
- 案例:
- 用户在凌晨3点进行大额交易。
1.5 账户行为异常
- 场景描述:用户的交易行为与历史行为不符,可能是账户被盗用。
- 案例:
- 用户平时只在工作日交易,突然在周末进行大额交易。
1.6 设备指纹异常
- 场景描述:用户使用陌生设备进行交易,可能是账户被盗用。
- 案例:
- 用户平时使用手机A进行交易,突然使用手机B进行大额交易。
1.7 交易金额突变
- 场景描述:用户交易金额突然大幅增加或减少,可能是异常行为。
- 案例:
- 用户平时交易金额在1000元以内,突然出现一笔100000元的交易。
2. 普适性软件架构设计方案
2.1 总体架构
- 数据源:银行交易系统(如Kafka、MQ等)。
- 实时处理层:Flink 实时处理引擎。
- 规则引擎:基于Flink CEP或自定义规则引擎实现。
- 存储层:
- MySQL/PostgreSQL(规则配置)。
- HBase/Cassandra(交易数据)。
- Elasticsearch(日志和告警)。
- 告警与拦截:通过API或消息队列通知风控系统或直接拦截交易。
- 可视化与监控:Grafana/Prometheus 监控系统运行状态,Kibana 查看日志。
2.2 核心组件
-
数据接入层:
- 从银行交易系统实时消费交易数据。
- 支持多种数据源(Kafka、MQ、JDBC等)。
-
规则引擎层:
- 动态加载规则表中的规则。
- 使用Flink CEP或自定义规则引擎实现规则匹配。
-
存储层:
- 规则表:存储动态配置的风控规则。
- 交易表:存储交易流水数据。
- 风控结果表:存储风控检测结果。
-
告警与拦截层:
- 对高风险交易实时告警或拦截。
- 支持多种告警方式(邮件、短信、API等)。
-
可视化与监控层:
- 实时监控系统运行状态。
- 查看风控结果和日志。
3. 表设计
3.1 风控规则表(risk_rules)
| 字段名 | 类型 | 说明 |
|---|---|---|
| rule_id | BIGINT | 规则ID(主键) |
| rule_name | VARCHAR | 规则名称 |
| rule_condition | VARCHAR | 规则条件(如:amount > 10000) |
| rule_action | VARCHAR | 规则动作(如:告警、拦截) |
| priority | INT | 规则优先级 |
| is_active | BOOLEAN | 是否启用 |
| create_time | TIMESTAMP | 创建时间 |
| update_time | TIMESTAMP | 更新时间 |
3.2 交易数据表(transaction_data)
| 字段名 | 类型 | 说明 |
|---|---|---|
| transaction_id | VARCHAR | 交易ID(主键) |
| user_id | VARCHAR | 用户ID |
| amount | DECIMAL | 交易金额 |
| timestamp | TIMESTAMP | 交易时间 |
| merchant_id | VARCHAR | 商户ID |
| location | VARCHAR | 交易地点 |
| device_id | VARCHAR | 设备ID |
3.3 风控结果表(risk_results)
| 字段名 | 类型 | 说明 |
|---|---|---|
| result_id | BIGINT | 结果ID(主键) |
| transaction_id | VARCHAR | 交易ID |
| rule_id | BIGINT | 触发的规则ID |
| risk_level | VARCHAR | 风险等级(如:高、中、低) |
| action_taken | VARCHAR | 采取的动作(如:告警、拦截) |
| create_time | TIMESTAMP | 检测时间 |
4. Flink 实现方案
4.1 数据接入
- 使用Flink的Kafka Connector从银行交易系统实时消费交易数据。
- 数据格式:JSON或Avro。
FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("transaction_topic", new SimpleStringSchema(), properties
);
DataStream<String> transactionStream = env.addSource(consumer);
4.2 规则加载与动态更新
- 使用Flink的JDBC Connector定期从
risk_rules表加载规则。 - 通过Broadcast State将规则广播到所有并行任务。
// 加载规则表
DataStream<RiskRule> ruleStream = env.addSource(JdbcSource.buildJdbcSource().setQuery("SELECT * FROM risk_rules WHERE is_active = true").setRowTypeInfo(RiskRule.getTypeInfo())
);// 广播规则
BroadcastStream<RiskRule> broadcastRuleStream = ruleStream.broadcast(RuleDescriptor.of());
4.3 规则匹配
- 使用Flink CEP或自定义规则引擎实现规则匹配。
- 根据规则条件(如金额、地点、频率等)判断是否触发风控。
transactionStream.connect(broadcastRuleStream).process(new RiskDetectionProcessFunction()).addSink(new RiskResultSink());
4.4 告警与拦截
- 对高风险交易,调用外部API或发送消息到Kafka进行告警或拦截。
riskResultStream.filter(result -> "HIGH".equals(result.getRiskLevel())).addSink(new AlertSink());
4.5 数据存储
- 使用Flink的JDBC Sink或HBase Sink将风控结果写入
risk_results表。
riskResultStream.addSink(JdbcSink.sink("INSERT INTO risk_results VALUES (?, ?, ?, ?, ?)",(statement, result) -> {statement.setString(1, result.getTransactionId());statement.setLong(2, result.getRuleId());statement.setString(3, result.getRiskLevel());statement.setString(4, result.getActionTaken());statement.setTimestamp(5, new Timestamp(result.getCreateTime()));},JdbcExecutionOptions.builder().build(),new JdbcConnectionOptions.JdbcConnectionOptionsBuilder().withUrl("jdbc:mysql://localhost:3306/risk_db").withUsername("root").withPassword("password").build())
);
5. 总结
- 欺诈场景:涵盖大额交易、异地交易、高频交易、异常时间交易、账户行为异常、设备指纹异常等。
- 架构设计:基于Flink实现实时数据处理、动态规则匹配、告警与拦截。
- 表设计:规则表、交易表、风控结果表。
- Flink实现:通过Flink CEP或自定义规则引擎实现规则匹配,支持动态规则更新。
通过以上设计,可以实现一个高效、灵活且可扩展的银行反欺诈风控系统。
相关文章:
【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计
【Flink银行反欺诈系统设计方案】3.欺诈的7种场景和架构方案、核心表设计 1. **欺诈场景分类与案例说明**1.1 **大额交易欺诈**1.2 **异地交易欺诈**1.3 **高频交易欺诈**1.4 **异常时间交易欺诈**1.5 **账户行为异常**1.6 **设备指纹异常**1.7 **交易金额突变** 2. **普适性软…...
docker拉取失败
备份原始配置文件 sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 清理或修复 daemon.json 文件 sudo nano /etc/docker/daemon.json 删除 文件中的所有内容,确保文件为空。 cv下面这个文件内容 { "registry-mirrors": [ &…...
无人机应用探索:玻纤增强复合材料的疲劳性能研究
随着无人机技术的快速发展,轻量化已成为其结构设计的核心需求。玻纤增强复合材料凭借高强度、低密度和优异的耐环境性能,成为无人机机身、旋翼支架等关键部件的理想选择。然而,无人机在服役过程中需应对复杂多变的环境:高空飞行时…...
Visual Studio工具
高亮显示匹配的标签(小括号,中括号,大括号)...
STM32Cubemx配置E22-xxxT22D lora模块实现定点传输
文章目录 一、STM32Cubemx配置二、定点传输**什么是定点传输?****定点传输的特点****定点传输的工作方式****E22 模块定点传输配置****如何启用定点传输?****示例** **应用场景****总结** **配置 1:C0 00 07 00 02 04 62 00 17 40****解析** …...
iterm2更新后主题报错
报错 .oh-my-zsh/themes/agnoster.zsh-theme:307: parse error near <<<。方法1:更新Oh My Zsh主题(以agnoster为例) 适用场景:使用Oh My Zsh自带主题(如agnoster)时出现语法错误。 备份当前主题…...
WPF+WebView 基础
1、基于.NET8,通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...
不懂ui->layout()->removeWidget(bar);
ui->layout()->removeWidget(bar);解释起来就是:ui->layout()返回一个指针,然后这个指针再调用->removeWidget(bar)。 你提到的语法 ui->layout()->removeWidget(bar) 确实可能让人感到困惑,尤其是如果你对 Qt 的 UI 系统不…...
蓝桥杯算法——铠甲合体
问题描述 暗影大帝又开始搞事情了!这次他派出了 MM 个战斗力爆表的暗影护法,准备一举摧毁 ERP 研究院!MM 个暗影护法的战斗力可分别用 B1,⋯,BMB1,⋯,BM 表示。 ERP 研究院紧急召唤了 NN 位铠甲勇士前来迎战!每位铠甲勇士都…...
JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档
文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 百色学院创新实践学分认定系统设计与实现 摘 要 本百色学院创新实践学分认定系统是针对目前实践学分认定…...
【LangChain】存储与管理对话历史
0. 代码演示 from langchain_community.chat_message_histories import SQLChatMessageHistorydef get_session_history(session_id):# 通过 session_id 区分对话历史,并存储在 sqlite 数据库中return SQLChatMessageHistory(session_id, "sqlite:///memory.d…...
[machine learning] MACS、MACs、FLOPS、FLOPs
本文介绍机器学习中衡量一个模型计算复杂度的四个指标:MACS、MACs、FLOPS、FLOPs。 首先从含义上讲,可以分类两类:MACS/FLOPS和MACs/FLOPs。MACs/FLOPs表示总的操作数(后缀s可以看成是表示复数),MACS/FLOPS表示每秒可以执行的操作…...
学习笔记-AMD CPU 命名
AMD的AI处理器主要分为锐龙AI 1代(基于Zen4架构XDNA 1 NPU)和锐龙AI 2代(基于Zen5架构XDNA 2 NPU),以下是两代的详细说明: 一、锐龙AI 1代(2024年发布) 1. 命名规则 结构…...
【Javascript】计算器(Calculator)网页设计案例
代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>计算器</title…...
Stable Diffusion模型高清算法模型类详解
Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4,分块尺寸768px★★★★★☆皮肤纹理细腻,但高对比场景易出现…...
十大经典排序算法简介
一 概述 本文对十大经典排序算法做简要的总结(按常用分类方式排列),包含核心思想、时间/空间复杂度及特点。 二、比较类排序 1. 冒泡排序 (BUBBLE SORT) 思想:重复交换相邻逆序元素,像气泡上浮 复杂度: 时间:O(n^2)(最好情况O(n)) 空间:O(1) 特点:简单但效率低,稳…...
迷你世界脚本玩家接口:Player
玩家接口:Player 彼得兔 更新时间: 2024-07-28 17:49:05 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 玩家属性获取 2 setAttr(...) 玩家属性设置 3 getHostUin(...) 获取房主uin 4 isMainPlayer(...) …...
探秘 C 语言:编程世界的基石与传奇
一、C 语言的前世今生 C 语言诞生于 20 世纪 70 年代,由贝尔实验室的丹尼斯・里奇(Dennis Ritchie)开发。它最初是为了配合 UNIX 操作系统的开发,旨在提供一种高效、灵活且可移植的编程语言。在那个硬件资源有限的年代࿰…...
docker:Dockerfile案例之自定义centos7镜像
1 案例需求 自定义centos7镜像。要求: 默认登录路径为 /usr可以使用vim 2 实施步骤 编写dockerfile脚本 vim centos_dockerfile 内容如下: #定义父镜像 FROM centos:7#定义作者信息 MAINTAINER handsome <handsomehandsome.com># 设置阿里云…...
1、语言的本质
语言的本质 1.1 语言的产生生物重演律 1.2 语言的本质1.3 语系1.4 文字的起源汉字的构成和使用 后记 语言是人类传递信息的工具,其本质是信息的载体。 语音和文字是构成语言的两个基本属性,语音是语言承载的物理信号,文字是记录语言的逻辑符…...
学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)
一,概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中,需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求,因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…...
Scala:统计每个单词出现的个数并打印
目录 问题拆解: 解题步骤: 1. 拆分所有字符串为单词 2. 遍历所有单词并统计 3. 打印结果 基础版代码实现: 代码解释: 输出结果: 为什么这样设计? 继承的APP是个啥? 使用高阶函数式编…...
C++前缀和
个人主页:[PingdiGuo_guo] 收录专栏:[C干货专栏] 大家好,今天我们来了解一下C的一个重要概念:前缀和 目录 1.什么是前缀和 2.前缀和的用法 1.前缀和的定义 2.预处理前缀和数组 3.查询区间和 4.数组中某个区间的和是否为特定…...
图解MOE大模型的7个核心问题并探讨DeepSeekMoE的专家机制创新
原文地址:https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mixture-of-experts #mermaid-svg-FU7YUSIfuXO6EVHa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FU7YUSIfuXO6EVHa .error-icon{fill…...
SpringBoot项目集成ElasticSearch
1. 项目背景 处于失业找工作的阶段,随便写写吧~ 没啥背景,没啥意义,Java后端越来越卷了。第一学历不是本科,感觉真的是没有一点路可走。 如果有路过的小伙伴,如果身边还有坑位,不限第一学历的话࿰…...
DeepSeek大模型深度解析:架构、技术与应用全景
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 一、大模型时代与DeepSeek的定位1.1 大模型发展历程回顾大模型发展历程时间轴(20…...
SQL AND OR 操作符详解
SQL AND & OR 操作符详解 在SQL(结构化查询语言)中,AND 和 OR 是两种非常重要的逻辑操作符,它们用于在查询条件中组合多个条件。理解并正确使用这些操作符对于编写有效的SQL查询至关重要。 引言 在处理数据库查询时,我们常常需要根据多个条件来筛选数据。AND 和 OR…...
Dubbo+Zookeeper
Apache ZooKeeper 通过当前页面下载Zookeeper 在这里启动zookeeper 可以根据这个页面简单学习一下,但是没有集成mysql,也会出现一些报错,且在这之后我们要使用的管理页面是vue的dubbo-admin dubbo学习三:springboot整合dubbozo…...
从源到目标:深度学习中的迁移学习与领域自适应实践
引言:数据驱动的智能时代与迁移挑战 在深度学习快速发展的今天,模型训练对数据量和质量的依赖成为核心瓶颈。面对新场景时,标注数据不足、数据分布差异等问题常导致模型性能骤降。迁移学习(Transfer Learning)与领域自…...
从厨电模范到数字先锋,看永洪科技如何助力方太集团开启数字新征程
在数字化洪流席卷全球的宏大背景下,企业转型升级的紧迫性与重要性日益凸显,成为驱动行业进步的关键引擎。在这一波澜壮阔的转型浪潮中,方太集团——厨电领域的璀璨明珠,以其前瞻性的战略视野和不懈的创新精神,携手数据…...
