新用户注册入口 老用户登录入口

[转载]线性回归建模及模型诊断

文章作者:转载 更新时间:2023-11-23 15:52:56 阅读数量:105
文章标签:信用卡消费预测线性回归模型数据分析相关性分析描述性统计自变量选择
本文摘要:该文以信用卡用户消费预测为核心,通过Python对《Python数据科学》一书中的客户申请及消费信息进行深度分析。首先,文章进行了连续与分类变量与月均信用卡支出的相关性探究,揭示了收入、当地人均收入等变量与其的显著关联,并采用t检验和方差分析识别二分类、多分类变量的影响。随后构建了一元线性回归模型,通过R^2、F检验以及残差正态性、独立性、自相关性检验确保模型有效性。在模型优化阶段,通过可视化分析发现并处理异常值,改善模型拟合度。最后,为解决多重共线性问题,采用了Lasso回归进行变量筛选,实现了更稳健且解释性强的多元线性预测模型。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/baidu_26137595/article/details/123766191。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

目录

一、建模背景及目的及数据源说明

二、描述性分析

        2.1 连续自变量与连续因变量的相关性分析

        2.2 二分类变量与连续变量的相关性分析

        2.3 多分类变量与连续变量的相关性分析

三、模型建立与诊断

3.1 一元线形回归及模型解读

 3.2 残差可视化分析

3.3 多元线性回归


一、建模背景及目的及数据源说明

        本案例数据来源于常国珍等人的《Python数据科学》一书第7章中的信用卡公司客户申请信息(年龄、收入、地区等信息)以及已有开卡客户的申请信息和信用卡消费信息数据,案例希望通过对该数据的分析和建模,根据已有的开卡用户的用户信息和消费来线形回归模型,来预测未开卡用户的消费潜力。数据下载见如下链https://download.csdn.net/download/baidu_26137595/85101874

数据读入及示例:

raw = pd.read_csv('./data/creditcard_exp.csv', skipinitialspace = True)
raw.head()

数据字段及说明:

Acc: 是否开卡, 为0说明未开卡,对应的 avg_exp 为NaN;为1说明已开卡,对应avg_exp有值

avg_exp: 月均信用卡支出

avg_exp_ln:月均信用卡支出的对熟

gender : 性别

Ownrent: 是否自有住房

Selfempl: 是否自谋职业

Income:收入

dist_home_val: 所住小区均价 w

dist_avg_income: 当地人均收入

age2: 年龄的平方

high_avg: 高出当地平均收入

edu_class:教育等级,0、1、2、3 依次是小学、初中、高中、大学

二、描述性分析

首先可筛选Acc为1的数据,分别以avg_exp为因变量,其余变量为自变量进行数据探索,主要是发现自变量和因变量是否有线形关系。

raw_1 = raw[raw['Acc'] == 1]

2.1 连续自变量与连续因变量的相关性分析

首先对连续变量和目标变量进行相关性分析,因变量avg_exp为连续变量,一般可以用相关系数来看其线形相关性。

cons_vasr = ['avg_exp', 'avg_exp_ln', 'Age', 'Income', 'dist_home_val', 'dist_avg_income', 'age2', 'high_avg']
raw_1[cons_vasr].corr()vg']].corr()

结果如下,可以看到收入 Income 和当地人均收入 dist_avg_income这两个变量和avg_exp月均信用卡支出有较强的相关性,同时观察自变量间的相关性可发现人均收入 Income 和当地人均收入  dist_avg_income 之间也有较强的相关性,相关系数为0.99,说明接下来我们可以把这两个变量加入模型,但要注意可能会存在多重共线性。

2.2 二分类变量与连续变量的相关性分析

分类变量和连续变量之间的相关性可以用t检验进行,接下来以是否自有住房 Ownrent 变量 和 月均收入之间进行相关性检验。首先查看Ownrent 不同取值的数量以及avg_exp均值分布情况如何:

pd.pivot_table(raw_1, values = ['avg_exp'], index = ['Ownrent'], aggfunc = {'avg_exp': ['count', np.mean]})

 接着分别对 Ownrent 为0、1的 avg_exp 进行t检验:

import scipy.stats as st   # 引入scipy.stats进行t检验
# 创建变量
Ownrent_0 = raw_1[raw_1['Ownrent'] == 0]['avg_exp'].values
Ownrent_1 = raw_1[raw_1['Ownrent'] == 1]['avg_exp'].valuesst.ttest_ind(Ownrent_0, Ownrent_1, equal_var = True)

 p值为0.01 < 0.05,可以拒绝原假设,即认为是否自有住房和月均信用卡支出是相关的。

2.3 多分类变量与连续变量的相关性分析

多分类变量和连续变量之间的相关性检验可以用多次t检验进行,但较为繁琐,用方差分析进行快速检验相关性,然后再运用多重检验查看具体是哪些处理之间存在差异。以教育水平edu_class为例进行分析,同理首先查看分布

raw_1.pivot_table(index = 'edu_class', values = ['avg_exp'], aggfunc={'avg_exp': ['count', np.mean]})

可以看到不同教育水平之间消费水平有明显差异,接下来通过方差分析进行检验差异是否明显。

from statsmodels.stats.anova import anova_lm #引入anova_lm进行方差分析
from ststsmodels.stats.formula import ols    #引入ols进行线性回归建模lm = ols('avg_exp~C(edu_class)', data = raw_1).fit()  #C(edu_class) 将数值型的变量指定为分类型
anova_lm(lm, typ = 2)

 

可以看到不同教育水平之间的月均消费支出之间的差异是显著的,继续用多重检验来看哪些处理之间是显著的。

from statsmodels.stats.multicomp import MultiComparison  # 引入MultiComparison进行tukey多重检验
mc = MultiComparison(raw_1['avg_exp'],raw_1['edu_class'])
tukey_result = mc.tukeyhsd(alpha = 0.5)
print(tukey_result)

结果是每个处理之间因变量差异的显著性,最后一列reject都为True说明各组之间均存在显著差异。

三、模型建立与诊断

3.1 一元线性回归及模型解读

以Income为自变量,以avg_exp为因变量建立一元线形回归并对模型结果进行解释

lm_1 = ols('avg_exp ~ Income', data = raw_1).fit()
print(lm_1.summary())

首先从第一部分可以看到R^2为0.454,整个模型的F检验p值小于0.05,说明模型通过显著性检验。

其次模型结果的第二块也表明自变量和截距也通过显著性检验。

 最后一部分主要是对残差进行检验,左侧Omnibus、Prob(Omnibus)主要是对偏度Skew和峰度Kurtosis进行检验,正态分布的偏度为0,峰度为3,模型的Prob(Omnibus)值为0.156大于0.05,说明不能拒绝残差符合正态分布。

右侧Durbin-Watson主要是对残差的自相关性进行检(改检验可表示为2(1-\rho )\rho为残差之间的相关系数),Durbin-Watson的取值范围是0-4,越接近2说明残差不存在自相关性,越接近0说明存在正相关,越接近4说明存在负相关性。

右侧Jarque-Bera (JB)、Prob(JB)是对残差正态性检验,可以用来判断残差是否符合正态分布,本案例中Prob(JB)值为0.173 > 0.05,基不能拒绝残差服从正态分布。

右侧Cond. No.是多重共线性检验,该值越大,共线性越严重。

整体上看模型虽然拟合效果没那么好,但是显著性通过了检验。接下来看一下模型具体的系数,Income的系数为97.7说明模型收入越高信用卡消费越高,是符合业务预期的。

 3.2 残差可视化分析

接下来对残差进一步进行可视化分析,主要看残差是否满足以下几个假定,并尝试通过对自变量、因变量进行调整来优化模型。首先来回顾一下残差需要满足的几个假定:

a.残差的要服从均值为0,方差为\sigma ^{2}的正态分布;

b.残差之间要相互独立

c.残差和自变量没有相关性

(1)通过残差图进行模型优化

模型avg_exp ~ Income的自变量与残差分布图、残差qq图、模型拟合情况图即自变量与因变量及其预测值的图像

lm_1 = ols('avg_exp ~ Income', data = raw_1).fit()   # 建模
raw_1['resid_1'] = lm_1.resid  # 模型残差
raw_1['resid_1_rank'] = raw_1['resid_1'].rank(ascending = False, pct =  True)   # 计算残差的百分位数
raw_1['pred_1'] = lm_1.predict()   # 添加预测值plt.figure(figsize = (20, 6))# 自变量与残差分布图
ax1 = plt.subplot(131)
ax1.scatter('Income', 'resid', data = raw_1)
ax1.set_title('Income & resid')# 残差的qq图
ax2 = plt.subplot(132)
stats.probplot(raw_1['resid_1_rank'], dist = 'norm', plot = ax2)# 模型拟合情况图,自变量与因变量以及模型预测值
ax3 = plt.subplot(133)
ax3.scatter('Income', 'avg_exp', data = raw_1)
ax3.plot('Income', 'pred_1', data = raw_1, color = 'red')
ax3.legend()
ax3.text(12, 1920, 'pred func R^2: %.2f'% lm_1.rsquared)
ax3.set_title('Income & avg_exp')

 从第一个自变量和残差散点图可以看出,残差基本符合对称分布,但随着自变量增大,残差也在变大,存在方差不齐的情况。第二个图残差的qq图可以看出,残差近似正态分布。第三个图可以看模型的拟合效果并不是很好,R^2只有0.45。对avg_exp取对数,能够改善预测值越大残差越大的情况,但由于只对因变量取对数导致模型不好解释,对自变量Income同时取对数,代码和以上类似,只是改变因变量和自变量形式而已,以下是残差图,可以看到残差的异方差现象被有效的抑制,并且R^2也得到了提高。

(2)通过残差图发现强影响点

仔细观察以上图像结果,左下侧有两个较为异常的数据,对模型的拟和效果有较大的影响, 对于这种影响较大的可将其进行删除并重新建模:

# 计算学生化残差
raw_1['resid_t'] = (raw_1['resid_2'] - raw_1['resid_2'].mean())/raw_1['resid_2'].std() 
raw_1[abs(raw_1['resid_t']) > 2]  # 将残差大于2的筛选出来

将强影响点删除后,得到的结果如下,模型结果更稳定。 

3.3 多元线性回归

上一篇文章有说到多重共线性会对模型产生致命的影响,用方差膨胀因子来处理的话会非常繁琐。通过正则化处理如Lasso回归,能够产生某些严格等于0的系数,从而达到变量筛选的目的。接下来以Lasso为例,首先用LassoCV来找到最优的alpha。由于statsmodels中的ols的fit_regularized方法没有很好的实现,所以用sklearn中linear_model模块来进行建模

from sklearn.preprocessing import StandardScaler  # sklearn进行线性回归前必须要进行标准化
from sklearn.linear_model import LassoCV   # Lasso的交叉验证方法con_xcols = ['Age', 'Income', 'dist_home_val', 'dist_avg_income']
scaler = StandardScaler()
X = scaler.fit_transform(raw_1[con_xcols])
y = raw_1['avg_exp_ln']lasso_alphas = np.logspace(-3, 0, 100, base = 10)
lcv = LassoCV(alphas = lasso_alphas, cv = 10)
lcv.fit(X, y)print('best alpha %.4f' % lcv.alpha_)
print('the r-square %.4f' % lcv.score(X, y))

 接下来画出不同alpha下的岭迹图,来看alpha值对系数的影响

from sklearn.linear_model import Lasso
coefs = []
lasso = Lasso()
for i in lasso_alphas:lasso.set_params(alpha = i)lasso.fit(X, y)coefs.append(lasso.coef_)ax = plt.gca()
ax.plot(lasso_alphas, coefs)
ax.set_xscale('log')
ax.set_xlabel('$\\alpha$')
ax.set_ylabel('coefs value')

 从图中可以看到随着alpha的增大,系数不断在减小,有些系数会优先收缩为0,再继续增大时所欲系数都会为0,通过该特性从而达到变量筛选的目的。将LassoCV得到的系数打印出来,可以看到用户月均信用卡支出和当地小区均价、当地人均收入成正比,当地人均收入水平的影响更大。

 以上就是线形回归在应用时的注意事项。

本篇文章为转载内容。原文链接:https://blog.csdn.net/baidu_26137595/article/details/123766191。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
多重共线性在统计学和机器学习领域中,多重共线性是指在一个多元线性回归模型中,两个或多个自变量之间存在高度相关关系的现象。这可能导致模型估计不准确、标准误差增大以及模型系数的解释困难等问题。例如,在文章中提到,收入 Income 和当地人均收入 dist_avg_income 之间的相关系数为0.99,说明这两个变量可能存在严重的多重共线性,需要在建立模型时特别注意并采取相应的处理方法,如正则化(Lasso回归)来筛选变量。
正则化(Regularization)正则化是统计学和机器学习中用于减少模型复杂度、防止过拟合,并处理多重共线性问题的一种技术手段。在本文中,作者使用了Lasso回归作为正则化的具体实现方式。Lasso通过在损失函数中添加一个惩罚项,对模型参数的绝对值求和进行约束,使得部分特征的系数变小甚至为零,从而达到选择重要特征、降低模型复杂度和解决多重共线性问题的目的。
Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)Lasso回归是一种特殊的线性回归模型,属于正则化回归家族的一员。在建模过程中,它引入了一个惩罚项,该惩罚项会对模型参数的绝对值求和进行限制,这导致某些不重要的特征系数被压缩至零,从而实现了特征选择和稀疏解的效果。在信用卡消费预测案例中,由于原始数据中的多个自变量可能存在多重共线性问题,采用Lasso回归可以自动筛选出与因变量最相关的少数几个自变量,优化模型性能,提高预测准确性。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在阅读了这篇关于利用Python进行信用卡消费预测的研究后,您可能对数据分析、线性回归模型及其在金融领域的应用有了更深入的理解。为了进一步扩展您的知识视野和紧跟行业动态,以下是一些相关的延伸阅读建议:
1. 最新研究进展:近期,国际知名期刊《Journal of Financial Services Research》上发表了一篇题为《Credit Card Spending Prediction Using Machine Learning Techniques: A Comparative Study》的文章,作者详细比较了线性回归与多种机器学习算法(如随机森林、梯度提升机)在信用卡消费预测上的表现,并探讨了特征选择对预测精度的影响。
2. 行业实践案例:今年年初,某大型商业银行在其年度报告中分享了运用大数据与人工智能技术优化信用卡业务的实践经验,其中重点介绍了如何通过构建多元线性回归模型及正则化方法处理信贷风险评估和客户消费潜力预测问题,这一实例为业界提供了宝贵借鉴。
3. 监管政策影响:随着数据隐私保护法规(例如欧盟GDPR、中国个人信息保护法)的出台和完善,金融机构在利用用户数据进行信用消费预测时面临更多挑战。《经济学人》杂志的一篇文章对此进行了深度解读,探讨了在严格遵守法规的前提下,如何合法合规地挖掘数据价值以提高预测准确性。
4. 数据科学工具更新:Python生态中的Pandas、Statsmodels等库不断迭代升级,为数据分析工作者提供了更为强大的功能支持。最近,Scikit-learn发布了新版更新,强化了其在回归模型诊断、正则化模型训练等方面的性能,值得广大数据科学家关注并应用于实际项目中。
综上所述,了解前沿学术研究成果、掌握行业最佳实践、关注法律法规变化以及跟踪数据科学工具更新,都将有助于深化您在信用卡消费预测领域的专业素养,并为解决实际业务问题提供有力支持。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
passwd user - 更改用户密码。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
可自定义logo的jQuery生成二维码插件 01-03 jquery每日签到日历插件 10-10 高度可定制的jQuery瀑布流网格布局插件 03-15 Consul中服务实例自动注销问题解析:健康检查、稳定性与Agent配置的影响及解决策略 01-22 怎么看mysql 的安装路径 12-31 jquery横向手风琴效果 12-23 蓝色数码电子产品销售HTML5网站模板 12-14 jQuery和CSS3汉堡包导航菜单打开动画特效 10-19 python模拟生存游戏 10-08 本次刷新还10个文章未展示,点击 更多查看。
jQuery.eraser-实现橡皮擦擦除功能的jquery插件 05-26 Netty中ChannelNotRegisteredException异常处理:理解原因与确保Channel注册状态的方法示例 05-16 响应式游戏开发类企业前端cms模板下载 05-02 精美的花甲美食网站HTML模板下载 03-09 soulmate粉色干净浪漫唯美婚礼单页响应式网站模板 03-07 Vue.js项目中proxyTable数据转发遭遇504错误:服务器响应时间与网络连接问题排查及解决方案 03-05 SpringCloud服务路由配置错误与失效:识别问题、排查步骤及组件解析这个涵盖了的核心内容,包括SpringCloud框架下的服务路由配置错误失效问题的识别,以及涉及到的服务注册中心、Gateway、Zuul等组件的功能解析和故障排查的具体步骤。同时,字数控制在了50个字以内,满足了要求。 03-01 css水平线长度设置 02-11 [转载]Proxy 、Relect、响应式 01-11 蓝色响应式软件营销代理公司网站静态模板 01-06 python正太分布校验 01-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"