Advertisement

金融风控项目-# 相关业务介绍

阅读量:

金融风控相关业务介绍

学习目标

  • 了解典型信贷风险问题
  • 熟悉机器学习技术的风控模型具有哪些优势
  • 能够准确理解信贷领域的专业术语和相关概念

1 信贷&风控介绍

  • 信贷业务亦即贷款业务,在商业银行与互联网金融公司中扮演着核心角色并构成主要盈利模式

  • 通过发放贷款收回应还本金及利息收入,在扣除相关费用后的净收益即为利润来源

  • 贷款平台通过对具备信贷需求的用户进行还款能力分析后,在选择具有较高还款意愿的客户时实施资金放贷

  • 风控是银行及金融机构防范客户违约的重要手段:

  • 在信贷业务中运用信用额度放贷策略时

    • 存储客户的基本信息资料
    • 对客户的信用状况进行评估
    • 监控客户的还款能力
    • 观察客户的消费记录
  • 在小额贷业务中由于缺乏抵押物贷款方往往面临较高的违约风险(即客户无法偿还贷款)

  • 风控即是对客户的信用状况进行评估并采取相应措施规避潜在风险

  • 风险控制是信贷业务中的一个重要环节:

    • 对于评估信用状况较差的客户银行通常会限制其贷款额度或拒绝放贷
    • 即使 granting loans to such clients they would typically offer lower interest rates or stricter repayment terms
  • 风险控制业务主要承担着两类风险的管理

    • 信用评分系统:负责处理与信用相关的各种问题
    • 反欺诈系统:操作流程以防范欺诈行为的发生

基于人工智能技术的风控模型与传统人工审批系统的对比研究显示:
相较于传统的人工审批方式而言,在金融零售领域存在明显局限性。
该模型的优势在于能够实现对海量申请的并行处理,并在短时间内完成审核和风险评估,
其显著特点是能够在较短时间内完成审核和风险评估,
并且支持批量数据处理的同时提供精准的风险判定服务,
能够有效提升业务运营效率。

2 常见信贷产品及常见风险介绍

信贷产品介绍

个人信贷产品
大额借贷 房贷车贷
小微企业贷
小额借贷 消费贷 蚂蚁花呗,京东白条
现金贷 蚂蚁借呗,京东金条,微粒贷,各类网贷
数据服务 信用分服务 芝麻信用分,京东小白分
信用数据服务 同盾数据,百融,集奥,大峰…
复制代码
* 现金贷  

申请借款->放款给客户->客户还款

额度 500~3000
利率 24%~36%
期限 714,30天
放款形式 借给现金,不限场景
可选功能 订单展期
现金贷产品 年化利率 现金贷产品 年化利率
苏宁金融 24% 国美易卡 34%
蚂蚁借呗 24% 马上消费 35%
微粒贷 24% 招联金融 36%
有钱花 24% 桔子分期 36%
京东金条 24% 拍拍贷 36%
360借条 24% 趣店 36%
小米金融 24% 捷信 36%
美团生活费 24% 宜人贷 44%
分期乐 24% 玖富 50%

消费贷

信用卡,花呗,白条等产品,有账单日,还款日

申请消费贷 -> 额度授信->客户使用消费贷消费

额度 1000~10000
利率 24%
账期 30天
放款形式 指定消费场景
可选功能 最低还款,账单展期,账单分期,停息挂账,临时额度,备用金

产品类型:

复制代码
* 单期产品
* 多期产品
* 循环额度产品

还款方式:

复制代码
* 砍头息:短期产品, (服务费)
* 等额本金
* 等额本息

常见风险

冒名顶替,黑产骗贷

多头借贷,借新还旧

客户:工行信用卡,招商信用卡… n张信用卡,网贷平台1,网贷平台2,网贷平台n

通过借用新资金偿还现有债务:
债务规模扩大 -> 需进一步加大融资力度 -> 努力提升还款能力 -> 由于信用状况未能达标 -> 可能面临流动性风险 -> 最终导致逾期现象

特点:第三方数据:多头申请记录

​ APP安装:大量借款类APP

​ 短信:大量申请短信,提醒还款,催收短信

POS机套现,以少换多

复制代码
  * 购买有支付牌照机构的POS机进行套现,手续费0.6%

针对风控模型,制作数据

使用花呗在天猫购物,对花呗账单做分期

买入存金宝,一个礼拜后追加存金宝资金

购买***元基金

保持余额宝XXX元不动,余额宝累计收益做到 XX元

购买XXXX保险

3 风控相关术语介绍

解释
DPD Day past due 逾期天数 DPD0为到期当日,DPD1为逾期一日,DPD7为逾期一周
FPD First time past due 首次逾期天数
F/S/T/QPD 首次 二次 三次 四次 逾期天数
M1 逾期 [1, 30)天 M 是英文“Months”的首写字母
M1+ 逾期[30, inf]天
default 坏账
delinquency 拖欠
flow rate 流动率 一般指M1向M2,M2向M3转移的比例
bad rate 坏账率 当月不良资产数/总资产数
vintage 账龄分析

4 风控业务案例

4.1 案例背景介绍

通过分析业务数据来掌握信贷业务的运行情况

数据集说明

外部链接中的图片无法正常访问,可能存在防盗链设置,请确保您能够正常访问该资源并尝试重新上传

通过对贷后业务数据的分析要分析出如下内容

  • 每期业务收入及坏账率(累计逾期90天以上)

    • 应收账款总额占全部业务收入的比例
    • 应收账款余额=当期销售收入-现金收回额
  • 每隔三个月60天的还款周期 入催率

  • 90天还款期 入催率

  • 历史逾期天数 存在逾期记录 已经全部完成还款

  • 当前逾期天数 目前尚未偿还

4.2 代码实现

  • 加载数据
复制代码
    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()

以下是基于给定规则对原始文本的改写

  • 查看数据基本情况
复制代码
    df2.info()

显示结果

复制代码
>     <class 'pandas.core.frame.DataFrame'>
>     RangeIndex: 5257 entries, 0 to 5256
>     Data columns (total 14 columns):
>     #   Column  Non-Null Count  Dtype  
>     ---  ------  --------------  -----  
>     0   销售      5257 non-null   object
>     1   账单状态    5257 non-null   object
>     2   账单周期    5257 non-null   object
>     3   账单金额    5257 non-null   float64
>     4   开票金额    5010 non-null   float64
>     5   实收金额    4470 non-null   float64
>     6   未收金额    5010 non-null   float64
>     7   预计付款日   5256 non-null   object
>     8   应付日期    5257 non-null   object
>     9   商务催收日期  5257 non-null   object
>     10  账期      5257 non-null   int64  
>     11  实际到账日   4387 non-null   object
>     12  开票日期    4996 non-null   object
>     13  客服      5257 non-null   object
>     dtypes: float64(4), int64(1), object(9)
>     memory usage: 575.1+ KB
>  
>  
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>  
>
复制代码
    df2.describe()

显示结果

账单金额 开票金额 实收金额 未收金额 账期
count 5.257000e+03 5.010000e+03 4.470000e+03 5.010000e+03 5257.000000
mean 4.073241e+04 4.096896e+04 4.082419e+04 4.684636e+03 64.539661
std 8.176172e+04 8.007245e+04 7.970628e+04 2.888464e+04 15.622765
min 0.000000e+00 2.500000e+01 0.000000e+00 0.000000e+00 0.000000
25% 5.103000e+03 5.300000e+03 5.112250e+03 0.000000e+00 60.000000
50% 1.436500e+04 1.486560e+04 1.434000e+04 0.000000e+00 60.000000
75% 4.178000e+04 4.220250e+04 4.170750e+04 0.000000e+00 75.000000
max 1.508796e+06 1.356215e+06 1.301665e+06 1.277098e+06 90.000000
  • 数据处理,填充缺失值,将日期时间类型转换成datetime类型
复制代码
    # 获取最大的日期,作为当前时间
    today_time = pd.to_datetime(df2.实际到账日.fillna('0').max())
    
    df2['实收金额'] = df2.实收金额.fillna(0)
    df2['开票金额'] = df2.开票金额.fillna(0)
    df2['未收金额'] = df2.未收金额.fillna(0)
    
    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)
  • 获取实际到账日期字段的信息得知当前最近的到账日期是2019年5月17日。
  • 基于该日期作为基准点进行分析后发现某些贷款尚未达到还款日。
  • 因此,在本例中仅考虑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

显示结果

复制代码
>     (3856, 21)
>  
>  
>       
>  
>
  • 按照季度统计账单金额,到期金额,和逾期金额
复制代码
    #账单金额
    fn1 = df3.groupby('账单季度')[['账单金额']].sum()
    fn1.columns = ['账单金额']
    fn1

显示结果

账单金额
账单季度
2017Q3 8247952.62
2017Q4 11643604.99
2018Q1 17149674.79
2018Q2 31097661.29
2018Q3 38292071.12
2018Q4 51963089.64
复制代码
    #90天到期金额
    df4 = df3[(df3.是否到期90天 == 1)]
    fn2 = df4.groupby('账单季度')[['账单金额']].sum()
    fn2.columns = ['到期金额']
    fn2

显示结果

到期金额
账单季度
2017Q3 8247952.62
2017Q4 11643604.99
2018Q1 17149674.79
2018Q2 31097661.29
2018Q3 38292071.12
2018Q4 28265677.59
复制代码
    df4 = df3[(df3.是否到期90天 == 1)]
    fn3 = df4.groupby('账单季度')[['未收金额2']].sum()
    fn3.columns = ['当前逾期90+金额']
    fn3

显示结果

当前逾期90+金额
账单季度
2017Q3 63883.0
2017Q4 57380.0
2018Q1 64283.0
2018Q2 106930.0
2018Q3 412920.1
2018Q4 304183.0
  • 合并数据计算逾期率
复制代码
    dfs = [fn1,fn2,fn3]
    final1 = pd.concat(dfs,axis=1)
    final1

显示结果

账单金额 到期金额 当前逾期90+金额
账单季度
2017Q3 8247952.62 8247952.62 63883.0
2017Q4 11643604.99 11643604.99 57380.0
2018Q1 17149674.79 17149674.79 64283.0
2018Q2 31097661.29 31097661.29 106930.0
2018Q3 38292071.12 38292071.12 412920.1
2018Q4 51963089.64 28265677.59 304183.0
复制代码
    final1['90+净坏账率'] = round(final1['当前逾期90+金额'] / final1.到期金额,3)
    final1

显示结果

账单金额 到期金额 当前逾期90+金额 90+净坏账率
账单季度
2017Q3 8247952.62 8247952.62 63883.0 0.008
2017Q4 11643604.99 11643604.99 57380.0 0.005
2018Q1 17149674.79 17149674.79 64283.0 0.004
2018Q2 31097661.29 31097661.29 106930.0 0.003
2018Q3 38292071.12 38292071.12 412920.1 0.011
2018Q4 51963089.64 28265677.59 304183.0 0.011
  • 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()

显示结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFurA5Gh-1632059023040)(img\fk2.png)]

  • 计算每个季度的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()

显示结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DV35ufys-1632059023041)(img\fk3.png)]

  • 不同逾期天数的回收情况
复制代码
    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

显示结果

回收账单数
历史逾期天数
0 2400
1-5 358
6-10 235
11-15 215
16-20 92
21-30 189
31-60 156
61-90 60
91+ 88
  • 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()

结果显示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sz7AwYn1-1632059023043)(img\fk4.png)]

4.3 业务解读

  • 通过数据分析表明,在2018年第二季度之前公司采取了较为谨慎的运营策略
  • 自2018年第二季度起 公司可能因采取更为宽松的信贷政策 对部分客户提供了更多的贷款额度 虽然坏账率及入催率维持在3%以下水平 但仍处于合理区间内
  • 通过不同逾期天数回收情况的数据分析可知 其中超过95%的不良债务于30天内得到了全额清偿

小结

  • 知道常见信贷风险

    • 信用风险
    • 欺诈风险
  • 了解机器学习风控模型的强项

  • 能够高效、精准地进行批量处理大额贷款申请

  • 在零售信贷业务场景中表现出色,并且相较于人工审核具有显著优势

  • 您需熟悉信贷行业术语的具体定义

  • DPD代表的逾期账款时间跨度

  • FPD指首次出现违约情况的时间长度

  • 坏账比率衡量不良贷款占比

  • M1阶段表示仅晚点还款一个月的时间段

全部评论 (0)

还没有任何评论哟~