数据分析实战 | 多元回归——广告收入数据分析

news2024/12/24 21:10:15

目录

一、数据及分析对象

二、目的及分析任务

三、方法及工具

四、数据读入

五、数据理解

六、数据准备

七、模型构建

八、模型预测

九、模型评价


一、数据及分析对象

CSV格式的数据文件——“Advertising.csv”

数据集链接:https://download.csdn.net/download/m0_70452407/88520033

数据集包含了200个不同市场的产品销售额,每个销售额对应3中广告媒体投入成本,分别是TV、radio和newspaper,主要属性如下:

(1)Number:数据集的编号。

(2)TV:电视媒体的广告投入。

(3)radio:广播媒体的广告投入。

(4)newspaper:报纸媒体的广告投入。

(5)sales:商品的销量

二、目的及分析任务

理解机器学习方法在数据分析中的应用——采用多元回归方法进行回归分析。

(1)数据预处理,绘制TV、radio、newspaper这3个自变量与因变量sales的相关关系图。

(2)采用两种不同方法进行多元回归分析——统计学方法和机器学习方法。

(3)进行模型预测,得出模型预测结果。

(4)对预测结果进行评价。

三、方法及工具

Python语言及pandas、Seaborn、matplotlib、statsmodels、scikit-learn等包。

四、数据读入

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
data=pd.read_csv("D:\\Download\\JDK\\数据分析理论与实践by朝乐门_机械工业出版社\\第3章 回归分析\\Advertising.csv")
data.head()

五、数据理解

对数据框进行探索性分析,这里采用的实现方式为调用Seaborn包中的pairplot()方法,绘制TV、radio、newspaper这3个变量与sales变量之间的关系图,其中kind参数设置为“reg"。为非对角线上的散点图拟合出一条回归直线,可以更直观地显示变量之间的关系,height参数为7,aspect参数为0.8,表明每个构面的高度为7,宽高比为0.8。调用matplotlib.pyplot.show()方法显示图形。

sns.pairplot(data,
            x_vars=['TV','radio','newspaper'],
            y_vars='sales',
            height=7,
            aspect=0.8,
            kind='reg')
plt.show()

六、数据准备

进行多元回归分析前,应准备好模型所需的特征矩阵(X)和目标向量(y)。这里采用drop()方法删除数据框data中的Number以及sales两列返回另一个DataFrame对象Data,并显示Data数据集,即特征矩阵的前5行数据。

#第一步:构建特征矩阵和目标数组
Data=data.drop(['Number','sales'],axis=1)
Data.head()

确定目标向量sales为data数据框中的sales列,并显示其数据类型:

sales=data['sales']
type(sales)
pandas.core.series.Series

输出结果显示了sales的数据类型为pandas的Series。

将目标向量sales的数据转换为NumPy中的ndarray,这里采用的实现方法为调用NumPy包中的ravel()方法返回数组。

import numpy as np
sales=np.ravel(sales)
type(sales)
numpy.ndarray

 输出结果显示sales的数据类型为NumPy的ndarray数组对象。

七、模型构建

采用统计学方法,检验模型的线性显著性。在这里调用statsmodels统计建模工具包,通过statsmodels.api(基于数组)接口进行访问。采用add_constant()方法加上一列常数项,反映线性回归模型的截距。采用OLS()方法用最小二乘法来建立myModel模型。采用模型的fit()方法返回一个回归结果对象results,该对象results包含了估计的模型参数和其他的诊断。在results上调用summary()方法可以打印出一个模型的诊断细节。

#第一种分析方法——基于统计学的建模
import statsmodels.api as sm
X_add_const=sm.add_constant(Data.to_numpy())
myModel=sm.OLS(sales,X_add_const)
results=myModel.fit()
print(results.summary())
OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.897
Model:                            OLS   Adj. R-squared:                  0.896
Method:                 Least Squares   F-statistic:                     570.3
Date:                Thu, 09 Nov 2023   Prob (F-statistic):           1.58e-96
Time:                        20:01:27   Log-Likelihood:                -386.18
No. Observations:                 200   AIC:                             780.4
Df Residuals:                     196   BIC:                             793.6
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          2.9389      0.312      9.422      0.000       2.324       3.554
x1             0.0458      0.001     32.809      0.000       0.043       0.049
x2             0.1885      0.009     21.893      0.000       0.172       0.206
x3            -0.0010      0.006     -0.177      0.860      -0.013       0.011
==============================================================================
Omnibus:                       60.414   Durbin-Watson:                   2.084
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              151.241
Skew:                          -1.327   Prob(JB):                     1.44e-33
Kurtosis:                       6.332   Cond. No.                         454.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

重点考虑参数R-squared、Prob(F-statistic)以及P>|t|的两个值,通过这4个参数就能判断模型是否线性显著,同时知道显性的程度。

其中,R-squared(决定系数)=SSR/SST,取值范围为[0,1],其值越接近1,说明回归效果越好。在这里,R-squared的值为0.897,接近于1,说明回归效果好。F-statistic(F检验)的值越大越能推翻原假设,原假设是“我们的模型不是线性模型”。Prob(F-statistic)是F-statistic的概率,这个值越小越能拒绝原假设,这里为1.58e-96,该值非常小,足以证明是线性显著的。

接着,采用机器学习的方法再进行建模,以便进行两者的对比分析。为了采用机器学习方法,需要拆分训练集和测试机。在这里通过调用sklearn.model_selection中的train_test_split()方法进行训练姐和测试集的拆分,random_state为1,采用25%的数据测试,75%的数据训练。

#第二种分析方法——基于机器学习
#拆分训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(Data,sales,random_state=1,test_size=0.25)

查看训练数据和测试数据的数量:

#查看训练数据和测试数据的数量
print(X_train.shape)
print(X_test.shape)
(150, 3)
(50, 3)

在训练集上训练模型。这里调用sklearn.linear_model中默认参数的LinearRegression对训练集进行线性回归。

from sklearn.linear_model import LinearRegression
linreg=LinearRegression()
model=linreg.fit(X_train,y_train)
print(model)
LinearRegression()

 在此基础上,查看多元线性回归模型的回归系数:

model.coef_
array([0.04656457, 0.17915812, 0.00345046])

 查看回归模型的截距:

model.intercept_
2.8769666223179335

 最后,调用score()方法返回预测的R-squared(决定系数),即模型的准确率:

#准确率
model.score(X_test,y_test)
0.9156213613792232

八、模型预测

采用predict()方法使用线性模型进行预测,返回模型的预测结果y_pred:

y_pred=linreg.predict(X_test)
y_pred
array([21.70910292, 16.41055243,  7.60955058, 17.80769552, 18.6146359 ,
       23.83573998, 16.32488681, 13.43225536,  9.17173403, 17.333853  ,
       14.44479482,  9.83511973, 17.18797614, 16.73086831, 15.05529391,
       15.61434433, 12.42541574, 17.17716376, 11.08827566, 18.00537501,
        9.28438889, 12.98458458,  8.79950614, 10.42382499, 11.3846456 ,
       14.98082512,  9.78853268, 19.39643187, 18.18099936, 17.12807566,
       21.54670213, 14.69809481, 16.24641438, 12.32114579, 19.92422501,
       15.32498602, 13.88726522, 10.03162255, 20.93105915,  7.44936831,
        3.64695761,  7.22020178,  5.9962782 , 18.43381853,  8.39408045,
       14.08371047, 15.02195699, 20.35836418, 20.57036347, 19.60636679])

九、模型评价

对预测结果评价,这里采用matplotlib.pyplot的plot()函数绘制预测结果与真实值图,两条线分别表示模型预测值和观察值。

import matplotlib.pyplot as plt
plt.figure()
plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
plt.plot(range(len(y_pred)),y_test,'r',label="test")
plt.legend(loc="upper right")
plt.xlabel("the number of sales")
plt.ylabel("value of sales")
plt.show()

从运行结果可以看出,预测结果与真实值的折线趋于重合,此结果说明模型的预测结果较好。 

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

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

相关文章

Jmeter 性能压测 —— 混合场景

性能测试,单场景的目的一般是为了发现缺陷、发现瓶颈。 完成所有单个重点场景的性能测试之后,还需要做一个混合场景的性能测试-评估系统整体性能。 1、场景设计 使用Jmeter 做混合场景设计 在一个测试计划,将每个重点测试场景各创建为一个…

第五章:人工智能深度学习教程-人工神经网络(第一节-人工神经网络及其应用)

当您阅读这篇文章时,您体内的哪个器官正在思考这个问题?当然是大脑啦!但你知道大脑是如何运作的吗?嗯,它有神经元或神经细胞,它们是大脑和神经系统的主要单位。这些神经元接收来自外界的感觉输入并进行处理…

基于SSM的电动车上牌管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Qt 自定义控件-支持换行和点击事件的Label

目录 前言1、功能描述2、代码实现2.1 头文件2.2 源码文件2.3 设计思路 3、示例4、总结 前言 本文主要介绍一个自定义控件,支持换行和点击事件的Label。起因是有这样一个需求,在一个复杂系统中有一个页面可以显示该系统中所有设备的名字,并且…

RSA 2048位算法的主要参数N,E,P,Q,DP,DQ,Qinv,D分别是什么意思 哪个是通常所说的公钥与私钥 -安全行业基础篇5

非对称加密算法RSA 在RSA 2048位算法中,常见的参数N、E、P、Q、DP、DQ、Qinv和D代表以下含义: N(Modulus):模数,是两个大素数P和Q的乘积。N的长度决定了RSA算法的安全性。 E(Public Exponent&a…

基于SSM的小区物业管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

获取请求IP以及IP解析成省份

某些业务需要获取请求IP以及将IP解析成省份之类的,于是我写了一个工具类,可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…

基于SSM的演唱会购票系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是…

Langchain-Chatchat实践详解

简介 本质上是在Langchain基础上封装的一层聊天服务,可以对接底层多种离线LLM和在线的LLM(也可以对接自定义的在线LLM)。提供基于知识库聊天功能相关的一系列API。 下载源码 源码地址: https://github.com/chatchat-space/Lang…

Apache Druid连接回收引发的血案

问题 线上执行大批量定时任务,发现SQL执行失败的报错: CommunicationsException, druid version 1.1.10, jdbcUrl : jdbc:mysql://xxx?useUnicodetrue&characterEncodingUTF-8&zeroDateTimeBehaviorconvertToNull,testWhileIdle true, idle …

《向经典致敬》第二届粤港澳大湾区著名歌唱家音乐会完美落幕

百年经典 歌坛盛会 “《向经典致敬》第二届粤港澳大湾区著名歌唱家音乐会暨2023福田人才之夜”完美落幕 2023年11月4日,阳光普照,秋意正浓,由中共深圳市福田区委宣传部、深圳市福田区文学艺术界联合会主办,深圳歌唱家协会承办&…

数据结构与算法C语言版学习笔记(3)-线性表的链式结构:链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言:回顾顺序表的优缺点:为什么要引入链式结构的线性表? 一、什么是链表?二、链表的分类①为什么要设置头节点&…

Oracle(15)Managing Users

目录 一、基础知识 1、Users and Security 用户和安全 2、Database Schema 3、Checklist for Creating Users创建用户步骤 二、基础操作 1、创建一个用户 2、OS Authentication 操作系统身份验证 3、Dropping a User 删除用户 4、Getting User Information 获取用户信…

Idea安装使用教程~

在本文中,我们将提供关于如何安装 IntelliJ IDEA 的详细步骤。如果您是初学者或只是想尝试一下 IDEA,我们建议您下载 Community 版。如果您需要更多高级功能,可以选择 Ultimate 版。 步骤一:下载 IntelliJ IDEA 首先,…

第三方商城对接项目(202311)

文章目录 1. 项目背景和目标2. 项目成果3. 项目经验总结4. 展望和建议 1. 项目背景和目标 竞标成功接口对接第三方商城,商品,订单,售后尽快完成对接 2. 项目成果 完成整个项目功能流程对接新业务功能移交项目等业务部门使用 3. 项目经验总…

app自动化测试——capability 配置参数解析

一、Capability 简介 功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序 形式:键值对的集合,键对应设置的名称,值对应设置的值 主要分为三部分 公共部分 ios 部分 android 部分 二、Session Appi…

【C++】特殊类实现——设计一个类、不能被拷贝、只能在堆上创建对象、只能在栈上创建对象、不能被继承、单例模式、饿汉模式、懒汉模式

文章目录 C特殊类实现1.设计一个类、不能被拷贝2.设计一个类、只能在堆上创建对象3.设计一个类、只能在栈上创建对象4.设计一个类、不能被继承5.设计一个类,只能创建一个对象(单例模式)5.1饿汉模式5.2懒汉模式 C 特殊类实现 1.设计一个类、不能被拷贝 在C中&#x…

11 # 手写 reduce 方法

reduce 使用 reduce() 方法对数组中的每个元素按序执行一个提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。 第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调…

短短45分钟,Open AI撼动了整个AI圈?

相信关注AI行业的人没有人不知道ChatGPT,作为人工智能新产品,ChatGPT一经发出就引爆全球,也让一众企业走上了探索AI大模型之路。而就在国内一众企业就AI大模型不断改进创新时,Open AI用一场仅45分钟的发布会,震惊了整个…

【JavaEESpring】Spring IoCDI

Spring IoC& DI 1. IoC2. IoC & DI 使⽤2.1 Bean的存储2.1 DI 注入 Autowired 3. 练习代码自取 1. IoC Spring 是包含了众多⼯具⽅法的 IoC 容器 IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器。 什么是控制反转呢? 也就…