python 一组数据 正态分布散点图_利用Python进行数据分析之多元线性回归案例

bc3db3d0081bae171ca7bba999e37df1.png

线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。例如,餐厅根据每天的营业数据(包括菜谱价格、就餐人数、预定人数、特价菜折扣等)预测就餐规模或营业额;网站根据访问的历史数据(包括新用户的注册量、老用户分活跃度、网页内容的更新频率等)预测用户的支付转化率。

在开始多元线性模型前介绍下一元线性模型。数学公式可以表示为:

a1048be7559abd0f43dd1d5c9910e8fd.png

一个因变量,一个自变量。参数求解公式为:

1db93cc7182a35f6a1b1fb445136e884.png

多元线性回归模型与一元线性回归模型的区别就是,自变量的增加。其数学表达式为:

d506324f37b0c6e48483437638ebfb41.png

可以简写为:

bfa825b9ec1a32e622c20df53777b2b0.png

β代表多元线性回归模型的偏回归系数,e代表了模型拟合后每一个样本的误差项。利用最小二乘法求解β,可以得到:

ad2f068ea1d35bd9fd63891f965a0a0c.png

将相应的x值,y值代入公式即可求得β。

我们构建模型的目的是为了预测,即根据已知的自变量X值预测未知的因变量y的值。本文是利用Python 实现这一目标。

这里以某产品的利润数据集为例,该数据集包含5个变量,分别是产品的研发成本、管理成本、市场营销成本、销售市场和销售利润。其中销售利润Profit为因变量,其他变量为自变量。

5ca9904e1348e22420940a0432f85bec.png

回归模型的建模和预测

将导入数据的数据进行切割,训练集用来训练模型,测试集用来预测。

977b8fb0a5385cb5b5e04e349ed6be36.png

测试集删除因变量Profit,剩下的自变量进行预测,结果用来跟删除的因变量进行对比,比较模型的预测能力。

a63aa994740dec4c74e6bb904da64e8a.png

数据集中的State变量为字符型的离散变量,需要进行哑变量处理。将State套在C()中,表示将其当作分类(Category)变量处理。以上默认State(California)为对照组。

接下来通过pandas中的get_dummies函数生成哑变量,以New York作为对照组。

adc535f889c21f2141170bbc693e2532.png

如上结果所示,从离散变量State中衍生出来的哑变量在回归系数的结果里只保留了Florida和California,而New York作为了参照组。得到的结果表示该模型公式为:

Profit=58068.05+0.80RD_Spend-0.06Administation+0.01Marketing_Spend+1440.86Florida+513.47California

如何解释该模型呢,以RD_Spend和Florida为例,在其他变量不变的情况下,研发成本每增加2美元,利润会增加0.80美元;在其他变量不变的情况下,以New York为基准线,如果在Florida销售产品,利润会增加1440.86美元。

虽然模型已经建成,但是模型的好坏还需要模型的显著性检验和回归系数的显著性检验。

回归模型的假设检验

模型的显著性检验使用F检验。

0c47147e5e614d87f7e0a2320d8afd0a.png

手工计算F值和模型自带的F统计值计算完全一致。,接下俩将计算得出的F统计值和理论F分布的值进行比较。

3765b86158590fc7138bb6c565fde7d6.png

计算出的F统计值远远大于理论F值,这里可以拒绝原假设,即认为多元线性回归是显著的,也就是回归模型的偏回归系数不全为0。

回归系数的显著性检验t检验

10fb4e8dd40ad437fcde6f4e6984e97b.png

如上结果所示,模型的概览信息包含三个部分,第一部分主要是有关模型的信息,例如模型的判决系数R2,用来衡量自变量对因变量的解释程度,模型的F统计值,用来检验模型的显著性;第二部分主要包含偏回归系数的信息,例如回归系数的Coef、t统计量值、回归系数的置信区间等;第三部分主要涉及模型的误差项e的有关信息。

在第二部分的内容中,含有每个偏回归系数的t统计量值,它的计算就是由估计值coef和标准差std err的商所得的,同时也有t统计量值对应的概率值p,用来判别统计量是否显著的直接办法,通常概率值p小于0.05时表示拒绝原假设。从返回的结果可知,只有截距项Intercept和研发成本RD_Spend对应的值小于0.05,才说明其余变量都没有通过系数的显著性检验,即在模型中这些变量不是影响利润的重要因素。

回归模型的诊断

当回归模型建好之后,并不意味着建模过程的结束,还需要进一步对模型进行诊断。由统计学知识可知,线性回归模型需要满足一些假设前提,只有满足了这些假设,模型才是合理的。需满足:误差e服从正态分布,无多重共线性,线性相关性,误差项e的独立性,方差齐性。

正态性检验,由y=Xβ+e来说,等式右边的自变量属于已知变量,而等式左边的因变量服从正态分布,要求残差项要求正态分布,但其实质就是要求因变量服从正态分布。关于正态性检验通常运用两类方法,分别是定性的图形法(直方图、PP图或QQ图)和定量的非参数法(Shapiro检验和K-S检验),以下是直方图法,

e350ecc61d82d0daa6b4fdad336c7d42.png

从图中看,和密度曲线和正态分布密度曲线的趋势比较吻合,故直观上可以认为利润变量服从正态分布。以下是PP图和QQ图法,

d8c65768d3e67ec5e49469a9d7c89a8a.png

ace06dbd6eafd1861b6182f282b8f420.png

977a3bfbe9e5634c805c6b0080addb5a.png

PP图思想是对比正态分布的累计概率值和实际分布的累计概率值,而QQ图则比正态分布的分位数和实际分布的分位数。判断变量是否近似服从正态分布的标准是:如果散点都比较均匀地散落在直线上,就说明近似服从正态分布,否则就认为数据不服从正态分布。如图所知,不管是PP图还是QQ图,绘制的散点均落在直线的附近,没有较大的偏离,故认为利润变量近似服从正态分布。

多重共线性检验

多重共线性是指模型中的自变量之间存在较高的线性相关关系,它的存在给模型带来严重的后果。可以使用方差膨胀因子VIF来鉴定,如果VIF大于10,则说明变量间存在多重共线性;如果如果VIF大于100,则表明变量之间存在严重的多重共线性。VIF的计算公式为:

60d448999190ea76a9d9e2b8330cf77f.png

fc579e0cf79a2370d08558dee351cdeb.png

如上计算所示,两个自变量对应的方差膨胀因子均小于10,说明构建模型的数据并不存在多重共线性。

线性相关性检验

线性相关性即用于建模的因变量和自变量之间存在线性相关关系,可以使用Pearson相关系数和可视化方法进行识别,皮尔逊计算公式为:

facc150fb79725c94171d68a04e32f4c.png

cb9601500c79d547e8400b6227efbf97.png

如上图结果所示,自变量中只有研发成本和市场营销成本与利润之间存在较高的相关系数,相关系数分别达到0.978和0.739,而其他变量与利润之间几乎没有线性相关性可言。以管理成本Administration为例,与利润之间的相关系数只有0.2,被认定为不相关,但是能说明两者不具有线性相关关系,当存在非线性相关关系时,皮尔逊系数也会很小,因此需要可视化的方法观测因变量和自变量之间的散点关系。可以使用seaborn模块中的pairplot函数。

89c0ed1060230ad79a844856ca851da6.png

d1af606aea898e43182c3f896fce723c.png

从图中结果可知,研发成本和利润之间的散点图几乎为一条向上倾斜的直线(左下角),说明这两种变量之间确实存在很强的线性相关;市场营销成本与利润之间的散点图同样向上倾斜,但也有很多点的分布还是比较分散的(见第一列第三行);管理成本和利润之间的散点图呈水平趋势,而且分布也比较宽,说明两者之间确实没有任何关系(第一列第二行)。

以重构的model2为例,综合考虑相关系数,散点图矩阵和t检验的结果,最终确定只保留model2中的RDSpend和Marketing_Spend两个自变量,下面重新对该模型做修正。

033b77dc2b415c879ab2a1a0a4dcb5f3.png

异常值检验

由于多元线性回归模型容易受到极端值的影响,故需要利用统计方法对观测样本进行异常点检测。如果在建模过程发现异常数据,需要对数据集进行整改,如删除异常值或衍生出是否为异常值的哑变量。对于线性回归模型,通常利用帽子矩阵,DFFITS准则,学生化残差或cook距离进行异常点检测。基于get_influence方法获得四种统计量的值。

44a12e98e4d8f4b920ccf2bf1da028f5.png

aca5cc85a2befb613756b8a984e348b1.png

以上合并了四种统计量的值,这里使用标准化残差法将异常值查询出来,当标准化残差大于2时,即可认为对应的数据点为异常值。

47d990c8164d87ae6a0f48d7342594bd.png

异常比例为2.5%,比较小,故考虑将其删除。

a1f81771a4604e2c3f667968fe22d178.png

新的模型公式为:Profit=51827.42+0.80RD_Spend+0.02Marketing_Spend

独立性检验

残差e的独立性检验也就是因变量y的独立性检验。通常使用Durbin-Watson统计值来测试,如果DW值在2 左右,则表明残差之间时不相关的;如果与2偏离的教员,则说明不满足残差的独立性假设。

7312920fdb917266bff9605c21e6922b.png

DW统计量的值为2.065,比较接近于2,故可以认为模型的残差项之间是满足独立性这个假设前提的。

方差齐性检验

方差齐性是要求模型残差项的方差不随自变量的变动而呈现某种趋势,否则,残差的趋势就可以被自变量刻画。关于方差齐性的检验,一般可以使用两种方法,即图形法(散点图)和统计检验法(BP检验)。

fc0d582147d251de26fcc6a149e537fe.png

d80db190cc51fe04cfea226f42e6a903.png

如图所示,标准化残差没有随自变量的变动而呈现喇叭性,所有的散点几乎均匀的分布在参考线y=0的附近。所以,可以说明模型的残差项满足方差齐性的前提假设。

经过前文的模型构造、假设检验和模型诊断,最新红确定合理的模型model4。接下来就是利用测试集完成预测。

30f32ab8a771e78745e0c0f46fd5a4ee.png

eaeaa3538cd9db7c4cfaeb5d3ac2a3f7.png

如上图所示,绘制了有关模型在测试集上的预测值和实际值的散点图。两者非常接近,散点在直线附近波动,说明模型的预测效果还是不错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php7 关联nginx,nginx+php7配合开发

1 源码安装php7下载php7./configure --eable fpm --prefix路径(指定路径,所有的文件会安装在这里。不然会文件会分散到别的地方)make & make install完成php的安装(如果想要按照php扩展可以用pecl命令或者phpize命令来按照)2 安装nginxyum install nginx开启ng…

python 量化交易_基于Python的量化交易工具清单(上)

—— Python量化工具清单 ——以下内容来源于Wilson Freitas的Github项目"Awesome Quant"。原文中包含了丰富的语言类别,但是后续介绍主要针对Python语言。原网址:https://github.com/ wilsonfreitas/awesome-quant基于Python的量化交易工具清…

jlist放jbutton 按钮事件失效_电动高处作业吊篮操作如何面对一些突发事件

电动吊篮从推广发展初期的不认识,不理解,不使用到今天在大中城市的建筑业中成了一种不可缺少的必备机具,在建筑工程施工技术工艺水平上和以往的脚手架相比,更是有一个空前的飞跃。正是由于电动吊篮加高方便、操作简单、安全可靠、…

LintCode MySQL 1968. 查询首两个字母在 ‘Db‘ 和 ‘Dy‘ 之间的课程名称(REGEXP正则)

文章目录1. 题目2. 解题1. 题目 描述 请编写 SQL 语句,查询 courses 表中,课程名首两个字母在 ‘Db’ 和 ‘Dy’ 之间所有课程的名称 https://www.lintcode.com/problem/1968 2. 解题 -- Write your SQL Query here -- -- example: SELECT * FROM XX_…

erp系统方案书_门禁系统方案书

门禁系统概述传统意义的门禁系统是由琐和钥匙构成,以钥匙代表着出入权限。但社会发展至今,以铁锁和钥匙为代表的传统房门管理方式正在逐渐消失,加上IC卡技术、数字技术、网络技术的应用日益成熟,管理安全、可靠、灵活、和方便的IC…

mybatisplus 操作另一个数据库的数据_MySQL的数据库操作详解

一、mysql查看数据库在 MySQL 中,可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库。查看数据库的语法格式为:SHOW DATABASES [LIKE 数据库名];//例子SHOW DATABASES;SHOW DATABASES like mynews;show databases like %name%;语法说…

LeetCode 385. 迷你语法分析器(栈)

文章目录1. 题目2. 解题1. 题目 给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: 字符串非空 字符串不包含空格 字符串只包含…

写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id1 需要取出 php 或 .php直接先上方法,主要用到两个函数 parse_url() 和basename() 函数返回路径中的文件名部分。function getExt($url){$arr parse_url…

php unicode 插入 mysql_关于MySQL的一些骚操作——提升正确性,抠点性能

推荐阅读:我凭借这份pdf拿下了蚂蚁金服、字节跳动、小米等大厂的offer概要回顾以前写的项目,发现在规范的时候,还是可以做点骚操作的。假使以后还有新的项目用到了MySQL,那么肯定是要实践一番的。为了准备,创建测试数据…

docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版

欢迎关注刘哥讲技术。上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例。那么redis是什么呢?Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持…

php转调页面,PHP中HTTP防盗链技术

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正…

LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr 和一个整数 k。 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次。 举个例子,如果 arr [1, 2] 且 k 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]。 然后&#x…

sql 拆分_实践参考:MySQL架构设计从开发规范、选型、拆分到减压实战指南

导引作者,李辉,原新浪爱彩票运维负责人,常用网名:门牙没了。曾主导新浪爱彩票的MySQL运维工作。培训合伙人、资深讲师,中国科学院大学在读研究生(大数据方向),擅长大型项目的关系型数据库运维和管理&#x…

PowerBuilder调用.Net编译好的DLL

[ComVisible(true)][ClassInterface(ClassInterfaceType.AutoDual)][ProgId("HelloWorld.MyClass")] //类名public class MyClass{public string UserName { get; set; } //对外提供属性public string SayHello(string content) //对外提供方法{return "用户:&q…

python中流程图_python用graphviz画流程图

问题描述 项目中需要用到流程图,如果用js的echarts处理,不同层级建动态计算位置比较复杂,考虑用python来实现 测试demo实现效果如下完整代码 import yaml import os import ibm_db from graphviz import Digraph from datetime import dateti…

怎么读取matlab程序包,Nifti程序包,用于写入,读取和处理医学影像,适用于MATLAB

【实例简介】依赖于MATLAB,可以读取nii格式的文件,写入和操作输入的医学影像数据使用方法:1.下载压缩包并解压至MATLAB安装路径的toobox文件夹下 2.enjoy it!【实例截图】【核心代码】NIfTI_20140122├── affine.m├── bipolar.m├── bresenham_line3d.m├── clip_nii.…

天池 在线编程 牛郎织女(广度优先搜索)

文章目录1. 题目2. 解题1. 题目 描述 又到了七夕节,牛郎织女相约一起去一个n*m大小的迷宫maze里玩耍。 然而没过多久,他们就倒霉地走散了。 现在给定由.,*,S,T组成的矩阵maze, 其中.表示空地,*表示障碍物,S表示牛郎的位置 ,T表示织女的位置&…

BZOJ 1001 狼捉兔子

Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点…

python中怎么复制代码_Python对象怎么引用_Python对象怎么复制代码_一聚教程网

本次文章要给大家讲解的是Python对象引用及复制代码,相信这也是大家问题比较大的一个点,下面为大家具体整理了操作过程,一起来了解下。可以说Python没有赋值,只有引用。你这样相当于创建了一个引用自身的结构,所以导致…

python为什么是蟒蛇_Python 为什么推荐蛇形命名法?

关于变量的命名,这又是一个容易引发程序员论战的话题。如何命名才能更具有可读性、易写性与明义性呢?众说纷纭。 本期“Python为什么”栏目,我们将聚焦于变量命名中的连接方式,来切入这块是非之地,想要回答的问题是——…