01 案例介绍
某互联网公司记录了某一款产品的营销投入与收入额,如下表所示:当投入20万时,收入额是57万;投入38万元时,收入额是84万。
因为营销效果明显,公司决定再投入40万元,请您帮助公司预测收入额是多少?如果您能给出一个大概的预测收入区间,公司会对您有额外的奖励。
02 案例解析
根据案例描述,我们很容易确定其为预测问题。进一步,我们确定所用算法模型是回归分析算法。
除预测问题以外,在 Python数据挖掘中,我们还经常遇到分类问题、关联问题等等。面对不同的商业问题,我们需要使用不同的机器学习算法。Python实战圈以帮您总结完成,并配有大量案例实战。
03 什么是回归分析(Regression Analysis)
回归分析是研究自变量与因变量之间关系形式的分析方法。它主要是通过建立因变量y与影响它的自变量Xi (i = 1,2,3……)之间的回归模型来预测因变量y的发展趋势。回归的意思是找到最佳拟合参数,形成回归方程,然后对变量进行预测。
它的分类主要有:
- 线性回归分析
- 简单线性回归
- 多重线性回归
- 非线性回归分析
- 逻辑回归
- 神经网络
04 利用回归分析,四步预测广告收入
根据回归分析概念,我们总结出回归分析的解析步骤,共4步,如下:
第一步是数据处理,确定自变量和因变量
第二步是绘制图像,确定使用那种回归模型
第三步是建立回归模型
第四步是根据模型预测结果
根据4步,我们首先构建Python程序的主流程:
def main():
file_name = 'data.csv'
# 预测数据 自变量
predict_aim = 40
# 第一步 数据处理,确定自变量和因变量
processed_data, x, y = process_data(file_name)
# 第二步 绘制图像,确定回归模型
show_data(processed_data)
# 第三步 建立回归模型
lrMode_predict, score_lr= model_data(processed_data, x, y, predict_aim)
# 第四步 根据模型预测结果
predict_data(lrMode_predict, predict_aim, score_lr,predict_aim)
if __name__ == '__main__':
# 主函数
main()
05 第一步:数据处理
根据题目要求,求40万的营销收入。营销收入是未知的,而营销投入是已知的。营销投入是自变量;收入额是因变量。代码如下:
def process_data(file):
"""
第一步:
功能数据处理:导入数据
:param file:
:return:
"""
print('开始处理')
# 读取数据集
data = read_csv(file)
# print(data)
'''
确定自变量和因变量, 未知的是因变量;已知的是自变量
'''
x = data[['营销投入']]
y = data[['收入额']]
return
06 第二步:判断使用哪种回归模型
根据数据集,我们可以画出自变量与因变量的散点图,进而判断是否可以建立回归方程。判断的依据是它们是否具有强相关关系。文末扫码获得完整代码。从结果,我们可以看到广告收入与销售额呈现线性关系,并且相关系数是0.84。我们可以使用简单线性回归方程预测40万广告费对应收入的结果
07 第三步:建立回归模型
要建立回归模型,就要先估计出回归模型的参数A和B,那么如何得到最佳的A和B,使得尽可能多的数据点落在或者更加靠近这条拟合出来的直线上呢?
统计学家研究出一个方法,就是最小二乘法,最小二乘法又称最小平方法,通过最小化误差的平方和寻找数据的最佳直线,这个误差就是实际观测点和估计点间的距离;最小二乘法名字的缘由有二个:一是要将误差最小化,二是使误差最小化的方法是使误差的平方和最小化;在古汉语中,平方称为二乘,用平方的原因就是要规避负数对计算的影响,所以最小二乘法在回归模型上的应用就是要使得实际观测点和估计点的平方和达到最小,也就是上面所说的使得尽可能多的数据点落在或者说更加靠近这条拟合出来的直线上;我们只要了解最小二乘法的原理即可,具体计算的过程就交给Python处理,具体代码如下:
def model_data(processed_data, x, y, predict_data):
"""
第三步:
功能:建立回归模型
确定自变量:【'广告投入'】
因变量:销售额
:param processed_data:
:return:
"""
# 使用sklearn模块中LinearRegression,初始化模型
lrModel = LinearRegression()
lrModel.fit(x, y)
# 对模型进行评分检验
score_lr = lrModel.score(x, y)
print(f'模型的评分是:{score_lr}')
08 第四步:预测结果
得到评分高的模型以后,我们就可以使用其预测结果,比如预测40万的销售额是多少?我们使用两种方法,第一个是直接使用模型预测,第二个是使用得到的线性方程预测。如果两者预测的结果一样,说明模型正确。代码如下:
def predict_data(lrMode_predict, data, score_lr, predict_data):
"""
第四步:
根据模型预测结果
:param lrMode_predict:
:return:
"""
# 利用模型预测
predict_50 = lrMode_predict.predict([[data]])
print('40万的预测是:', predict_50)
'''
请思考如何得到区间预测值?请后台或者加入实战圈与作者讨论
'''
预测结果:
40万的预测结果是: [[96.46960667]]
40万预测的区间是:[ [69.41890637] [123.52030698] ]