金融风控项目-1

文章目录

  • 一. 案例背景介绍
  • 二. 代码实现
    • 1. 加载数据
    • 2. 数据处理
    • 3. 查询
  • 三. 业务解读

一. 案例背景介绍

  • 通过对业务数据分析了解信贷业务状况

  • 数据集说明

    • 从开源数据改造而来,基本反映真实业务数据
    • 销售,客服可以忽略
    • 账单周期,放款日期
    • 账单金额-实收金额 = 未收金额
    • 应付日期为还款时间
    • 账期分成两种 60天和90天
    • 实际到账日为空白 说明没还钱
      在这里插入图片描述
  • 通过对贷后业务数据的分析要分析出如下内容

    • 每个季度账单金额和坏账率(逾期90天以上)
      • 所有未收金额/所有账单金额
      • 未收金额 = 账单金额-实收金额
    • 每个季度60天账期 入催率,90天账单 入催率
    • 不同逾期天数的回款情况
      • 历史逾期天数 有逾期 已经还完了
      • 当前逾期天数 现在还欠着钱,没还完

二. 代码实现

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()

在这里插入图片描述

df2.info()

在这里插入图片描述

2. 数据处理

填充缺失值,将日期时间类型转换成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)
df2

在这里插入图片描述

df2.info()

在这里插入图片描述
为了后续计算,在原始数据基础上构造新的字段:是否逾期,是否逾期90天,未收金额2(校验原始数据中的未收金额),当前逾期天数,历史逾期天数

df2['是否到期'] = df2.apply(lambda x: '1' if (x.实际到账日 > x.应付日期) else '0',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) 
df2

在这里插入图片描述

3. 查询

查询实际到账日期字段得知当前最近的到账日为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

在这里插入图片描述

#账单金额
fn1 = df3.groupby('账单季度')[['账单金额']].sum()
fn1.columns = ['账单金额']
fn1

在这里插入图片描述

#90天到期金额
df4 = df3[(df3.是否到期90== 1)]
fn2 = df4.groupby('账单季度')[['账单金额']].sum()
fn2.columns = ['到期金额']
fn2

在这里插入图片描述

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天账期的账单金额
df4 = df3[(df3.账期 == 60)&(df3.是否到期 == "1")]
fn1 = df4.groupby('账单季度')[['账单金额']].sum()
fn1.columns = ['60天账期的账单金额']
fn1

在这里插入图片描述

#60天账期的入催金额
df4 = df3[(df3.账期 == 60)&(df3.是否到期 == "1")&(df3.历史逾期天数>0)]
fn2 = df4.groupby('账单季度')[['未收金额2']].sum()
fn2.columns = ['60天账期的入催金额']
fn2

在这里插入图片描述

#90天账期的账单金额
df4 = df3[(df3.账期 == 90)&(df3.是否到期 == '1')]
fn3 = df4.groupby('账单季度')[['账单金额']].sum()
fn3.columns = ['90天账期的账单金额']
fn3

在这里插入图片描述

#90天账期的入催金额
df4 = df3[(df3.账期 == 90)&(df3.是否到期 == '1')&(df3.历史逾期天数>0)]
fn4 = df4.groupby('账单季度')[['未收金额2']].sum()
fn4.columns = ['90天账期的入催金额']
fn4

在这里插入图片描述
计算入催率

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()
df6

在这里插入图片描述

#使用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+'])
df6

在这里插入图片描述

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天内能收回绝大部分账单

● 知道常见信贷风险
○ 信用风险
○ 欺诈风险
● 知道机器学习风控模型的优势
○ 批量,迅速,准确,同时处理大量贷款请求
○ 在零售信贷业务场景下,与人工审核相比优势显著
● 知道信贷领域常用术语含义
○ DPD 逾期天数
○ FPD 首次逾期天数
○ bad rate 坏账率
○ M1 逾期一个月以内

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16732.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CANMV K230入手体验(1)u盘安装镜像

这是安装镜像后的磁盘管理。 使用镜像文件名为&#xff1a; CanMV-K230_01Studio_micropython_v1.2.2-0-g4b8cae1_nncase_v2.9.0.img。 安装结束。 套件的sd卡损坏&#xff0c;已申请更换。 小伙伴们注意sd卡的问题&#xff0c;一个上午过去了。C... 下图是资源管理器的截…

策略模式-小结

总结一下看到的策略模式&#xff1a; A:一个含有一个方法的接口 B:具体的实行方式行为1,2,3&#xff0c;实现上面的接口。 C:一个环境类&#xff08;或者上下文类&#xff09;&#xff0c;形式可以是&#xff1a;工厂模式&#xff0c;构造器注入模式&#xff0c;枚举模式。 …

springCloud-2021.0.9 之 GateWay 示例

文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收…

[FastAdmin] 上传图片并加水印,压缩图片

1.app\common\library\Upload.php 文件 upload方法 /*** 普通上传* return \app\common\model\attachment|\think\Model* throws UploadException*/public function upload($savekey null){if (empty($this->file)) {throw new UploadException(__(No file upload or serv…

windows系统远程桌面连接ubuntu18.04

记录一下自己在配置过程中遇到的问题&#xff0c;记录遇到的两大坑&#xff1a; windows系统通过xrdp远程桌面连接ubuntu18.04的蓝屏问题。参考以下第一章解决。 同一局域网内网段不同的连接问题。参考以下第三章解决&#xff0c;前提是SSH可连。 1. 在ubuntu上安装xrdp 参考&…

逻辑回归不能解决非线性问题,而svm可以解决

逻辑回归和支持向量机&#xff08;SVM&#xff09;是两种常用的分类算法&#xff0c;它们在处理数据时有一些不同的特点&#xff0c;特别是在面对非线性问题时。 1. 逻辑回归 逻辑回归本质上是一个线性分类模型。它的目的是寻找一个最适合数据的直线&#xff08;或超平面&…

23页PDF | 国标《GB/T 44109-2024 信息技术 大数据 数据治理实施指南 》发布

一、前言 《信息技术 大数据 数据治理实施指南》是中国国家标准化管理委员会发布的关于大数据环境下数据治理实施的指导性文件&#xff0c;旨在为组织开展数据治理工作提供系统性的方法和框架。报告详细阐述了数据治理的实施过程&#xff0c;包括规划、执行、评价和改进四个阶…

ESM3(1)-介绍:用语言模型模拟5亿年的进化历程

超过30亿年的进化在天然蛋白质空间中编码形成了一幅生物学图景。在此&#xff0c;作者证明在进化数据上进行大规模训练的语言模型&#xff0c;能够生成与已知蛋白质差异巨大的功能性蛋白质&#xff0c;并推出了ESM3&#xff0c;这是一款前沿的多模态生成式语言模型&#xff0c;…

在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合

文章目录 传统的神经网络框架存在的问题一. Transformer架构综述1.1 transformer的输入1.1.1 词向量1.1.2 位置编码&#xff08;Positional Encoding&#xff09;1.1.3 编码器与解码器结构1.1.4 多头自注意力机制 二.Transformer分步详解2.1 传统词向量存在的问题2.2 详解编解码…

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取1k个用户token,使用jmeter压力测试

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取用户token&#xff0c;使用jmeter压力测试 3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去3.6 批量删除生成的用户…

【安全靶场】信息收集靶场

靶场&#xff1a;https://app.hackinghub.io/hubs/prison-hack 信息收集 子域名收集 1.subfinder files.jabprisons.com staging.jabprisons.com cobrowse.jabprisons.com a1.top.jabprisons.com cf1.jabprisons.com va.cobrowse.jabprisons.com vs.jabprisons.com c…

springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

(一)获取数据和读取数据

获取公开数据 下载、爬虫、API 一些公开数据集网站&#xff1a; 爬虫&#xff1a; 发送请求获取网页源代码——解析网页源代码内容&#xff0c;提取数据 通过公开API获取&#xff1a; API定义了两个程序之间的服务合约&#xff0c;即双方是如何使用请求和响应来进行通讯的…

在MacBook Air上本地部署大模型deepseek指南

随着大模型技术的兴起&#xff0c;越来越多的人开始关注如何在本地部署这些强大的AI模型。如果你也想体验大模型的魅力&#xff0c;那么这篇文章将指导你如何在你的MacBook Air上本地部署大模型. 工具准备 为了实现本地部署&#xff0c;你需要以下工具&#xff1a; Ollama&a…

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

文章目录 Windows中使用Docker安装Anythingllm&#xff0c;基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…

git学习【个人记录b站尚硅谷】

git学习 Git基本命令操作设置用户签名初始化本地库添加文件从工作区到暂存区将文件从暂存区添加到本地库修改文件重新提交 Git分支Github操作创建远程库上传到远程库克隆到本地文件夹拉取远程库最新版本到本地 总结 Git基本命令操作 设置用户签名 git config --global user.n…

【R语言】t检验

一、基本介绍 t检验&#xff08;t-test&#xff09;是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式&#xff1a; t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…

TDengine 产品由哪些组件构成

目 录 背景产品生态taosdtaosctaosAdaptertaosKeepertaosExplorertaosXtaosX Agent应用程序或第三方工具 背景 了解一个产品&#xff0c;最好从了解产品包括哪些内容开始&#xff0c;我这里整理了一份儿 TDegnine 产品包括有哪些组件&#xff0c;每个组件作用是什么的说明&a…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型

文章目录 使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型前提条件1. 安装ollama2. 拉取deepseek的模型3. Open-WebUI 说明4. 启动容器文档的方法如下优化命令&#xff08;可选&#xff09;1. 增加了健康检查机制&#xff08;--health-cmd&#xff09;2. 使 WebUI…