当前位置:   article > 正文

Python创建多元线性回归模型预测产品利润_python多元线性回归模型预测分析

python多元线性回归模型预测分析

一.例题:

某公司近几年来开发的产品利润收益受产品研发成本、管理成本、市场营销成本的影响,公司已有的部分数据存储在分组任务附件“实训项目3 测试数据.xlsx”中。该公司计划在2021年为A产品投入研发经费10万元,管理成本10万元,市场营销成本15万元,请根据公司提供的已有数据,建立回归模型,预测2021年A产品的利润为多少。
实训要求:用代码实现该模型。

二.思路分析

1.问题思路

通过题目得知因变量为商品利润(设为Y),自变量为:研发成本、市场营销成本(分别设为x1,x2,x3)
先找出因变量和自变量之间存在的关系(即确定回归模型,该题目有多个自变量因此为多元线性回归),再输入2021年的自变量(即预计投入的成本:研发经费10万元,管理成本10万元,市场营销成本15万元),得出2021年产品利润。

2.代码思路

①导入使用的库
②读取表格数据
③建立变量(1个因变量,3个自变量)
④建立线性回归模型
⑤求出模型的系数与截距,得到一元线性回归模型方程
⑥方程中输入预测自变量,得出因变量预测值(利润)

三.实现代码

总代码

import pandas as pd          #读取和处理Excel表格
import numpy as np          #数组处理
from sklearn.linear_model import LinearRegression      #建立线性回归模型

data = pd.read_excel("data3.xlsx")   #读取表格
print(data)

y = data['商品利润/元']        # 因变量
x1 = data['研发投入/元']       #自变量1
x2 = data['管理成本/元']      #自变量2
x3 = data['市场营销成本/元']   #自变量3

X = pd.DataFrame({'研发投入/元': x1, '管理成本/元': x2, '市场营销成本/元': x3})
Y = y

model = LinearRegression().fit(X, Y)

A = model.coef_   # 模型系数
B = model.intercept_  #模型截距

print("系数:",A)
print("截距:",B)

equation = "Y = {:.2f} + {:.2f}*X1 + {:.2f}*X2 + {:.2f}*X3".format(B, A[0], A[1], A[2])
print("多元线性回归方程为:", equation)

x1_2021 = 100000
x2_2021 = 100000
x3_2021 = 150000

prediction = model.predict([[x1_2021,x2_2021, x3_2021]])
print("预测结果为:", prediction[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

实现结果:

在这里插入图片描述

扩展-自编多元线性回归模型建立代码

与Python中LinearRegression建立线性回归模型的类稍有不同,以下代码块通过求解矩阵系数的方式建立多元线性回归模型

class LinearRegression:          #创建一个建立线性回归模型的类
    def __init__(self,X,Y):      #初始化函数,接收传递的参数值X(自变量矩阵),Y(因变量矩阵)
        self.X = X
        self.Y = Y
        
    def fit(self):           #求解回归系数函数,其求解A
        Xt = self.X.T
        XtX = np.dot(Xt.self.X)
        XtXinv = np.linalg.inv(XtX)   #求X^TX得逆
        temp = np.dot(XtXinv,Xt)
        self.A = np.dot(temp,self.Y)
    
    def predict(self,X):   #求预测值,得出A之后传入任意一个X矩阵,都能得到Y
        Y = np.dot(X,self.A)
        return Y         
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

四.代码分析

总代码分析

1.导入Python要使用的库
分别是读取和处理Excel表格的库、数组处理的库、建立线性回归模型的库

import pandas as pd          #读取和处理Excel表格
import numpy as np          #数组处理
from sklearn.linear_model import LinearRegression      #建立线性回归模型
  • 1
  • 2
  • 3

2.读取表格并打印,获取数据

data = pd.read_excel("data3.xlsx")   #读取表格
print(data)
  • 1
  • 2

表格部分数据展示

3.建立自变量与因变量

y = data['商品利润/元']        # 因变量
x1 = data['研发投入/元']       #自变量1
x2 = data['管理成本/元']      #自变量2
x3 = data['市场营销成本/元']   #自变量3
  • 1
  • 2
  • 3
  • 4

由于我们是采用求解矩阵系数的方式建立多元线性回归模型的,因此将多个自变量整合到一个字典中,当作矩阵传递给我们自己创建的多元线性回归模型方法

X = pd.DataFrame({'研发投入/元': x1, '管理成本/元': x2, '市场营销成本/元': x3})
Y = y
  • 1
  • 2

4.调用函数得到多元线性方程

model = LinearRegression().fit(X, Y)  #创建多元线性回归模型

A = model.coef_   # 得到模型系数
B = model.intercept_  #得到模型截距

print("系数:",A)
print("截距:",B)

equation = "Y = {:.2f} + {:.2f}*X1 + {:.2f}*X2 + {:.2f}*X3".format(B, A[0], A[1], A[2])
print("多元线性回归方程为:", equation)  #打印多元线性回归方程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.输入预测自变量,得出因变量预测值(利润)

x1_2021 = 100000
x2_2021 = 100000
x3_2021 = 150000

prediction = model.predict([[x1_2021,x2_2021, x3_2021]])
print("预测结果为:", prediction[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

创建多元线性回归模型代码分析推导

  • 我们知道多元线性回归方程的形式如下(a为常数项,b为偏回归系数)
    在这里插入图片描述

  • 若我们带入多组样本,可以得到方程组的形式:
    在这里插入图片描述

  • 由线性代数的知识可知,我们可以采用矩阵将方程组转化为以下形式:
    在这里插入图片描述
    在这里插入图片描述

  • 因此我们的求解思路:带入多组数据测量x的不同组合下的y值,求解A,即为建模过程。(计算过程通过代码交给计算机去进行计算)

  • 通过线性代数数学知识进行推导,可以得到矩阵系数A的求解公式为:
    在这里插入图片描述

  • 在建立多元线性回归模型的类中,我们创建了三个函数。

    __ init __(self,X,Y):这是初始化函数,负责接收传递的参数值X(自变量矩阵),Y(因变量矩阵)

    fit() :这是根据系数A的求解公式创建的求解矩阵系数A函数

    predict(self,X) : 当我们得到矩阵系数A之后,向矩阵A传入任意一个X矩阵,都能得到Y矩阵

class LinearRegression:          #创建一个建立线性回归模型的类
    def __init__(self,X,Y):      #初始化函数,接收传递的参数值X(自变量矩阵),Y(因变量矩阵)
        self.X = X
        self.Y = Y
        
    def fit(self):           #求解回归系数函数,其求解A
        Xt = self.X.T
        XtX = np.dot(Xt.self.X)
        XtXinv = np.linalg.inv(XtX)   #求X^TX得逆
        temp = np.dot(XtXinv,Xt)
        self.A = np.dot(temp,self.Y)
    
    def predict(self,X):   #求预测值,得出A之后传入任意一个X矩阵,都能得到Y
        Y = np.dot(X,self.A)
        return Y   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/469362?site
推荐阅读
相关标签
  

闽ICP备14008679号