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

15 篇文章 1 订阅
14 篇文章 0 订阅

目录

一、数据及分析对象

二、目的及分析任务

三、方法及工具

四、数据读入

五、数据理解

六、数据准备

七、模型构建

八、模型预测

九、模型评价


一、数据及分析对象

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()

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

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]:在过去的两个月里,Databricks公司举办了一场会议,将数据团队聚集在一起,共召开220多个会议,有无数机会与同行交流——超过50,000名数据科学家、数据工程师、分析师、商业领袖和其他数据专业人士。 Spark + AI 峰会虚拟环境。 引用\[2\]:本书以数据智能为灵魂,以Spark 2.4.X版本为载体,以Spark+ AI商业案例实战和生产环境下几乎所有类型的性能调优为核心,对企业生产环境下的Spark+AI商业案例与性能调优抽丝剥茧地进行剖析。全书共分4篇,内核解密篇基于Spark源码,从一个实战案例入手,循序渐进地全面解析Spark 2.4.X版本的新特性及Spark内核源码;商业案例篇选取Spark开发中最具代表性的经典学习案例,在案例中综合介绍Spark的大数据技术;性能调优篇覆盖Spark在生产环境下的所有调优技术; Spark+ AI内幕解密篇讲解深度学习动手实践,通过整合Spark、PyTorch以及TensorFlow揭秘Spark上的深度学习内幕。本书适合所有大数据和人工智能学习者及从业人员使用。对于有丰富大数据和AI应用经验的人员,本书也可以作为大数据和AI高手修炼的参考用书。同时,本书也特别适合作为高等院校的大数据和人工智能教材。 问题:spark数据分析实战——奥运会 回答: Spark是一个强大的大数据处理框架,可以用于数据分析和处理。在奥运会数据分析实战中,Spark可以帮助我们处理大规模的奥运会数据,进行数据清洗、转换和分析。通过使用Spark的分布式计算能力和优化技术,我们可以高效地处理大量的奥运会数据,并从中提取有价值的信息。同时,Spark还提供了丰富的数据处理和机器学习库,可以帮助我们进行数据挖掘和建模,以便更好地理解和预测奥运会的趋势和结果。通过结合Spark和AI技术,我们可以实现更深入的奥运会数据分析,并为奥运会的组织者、运动员和观众提供更好的决策支持和用户体验。 #### 引用[.reference_title] - *1* *2* [免费参加全球最大的Spark+AI峰会(Databricks 2020年6月22-26日)!免费访问峰会主题演讲及分组会议!](https://blog.csdn.net/duan_zhihua/article/details/106729096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行...](https://blog.csdn.net/duan_zhihua/article/details/106294896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天下弈星~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值