学习笔记Flink(八)—— 基于Flink 在线交易反欺诈检测
一、背景介绍
信用卡欺诈
信用卡欺诈是指故意使用伪造、作废的信用卡,冒用他人的信用卡骗取财物,或用本人信用卡进行恶意透支的行为。在当今数字时代,信用卡欺诈行为越来越被重视。
罪犯可以通过诈骗或者入侵安全级别较低系统来盗窃信用卡卡号。 用盗得的信用卡进行很小额度的消费进行测试。 如果测试消费成功,那么他们就会用这个信用卡进行大笔消费。
信用卡欺诈行为
交易3和交易4应该被标记为欺诈行为,因为交易3是一个100¥的小额交易,而紧随着的交易4是一个10000¥的大额交易。
另外,交易5、6和交易7就不属于欺诈交易了,因为在交易5这个500¥的小额交易之后,并没有跟随一个大额交易,而是一个金额适中的交易,这使得交易5到交易7不属于欺诈行为。
二、架构设计
架构设计
数据流设计
数据流落地实现
三、Kafka信用卡消费数据
3.1、Kafka Producer
模拟Kafka Producer定时生成消费数据
TransactionData.java:
package fraud_detection;public class TransactionData {private String user;private double money;public TransactionData(){}public TransactionData(String user,double money){this.user=user;this.money=money;}@Overridepublic String toString(){return this.user + "," + this.money;}
}
TransactionDataGenerator.java:
package fraud_detection;import java.util.Random;public class TransactionDataGenerator {public static final int USER_SIZE = 10;public static final float BIG_MONEY_PERCENT = 0.02f;static Random random = new Random();public static TransactionData getData(){return new TransactionData(generateUser() , generateMoney()) ;}private static String generateUser(){return "user_"+random.nextInt(USER_SIZE);}private static float generateMoney(){float i = random.nextFloat();if( i > BIG_MONEY_PERCENT){return random.nextFloat() * 1000;}else{return i * 10000000;}}public static void main(String[] args){TransactionData data = null;for(int i = 10000 ;i >0 ; i--){data = getData();System.out.println(data);}}
}
TransactionDataProducer.java:
package fraud_detection;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.HashMap;
import java.util.Map;
public class TransactionDataProducer {public static void main(String[] args) throws InterruptedException {String topic = "fraud00";Map<String,Object> kafkaProperties = new HashMap<>();kafkaProperties.put("bootstrap.servers","node100:9092,node101:9092,node102:9092");kafkaProperties.put("acks", "all");kafkaProperties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");kafkaProperties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");Producer<String, String> producer = new KafkaProducer<>(kafkaProperties);int size = 30*1000/10;long interval = 10L;String data = "";for (int i = 0; i < size; i++) {Thread.sleep(interval);data= TransactionDataGenerator.getData().toString();producer.send(new ProducerRecord<>(topic, data));}producer.close();System.out.println("消息发送完成!");}
}
3.2、整合Kafka Transaction数据
FraudDetection.scala:
package flink_kafka
import java.util.Properties
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
object FraudDetection {def main(args: Array[String]): Unit = {val topic = "fraud00"val properties = new Properties()properties.setProperty("bootstrap.servers", "node100:9092")properties.setProperty("group.id", "test")val env = StreamExecutionEnvironment.getExecutionEnvironmentval stream = env.addSource(new FlinkKafkaConsumer[String](topic, new SimpleStringSchema(), properties))stream.map(x => {val data = x.split(","); (data(0).trim, data(1).trim.toDouble)}).keyBy(0).mapWithState[(String, Double), Double]((in: (String, Double), state: Option[Double]) =>state match {case None => (("", 0.0), Some(in._2))case Some(previous) => if (in._2 > 10000.0 && previous < 1000.0)((in._1 + "->" + previous, in._2), Some(in._2)) else (("", 0.0), Some(in._2))}).filter(x => x._2 > 0.0).print()env.execute("Fraud Detection")}
}
测试:
① 先创建fraud00 话题
将产生的数据存到/tmp目录下(了解)
② 运行FraudDetection:
③ 运行TransactionDataProducer
结果:
学习笔记Flink(八)—— 基于Flink 在线交易反欺诈检测相关推荐
- 基于用户行为的交易反欺诈探索
阅读收益: 1- 了解交易欺诈的主要行为模式 2- 学习无监督模型在交易风控场景的应用 3- 学习完整线上推理的流程 导读 本次分享的题目是基于用户行为的交易反欺诈检测,主要介绍在交易反欺诈场景下使用 ...
- 基于 Flink 的超大规模在线实时反欺诈系统的建设与实践
在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消费.通讯记录, ...
- 基于Flink的超大规模在线实时反欺诈系统的建设与实践
作者:关贺宇 在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消 ...
- Flink从入门到精通100篇(七)-如何基于 Flink 搭建一个实用有效的在线实时反欺诈平台?
前言 在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消费.通讯 ...
- 【vn.py学习笔记(八)】vn.py utility、BarGenerator、ArrayManager源码阅读
[vn.py学习笔记(八)]vn.py utility.BarGenerator.ArrayManager源码阅读 写在前面 1 工具函数 2 BarGenerator 2.1 update_tick ...
- OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算
OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...
- 《Go语言圣经》学习笔记 第九章 基于共享变量的并发
<Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...
- QT学习笔记(八):顺序容器和关联容器
QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...
- ROS学习笔记(八): ROS通信架构
ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...
最新文章
- 面试官:给我一个避免消息重复消费的解决方案?
- 恭喜 神策数据入选中国信通院开源供应商全景图
- python异常值检测_python – 使用RPCA的异常值
- android封装oauth2,Android AccountAuthenticator和OAuth2
- Java 遍历指定目录下的所有目录
- RabbitMQ学习之集群模式
- java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行
- 核电安全级数字化仪控系统内存诊断设计与实现
- [前端代码] 3月2日更新-近期200+热门微信小程序demo源码下载汇总
- php 写聊天室源码,PHP实现简单聊天室(附源码)_PHP
- 计算机在线作业office,全国计算机一级office题库与答案
- win10上成功运行faster-rcnn.pytorch-1.0
- weblogic新建一个managed server并启动
- 上海高中计算机知识点总结,上海高中高考数学知识点总结(大全)
- P4961 小埋与扫雷【dfs】
- java国外著名网站
- 花书/深度学习入门相关资料
- SQL高级语句-SQL 通配符-在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
- 记忆忘记_不要忘记记忆
- 服务器和硬盘阵列,存储服务器与磁盘阵列组之间区别介绍