金融风控

21 篇文章 0 订阅
14 篇文章 1 订阅

1. 信贷与风险

1.1 信贷

1. 定义

  • 信贷业务,就是贷款业务,是商业银行和互联网金融公司最重要的资产业务和主要赢利手段
    • 通过放款收回本金和利息,扣除成本后获得利润。
    • 贷款平台预测有信贷需求用户的还款情况,然后将本金借贷给还款概率大的用户

2. 产品

信贷产品

2.1 现金贷
1. 贷款流程
  • 申请贷款->放款给客户->客户还款
2. 特点

现金贷

3. 常见现金贷

现金贷

2.2 消费贷
1. 贷款流程
  • 申请消费贷 -> 额度授信->客户使用消费贷消费
2. 特点

消费贷

3. 常见消费贷
  • 信用卡,花呗,白条等产品,有账单日,还款日

1.2 风险

1. 分类

  • 信用风险:借款人的的还款能力和还款意愿在贷款后出现问题的风险
  • 欺诈风险:借款人压根没想还钱,以诈骗为目的

2. 常见风险

  • 冒名顶替,黑产骗贷
  • 多头借贷,借新还旧
    • 客户:工行信用卡,招商信用卡… n张信用卡,网贷平台1,网贷平台2,网贷平台n
    • 用新借来的钱换已有的负债: 负债变多 -> 需新借更多 -> 设法提额 -> 信用资质不够 -> 出现流动性风险 -> 逾期
    • 特点:第三方数据:多头申请记录
    • APP安装:大量借款类APP
    • 短信:大量申请短信,提醒还款,催收短信
  • POS机套现,以少换多
    • 购买有支付牌照机构的POS机进行套现,手续费0.6%
  • 针对风控模型,制作数据
    • 使用花呗在天猫购物,对花呗账单做分期
    • 买入存金宝,一个礼拜后追加存金宝资金
    • 购买***元基金
    • 保持余额宝XXX元不动,余额宝累计收益做到 XX元
    • 购买XXXX保险

2. 风控

2.1 定义

  • 信贷业务中,使用信用来预支金钱,在小额贷业务中往往没有抵押物,那么贷款方就会承担一定风险(用户不还钱)
  • 风控就是对用户的信用风险进行管理与规避,对于预测信用较差的人,不向其放款,即便放款,也会是较小的贷款额度和较高的利率

2.2 分类

  • 信用评分系统:针对信用风险
  • 反欺诈系统:针对欺诈风险

2.3 措施

  • 人工审批
  • 基于机器学习模型的人工智能风控模型

2.4 对比

  • 人工审批:效率低,对人员业务能力要求高,不适合金融零售业务场景
  • 机器学习模型:批量,迅速,准确,同时处理大量贷款请求(几万,几十万,上百万/天)、

2.5 术语

风控术语

2.6 应用

1. 数据集说明

  • 从开源数据改造而来,基本反映真实业务数据
  • 销售,客服可以忽略
  • 账单周期,放款日期
  • 账单金额-实收金额 = 未收金额
  • 应付日期为还款时间
  • 账期分成两种 60天和90天
  • 实际到账日为空白 说明没还钱
    数据集说明

2. 实现

2.1 加载数据
import pandas as pd 
import datetime 
from pyecharts.charts import * 
from pyecharts import options as opts 
df1 = pd.read_excel('data/业务数据.xls') 
# 要使用原始数据构建新指标,所以保留原始数据,copy新的数据,在新的数据中创建新指标 
df2 = df1.copy() 
df2.head()
2.2 查看数据基本情况
df2.info()
df2.describe()
2.3 数据预处理
  • 填充缺失值
df2['实收金额'] = df2.实收金额.fillna(0)
df2['开票金额'] = df2.开票金额.fillna(0)
df2['未收金额'] = df2.未收金额.fillna(0)
  • 将日期时间类型转换成datetime类型
# 获取最大的日期,作为当前时间
today_time = pd.to_datetime(df2.实际到账日.fillna('0').max())
df2['账单周期'] = pd.to_datetime(df2.账单周期)
df2['应付日期'] = pd.to_datetime(df2.应付日期)
df2['实际到账日'] = pd.to_datetime(df2.实际到账日).fillna(today_time)
  • 添加新字段:是否逾期,是否需逾期90天,未收金额2(校验原始数据中的未收金额),当前逾期天数,历史逾期天数
df2['是否到期'] = df2.apply(lambda x : 0 if x.应付日期 > today_time else 1,axis=1)
df2['是否到期90天'] = ( today_time - df2.应付日期 ).map(lambda x : 1 if x.days >= 90 else 0)
df2['未收金额2'] = (df2.账单金额 - df2.实收金额)
df2['历史逾期天数'] = df2.apply(lambda x : (x.实际到账日 - x.应付日期).days if x.未收金额2 == 0 else (today_time
- x.应付日期).days,axis=1)
df2['当前逾期天数'] = df2.apply(lambda x : (x.历史逾期天数) if x.未收金额2 > 0 else 0 ,axis = 1)
  • 每个季度账单金额和坏账率(逾期90天以上)
    • 所有未收金额/所有账单金额
    • 未收金额 = 账单金额-实收金额
  • 查询实际到账日期字段得知最近到账日为2019年5月17日,如果以2019年5月17日为观察点,有些贷款还没到还款日,没法统计DPD90的数据,所以只统计2019年之前的情况
df3 =df2.copy()
# 创建’账单季度‘字段,将日期转换成季度
df3['账单季度'] = df3['账单周期'].map(lambda x : x.to_period('Q'))
# 提取2017年3季度到2018年4季度数据
df3 = df3[(df3['账单季度']<='2018Q4') & (df3['账单季度']>='2017Q3')]
df3.shape
  • 按季度统计账单金额,到期金额和逾期金额
#账单金额
fn1 = df3.groupby('账单季度')[['账单金额']].sum()
fn1.co
#90天到期金额
df4 = df3[(df3.是否到期90天 == 1)]
fn2 = df4.groupby('账单季度')[['账单金额']].sum()
fn2.co
df4 = df3[(df3.是否到期90天 == 1)]
fn3 = df4.groupby('账单季度')[['未收金额2']].sum()
fn3.columns = ['当前逾期90+金额']
fn3
  • 合并数据计算逾期率
dfs = [fn1,fn2,fn3]
final1 = pd.concat(dfs,axis=1)
final1
final1['90+净坏账率'] = round(final1['当前逾期90+金额'] / final1.到期金额,3)
final1
  • pyecharts绘图
bar = (
Bar()
.add_xaxis(list(final1.index.values.astype(str)))
.add_yaxis(
"账单金额",
list(final1.账单金额),
yaxis_index=0,
color="#5793f3",
)
.set_global_opts(
title_opts=opts.TitleOpts(title="90+净坏账率"),
)
.extend_axis(
yaxis=opts.AxisOpts(
name="90+净坏账率",
type_="value",
min_=0,
max_=0.014,
position="right",
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(color="#d14a61")
),
axislabel_opts=opts.LabelOpts(formatter="{value}"),
)
)
)
line = (
Line()
.add_xaxis(list(final1.index.values.astype(str)))
.add_yaxis(
"90+净坏账率",
list(final1['90+净坏账率']),
yaxis_index=1,
color="#675bba",
label_opts=opts.LabelOpts(is_show=False),
)
)
bar.overlap(line).render_notebook()
  • 每个季度60天账期入催率,90天账单入催率
  • 计算每个季度的60天账单入催金额,90天账单入催金额
#60天账期的账单金额
df4 = df3[(df3.账期 == 60)&(df3.是否到期 == 1)]
fn1 = df4.groupby('账单季度')[['账单金额']].sum()
fn1.columns = ['60天账期的账单金额']
#60天账期的入催金额
df4 = df3[(df3.账期 == 60)&(df3.是否到期 == 1)&(df3.历史逾期天数>0)]
fn2 = df4.groupby('账单季度')[['未收金额2']].sum()
fn2.columns = ['60天账期的入催金额']
#90天账期的账单金额
df4 = df3[(df3.账期 == 90)&(df3.是否到期 == 1)]
fn3 = df4.groupby('账单季度')[['账单金额']].sum()
fn3.columns = ['90天账期的账单金额']
#90天账期的入催金额
df4 = df3[(df3.账期 == 90)&(df3.是否到期 == 1)&(df3.历史逾期天数>0)]
fn4 = df4.groupby('账单季度')[['未收金额2']].sum()
fn4.columns = ['90天账期的入催金额']
  • 计算入催率
dfs = [fn1,fn2,fn3,fn4]
final2 = pd.concat(dfs,axis=1)
# final2 = fn1.merge(fn2,on='账单季度').merge(fn3,on='账单季度',how='left').merge(fn4,on='账单季度')
final2['60天账期入催率'] = round(final2['60天账期的入催金额'] / final2['60天账期的账单金额'],3)
final2['90天账期入催率'] = round(final2['90天账期的入催金额']/final2['90天账期的账单金额'],3)
final2
  • pyecharts绘图
line = (
Line()
.add_xaxis(list(final1.index.values.astype(str)))
.add_yaxis(
"60天账期入催率",
list(final2['60天账期入催率']),
yaxis_index=0,
color="#675bba",
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="不同账期入催率"),
)
.add_xaxis(list(final1.index.values.astype(str)))
.add_yaxis(
"90天账期入催率",
list(final2['90天账期入催率']),
yaxis_index=0,
color="#d14a61",
label_opts=opts.LabelOpts(is_show=False),
)
)
line.render_notebook()
  • 不同逾期天数的回款情况
    • 历史逾期天数 有逾期 已经还完了
    • 当前逾期天数 现在还欠着钱,没还完
df6 = df3[(df3.未收金额2 == 0)&(df3.是否到期 == 1)].copy()
#使用cut,讲数据按照逾期天数分箱,然后添加分箱之后结果标签
df6['历史逾期天数'] = pd.cut(df6['历史逾期天数'],bins=[-999,0,5,10,15,20,30,60,90,999],right=True,
labels=['0','1-5','6-10','11-15','16-20','21-30','31-60','61-90','91+'])
final3 = df6.groupby('历史逾期天数')[['账期']].count()
final3.columns = ['回收账单数']
final3
  • pyecharts绘图
ydata = final3['回收账单数'].values.tolist()
bar = (
Bar()
.add_xaxis(list(final3.index.values.tolist()))
.add_yaxis("收回账单数",ydata,yaxis_index=0,color="#675bba")
.set_global_opts(
title_opts=opts.TitleOpts(title="不同逾期天数的已收回账单数"),
)
)
bar.render_notebook()

结论:

  • 从数据中看出,在2018年Q2季度之前,运营策略比较保守,坏账金额和入催率都比较低,
  • 2018年Q2之后,有可能是由于运营策略调整,给更多的人放贷,但坏账率和入催率均在3%一下,在合理范围内
  • 不同逾期天数收回账单的数据看,30天内能收回绝大部分账单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值