一、背景介绍

信用卡欺诈
信用卡欺诈是指故意使用伪造、作废的信用卡,冒用他人的信用卡骗取财物,或用本人信用卡进行恶意透支的行为。在当今数字时代,信用卡欺诈行为越来越被重视。
罪犯可以通过诈骗或者入侵安全级别较低系统来盗窃信用卡卡号。 用盗得的信用卡进行很小额度的消费进行测试。 如果测试消费成功,那么他们就会用这个信用卡进行大笔消费。

信用卡欺诈行为

交易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. 基于用户行为的交易反欺诈探索

    阅读收益: 1- 了解交易欺诈的主要行为模式 2- 学习无监督模型在交易风控场景的应用 3- 学习完整线上推理的流程 导读 本次分享的题目是基于用户行为的交易反欺诈检测,主要介绍在交易反欺诈场景下使用 ...

  2. 基于 Flink 的超大规模在线实时反欺诈系统的建设与实践

    在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消费.通讯记录, ...

  3. 基于Flink的超大规模在线实时反欺诈系统的建设与实践

    作者:关贺宇 在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消 ...

  4. Flink从入门到精通100篇(七)-如何基于 Flink 搭建一个实用有效的在线实时反欺诈平台?

    前言 在大数据时代,金融科技公司通常借助消费数据来综合评估用户的信用和还款能力.这个过程中,某些中介机构会搜集大量的号并进行"养号"工作,即在一年周期里让这些号形成正常的消费.通讯 ...

  5. 【vn.py学习笔记(八)】vn.py utility、BarGenerator、ArrayManager源码阅读

    [vn.py学习笔记(八)]vn.py utility.BarGenerator.ArrayManager源码阅读 写在前面 1 工具函数 2 BarGenerator 2.1 update_tick ...

  6. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  7. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  8. QT学习笔记(八):顺序容器和关联容器

    QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...

  9. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

最新文章

  1. 面试官:给我一个避免消息重复消费的解决方案?
  2. 恭喜 神策数据入选中国信通院开源供应商全景图
  3. python异常值检测_python – 使用RPCA的异常值
  4. android封装oauth2,Android AccountAuthenticator和OAuth2
  5. Java 遍历指定目录下的所有目录
  6. RabbitMQ学习之集群模式
  7. java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行
  8. 核电安全级数字化仪控系统内存诊断设计与实现
  9. [前端代码] 3月2日更新-近期200+热门微信小程序demo源码下载汇总
  10. php 写聊天室源码,PHP实现简单聊天室(附源码)_PHP
  11. 计算机在线作业office,全国计算机一级office题库与答案
  12. win10上成功运行faster-rcnn.pytorch-1.0
  13. weblogic新建一个managed server并启动
  14. 上海高中计算机知识点总结,上海高中高考数学知识点总结(大全)
  15. P4961 小埋与扫雷【dfs】
  16. java国外著名网站
  17. 花书/深度学习入门相关资料
  18. SQL高级语句-SQL 通配符-在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
  19. 记忆忘记_不要忘记记忆
  20. 服务器和硬盘阵列,存储服务器与磁盘阵列组之间区别介绍

热门文章

  1. python打地鼠游戏教程_Python入门小游戏,炫酷打地鼠教程第二部分,都是干货
  2. python~爬虫~1
  3. count followers
  4. 文巾解题1588. 所有奇数长度子数组的和
  5. MATLAB从入门到精通-辅助ANSYS APDL进行负泊松比铰链结构建模仿真(附源码)
  6. Python入门100题 | 第059题
  7. 【Python刷题】_1
  8. 线性回归中的前提假设
  9. 【转知乎】人工智能会是泡沫吗?
  10. 【Cocosd2d实例教程八】Cocos2d实现碰撞检测(含实例)