营销更像是艺术,而非科学
介绍
但随着线上营销和大数据的出现,营销比以往任何时候都更加数学化和有条理。事实上,数据科学和机器学习应用的最大机遇领域之一就是营销!
本文将重点介绍一种非常流行和强大的营销科学技术,称为营销组合建模。这篇文章将介绍它是什么,为什么它如此有用,以及如何用 Python 构建它,最重要的是,如何解释它。
什么是营销组合模型?
营销组合模型是一种建模技术,用于确定市场归属,即给定公司正在使用的每个营销渠道的估计影响。
与用于营销归因的另一种技术归因建模不同,营销组合模型试图衡量不可估量的营销渠道(如电视、广播和报纸)的影响。
通常,您的输出变量将是销售额或转化次数,但也可以是网站流量等。您的输入变量通常包括按时间段(天、周、月、季度等)按渠道划分的营销支出,但也可以包括我们稍后将介绍的其他变量。
为什么它如此有用?
我们可以通过多种方式利用营销组合模型的力量,包括:
• 更好地了解营销渠道与目标指标(即转化率)之间的关系。
• 区分高投资回报率的营销渠道和低投资回报率的营销渠道,最终更好地优化您的营销预算。
• 根据给定的输入预测未来的转化。
随着您扩展业务,这些见解中的每一个都可以提供大量价值。让我们深入了解使用 Python 构建一个需要什么。
建立营销组合模型
为了更好地了解营销组合模型,本节将介绍如何使用 Python 从头开始构建营销组合模型。这个营销组合模型将基于 Kaggle 的这个数据集构建。
步骤 1:导入所有相关的库和数据。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltdf = pd.read_csv("../input/advertising.csv/Advertising.csv")
步骤2:执行一些 EDA
通常,您会进行更多的探索性数据分析,但在本教程中,我们将重点关注三个最常见(根据我的经验,也是最有效的):
相关矩阵 | 显示每个配对关系的相关值的表格 |
配对图 | 一种将每个变量之间关系可视化的简单方法 |
特征重要性 | 根据每个特征在预测目标变量方面的有用程度为每个特征分配分数的技术 |
相关矩阵
重申一下,相关矩阵是一个表格,显示每个配对关系的相关值。这是理解特征关系的一种非常快速有效的方法。这是我们矩阵的代码。
corr = df.corr()
sns.heatmap(corr, xticklabels = corr.columns, yticklabels = corr.columns, annot = True, cmap = sns.diverging_palette(220, 20, as_cmap=True))
上面的相关矩阵表明,电视和销售额之间存在很强的相关性 (0.78),广播和销售额之间存在中等相关性 (0.58),而报纸和销售额之间存在弱相关性 (0.23)。现在下结论还为时过早,但最好继续考虑前进。
配对图
配对图是一种可视化每个变量之间关系的简单方法——它类似于相关矩阵,除了它显示每个配对关系的图形而不是相关性。现在让我们看看我们的配对图的代码。
sns.pairplot(df)
我们可以看到我们的配对图和我们的原始相关矩阵之间有一些一致性。看起来电视和销售之间存在很强的正相关关系,广播较少,报纸则更甚。
特征重要性
特征重要性允许您确定每个输入变量对预测输出变量的“重要性”。如果变换某个特征的值会增加模型误差,则该特征很重要,因为这意味着模型依赖于该特征进行预测。
# Setting X and y variables
X = df.loc[:, df.columns != 'sales']
y = df['sales']# Building Random Forest modelfrom sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error as maeX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.25, random_state=0)
model = RandomForestRegressor(random_state=1)
model.fit(X_train, y_train)
pred = model.predict(X_test)# Visualizing Feature Importance
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(25).plot(kind='barh',figsize=(10,10))
上面的代码首先创建以销售为目标变量,营销渠道为特征输入的随机森林模型。创建模型后,我们计算每个预测变量的特征重要性并将其绘制在条形图上。
似乎有一种模式,电视是最重要的,其次是广播,最后是报纸。接下来是实际构建模型。
步骤3:构建营销组合模型(又名 OLS 模型)
是时候建立我们的营销组合模型了!另一种引用我们正在构建的模型的方法是 OLS 模型,普通最小二乘法的缩写,它是一种用于估计线性回归模型中参数的方法。 OLS 模型是一种回归模型,在构建营销组合模型时最常用。
Python 如此惊人的原因在于它已经有一个可以用来创建 OLS 模型的库:
import statsmodels.formula.api as smmodel = sm.ols(formula="sales~TV+radio+newspaper", data=df).fit()print(model.summary())
上面的代码创建了我们的普通最小二乘回归模型,该模型指定我们根据电视、广播和报纸营销费用预测销售额。
步骤4:绘制实际值与预测值
接下来,让我们用实际销售值绘制预测销售值,以直观地查看模型的执行情况。如果您想查看模型反映实际发生情况的程度,那么在业务用例中这是一件特别有用的事情——在这种情况下,如果您想查看模型根据金额预测销售额的情况在每个营销渠道上花费。
from matplotlib.pyplot import figurey_pred = model.predict()
labels = df['sales']
df_temp = pd.DataFrame({'Actual': labels, 'Predicted':y_pred})
df_temp.head()figure(num=None, figsize=(15, 6), dpi=80, facecolor='w', edgecolor='k')
y1 = df_temp['Actual']
y2 = df_temp['Predicted']plt.plot(y1, label = 'Actual')plt.plot(y2, label = 'Predicted')
plt.legend()
plt.show()
不错!看起来这个模型在预测电视、广播和报纸支出的销售方面做得很好。
如何解释营销组合模型
回到 .summary() 的输出,有几件事需要关注:
1. .summary() 为我们提供了关于模型的丰富见解。回到 .summary() 的输出,我们可以看到一些需要关注的领域(您可以参考下面的 OLS 回归结果参考这些见解):
2. 形容词。 R 平方为 0.896。这意味着模型可以解释数据中大约 90% 的总变异。这也意味着该模型不占所用数据的 10%——这可能是由于缺少变量,例如,如果没有包含另一个营销渠道,或者仅仅是由于数据中的噪音。
3. 在上半部分,您可以看到 Prob (F-statistic): 1.58e-96。此概率值(p 值)表示没有目标变量的良好预测变量的可能性——在这种情况下,没有良好的销售预测变量。由于 p 值接近于零,我们知道模型中至少有一个预测变量可以很好地预测销售额。
如果查看列 P>|t|,您可以看到每个预测变量的 p 值。电视和广播的 p 值小于 0.000,但报纸的 p 值为 0.86,这表明报纸支出对销售没有显著影响。通常,希望 p 值小于 1% 或 5%,这是实践中的两个标准。
总结
本文解释了什么是营销组合模型、如何构建模型以及如何有效地将其用于您的业务。