python逻辑回归预测之信用卡逾期实战(附源码)

简介: python逻辑回归预测之信用卡逾期实战(附源码)

不同于线性回归是预测出来具体的值,逻辑回归本质上是分类问题,逻辑回归将值映射到(0,1)集合。


逻辑回归是根据现有数据对分类边界线建立回归公式,以此进行分类。逻辑回归在线性回归的基础上,通过引入sigmoid函数,将线性回归的输出值映射到(0,1)上,接下来使用阈值将结果转换成0或1就能够完成两类问题的预测。


问题描述:某银行搜集乐园用户贷款,收入和信用卡是否逾期的信息,使用这些数据建立一个能预测信用卡逾期情况的逻辑回归模型,使用梯度下降法确定模型参数,并绘图显示损失函数的变化过程。


数据部分示意图如下

1666430781625.jpg

初始数据可视化如下

1666430794987.jpg

经过逻辑回归后分界线可视化如下

1666430822632.jpg

损失函数可视化如下 可以看到随着迭代次数的增加损失函数一直在减小 直到收敛

1666430835652.jpg

源代码如下

import numpy as np
import pandas as pd
import matplotlib; matplotlib.use('TkAgg')
df=pd.read_csv(r"credit-overdue.csv")
print(df.head())
from matplotlib import  pyplot as plt
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.size'] = 10
matplotlib.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(10,6))
map_size={0:20,1:100}
size=list(map(lambda x:map_size[x],df['overdue']))
plt.scatter(df['debt'],df['income'],s=size,c=df['overdue'],marker='v')
plt.show()
#step 3
def sigmoid(z):#逻辑函数 把值放缩到0 1之间
    sigmoid=1/(1+np.exp(-z))
    return  sigmoid
def loss(h,y):#损失函数
    loss=(-y*np.log(h)-(1-y)*np.log(1-h)).mean()
    return  loss
def gradient(X,h,y):#梯度下降
    gradient=np.dot(X.T,(h-y)/y.shape[0])
    return  gradient
#逻辑回归函数
def Logistic_Regression(x,y,lr,num_iter):
    intercept=np.ones((x.shape[0],1))
    x=np.concatenate((intercept,x),axis=1)
    w=np.zeros(x.shape[1])
    l_list=[]
    for i in range(num_iter):#梯度迭代下降
        z=np.dot(x,w)#线性函数
        h=sigmoid(z)
        g=gradient(x,h,y)
        w-=lr*g
        z=np.dot(x,w)
        h=sigmoid(z)
        l=loss(h,y)
        l_list.append(l)
    return l,w
x=df[['debt','income']].values
y=df['overdue'].values
lr=0.01
num_iter=30000
l_y=Logistic_Regression(x,y,lr,num_iter)
L=Logistic_Regression(x,y,lr,num_iter)
print("第一个为损失函数值 第二个为梯度下降")
print(l_y)
plt.figure(figsize=(10,6))
map_size={0:20,1:100}
size=list(map(lambda x:map_size[x],df['overdue']))
plt.scatter(df['debt'],df['income'],s=size,c=df['overdue'],marker='v')
x1_min,x1_max=df['debt'].min(),df['debt'].max()
x2_min,x2_max=df['income'].min(),df['income'].max()
xx1,xx2=np.meshgrid(np.linspace(x1_min,x1_max),np.linspace(x2_min,x2_max))
grid=np.c_[xx1.ravel(),xx2.ravel()]
probs=(np.dot(grid,np.array([L[1][1:3]]).T)+L[1][0]).reshape(xx1.shape)
plt.contour(xx1,xx2,probs,levels=[0],linewidths=1,colors='red')
plt.show()
'''
plt.plot([i for i in range(len(l_y))],l_y)
plt.xlabel("迭代次数")
plt.ylabel("损失函数")
plt.show()
'''
相关文章
|
5月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
626 7
|
5月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
5月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
464 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
5月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
5月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
175 12
|
5月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
479 1
|
5月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
923 1
|
5月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
482 0
|
5月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
551 0

推荐镜像

更多