逻辑回归模型及算法实例

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 欢迎关注我的微信公众号:Python学习杂记

逻辑回归模型在很多领域都有应用,比如:

  • 病人是否患病(阴性、阳性)
  • 客户未来违约情况(违约、不违约)
  • 客户流失预测
  • 企业经营风险预测
  • 等等其他。。。。

逻辑回归(Logistic Regression)是一种用于解决二分类问题的机器学习方法,用于估计某种事物的可能性。逻辑回归是一个分类算法而不是回归算法。通常是利用已知的自变量来预测一个离散型因变量的值(像二进制值0/1,是/否,真/假)。它就是通过拟合一个逻辑函数(logit fuction)来预测一个事件发生的概率。

逻辑回归模型搭架步骤


  • 1.构建数据框

  • 2.特征工程(分箱)

  • 3.搭建机器学习框架

在此处进行了标准化,标准化放在第二步和第三步都可以。

  • 4.搭架逻辑回归模型并评估模型

  • 5.逻辑回归模型应用测试
def ppp_pjb(x0,x1,x2,x3,x4,x5,x6):
      B=pd.DataFrame([x0,x1,x2,x3,x4,x5,x6]).T
      B.columns =df1.iloc[:,0:7].columns
      dfn=pd.concat([df1.iloc[:,0:7],B],ignore_index=True)
      dfn['地区'] =dfn['地区'].replace({'北京':3,'上海':3,'浙江':2,'江苏':2 ,'安徽':1,'江西':1,'河南':1,'湖北':1})
      dfn['性别'] =dfn['性别'].replace({'男':1,'女':0})
      dfn['学历'] =dfn['学历'].replace({'专科及以下':1,'本科':2,'硕士及以上':3})
      dfn.收入=pd.cut(dfn.收入,[0,100000,200000,300000,1000000],labels=[1,2,3,4])
      dfn.年龄=pd.cut(dfn.年龄,[0,30,40,60],labels=[1,2,3])
      dfn.历史授信额度=pd.cut(dfn.历史授信额度,[0,40000,70000,200000],labels=[1,2,3]) 
      from sklearn.model_selection import train_test_split  
      minmax = preprocessing.MinMaxScaler()# 标准化处理
      Xn= minmax.fit_transform(dfn)
      if model.predict([ Xn[-1]])[0]==1:
          return  print('基础信息:【'+'地区:'+x0+',收入:'+str(x1)+',年龄:'+str(x2)+',性别:'+x3+',历史授信额度:'+str(x4)+
                        ',学历:'+x5+',历史违约次数:'+str(x6)+'】'+'\n'+'预测结果:【违约,'+'模型测算违约率为'+
                          str(round(model.predict_proba(Xn)[-1][1],2))+'】')              
      else:
          return  print('基础信息:【'+'地区:'+x0+',收入:'+str(x1)+',年龄:'+str(x2)+',性别:'+x3+',历史授信额度:'+str(x4)+
                        ',学历:'+x5+',历史违约次数:'+str(x6)+'】'+'\n'+'预测结果:【不违约,'+'模型测算违约率为'+
                        str(round(model.predict_proba(Xn)[-1][1],2))+'】')

  • 6.完整代码
import pandas as pd
from sklearn import preprocessing
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
df= pd.read_excel('客户信息及违约情况new.xlsx')
df['地区'] =df['地区'].replace({'北京':3,'上海':3,'浙江':2,'江苏':2 ,'安徽':1,'江西':1,'河南':1,'湖北':1})
df['性别'] =df['性别'].replace({'男':1,'女':0})
df['学历'] =df['学历'].replace({'专科及以下':1,'本科':2,'硕士及以上':3})
df.收入=pd.cut(df.收入,[0,100000,200000,300000,1000000],labels=[1,2,3,4])
df.年龄=pd.cut(df.年龄,[18,30,40,60],labels=[1,2,3])
df.历史授信额度=pd.cut(df.历史授信额度,[0,40000,70000,100000],labels=[1,2,3])
X = df.iloc[:,0:7] #取7列为特征变量
y = df['是否违约'] #目标变量
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.2, random_state=3)  # 划分训练集和测试集
#Max-Min标准化 (离差标准化)
#建立MinMaxScaler对象
minmax = preprocessing.MinMaxScaler()
# 标准化处理
Xtrainb= minmax.fit_transform(Xtrain)
Xtestb = minmax.fit_transform(Xtest)
model = LogisticRegression()
model.fit(Xtrainb, ytrain)
print('测试集预测准确率:',model.score(Xtestb, ytest))#查看预测准确度
ypred_proba = model.predict_proba(Xtestb)
fpr, tpr, thres = roc_curve(ytest, ypred_proba[:, 1])
plt.figure(figsize=(10,7))
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文
plt.plot(fpr, tpr)  # 通过plot()函数绘制折线图
plt.title('ROC曲线',fontsize=20)  # 添加标题
plt.xlabel('FPR',fontsize=20)  # 添加X轴标签
plt.ylabel('TPR',fontsize=20)  # 添加Y轴标
plt.tick_params(labelsize=20)
print('AUC:',round(roc_auc_score(ytest, ypred_proba[:,1]),2))
print('系数:',[round(model.fit(Xtrainb, ytrain).coef_[0][i],2) for i in range(7)],'\n截距项:',round(model.intercept_[0],2))

运行结果

  • 7.模型的延伸(评分卡模型)

本文介绍的只是逻辑回归的一个简化案例,实际上实际业务中比本案例要复杂。各大银行使用的评分卡模型也是由逻辑回归模型搭架,但其对逻辑回归进行了进一步优化,其优化的步骤如下:

1)在特征工程部分,对特征进行分箱,与总样本对比,计算woe编码,最终计算信息权重IV,根据信息权重筛选出权重占比较大的特征变量。

2)评分方法:先给一个基础分,评分按照每个特征值分箱相对于总样本的偏差 (ODDS,好坏比)相应的扣分和加分。

3)一般分为A卡(贷前,申请评分卡)、B卡(贷中,行为评分卡)、C卡(贷后,催收评分卡),对应特征变量不全相同,但评分方法大致相同。

目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
21 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
4天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
22 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
15天前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
17天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
21天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
91 8
|
1月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
26 4
|
1月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
40 0
|
2月前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。