天天看点

(六)机器学习---销售额预测分析(线性回归分析案例)

目录

    • 一: 背景:
    • 二:数据概况分析:
    • 三:单变量分析:
    • 四:相关性分析和可视化:
    • 五:回归分析:

1: 分析的目的:

对各类因素投入产出比做出评估。

2: 分析的数据:

电视广告,线上,线下,门店内,微信渠道等促销投入和销售额之间的关系。

3:数据的说明:

(六)机器学习---销售额预测分析(线性回归分析案例)

4: 分析流程:

(六)机器学习---销售额预测分析(线性回归分析案例)

1:查看数据的前5条记录:

(六)机器学习---销售额预测分析(线性回归分析案例)

2:查看数据的基本信息:

(六)机器学习---销售额预测分析(线性回归分析案例)

3:统计各个列哪些存在空值,以及空值的数量:

由于缺失的不多,后期考虑直接删除。

(六)机器学习---销售额预测分析(线性回归分析案例)

1:数据分布信息:

各个列的最大值,平均值,中位数,众数等。

(六)机器学习---销售额预测分析(线性回归分析案例)

2:使用describe不会统计字符串类型的,所以单独查看event列:

发现分为四种促销:

(六)机器学习---销售额预测分析(线性回归分析案例)

3: 查看四种促销分别对应的营业额是多少?

(六)机器学习---销售额预测分析(线性回归分析案例)

4:查看四种促销分别对应的广告投放量是多少?

(六)机器学习---销售额预测分析(线性回归分析案例)

5:one hot 编码:独热码:

注意:对于person来说这种字符串类型的,我们要进行线性分析,肯定要转化成数字。如果我们使用0 1 2 3 来区分四种,实际上就是付给每个列一个权重,而这些权重会影响我们的分析。所以是不可取的。

独热码是用向量来存储列,每列的值就是相等的:

(六)机器学习---销售额预测分析(线性回归分析案例)

而pandas中可以使用get_dummies方法,将其中的字符串类型的列,转化成哑变量,即独热码的形式存储。

(六)机器学习---销售额预测分析(线性回归分析案例)

1: 查看每个列之间的相关性:

(六)机器学习---销售额预测分析(线性回归分析案例)

注意:此时求出来的相关性,并不代表一定相关。是否真正的相关,需要我们根据这几个列,构建线性回归模型,进行训练,然后得到权重,我们才能得出结论。

2:查看与revenue相关的列的排序:

注意sort_values只有一列也需要指定按照哪一列进行排序。

(六)机器学习---销售额预测分析(线性回归分析案例)

3:使用seaborn查看local_TV与销售额之间的关系:

#可视化分析
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#线性关系可视化
#斜率与相关系数有关
sns.regplot('local_tv','revenue',store)
           
(六)机器学习---销售额预测分析(线性回归分析案例)

发现:local_TV与销售额之间存在一次线性关系。

4: 查看人员和销售额之间的关系:

(六)机器学习---销售额预测分析(线性回归分析案例)

5: 查看instore(门店内海报)与限售额之间的关系:

发现是牵强的一次性关系。

(六)机器学习---销售额预测分析(线性回归分析案例)

1: 去除空值,然后划分测试集和训练集:

# 1:导入线性回归分析的包和划分测试集和训练集的包
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 2:去除存在空值的行
store.dropna(inplace=True)

y = store['revenue']
x=store[['local_tv','person','instore']]

# 3: 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(x, y)
           

2:进行归一化和线性模型进行拟合:

# 1: 导入归一化函数
from sklearn.preprocessing import StandardScaler
# 2:创建归一化对象
ss = StandardScaler()
# 3:对训练集进行归一化处理和训练
X_train = ss.fit_transform(X_train)
# 4: 对于测试集也进行归一化
X_test = ss.transform(X_test)


# 1:创建线性模型对象
model = LinearRegression()
# 2:利用训练集进行拟合
model.fit(X_train, y_train)
# 3:打印自变量系数
print(model.coef_)
# 4: 打印截距
print(model.intercept_)
           

打印结果:

# 1: 利用测试集进行测试
y_predict = model.predict(X_test)
from sklearn.metrics import mean_squared_error
from math import sqrt
# 2: 获取均方误差的开跟值
sqrt(mean_squared_error(y_true=y_test, y_pred=y_predict))