admin 管理员组文章数量: 887006
项目:线性回归分析商店销售收入
一、摘要
本文主要以商场会计统计的“销售数据”为例,对其进行数据预览与预处理,然后利用线性回归分析的流程与方法,使用Python3软件与SPSS25.0软件分析超市销售收入与各变量之间的关系,并以此份数据为依据使用线性回归建立预测模型,然后利用线性回归相关理论知识,对模型进行优化与检验调整。
分析过程思维导图:
文章最后将指出过程中存在的一些问题与个人思考的优化方式。
附录部分将附上数据集链接与Python部分的代码。
文章分析数据基于kaggle数据网站上的“美国商店销售数据集”,使用的数据分析软件主要为Python 3与SPSS 25.0,参考书籍主要为《应用回归分析(第五版)》———中国人民大学出版社。
二、实例分析与建模预测
1.分析目标:
本文数据分析目标主要有两个。
第一,利用会计统计数据建模预测各变量对Sales(销售收入)的影响;
第二,对比实践几种回归方法,感受线性回归模型的建立优化与检验过程。
2.数据预览:
(1)变量标签:
变量 | 标签 |
---|---|
AreaCode | 商店编号 |
State | 商店所在州 |
Market | 所在方位 |
MarketSize | 规模大小 |
Profit | 净利润 |
*Margin | 毛利润=Sales-GOGS=Profit+TotalExpenses |
Sales | 销售收入 |
GOGS | 销售成本 |
TotalExpenses | 销售产品的总费用 |
Marketing | 营销费用 |
Inventory | 销售时刻的库存价值 |
BudgetProfit | 预算净利润 |
BudgetCOGS | 预算销售成本 |
BudgetMargin | 预算毛利润 |
BudgetSales | 预算销售收入 |
ProductId | 产品编号 |
Date | 日期 |
ProductType | 产品类型 |
Product | 产品名称 |
Type | 产品种类 |
*注:此处简单介绍毛利润Margin与净利润Profit的区别,毛利润一般指销售收入与销售成本的差额,而净利润则指代销售收入在减去毛利润后,同时减去税费等各种杂费后的额度。
(2)数据预处理:
a.实际意义:
首先ProductId为产品编号,与产品名称效用重合,故删除ProductId。
考虑到Margin=Sales-GOGS=Profit+TotalExpenses的线性关系,删除Margin和Profit。
Date变量为日期,对Sales预测缺少实际有效信息,删除。
最后,因为BudgetMargin=BudgetSales-BudgetGOGS的等量关系,同时考虑到我们预测Sales,故删除特征中的BudgetSales(预算销售收入)。
b.检查缺失值:
经检查不存在缺失值。
c.描述性统计:
数值型:
Area Code | Sales | COGS | Total Expenses | Marketing | Inventory | Budget Profit | Budget COGS | Budget Margin | |
---|---|---|---|---|---|---|---|---|---|
count | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 | 4248.000000 |
mean | 582.278013 | 192.987524 | 84.433145 | 54.063559 | 31.185028 | 749.381356 | 60.913371 | 74.830508 | 100.819209 |
std | 221.140310 | 151.133127 | 67.249769 | 32.352598 | 27.023264 | 661.031896 | 79.546123 | 66.238145 | 92.602725 |
min | 203.000000 | 17.000000 | 0.000000 | 10.000000 | 0.000000 | -3534.000000 | -320.000000 | 0.000000 | -210.000000 |
25% | 417.000000 | 100.000000 | 43.000000 | 33.000000 | 13.000000 | 432.000000 | 20.000000 | 30.000000 | 50.000000 |
50% | 573.000000 | 138.000000 | 60.000000 | 46.000000 | 22.000000 | 619.000000 | 40.000000 | 50.000000 | 70.000000 |
75% | 772.000000 | 230.000000 | 100.000000 | 65.000000 | 39.000000 | 910.500000 | 80.000000 | 90.000000 | 130.000000 |
max | 985.000000 | 912.000000 | 364.000000 | 190.000000 | 156.000000 | 8252.000000 | 560.000000 | 450.000000 | 690.000000 |
观察发现,此处库存价值Inventory存在负数,经过网上资料查询,此变量仅在会计人员出现失误时,会被计算为负数,为异常情况,我们假设不存在这样的特殊人为失误,故将Inventory的负数部分全部转换为0.
分类型:
State | Market | Market Size | Product Type | Product | Type | |
---|---|---|---|---|---|---|
count | 4248 | 4248 | 4248 | 4248 | 4248 | 4248 |
unique | 20 | 4 | 2 | 4 | 13 | 2 |
top | Utah | West | Small Market | Espresso | Columbian | Regular |
freq | 288 | 1344 | 2544 | 1176 | 480 | 2400 |
d.查看数据间person相关性与散点图:
在将分类变量重新编码(按字母先后顺序)后,得到相关性矩阵热图如下:
一方面比较各个变量与sales的相关性,我们发现Market、Product Type、Product、Type四个变量与Sales变量相关性较低。另一方面观察各变量间关系,由于中间存在大片绿色部分,所以其他变量间或多或少存在线性相关性,于是可能有多重共线性问题的存在。
散点图:
通过散点图,同样能发现诸多分类变量如Market、Product、Product Type、Type等均相对于Sales分布均匀,没有特别明显的正负相关关系。
e.前进法、后退法与步进法筛选变量:
前进法:
后退法:
步进法:
设置 a e n t r y = 0.05 , a r e m o v a l = 0.1 a_{entry}=0.05,a_{removal}=0.1 aentry=0.05,aremoval=0.1,得到变量表:
综合上述三种方法,均选择删除了Budget Profit(预算净利润)与Area Code(地区编号)。
综合上述可视化图像和三种变量筛选方法,并考虑到变量的实际意义,我们删除Area Code、Budget Profit、Product Type。最后本次建模选取的特征有:
变量 | 标签 |
---|---|
State | 商店所在州 |
Market | 所在方位 |
MarketSize | 规模大小 |
GOGS | 销售成本 |
TotalExpenses | 销售产品的总费用 |
Marketing | 营销费用 |
Inventory | 销售时刻的库存价值 |
BudgetCOGS | 预算销售成本 |
BudgetMargin | 预算毛利润 |
Product | 产品名称 |
Type | 产品种类 |
3.建模分析与优化检验:
(1)普通最小二乘法回归:
调整后R方为0.986,说明线性拟合度很高。
方差分析中显著性为0,表明回归方程显著。
普通最小二乘法得到回归方程。
首先考察系数的显著性,在0.05的置信度下,所有变量的系数均显著
接下来考察与实际经济意义是否符合,其中COGS(销售成本)标准化系数为0.874>0,而BudgetCOGS(预算销售成本)标准化系数为-0.402<0,两个同性质变量却对Sales影响不同,也就是说,营业人在预算准备投入更多销售成本后,销售收入却会变低,这是违反直觉的。
最后由方差因子分析,存在四个变量的VIF>10。同时由共线性诊断:
条件指标最后为30.732,显然大于10,说明存在较强的多重共线性。
考虑到存在多重共线性与模型的简化,本文使用“岭回归法”和“PCA主成分回归法”尝试减轻多重共线性的影响并对模型作出合适的简化。
(2)多重共线性处理:
a.Ridge岭回归:
利用Python绘制岭迹图:
通过观察岭迹图,我们首先选取岭参数为 exp ( 6 ) \exp(6) exp(6),其次观察发现变量Product、Type、State均在0附近,对变量Sales的影响较小,将他们剔除后再次进行岭回归。得到输出结果:
Market : 1.9517236594813392
Market Size : -2.7622294182487788
COGS : 52.202977804203684
Total Expenses : 6.817442648939644
Marketing : 8.86483801142167
Inventory : -3.712837264493617
Budget COGS : 16.429106772703364
Budget Margin : 66.96984433107806
截距:192.70699037254082
均方误差: 1277.4518794910975
y的均值: 199.72647427854454
训练集得分: 0.9541736486545781
验证集得分: 0.9447228813564216
此时模型的拟合能力虽然降低,但调整后R方依然有0.95,线性拟合度依然很高,并且COGS和Budget COGS的系数得到了统一。
b.PCA主成分回归分析:
首先检验是否合适进行PCA降维:
得到显著性为0,说明原数据适合PCA降维。
考察方差解释信息量:
使选取的变量解释85%以上的方差信息量,于是选取前6个变量做线性回归分析:
调整后R方比较于最小二乘法降低,但线性拟合能力依然很高。
系数显著性均为0,与Sales显著相关。结合得分矩阵:
最后利用python计算得到各项标准化系数:
State : 0.0792
Market : 0.0836
MarketSize : -0.3002
COGS : 0.3619
TotalExpenses : 0.3146
Marketing : 0.2956
Inventory : -0.3003
BudgetCOGS : 0.4295
BudgetMargin : 0.7783
Product : 0.0369
Type : -0.0517
此时系数被集中于COGS(销售成本)、BudgetCOGS(预算销售成本)和BudgetMargin(预算毛利润),说明Sales(销售收入)与营业人实际销售过程中的COGS(销售成本)、包括预算准备中的BudgetCOGS(预算销售成本)和BudgetMargin(预算毛利润)在数值上有很大关联。并且此时COGS与BudgetCOGS的系数也均以同时为正,两者系数得到了统一,符合经济实际。
(3)模型自相关性和异方差性检验:
a.自相关性:
在对维数进行合适处理后,这里我们选择PCA主成分分析筛选的6个特征(分别命名为 x 1 , x 2 , x 3 , x 4 , x 5 , x 6 x_1,x_2,x_3,x_4,x_5,x_6 x1,x2,x3,x4,x5,x6),继续考察检验所建立的模型是否有违背线性回归的基本假设,首先我们考察模型是否存在自相关性,查看残差滞后图:
我们可以发现残差间存在显然的正相关性。
同时,使用DW检验残差是否具有自相关性:
DW=0.573,于是 ρ ^ = 1 − D W / 2 = 0.7135 \hat \rho=1-DW/2=0.7135 ρ^=1−DW/2=0.7135,说明残差间存在高度自相关性。这里首先使用BOX-COX变换来尝试消除自相关性。
BOX-COX变换:
利用Python计算得 λ ≈ − 0.12 \lambda \approx -0.12 λ≈−0.12,在SPSS中代入公式 y ( λ ) = y λ − 1 λ y^{(\lambda)}=\frac{y^\lambda-1}{\lambda} y(λ)=λyλ−1变换得新因变量 y λ y^{\lambda} yλ,对其回归得:
此时的DW值依然不理想,我们查看残差滞后图:
残差间仍然存在较为显著的正相关性。故在本例中,BOX-COX变换并不能有效的消除自相关性,接下来考虑到 ρ ^ \hat \rho ρ^约为0.7135,与1较为接近,故尝试使用一阶差分法消除自相关性:
一阶差分法:
利用一阶差分法对变量做如下变换:
y c = y t − y t − 1 x i c = x i ( t ) − x i ( t − 1 ) \begin{align} y_c&=y_{t}-y_{t-1} \\ x_{ic}&=x_{i(t)}-x_{i(t-1)} \end{align} ycxic=yt−yt−1=xi(t)−xi(t−1)
利用变换变量回归得残差滞后图:
由残差散点图,我们可以初步判断自相关性得到了消除,下面考察DW值:
此时DW值为2.388,计算可得 ρ ^ ≈ − 0.194 \hat \rho \approx -0.194 ρ^≈−0.194,可以基本认为自相关性得到了消除,得到系数矩阵:
此时仅有常量的显著性很高,说明常数显著为0,通过得分矩阵计算出此时各变量标准化系数为:
State : -0.0105
Market : -0.0144
MarketSize : -0.1928
COGS : 0.1760
TotalExpenses : 0.1442
Marketing : 0.1375
Inventory : -0.1393
BudgetCOGS : 0.2100
BudgetMargin : 0.3781
Product : 0.0185
Type : -0.0025
b.异方差性:
继续利用消除自相关性后的自变量组( V 1 , V 2 , V 3 , V 4 , V 5 , V 6 V_1,V_2,V_3,V_4,V_5,V_6 V1,V2,V3,V4,V5,V6)来考察模型是否还存在异方差性,计算残差绝对值,并导出6个变量与残差绝对值的spearman相关系数矩阵得:
在0.05的置信度下,发现 x 1 , x 2 , x 4 x_1,x_2,x_4 x1,x2,x4与残差绝对值相关性的显著性p值为0,两者显著相关,故存在异方差性。这里采用加权最小二乘回归方法来尝试消除异方差性。
加权最小二乘回归:
因为 x 1 x_1 x1与残差绝对值的相关系数最高,故选择 x 1 x_1 x1构造权函数。得到结果:
权重幂值选为m=0.5,故权函数为:
ω i = 1 x i 0.5 \omega_i=\frac{1}{x_i^{0.5}} ωi=xi0.51
得到回归方程:
得到调整后R方为0.817,模型线性拟合能力依然较高。
查看回归系数,此时回归系数的标准误都比较低,并且都十分显著,计算其标准化系数得:
State : 0.0043
Market : -0.0269
MarketSize : -0.2454
COGS : 0.1546
TotalExpenses : 0.1161
Marketing : 0.1052
Inventory : -0.2151
BudgetCOGS : 0.1939
BudgetMargin : 0.4175
Product : 0.0447
Type : 0.0724
到此,线性回归分析的建立、优化与检验均已完成,从分析过程中,可以体会到不同方法的不同作用,与部分方法,例如普通最小二乘法、BOX-COX变换等的局限性,再走完线性分析的完整流程后,也可以显然感受到不同回归方法的特点,例如虽然Ridge岭回归法与PCA主成分回归的调整后R方相较于普通最小二乘法的均变低,但两种方法有舍也you得,两种方法的回归系数更加符合实际,更具参考意义。所以我们可以初步认为分析目标二达成,下面我们总结以上分析结果。
4.分析总结:
1.根据标准化系数的关系,我们首先可以总结出各变量对Sales(销售收入)的影响大小。我们按照对Sales的预测影响程度,即系数的绝对值大小,将变量由大到小排序为:BudgetMargin(预算毛利润)、MarketSize(市场大小)、Inventory(库存价值)、BudgetCOGS(预算销售成本)、COGS(销售成本)、TotalExpense(销售总成本)、Marketing(营销费用)、Type(产品种类)、Product(产品名称)、Market(所在方位)、State(所在州)。
2.下面我们逐个分析各变量对Sales的影响:
State:由于State变量的系数过低,故其对Sales的影响可以几乎忽略不计。
Market:为市场所在方位Central-0,East-1、South-2、West-3,因为其系数为负数,故中部和东部的市场销售收入会略高,而南部和西部的市场销售收入可能会较低。
MarketSize:市场大小Major-0、Small-1,因为其系数为负数,故市场越大,销售收入会显著更高。
COGS 、TotalExpenses、Marketing 、BudgetCOGS: 均与销售收入正相关,它们都代表营业方在投入更多成本后,能获得更多收入。
Inventory:为销售时刻的库存价值,与Sales呈现负相关,说明商品的销售时刻库存价值越低,销售收入越高。
BudgetMargin:预算毛利润与销售收入呈现显著正相关,这可能得益于BudgetMargin的会计意义,其数值本身的计算就与销售收入在实际中有较大的正相关关系。
Product、Type:两者的系数均与Sales正相关,因Product的字母编码个数较多,本文不再呈现,其按字母顺序排序后,越靠后,在此模型中便越能给Sales带来更高的收益,例如日常类用品中的摩卡咖啡,就拥有比较好的销售收入。
至此,分析目标一基本完成。
三、问题与优化方向
1.分类变量处理
文章分析过程中的首要问题是分类变量的处理,分类变量的处理方式为按字符重新编码,这样编码的方式可能会使得数据的一些信息丢失而没得到充分发挥,使得数据信息的挖掘效果极差,导致本文数据案例分析中,几乎所有分类变量对Sales的计算几乎都是影响极小的,这显然不合常理。针对此问题,主要思考有两个解决方式:
(1)对分类变量做聚类分析将其划分为区间后再次进行编码,例如地区相关的State变量,完全可以在对应地图方位的同时,利用K-Means等的聚类方法,对其划分区间,然后再编码以提高此类数据信息的挖掘度。
(2)不使用线性回归而尝试使用其他模型预测方法,例如非线性回归、划分Sales后使用分类方法等。
2.权特征中存在负值
此问题主要体现在处理异方差性问题时,选择 x 1 x_1 x1构造权函数过程中, x 1 x_1 x1中存在一部分样本为负值,导致在利用极大似然法估计最佳幂数的过程中,使得这部分特征全被舍去,对模型的建立会产生一定影响。针对该问题,可以考虑采用其他方法来消除异方差性,例如BOX-COX变换等,但每个方法的效果都有待具体实验。
3.专业知识不足
在分析过程中,由于作者个人的经济相关知识不足,对其中一些存在方法缺乏专业视角与专业解释,例如对于特征的初步筛选和Inventory(库存价值)的负数部分的处理方式等,是在网上搜寻资料后的个人总结,缺乏专业性。同时,对于例如BudgetMargin与Sales相关关系的理解,本文最后的系数解释也并不专业,缺少相关会计知识,不理解两个变量的内部公式关系。针对该问题,只能要求个人在平时拓宽和加深有关知识的学习了解,当然也可以寻找相关专业的专业人员做咨询了解。
四、附录
1.数据链接:
[US Stores Sales | Kaggle]:
2.Python代码:
# In[2]:import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#导入数据
dt=pd.read_csv('C:/Users/86151/Desktop/线性回归/sales.csv')# In[3]:#目标:根据销售数据建模预测Sales(销售收入)
#ProductId为产品编号,与产品名称效用重合,删除ProductId
#考虑到Margin=Sales-GOGS=Profit+TotalExpenses的关系,删除Margin和Profit
#删除日期Date
sales=dt.drop(['ProductId','Margin','Profit','Date','Budget Sales'],axis=1)# In[4]:#查看数据类型
sales.dtypes# In[5]:#检查缺失值
sales.isnull().sum()# In[6]:#数值变量描述性统计
sales.describe()
#观察发现Sales、BudgetSales变量存在较大偏差,0.75分位数和最大值差距过大
#库存Inventory存在负值,不合常理# In[7]:#将Inventory为负的值变为0
sales['Inventory'] = sales['Inventory'].apply(lambda x: x if x >= 0 else 0)
sales.describe()# In[8]:# 分类变量描述统计
sales.describe(include=['object'])# In[9]:#分类变量处理
from sklearn.preprocessing import LabelEncoder
cat_df = sales.select_dtypes(include = ['object'])
for col in cat_df.columns:print(f"{col}: \n{cat_df[col].unique()}\n")#给字符分类变量编码
from sklearn.preprocessing import LabelEncoderobject_cols = [col for col in cat_df.columns]
label_encoder = LabelEncoder()
for col in object_cols:sales[col] = label_encoder.fit_transform(sales[col])
sales.head()# In[10]:#查看数值变量间person相关性#绘制相关性矩阵及热图
import seaborn as sns
from matplotlib import pyplot as pltcorrmat = sales.corr() #相关矩阵提取
top_corr_features = corrmat.indexplt.figure(figsize=(20,20))
g=sns.heatmap(sales[top_corr_features].corr(),annot=True,cmap="RdYlGn")
#我们可以发现变量间或多或少存在线性相关性,于是考虑利用SPSS进行多重共线性检验,经检验存在多重共线性。
sales.to_csv('sales_1.csv',index=0)# In[11]:#绘制各变量与sales的散点图
yz=sales['Sales']
xz=sales.drop(['Sales'],axis=1)
x=np.array(xz).T
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
#创建画布
fig=plt.figure(figsize=(10,15),dpi=80)
for i in range(len(xz.columns)):fig.add_subplot(5,3,i+1)plt.xlabel(xz.columns[i])plt.scatter(x[i],yz,marker='o')# In[12]:#删除变量
sales=sales.drop(['Area Code','Budget Profit','Product Type'],axis=1)# In[13]:#拆分因变量自变量
y=sales['Sales']
X=sales.drop(['Sales'],axis=1)
#拆分训练集和测试集
from sklearn.model_selection import train_test_split
#设置随机数种子为20
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25,random_state=20)
#将训练集切分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train,y_train,test_size = 0.25,random_state = 20)# In[14]:#拼接因变量自变量
X_y=pd.concat([X,y],axis=1)
#保存这组变量
X_y.to_csv('sales3.csv',index=0)#标准化
from sklearn.preprocessing import StandardScalerss=StandardScaler()
ss.fit(X_train)
StandardScaler(copy=True,with_mean=True,with_std=True)
X_train_s=ss.transform(X_train)
X_val_s=ss.transform(X_val)
X_test_s=ss.transform(X_test)# In[15]:#导入模型
from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X_train_s,y_train)y_pred = lr.predict(X_val_s)
y_pred_train=lr.predict(X_train_s)
#打印系数和截距
for i in range(len(lr.coef_)):print(X_train.columns[i],":",lr.coef_[i])
print(lr.intercept_)#查看均方误差与得分
from sklearn.metrics import mean_squared_error as MSE
mse = MSE(y_pred,y_val)
print('均方误差:',mse)
print('y的均值:',y_val.mean())#得分(即调整后R方)
print('训练集得分:',lr.score(X_train_s,y_train))
print('验证集得分:',lr.score(X_val_s,y_val))# In[18]:#下面我们处理多重共线性:
#法一:岭回归#导入岭回归
from sklearn.linear_model import Ridge
#画岭迹图
def ridge_traj(X_train, y_train, ntest):n = X_train.shape[1]ws = np.zeros((ntest,n))for i in range(ntest):ridge=Ridge(alpha=np.exp(i-10)).fit(X_train_s,y_train)ws[i,:] = ridge.coef_.Treturn ws
# 绘制岭轨迹
ntest=30
ws = ridge_traj(X_train, y_train, ntest)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)plt.rcParams['font.sans-serif']='SimHei' #设置字体为SimHei
plt.rcParams['axes.unicode_minus']=False #解决负号“-”显示异常
plt.title('岭迹')
ax.plot([i-10 for i in range(ntest)], ws)
plt.legend(X_train.columns)
plt.xlabel("ln(alpha)")
plt.ylabel("回归系数")
plt.show()
#使用岭回归对数据进行拟合,选取alpha参数为exp(6)
ridge=Ridge(alpha=np.exp(6)).fit(X_train_s,y_train)y_pred = ridge.predict(X_val_s)
#打印系数和截距
for i in range(len(ridge.coef_)):print(X_train.columns[i],":",ridge.coef_[i])
print("截距:",ridge.intercept_)mse = MSE(y_pred,y_val)
print('均方误差:',mse)
print('y的均值:',y_val.mean())#得分(即调整后R方)
print('训练集得分:',ridge.score(X_train_s,y_train))
print('验证集得分:',ridge.score(X_val_s,y_val))# In[17]:#根据岭迹,变量'Type','State','Area Code'振动趋向0,将其剔除
X_ridge_train=pd.DataFrame(X_train_s,columns=sales.drop('Sales',axis=1).columns).drop(['Type','State','Product'],axis=1)
X_ridge_val=pd.DataFrame(X_val_s,columns=sales.drop('Sales',axis=1).columns).drop(['Type','State','Product'],axis=1)
#再次岭回归:#使用岭回归对数据进行拟合,alpha参数为exp(6)
ridge=Ridge(alpha=np.exp(6)).fit(X_ridge_train,y_train)y_pred = ridge.predict(X_ridge_val)
#打印系数和截距
for i in range(len(ridge.coef_)):print(X_ridge_train.columns[i],":",ridge.coef_[i])
print(ridge.intercept_)mse = MSE(y_pred,y_val)
print('均方误差:',mse)
print('y的均值:',y_val.mean())#得分(即调整后R方)
print('训练集得分:',ridge.score(X_ridge_train,y_train))
print('验证集得分:',ridge.score(X_ridge_val,y_val))#主成分系数还原
# In[1]:import pandas as pd
import numpy as np
dt=pd.read_csv('C:/Users/86151/Desktop/线性回归/PCAscore.csv')# In[2]:coef=np.array(dt['coef'])
coef# In[3]:X=dt.drop(['coef'],axis=1)# In[4]:score=np.array(X)# In[5]:n,m=np.shape(score)# In[6]:c=np.zeros(m)
c# In[7]:for i in range(m):for j in range(n):c[i]=c[i]+score[j,i]*coef[j]
for i in range(len(c)):print(X.columns[i],":",'{:.4f}'.format(c[i]))# In[1]:import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#导入数据
dt=pd.read_excel('C:/Users/86151/Desktop/线性回归/PCA.xls')# In[2]:X=dt.drop(['Sales'],axis=1)
y=dt['Sales']# In[3]:#BOX-COX
from scipy.stats import boxcox
y_lambda, lambda0 = boxcox(y, lmbda=None, alpha=None)
lambda0# In[4]:from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X,y)
lr_lambda=LinearRegression().fit(X,y)# In[5]:y_pred=lr.predict(X)
y_pred_lambda=lr_lambda.predict(X)
resid=y-y_pred
resid_lambda=y_lambda-y_pred_lambda# In[6]:resid_lambda=pd.DataFrame(resid_lambda)# In[7]:#自相关分析部分:
from pandas.plotting import lag_plot
lag_plot(resid, lag=1)
plt.show()
lag_plot(resid_lambda,lag=1)
plt.show()# In[8]:#计算差分
#y
y_c=np.zeros(len(y)-1)
for i in range(len(y_c)):y_c[i]=y[i+1]-y[i]
#X
n,m=np.shape(X)
x_c=np.zeros([n-1,m])
X_c=np.array(X)
for j in range(m):for i in range(n-1):x_c[i,j]=X_c[i+1,j]-X_c[i,j]#差分模型预测
lr_c=LinearRegression().fit(x_c,y_c)
y_pred_c=lr_c.predict(x_c)
resid_c=y_c-y_pred_c
resid_c=pd.DataFrame(resid_c)
lag_plot(resid_c, lag=1)
plt.show()from statsmodels.stats.stattools import durbin_watson
print(f'D-W检验值为{durbin_watson(resid_c)}')# In[9]:y_c=y_c[:,np.newaxis]
X_y_c=pd.DataFrame(np.concatenate((x_c, y_c),axis=1))
X_y_c.to_csv("X_y_c.csv",index=0)
本文标签: 项目线性回归分析商店销售收入
版权声明:本文标题:项目:线性回归分析商店销售收入 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732355420h1534295.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论