当今以互联网、移动终端等为代表的技术力量正深刻地影响着金融支付市场,信息化、网络化、无线终端等技术的应用,使金融机构特别是银行业的经营发生了天翻地覆的变化,传统的银行柜台和网点业务,正渐渐被电子化交易所替代,电子银行以其便利性和增值服务各方面的优势,已经成为银行业保持活力和竞争力的主要发展动力。

围绕电子渠道信息泄露、资金被盗、诈骗等威胁与日俱增,欺诈信息、木马病毒、仿制克隆卡等欺诈手段层出不穷,让各家银行头疼不已。

一、欺诈行为分类

1、身份欺诈,即利用虚假的身份信息向金融机构申请贷款。身份造假有以下几种类型:

(1)盗用或冒用他人身份信息,利用账户资金进行非法消费、转账或提现等操作。

(2)盗用银行卡,或者通过复制银行卡,提取银行卡内资金。

(3)虚假注册,利用虚假注册的非本人账户进行骗贷或洗钱。

(4)电信诈骗,即通过网络、电话等诈骗方式,诱使客户主动将资金转移到欺诈分子账户。

2、信息隐瞒或造假,即刻意隐藏不良信息。

3、隐形的欺诈意图,正常信贷需求的人可能出现未能正确评估自身还款能力或丧失还款意愿的情况。

4、商户欺诈,商户与借款人形成套现、套利的勾结关系,骗取金融机构对于特定消费场景的补贴等。

二、金融反欺诈模型

金融反欺诈模型是通过数据采集手段,对风险行为或可疑行为监测与分析,根据不同风险事件或可疑行为的风险计量标准和规则模型,分别实施预警或干预等措施,从而有效减少金融欺诈的发生。一套完整的流程化的规则模型,系统有几个必备的要素:规则库、规则标的、规则评价、风险计量。

1、规则库模型最基本、最核心的系统架构便是规则库,它是整个系统运作的核心机制,商业银行针对欺诈行为特点,提炼欺诈行为的关键和核心要素。

将这些要素整合并参数化、逻辑化、可定制化,当客户行为触发规则库中的某一条规则或多条规则时,系统根据触发的规则的风险程度大小,计算相应的风险分值,并根据风险分值大小采取不同的干预、事后核实等处理手段。

要实施一套反欺诈系统,最重要的一项工作即是在充分搜集、获取渠道欺诈行为特点的基础上,进行风险规则模型库的建立,也就是说,风险规则模型即是对客户欺诈行为的模拟,与实际欺诈行为模拟的越相近,就越能充分发挥系统本身的作用。

2、规则标的模型的本质是客户行为达到启动模型暴露风险的条件,这里的启动条件要素,即是模型要涉及的规则标的,它是指通过模型工具捕捉到的客户行为要素,要素包含在银行系统所记录的客户行为日志中。

规则标的要素,涵盖了模型对欺诈行为精度、准确度和说服力的标准和要求。一般规则要素的多少,决定了一条规则的运作和复杂程度。一个成熟的规则模型,应该实现规则标的的任意搭配和调试,以适应复杂程度不断更新和变化的欺诈行为。

目前最广泛的规则标的要素主要有以下几个方面:

1、客户基本属性(包含客户基本信息,如家庭、职业、住址、资产情况等)

2、交易账户属性(包含登入、交易使用账户情况)

3、交易时间、地点、金额、交易频率、使用终端标识

4、交易收付对象

5、异常行为

3、模型评价评价一个模型的优劣,要看投入使用和运营的成果,对真正欺诈行为的暴露的准确性和完整性。衡量欺诈行为暴露的准确性和完整性指针有规则命中率、规则误报率及欺诈客户命中率。

4、风险计量模型建立风险评分机制对违反规则的客户行为进行风险评估。每个规则或组合规则(场景)都有一个规则风险分,当一个交易触发了多个规则报警,这个交易最终有一个0-100之间的交易风险分。模型通过风险分值的大小(0-100)来衡量客户可疑行为的风险程度,风险分值大小则由客户交易行为所触发的规则参数阀值来衡量和计算。一套反欺诈系统成功与否,在于是否能准确的暴露风险,即存在欺诈行为时,系统能准确的捕捉并预警,并根据风险程度大小进行干预或展现。

三、代码实现

1、导入数据,并查看数据信息

# 导入数据文件
df = pd.read_csv('F:\Python\data\LoanStats_2016Q3.csv', skiprows=1, low_memory=False)
df.info() # 查看文件属性

2、对数据进行预处理,将相关度不大的属性列删除

# drop id and member_id
df.drop('id',1,inplace=True)
df.drop('member_id',1,inplace=True)# drop nan rows
df.dropna(axis=0,how='all',inplace=True)
df.info()# emp_title is too many to ignore
df.drop('emp_title',1,inplace=True)

3、查看数据类别,将缺失值较大的属性列删除

# drop hige missing_pct
df.drop('desc',1,inplace=True)
df.drop('verification_status_joint',1,inplace=True)# drop unnecessary object
df.drop('term',1,inplace=True)
df.drop('issue_d',1,inplace=True)
df.drop('purpose',1,inplace=True)
df.drop('title',1,inplace=True)
df.drop('zip_code',1,inplace=True)
df.drop('addr_state',1,inplace=True)
df.drop('earliest_cr_line',1,inplace=True)
df.drop('revol_util',1,inplace=True)# drop after loan
df.drop(['out_prncp','out_prncp_inv','total_pymnt','total_pymnt_inv','total_rec_prncp', 'grade', 'sub_grade'] ,1, inplace=True)
df.drop(['total_rec_int','total_rec_late_fee','recoveries','collection_recovery_fee','collection_recovery_fee'],1, inplace=True)
df.drop(['last_pymnt_d','last_pymnt_amnt','next_pymnt_d','last_credit_pull_d'],1, inplace=True)
df.drop(['policy_code'],1, inplace=True)

4.整理数据列,关注loan_status属性列,并计算与该属性列相关系数,相关系数高的可以删除

# focus on loan_status
df.loan_status.value_counts()# Current and Fully Paid regard as excellent 1, late regard as bad loan 0, others regard ass nan
df.loan_status.replace('Current',int(1),inplace=True)
df.loan_status.replace('Fully Paid',int(1),inplace=True)
df.loan_status.replace('Charged Off',np.nan,inplace=True)
df.loan_status.replace('In Grace Period',np.nan,inplace=True)
df.loan_status.replace('Default',np.nan,inplace=True)
df.loan_status.replace('Late (31-120 days)',int(0),inplace=True)
df.loan_status.replace('Late (16-30 days)',int(0),inplace=True)
# find highly corr Data
cor = df.corr()
cor.loc[:,:] = np.tril(cor,k=-1)
cor = cor.stack()
cor[abs(cor) > 0.5]# drop the columns highly correlated with loan_status
df.drop(['funded_amnt','funded_amnt_inv','installment'],1,inplace=True)

5.对已处理好的数据进行建模训练,测试集为0.2

Y = df.loan_status
df.drop('loan_status',1,inplace=True)
X = df# train_data and test_data
x_train, x_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=1)

6.使用GBRT对数据进行建模训练

from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn import ensemble
from sklearn.preprocessing import OneHotEncoder
param_grid = {'learning_rate': [0.1],'max_depth': [2],'min_samples_split': [50,100],'n_estimators': [100,200]}est = GridSearchCV(ensemble.GradientBoostingRegressor(),param_grid, n_jobs=4, refit=True)est.fit(x_train, y_train)best_params = est.best_params_
print(best_params)
%%time
est = ensemble.GradientBoostingRegressor(min_samples_split=50,n_estimators=300,learning_rate=0.1,max_depth=1,random_state=0,loss='ls').fit(x_train,y_train)
est.score(x_test,y_test)

7、测试模型,找出10个最重要属性

def computer_ks(data):sorted_list = data.sort_values(['predict'],ascending=True)total_bad = sorted_list['label'].sum(axis=None,skipna=None,level=None,numeric_only=None)/3total_good = sorted_list.shape[0] - total_badmax_ks = 0.0good_count = 0.0bad_count = 0.0for index, row in sorted_list.iterrows():if row['label'] == 3:bad_count += 1.0else:good_count += 1.0val = bad_count/total_bad - good_count/total_goodmax_ks = max(max_ks,val)return max_ks
feature_importance = est.feature_importances_
feature_importance = 100.0 * (feature_importance / feature_importance.max())indices = np.argsort(feature_importance)[-10:]
plt.barh(np.arange(10),feature_importance[indices],color='green',alpha=0.4)
plt.yticks(np.arange(10+0.25),np.array(X.columns)[indices])
_ = plt.xlabel('Relative importance'), plt.title('Top Ten Important Variables')

8、最终结果

项目:金融行业反欺诈模型相关推荐

  1. 金融反欺诈模型----项目实战--机器学习

    机器学习:从源数据清洗到特征工程建立谈金融反欺诈模型训练 本文旨在通过一个完整的实战例子,演示从源数据清洗到特征工程建立,再到模型训练,以及模型验证和评估的一个机器学习的完整流程.由于初识机器学习,会 ...

  2. 原理+代码|手把手教你使用Python实战反欺诈模型

    三本点击上方"早起Python",关注并"星标" 每日接收Python干货! 本文含 6192 字,15 图表截屏 建议阅读 20分钟 本文将基于不平衡数据,使 ...

  3. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  4. AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)

    AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录

  5. 实操信贷场景中的反欺诈模型

    今天的文章,关于反欺诈模型的实操,之前有跟大家分享过相关内容,部分反欺诈的领域的童鞋感觉内容比较有帮助,今天就该内容进行讲解.本文介绍的产品适合在消费零售信贷及现金场景贷中的中短期产品,其中涉及的变量 ...

  6. 微表情反欺诈模型特征解析及应用

    在整个风险管理全流程中,科技元素应用最多的板块非反欺诈莫属. 一是因为反欺诈风控本身在整个信贷风险全流程拒绝比率中占比较少,导致其"拒绝容错率"可以相应放大,进而可以使用相对激进的 ...

  7. 《HyperLedger Fabric 实战》—— 十、项目演练 -- 反欺诈系统

    <HyperLedger Fabric 实战>-- 十.项目演练 – 反欺诈系统 注意点 1.用户唯一ID应该是姓名与身份证号组合后的MD5,这样可以防止加盟用户仅通过机器生成的大量身份证 ...

  8. 深度学习核心技术精讲100篇(七十九)-深度学习应用实战案例:携程金融自动化迭代反欺诈模型体系

    前言 支付欺诈风险是携程金融风控团队的主要防控对象,它一般是指用户卡片信息或账号信息泄露后,欺诈分子利用这些信息在携程平台进行销赃,侵害用户资金安全,给用户和携程平台带来损失. 1. 高对抗性 欺诈分 ...

  9. 反欺诈中所用到的机器学习模型有哪些?

    作者 | 微调(知乎ID微调,普华永道高级数据科学家) 反欺诈方向的实际应用很多,我有做过保险业反欺诈和零售快消业的欺诈检测,抛砖引玉的谈谈反欺诈项目的"道"和"术&qu ...

最新文章

  1. 双列集合,往treeMap里添加元素的时候注意的事项
  2. 【c语言】蓝桥杯算法提高 3-2求存款
  3. 实验13 简单FTP 程序设计
  4. 1014. Best Sightseeing Pair
  5. hmm 求隐藏序列_结巴分词3--基于汉字成词能力的HMM模型识别未登录词
  6. CODEVS——T1519 过路费
  7. excel设置默认值_职场办公必备的7个Excel应用技巧解读,易学易懂,收藏备用!...
  8. 用Java语言编写的随机彩色验证码
  9. Python脚本-导出SQL查询结果到Excel文件
  10. Hive导入csv文件
  11. [转]java中的io笔记
  12. Linux下mysql数据库的自动备份与还原 远程备份和本地备份
  13. R语言使用median函数计算dataframe数据中特定数据列的中位数、如果包含NA值则需要设置na.rm参数为TRUE
  14. zeros函数和ones函数的用法
  15. bugku ctf 多种方法解决 (在做题过程中你会得到一个二维码图片)
  16. 光通量发光强度照度亮度关系_光通量、发光强度、照度单位的关系
  17. 从向量空间的角度来理解方程组有无解的问题
  18. UE4-LOD理解-Distance culling(距离剔除体积)和Visibility culling(可视化剔除体积)
  19. 【专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码
  20. BIM+GIS技术融合发展 成为工程规划建设新热点

热门文章

  1. RK3588S 介绍
  2. 路径中的“./“,“../“,“/“ 代表的含义
  3. 解决 TypeError: expected string or bytes-like object
  4. 全面解析JavaScript中对于字符串子串的查询方法
  5. 生物药、创新药、仿制药新项目立项调研、评估的重要手段
  6. OpenStack使用Placement做资源管理时虚拟机无法调度的一次排错记录
  7. python开发html_Python开发——16.HTML
  8. java 金_Java初级黄金体验 其一
  9. 第六感38只19.9/吹风机29.9/长虹电暖器69/按摩护腰垫39/情侣卫衣54.9
  10. 【转】Coherence Step by Step