前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python实现逐步回归

Python实现逐步回归

作者头像
阿黎逸阳
发布于 2023-09-20 00:47:43
发布于 2023-09-20 00:47:43
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

逐步回归(Stepwise Regression)是一种逐步选择变量的回归方法,用于确定最佳的预测模型。它通过逐步添加和删除变量来优化模型的预测能力。

本文重点讲解什么是逐步回归,以及用Python如何实现逐步回归。

一、什么是逐步回归?

逐步回归是回归分析中一种筛选变量的过程,我们可以使用逐步回归从一组候选变量中筛选起作用的变量或剔除不起作用的变量进而构建模型。

逐步回归有三种筛选变量的方法。

1.向前筛选(forward selection): 首先挑选单独解释因变量变异最大的自变量,然后将剩余自变量逐个引入模型,引入后看该变量的加入是否使得模型发生显著性变化(F检验),如果发生了显著性变化,则将该变量引入模型中,否则忽略该变量,直至所有变量都进行了考虑。

特点:自变量一旦选入,则永远保存在模型中。

2.向后筛选(Backward elimination): 与向前筛选相反,一开始就把所有变量放入模型,然后尝试将某一变量进行剔除,查看剔除后对整个模型是否有显著性变化(F检验),如果没有显著性变化则剔除,若有则保留,直到留下所有对模型有显著性变化的因素。

特点:自变量一旦剔除,则不再进入模型,且一开始把全部自变量引入模型,计算量过大。

3.双向筛选(Bidirectional elimination): 这种方法相当于前两种筛选方法的结合。当引入一个变量后,首先查看这个变量是否使得模型发生显著性变化(F检验),若发生显著性变化,再对所有变量进行t检验,当原来引入变量由于后面加入的变量的引入而不再显著变化时,则剔除此变量,确保每次引入新的变量之前回归方程中只包含显著性变量,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止,最终得到一个最优的变量集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
二、实现逐步回归的函数参数详解

实现逐步回归,可以使用toad库中的toad.selection.stepwise函数,该函数的调用方法、主要参数及其解释如下: import toad toad.selection.stepwise(frame, target='target', estimator='ols', direction='both', criterion='aic', p_enter=0.01, p_remove=0.01, p_value_enter=0.2, intercept=False, max_iter=None, return_drop=False, exclude=None)

frame:输入数据框,包含自变量和目标变量。

target:指定目标变量在数据框中的列名,默认是target,可根据实际情况调整。

estimator: 用于拟合的模型,支持'ols'(默认项)、'lr'、'lasso'、'ridge'。

direction:逐步回归的方向,支持'forward'(向前法)、 'backward'(向后法)、'both' (双向法,默认项)。

criterion:指定选择特征的准则,可以为'aic'(赤池信息准则,默认项)、'bic'(贝叶斯信息准则)、 'ks'、 'auc'。

p_enter:指定添加特征的显著性水平,默认为0.01。

p_remove: 指定删除特征的显著性水平,默认为0.01。

p_value_enter: 指定添加特征的P值阈值,默认为0.2。

intercept: 是否拟合截距项,默认为False。

max_iter: 指定最大迭代次数,默认为None,即不限制迭代次数。

return_drop: 是否返回被删除的特征名,默认为False。

exclude: 指定要排除训练的特征列名列表,比如ID列和时间列,默认为None。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
经验说:1.direction = ‘both’效果一般最好。2.estimator = ‘ols’以及criterion = ‘aic’运行速度快且结果对逻辑回归建模有较好的代表性。以上2点是平常的经验总结,具体还是需要根据建模的数据进行具体的分析。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
三、Python实现逐步回归

1 读取数据 首先导入建模数据,进行数据预处理。由于本文的重点是逐步回归实现,且之前的文章企业欺诈识别已对该模块进行了详细阐述,本文不再赘述。 具体代码如下: import os import toad import numpy as np import pandas as pd os.chdir(r'F:\公众号\3.企业欺诈识别\audit_data') #设置数据读取的文件夹 qz_date = pd.read_csv('audit_risk.csv') #读取数据 qz_date.LOCATION_ID = pd.to_numeric(qz_date.LOCATION_ID, errors = 'coerce') #把文本数据转换成数值型数据 qz_date = qz_date.fillna(0) #用0填充数据框中的空值 qz_date.head(5) 得到结果:

可以发现此数据包含27列。 2 双向筛选逐步回归实现 接着用双向筛选的方法进行逐步回归变量挑选,具体代码如下: final_data = toad.selection.stepwise(qz_date, target = 'Risk', estimator='ols', direction = 'both', criterion = 'aic' ) final_data 得到结果:

可以发现双向逐步回归挑选出了12个入模变量。 3 向前筛选逐步回归实现 接着用向前筛选的方法进行逐步回归变量挑选,具体代码如下: final_data = toad.selection.stepwise(qz_date, target = 'Risk', estimator='ols', direction = 'forward', criterion = 'aic' ) final_data 得到结果:

可以发现向前逐步回归挑选出了13个入模变量,比双向逐步回归多入模了RiSk_E变量,其余变量一致。 4 向后筛选逐步回归实现 接着用向后筛选的方法进行逐步回归变量挑选,具体代码如下: final_data = toad.selection.stepwise(qz_date, target = 'Risk', estimator='ols', direction = 'backward', criterion = 'aic' ) final_data 得到结果:

可以发现向后逐步回归挑选出了16个入模变量,和双向、向前逐步回归都有一定的区别。 5 双向逐步回归指定特征选择准则为ks 为了分析不同特征选择准则对变量筛选的影响,接着在双向逐步回归时指定特征选择准则为ks,看下结果,具体代码如下: final_data = toad.selection.stepwise(qz_date, target = 'Risk', estimator='ols', direction = 'both', criterion = 'ks' ) final_data 得到结果:

可以发现双向逐步回归时如果特征选择准则设定为ks,只挑选出了1个入模变量,明显不太符合建模的要求。 6 双向逐步回归指定特征选择准则为auc 接着在双向逐步回归时指定特征选择准则为auc,具体代码如下: final_data = toad.selection.stepwise(qz_date, target = 'Risk', estimator='ols', direction = 'both', criterion = 'auc' ) final_data 得到结果:

可以发现双向逐步回归时如果特征选择准则设定为auc,也只挑选出了1个入模变量,明显不太符合建模的要求。 综上,我们在用逐步回归建模时可以参考之前的经验参数。 至此,Python实现逐步回归已讲解完毕,感兴趣的小伙伴可以翻看公众号中“风控建模”模块相关文章。

往期回顾:

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

一文囊括Python中的数据分析与绘图,持续更新。。。

一文囊括风控模型搭建(原理+Python实现),持续更新。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-17 08:05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R语言预处理之异常值问题
>>>> 一、问题 什么是异常值?如何检测异常值?请伙伴们思考或者留言讨论。 >>>> 二、解决方法 1. 单变量异常值检测 2. 使用局部异常因子进行异常值检测 3. 通过聚类的方法检验异常值 4. 检验时间序列数据里面的异常值 >>>> 三、R代码实现 1、单变量异常值检测 这一节主要讲单变量异常值检测,并演示如何将它应用到多元(多个自变量)数据中。使用函数boxplot.stats()实现单变量检测,该函数根据返回的统计数据生成箱线图。在上述函数的返回结果中,有一个参数out,它是由异常值组成的列
CDA数据分析师
2018/02/08
1.8K0
R语言预处理之异常值问题
一文读懂!异常检测全攻略!从统计方法到机器学习 ⛵
异常值是偏离数据集中大多数样本点的数据点。出现异常值的原因有很多,例如自然偏差、欺诈活动、人为或系统错误。不过,在我们进行任何统计分析或训练机器学习模型之前,对数据检测和识别异常值都是必不可少的,这个预处理的过程会影响最后的效果。
ShowMeAI
2022/11/29
4.1K0
一文读懂!异常检测全攻略!从统计方法到机器学习 ⛵
一文读懂异常检测 LOF 算法(Python代码)
本篇和大家介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法。
Python数据科学
2022/04/12
4.8K0
一文读懂异常检测 LOF 算法(Python代码)
深入机器学习系列之异常检测
今天要给大家介绍的是异常检测(Anomaly Detection), 它是机器学习的一个重要分支,实际应用领域广泛,更与我们的生活息息相关。那么什么是异常检测?其主要方法和目前所面临的技术难题有哪些?本文或许能提供一些参考。
数据猿
2019/07/19
9140
深入机器学习系列之异常检测
深入探索:使用Scikit-learn进行新颖性与异常值检测技术
在数据分析和机器学习中,区分数据中的正常观察值和异常观察值是一项重要任务。这种区分通常用于数据清洗和异常检测,以提高模型的准确性和鲁棒性。
用户3578099
2024/08/27
4570
深入探索:使用Scikit-learn进行新颖性与异常值检测技术
异常检测:探索数据深层次背后的奥秘《中篇》
真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方式产生的。在古典统计学中,这被称为——回归建模,一种参数化的相关性分析。
汀丶人工智能
2023/09/22
4640
异常检测:探索数据深层次背后的奥秘《中篇》
10分钟掌握异常检测
你可能已经注意到,一些不平衡分类的问题也经常使用异常检测算法来解决。例如,垃圾邮件检测任务可以被认为是一个分类任务(垃圾邮件比普通电子邮件少得多),但是我们可以用异常检测的方法实现这个任务。
deephub
2021/10/09
6510
10分钟掌握异常检测
异常检测算法在审计智能化的应用
引用MBA智库百科的原文:内部审计,是建立于组织内部、服务于管理部门的一种独立的检查、监督和评价活动,它既可用于对内部牵制制度的充分性和有效性进行检查、监督和评价,又可用于对会计及相关信息的真实、合法、完整,对资产的安全、完整,对企业自身经营业绩、经营合规性进行检查、监督和评价。
凯哥
2020/01/17
1.6K0
异常检测算法在审计智能化的应用
异常检测算法速览(Python代码)
异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。
算法进阶
2022/06/01
9840
异常检测算法速览(Python代码)
机器学习中的异常检测手段
总体来讲,异常检测问题可以概括为两类:一是对结构化数据的异常检测,二是对非结构化数据的异常检测。
Bo_hemian
2020/09/10
1.1K0
机器学习中的异常检测手段
风控ML[14] | 风控中的异常检测原理与应用
今天来介绍一下风控中的异常检测,从最基础的概念开始讲起,因为本人对这块的内容平时工作也做得不多,更多滴偏向于“纸上谈兵”,有什么说得不对的地方,也欢迎各位朋友指正~谢谢。
Sam Gor
2022/04/12
3.3K0
风控ML[14] | 风控中的异常检测原理与应用
收藏!14 种异常检测方法总结
来源:宅码本文约7800字,建议阅读10分钟本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。 本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。不足之处,还望批评指正。 一、基于分布的方法 1. 3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点。 图1: 3sigma def three_sigma(s):     mu, std = np.mean(s), np.std(s)     lower, upper = mu-3*std
数据派THU
2022/06/29
1.3K0
收藏!14 种异常检测方法总结
干货 | 关于数据的异常检测,看这一篇就够了
束开亮,携程大市场部BI团队,负责数据分析与挖掘。同济应用数学硕士,金融数学方向,法国统计学工程师,主修风险管理与金融工程。
携程技术
2019/04/22
5.9K0
干货 | 关于数据的异常检测,看这一篇就够了
【sklearn | 6】无监督学习与聚类分析
在前几篇教程中,我们探讨了 sklearn 的基础、高级功能,异常检测与降维,时间序列分析与自然语言处理,模型部署与优化,以及集成学习与模型解释。本篇教程将专注于无监督学习和聚类分析,这在探索性数据分析和数据挖掘中非常重要。
颜淡慕潇
2024/07/24
2710
【sklearn | 6】无监督学习与聚类分析
14种异常检测方法汇总(附代码)!
今天给大家分享一篇关于异常检测的文章,重点介绍了14种公开网络上一些常见的异常检测方法(附资料来源和代码)。
小白学视觉
2022/12/27
3K0
14种异常检测方法汇总(附代码)!
异常检测与鲁棒学习
在机器学习和人工智能的应用中,异常检测(Anomaly Detection)和鲁棒学习(Robust Learning)是非常重要的研究领域,尤其在处理现实世界中的数据时,数据通常并不完美。离群点(Outliers)和噪声数据会对模型的性能产生显著影响,可能导致模型的过拟合或低泛化能力。因此,了解如何有效地识别和处理离群点,以及如何设计鲁棒模型来减少异常数据的影响,是机器学习领域的一项基本技能。
LucianaiB
2025/02/02
1460
教你用java实现时序数据异常检测(1)LOF-ICAD方法
我们这次着重介绍的是时序数据的异常检测, 我们来讨论讨论LOF方法, 并且给出相应的代码实现
Mezereon
2018/09/13
1.8K0
教你用java实现时序数据异常检测(1)LOF-ICAD方法
Python+Sklearn实现异常检测
离群检测和新颖性检测都用于异常检测,其中人们对检测异常或不寻常的观察感兴趣。离群检测也称为无监督异常检测,新奇检测称为半监督异常检测。
雾海梦曦
2023/02/06
1.3K0
【数据分析】异常值检测
什么是异常(outlier)?Hawkins(1980)给出了异常的本质性的定义:异常是在数据集中与众不同的数据,使人怀疑这些数据并非随机偏差,而是产生于完全不同的机制。聚类算法对异常的定义:异常是聚
陆勤_数据人网
2018/02/26
1.9K0
基于机器学习算法的时间序列价格异常检测(附代码)
异常检测也称为异常值检测,是一种数据挖掘过程,用于确定数据集中发现的异常类型并确定其出现的详细信息。 在当今世界,由于大量数据无法手动标记异常值,自动异常检测显得至关重要。 自动异常检测具有广泛的应用,例如欺诈检测,系统健康监测,故障检测以及传感器网络中的事件检测系统等。
量化投资与机器学习微信公众号
2019/02/26
6.3K0
相关推荐
R语言预处理之异常值问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验