1. 案例概述
案例场景:每个销售型公司都有一定的促销费用,促销费用可以带来销售量的显著提升;当给出一定的促销费用时,预计会带来多大的商品销售量?
- 来源:生成的模拟数据,非真实数据
- 用途:用来做第一个销售预测案例
- 维度数量:1
- 记录数:100
- 字段变量:第一列是促销费用,第二列是商品销售量
- 数据类型:全部是浮点数值型
- 是否有缺失值:否
2. 案例过程
第一步 导入库
本案例中会使用四个库:
- re:正则表达式,程序中通过该库来实现字符串分割。
- numpy:数组操作和处理库,程序中用来做格式转换和预处理。
- sklearn:算法模型库,程序中使用了线性回归方法linear_model。
- matplotlib:图形展示库,用来在建模前做多个字段关系分析。
代码如下:
import re
import numpy
from sklearn import linear_model
from matplotlib import pyplot as plt
第二步 导入数据
本案例中的数据为txt文件,使用Python默认的读取文件的方法。代码如下:
fn = open('data.txt','r')
all_data = fn.readlines()
fn.close()
第三步 数据预处理
在本阶段,主要实现对读取的列表数据进行清洗转换,以满足数据分析展示和数据建模的需要。代码如下:
x = []
y = []
for single_data in all_data:
tmp_data = re.split('t|n',single_data)
x.append(float(tmp_data[0]))
y.append(float(tmp_data[1]))
x = numpy.array(x).reshape([-1,1]) # 转换为N行一列的矩阵
y = numpy.array(y).reshape([-1,1]) # 转换为N行一列的矩阵
第四步 数据分析
到现在止我们已经拥有了格式化的数据,但到底对这两列数据集应该使用哪种模型还未可知。因此先通过散点图来观察一下。代码如下:
plt.scatter(x,y)
plt.show()
代码plt.scatter(x,y)的意思是用一个散点图来展示x和y,plt.show()的作用是展示图形。
通过散点图发现,x和y的关系呈现明显的线性关系:当x增大时,y增大;当x减小时,y减小。初步判断可以选择线性回归进行模型拟合。
第五步 数据建模
建模阶段我们使用sklearn中的线性回归模块实现,代码如下:
model = linear_model.LinearRegression()
model.fit(x, y)
第六步 模型评估
模型已经创建完成,本阶段进行模型拟合的校验和模型评估,代码如下:
model_coef = model.coef_
model_intercept = model.intercept_
r2 = model.score(x,y)
通过上述步骤我们可以获得线性回归方程y = model_coef*x + model_intercept,即y=2.09463661*x+13175.36904199。该回归方程的决定系数R的平方是0.78764146847589545,整体拟合效果不错。
第七步 销售预测
我们已经拥有了一个可以预测的模型,现在我们给定促销费用(x)为84610,销售预测代码如下:
new_x = 84610
pre_y = model.predict(new_x)
print (pre_y)
代码执行后,会输出[[ 190402.57234225]],这就是预测的销售量。为了符合实际销量必须是整数的特点,后续可以对该数据做四舍五入,使用round(pre_y)获得预测的整数销量。