刚读完一篇paper《Solving the “false positives” problem in fraud prediction》,趁热打铁,做个笔记。

文章下载链接:https://arxiv.org/pdf/1710.07709.pdf

概述

这篇文章是对 bank transaction fraud prediction 场景下的机器学习算法做了优化,优化方法是,使用 Deep Feature Synthesis 自动生成大量的特征,优化后 False Positive Rate可以大大降低。

文章的核心在 Deep Feature Systhesis (DFS) 这种特征生成方法。

笔记

1、在欺诈检测这个场景中,TPR和FPR都很关键,TPR是坏人的查全率,即抓到了多少坏人,FPR可以理解为好人的查全率,即抓到了多少好人。TPR越高越好,可是TPR越高,FPR也会越高,这里存在一个经济成本的tradeoff,多抓一个坏人,银行会节省一笔money,多抓一个好人,银行会损失一笔money,也就是说,抓坏人的代价是牵连了一部分好人。而且在实际应用场景中,customer retention(客户维系)十分关键,银行宁愿忍受欺诈带来的损失,也不愿意流失一个优质客户。这是做 fraud prediction的一大挑战。

2、DFS是一种特征生成方法,可以针对多个关系型数据表自动生成统计特征。

简述一下DFS。它是一种特征生成方法,可以结构化的生成特征,但是目前只能针对多个关系型数据表生成统计特征,其他高级特征,比如 频域变换、小波变换或者图特征、时序特征还有待补充和加强。

DFS有几个关键概念:

一是relationship,表示数据表之间的关系,目前只支持一种关系——parent and child,翻译过来就是“一对多”,比如 user表和transaction表,一个user有多个transaction,所以user和transaction就是parent-child关系;

二是primitives,表示特征算子,具体分为两类,一类叫 Transform Primitives,另一类叫 Aggregation Primitives,Transform是对数据表的单个列做变换运算,比如把timestamp列的year,month,day,hour单独提取出来,Aggregation是对一列中的多行数据做聚合运算,比如 sum, std, mean, max, min, skew,DFS就是结合多张表的relation,反复运用Trans和Aggre两类运算,计算出许多组合特征,比如 SUM(sessions.STD(transactions.amount)), MEAN(sessions.COUNT(transactions))。

DFS对应的github项目:github-featureTools

DFS论文:http://www.jmaxkanter.com/static/papers/DSAA_DSM_2015.pdf

3、transaction相关的数据有两类,一类是transaction发生时伴随的属性,比如 timestamp, userid, cash, 另一类是与transaction相关的历史数据,比如 user过去的交易行为,只用第一类数据,能得到93个feature,两类数据放在一起,使用DFS,能得到267个feature,在模型不变的情况下,后者的TPR和FPR比前者也高了不少,说明多出来的feature是十分有效的。

4、文中提到了一种寻找最优门限的方法。RandomForest用于分类问题时,最终输出的是每个测试样本的得分(score),可以理解为样本是坏人的概率,我们需要确定一个threshold,把高于threshold的人视为模型抓到的坏人。

文中给出了训练和测试流程,其中包括确定threshold的方法。首先把数据集划分为三组,比例大约是55%、7%和38%,第一部分是训练数据,用于训练模型,第二部分做验证,用来确定门限threshold,确定的方法是最大化 Precision*u(TPR-0.89),0.89是人为指定的TPR参考值,也就是说,TPR=0.89就足够高,在TPR>=0.89时,需要提高Precision,第三部分数据用于测试模型效果。

[注:u(x)是一个unit step函数,当x>=0时,u(x)=1,otherwise, u(x)=0]

p.s.  featureTools这个项目值得继续研究,对特征生成还是很有借鉴意义的。

阅读笔记:Solving the “false positives” problem in fraud prediction的更多相关文章

  1. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  2. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  3. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  4. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

  5. Mongodb Manual阅读笔记:CH9 Sharding

    9.分片(Sharding) Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb ...

  6. Mongodb Manual阅读笔记:CH8 复制集

    8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  7. Mongodb Manual阅读笔记:CH7 索引

    7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...

  8. Mongodb源代码阅读笔记:Journal机制

    Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...

  9. Mongodb Manual阅读笔记:CH4 管理

    4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

随机推荐

  1. R语言扩展包dplyr笔记

    引言 2014年刚到, 就在 Feedly 订阅里看到 RStudio Blog 介绍 dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等 ...

  2. tftp32作为dhcp服务器

    /******************************************************************* * tftp32作为dhcp服务器 * 每次使用tftp进行文 ...

  3. C++ 继承、函数重载

    题外话1:浪费了两天,可耻! 题外话2:你这个年纪,做得好是理所当然,做不好是罪孽深重!!! --- 深以为然. 题外话3:从开始看C++ Primer 到现在,整整24天了,没想到基础方面耗费这么久 ...

  4. 如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global)

    如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global). 例如: int g_howManyPeople; // 全局变量 int g_howMuchMoney; // 全局变量 #i ...

  5. php 输出带变量字符串(echo 函数的应用)

    转自:  http://www.cnblogs.com/devcjq/articles/2306150.html 学习PHP从最简单的开始:echo, print<?php$temp = arr ...

  6. yii2的Console定时任务创建

    Yii2的定时任务可以有两种写法,原理都是通过服务器的定时任务去调用 1.通过调用指定的URL访问 就相当于在浏览器中访问 2.通过console调用 下面我们就来说说Console 是如何实现定时任 ...

  7. js继承摘要

    对象的构造函数是指向创建对象的类的原型对象的构造函数. 类是一个Function, Function都有原型对象,原型对象的构造函数指向类的声明. function Person(){ } Perso ...

  8. Java精选笔记_面向对象(构造方法、this关键字、static关键字、内部类)

    构造方法constructor构造器 构造方法的定义 [修饰符]  类名 (形式参数列表){         //语句 } 构造器用于构造该类的实例.作用:用来初始化对象!一般由系统在创建对象(即类的 ...

  9. MYSQL IFNULL函数的使用

    IFNULL函数是MYSQL数据库中最重要的函数之一,下面就对该函数的使用方面进行分析,希望对您能够有所帮助. 下文对MYSQL IFNULL函数的使用进行了详细的叙述,供您参考学习,如果您在MYSQ ...

  10. cgitb--CGI跟踪模块(简化异常调试)

    通过启动cgitb模块,可以在web浏览器窗口查看详细的编码异常信息,而不必不停地跳转到web服务器的日志屏幕查看,更方便的定位问题: 异常解决后需关闭CGI跟踪. 在CGI脚本最前面增加如下两行,启 ...