基于逻辑回归的金融风控贷款违约预测分析(笔记)

本文介绍了基于逻辑回归的贷款违约预测分析,从数据获取、预处理到模型建立和评估。重点讨论了WOE信用评分卡的构建,包括WOE和IV值的计算以及变量选择。最后,总结了模型构建过程中的关键点和改进方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景与思路

(一)背景

    核心问题:对贷款偿债能力的评估

    1. 方法:利用逻辑回归(理解简单,可解释性强)

    2. 信用评分卡的构建

金融风控
定性分析 逻辑回归
定量分析 信用评分卡

(二)流程

    1. 数据获取:包括获取存量客户及潜在客户的数据;

    2. 数据预处理:包括数据清洗、缺失值处理;

    3. 探索性分析:获取样本总体的大概情况,描述样本总体情况的指标主要包括直方图、箱型图等;

    4. 变量选择:主要通过统计学方法,筛选出对违约状态影响最显著的特征;

    5. 模型开发:包括变量分段,变量的WOE变换和逻辑回归估计;

    6. 模型评估:评估模型的区分能力、预测能力、稳定性,并形成模型评估报告;

    7. 信用评分:根据逻辑回归的系数和WOE等确定信用评分方法,将Logistic模型转换为标准评分形式;

    8. 建立评分系统:根据信用评分方法,建立自动信用评分系统。

(三)思路

    学以致用,解决问题!

    第一阶段:基于逻辑回归的贷款违约预测分析(机器学习中的分类学习思路)

    第二阶段:基于WOE构建信用评分卡

二、基于逻辑回归的贷款违约预测分析

(一)思路

    1. 读取数据,了解数据

    2. 数据清洗(缺失、异常、重复值处理)

    3. 数据探索分析(变量特征工程)

    4. 变量处理与选择

    5. 建模分析

(二)案例

    1. 读取数据

# 读取数据
import pandas as pd
data = pd.read_csv("cs-training.csv")
data = data.iloc[:,1:]   # 去掉第一列,也可以用drop
data.info()   # 注意数据类型(int/float)、变量含义

# 简单查看数据
data.head()  # 查看数据
data.describe()  # 对数据进行简单描述统计

   2. 数据清洗

        (1)缺失值处理——关键点:跟业务结合;没有统一标准

data.isnull().sum()  # 缺失值统计

# 创建数据表,分析数据表
def draw_missing_data_table(df):
    tatal = df.isnull().sum().sort_value(ascending = True)
    percent = (df.isnull().sum()/df.isnull().count().sort_value(ascending = True))
    missing_data = pd.concat([total, percent, axis=1, keys=["Total", "Percent"])
    return missing_data

# 调用函数,统计缺失值
draw_missing_data_table(data)

        (1)缺失值处理——步骤

        第一步:删除(数量比较少;绝对量和相对量,结合业务问题)

        第二步:填充:任意值;均值;关系填充(根据业务问题)

            例:人口普查age缺失,显然不能填任意值或均值,但可根据该人身份证、社会关系等业务信息进行填充。

# 填充MonthlyInccom,填充中位数
value = data.MonthlyIncome.median()
data.MonthlyIncome = data.MonthlyIncome.fillna(value)

# 填充NumberofDependents,没有家庭,填充0
data.NumberOfDependents = data.NumberOfDependents.fillna(0)

data.isnull().sum()  
# 结果为0

        (2)重复值处理

data.duplicated().sum()

data = data.drop_duplicates()
data.info()

        (3)异常值处理——更多的是业务问题

        方法:describe、箱线图

data.describe([0.01, 0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99])  # 分别查看1%/5%/...99%分位数

# 作图导入库
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

sns.boxplot(data["age"])  # 查看年龄的箱线图,发现有0岁、100多岁的异常值

# 一个一个变量作图过于繁琐,可利用for循环作图
data.colums  # 查看变量
features = ["RevolvingUtilizationOfUnsecuredLines","age"...]  # 将变量赋值于features
for i in features:
    sns.boxplot(data[i])
    plt.show()
# 进行异常值删除
data = data[data["age"]>18]
data = data[data["age"]<100]
data = data[data["RevolvingUtilizationOfUnsecuredLines"]<1.00]
data = data[data["NumberOfOpenCreditLinesAndLoans"]<24.00]
data = data[data["NumberRealEstateLoansOrLines"]<4.00]
data = data[data["DebtRatio"]<5000.00]
data = data[data["NumberOfTime30-59DaysPastDueNotWorse"]<5000.00]
data.info()

# 保存处理后的数据
data.to_csv("processeddata.csv")

    3. 数据探索分析

        (1)数据分布特征探索

sns.distplot(data["age"])  # 绘制分布图
sns.distplot(data["MonthlyIncome"]<10000)  # 分布很离散,可以加个限定条件“<10000”查看分布情况

        (2&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值