渠道效果影响因素研究——选自《电商流量数据化运营》
“精准定位转化影响因素是渠道效果分析的核心。通过引入Shapley Values(SHAP值)结合决策树模型,可科学量化各特征对转化目标的整体正负向影响及单样本贡献度。该方法能有效揭示影响转化的关键业务规则,直接赋能营销业务,实现精准的人群圈选、跨部门贡献价值评估以及渠道投放效果的全面优化提升。”
渠道效果分析:如何精准定位转化影响因素与落地应用
在渠道效果分析中,找到影响效果转化的主要因素是重中之重。它能直接帮助营销人员更好地了解渠道转化的影响因素,以及如何进行渠道效果优化和提升。同时,还可以基于分析得到的业务规则,直接应用到营销投放和操作过程,因此落地性和价值度都非常高。
该节内容可应用于任何带有转化目标的渠道中,且转化的定义可以包含任何目标场景,例如:
- 动作场景:提交订单、按钮点击、线索填写、注册、登录、抽奖等事件。
- 非动作场景:停留超过 30 秒、看过超过 10 个页面、浏览过特定页面等过程性行为。
渠道效果影响因素概述:引入 Shapley Values
在“4.1.4 基于 Lookalike 的人群规则实现投放人群管理”中,介绍了如何通过模型提取营销目标人群的列表,同时也通过“特征重要性”展示了哪些特征对于用户转化最为重要。
“特征重要性”的具体含义,对于一般业务人员来讲比较难以理解,这里介绍一种新的解释影响重要程度的度量值——Shapley Values。
Shapley Values 来源于博弈论,它将整个模型训练作为一局博弈,每个特征当作一个博弈者,而预测结果则是最终的结果。Shapley Values 用来判断每个特征对预测结果做出了多大的贡献。 这里引用一则寓言故事来简单说明 Shapley Values 的计算逻辑:
Shapley Values 的寓言故事
约克和汤姆一起去旅游并准备吃午餐。约克带了 3 块饼,汤姆带了 5 块饼。这时,他们邀请一个路人一起吃饭。约克、汤姆和路人将 8 块饼全部吃完。路人送了 8 个金币来感谢他们的午餐。
约克和汤姆为这 8 个金币的分配发生了争执。汤姆认为自己带了 5 块饼,理应得 5 个金币,剩下 3 个金币给约克。约克则认为既然大家一起吃这 8 块饼,理应平分 8 个金币,即每人 4 个。
夏普里(Shapley)告诉约克,从公正的角度看,约克应当得到 1 个金币,而汤姆应当得到 7 个金币。原因是约克带了 3 块饼,汤姆带了 5 块,3 个人一起吃了 8 块饼。约克吃了其中的 1/3,即 8/3 块;路人吃了约克带的饼中的 3 - 8/3 = 1/3;汤姆也吃了 8/3,路人吃了他带的饼中的 5 - 8/3 = 7/3。这样,路人所吃的 8/3 块饼中,有约克的 1/3,汤姆的 7/3。路人所吃的饼中,属于汤姆的是属于约克的 7 倍。因此,对于这 8 个金币,公平的分法是:约克得 1 个金币,汤姆得 7 个金币。
我们从这个故事中看出,夏普里(Shapley)所提出的对金币的“公平的”分法,遵循的原则是:所得与自己的贡献相等。这就是 Shapley Values 的核心含义。
实战解析:分析特征对转化目标的正负向影响
本案例使用附件“第 4 章”-“4-1”数据,该数据与“4.1 基于 Lookalike 的投放人群管理”案例相同。
第一步:导入核心库
python
- 代码 ①:导入的
pandas库用来读取和处理数据。 - 代码 ②:导入的
DecisionTreeClassifier是决策树模型,用来做分类训练使用。 - 代码 ③:导入
shap用来解释模型信息,读者可使用pip install shap安装该库。 - 代码 ④:在 Jupyter Notebook 环境下,加载用于
shap可视化的 JS 代码。
第二步:准备与读取数据
python
- 代码 ①:使用
pandas的read_excel从附件第 4 章中读取名为 4-1 的工作簿,读取前 1000 行数据。 - 代码 ② 和 ③:分别将要分析的字段获取出来,这里为了分析方便只选取少量的字段。
第三步:训练决策树模型
python
- 代码 ①:调用
DecisionTreeClassifier创建一个决策树对象,random_state=0表示固定初始化随机种子的值。 - 代码 ②:调用该对象的
fit方法,将x和y传入模型中训练。
第四步:创建 Shapley 解释模型
python
- 代码 ①:基于
shap的TreeExplainer方法,创建一个用于树模型的解析对象explainer。 - 代码 ②:传入特征矩阵,计算 SHAP 值。
为了更好地了解 SHAP 值,通过如下代码构建数据框并做描述性统计分析:
python
- 代码 ①:构建了一个由 SHAP 值组成的数据框,列名与训练数据相同。由于
shap_values返回的是一个包含了正负关系的列表,这里只保留正向预测结果 SHAP 数据,即列表中的第二组结果。 - 代码 ②:打印数据的前 3 条记录如下,其中正数表示有正向贡献,负数表示负向贡献:
code
- 代码 ③:调用数据框的
describe方法做描述性统计,并打印输出,结果如下:
code
第五步:可视化分析特征的正负向影响
python
- 代码 ①:使用
summary_plot来展示原始数据特征计算后的 SHAP 值,计算逻辑为每个特征原始 SHAP 值先取绝对值,然后求均值;plot_type="bar"设置特征按 SHAP 计算结果展示条形图。

图 7-2 SHAP 特征重要程度柱形图
图 7-2 横坐标轴是特征的 SHAP 值的绝对值的均值,值越大代表越重要;纵坐标轴是特征,条形图越长表示越重要。图中 timeOnSite 最重要,其次是 hits,最不重要的特征是 newVisits。
- 代码 ②:对图 7-2 中的特征重要性进行还原。先对
shap_df调用abs方法求出绝对值,然后调用mean方法并通过axis=0指定按列计算均值,使用to_frame方法转换为数据框,使用T方法做转换,从多行一列转换为一行多列,便于展示结果。结果可以与图 7-2 的 SHAP 重要性结合起来一起分析。
code
- 代码 ③:输出原始决策树模型的特征重要性,便于与 SHAP 计算结果比较。通过
pd.DataFrame创建一个数据框,值为通过clf.feature_importances_属性取出的特征重要性结果,列名与训练集特征相同,结果如下:
code
通过代码 ② 和代码 ③ 的输出结果对比,虽然二者的值不同(原因是计算方法不同),但得到的结论趋势是一致的,特征间的大小排序为:timeOnSite > hits > pageviews > hour > newVisits。
为了更详细地展示每个特征对最终结果的影响,可以通过如下代码输出图形:
python
如图 7-3,上述代码的功能与之前的 SHAP 特征重要性的条形图相同,但展示的结果是一个类似散点图 + 条形图的结果。图中横坐标轴是 SHAP 原始值,值从左到右增大;右侧纵轴是特征值分布,特征值越大时颜色越深;图中间的散点为样本点,样本越聚集,则形成的区块面积越大。

图 7-3 特征 SHAP 值排序
从图 7-3 可以看出,对所有渠道数据样本而言,各个特征对转化目标预测的影响如下:
- SHAP 值会随着
timeOnSite值的增加而增大,即二者具有较强的正向线性关系,因此更大的timeOnSite更利于对目标转化产生积极贡献。 - SHAP 值会随着
hits值的增加而下降,二者具有较强的负向线性关系,因此更小的hits值更利于对目标转化产生积极贡献。 - SHAP 值总体上会随着
pageviews的增加而增加,但在 SHAP = 0 的位置附近存在大量的样本点,说明这些点对于 SHAP 值的增加没有贡献。 - SHAP 值总体上增加或下降与
hour的变化关系较弱,当hour值很大时会对 SHAP 值有正向和负向不同的作用。 - SHAP 值与
newVisits分布无明显关系,所有的数据都集中在 SHAP = 0 的位置附近,即newVisits无论怎么变化都不影响预测结果。
深入微观:分析特征如何影响单个样本的预测结果
在某些场景下,我们可能需要单独分析特征对于单个样本的预测结果的影响,例如特征如何影响某次广告的转化、如何影响单个客户的转化等。本案例来实现对单个样本的特征影响的解释。
本案例的数据延续“7.2.2 分析特征对转化目标的正负向影响”的结果,假设这些数据是不同的广告波次下的效果数据,这里分析单次广告下的特征影响因素。
第六步:单样本预测结果解析
python
- 代码 ①:打印输出
shap对象的预测值,结果为[0.813 0.187]。 - 代码 ②:通过树模型的预测计算来还原
shap对象的预测值。通过clf.predict(x).mean(0)来实现对x的预测,得到的值为预测结果的均值。本案例中的预测结果值是由 0 和 1 组成,因此值的含义为转化占比;通过1 - clf.predict(x).mean(0)得到另一半的概率占比(非转化占比),得到与代码 ① 相同的结果[0.813, 0.187]。 - 代码 ③ 和 ④:通过
shap的force_plot来显示特征对单个样本记录的影响。其中explainer.expected_value为通过shap对象预测得到的预期值,其中1代表第二个数据对象,表示预测为 1 的转化占比;shap_values[1]表示预测结果为 1 对应的 SHAP 值,[0,:]表示shap对象中的第 1 个数据行记录;x.iloc[0,:]为原始训练样本的第 1 个样本值。同理,代码 ④ 表示第 18 个样本预测值与模型基准的对照结果。得到结果图 7-4。

图 7-4 特征对单个样本的影响
图 7-4 中,水平坐标轴是 SHAP 值分布。base value 是全体样本 SHAP 的平均值,它与树模型预测后的均值相等,输出结果都是 0.187,表示所有样本的预测结果(值域为 0 和 1)的平均值。f(x) 是当前样本的 SHAP 值,通过与 base value 的比较可以知道该条结果预测效果相对“标杆”的差距。
- 在 f(x) 左侧的 higher 区域,为特征对 SHAP 值的正向影响区间,表示左侧的特征能增加预测的效果。图 ① 中的
pageviews=20对于该样本预测起到积极贡献作用,但长度条很小表示贡献非常有限。 - 在 f(x) 右侧的 lower 区域,表示特征对 SHAP 值的负向影响。图 ① 中的
timeOnSite=522对 SHAP 值的负向影响最大,另外hits=305和hour=22会显著降低模型预测效果。
图中所有样本的 base value 一致(全部样本的预测均值 0.187)。通过对比两个样本的结果,图 ① 预测结果 f(x) = 0,低于总体转化均值;而图 ② 预测结果为 1,则高于总体转化均值。二者预测结果的差异,主要是各自 higher 和 lower 区域的特征导致的。图 ② 中的 f(x) 显著正向贡献特征是 hits=245、hour=6 和 timeOnSite=861,这些特征显著地拉升了模型效果。
这种针对单个样本的预测解释,主要用在特定渠道、用户等焦点对象的预测结果的解读和分析,用于找到到底是什么因素导致预测结果更准(或不准)、产生转化(或不转化)。
知识拓展:渠道效果影响因素的落地应用
在所有数据挖掘和机器学习算法中,综合业务可理解性、可解释性以及算法的简易实施性,以下两类模型比较适合应用到影响因素分析场景中:
- 树模型:包括 CART(Classification and Regression Trees)等单一树,以及 GBDT(Gradient Boosting Decision Tree)、XGB(eXtreme Gradient Boosting)等集成树。它可以提供类似于人类思考逻辑的决策树规则。
- 广义线性回归:包括简单线性回归、逻辑回归等。它可以提供在学校时期已经学过的数学公式。
通过本节以及“4.1 基于 Lookalike 的投放人群管理”知识,我们可以通过多种模式找到影响渠道效果的重要特征,以及不同特征对结果的影响规则。在后续业务落地中,主要应用场景包括:
- 投放人群圈选:具体用法参考“4.1 基于 Lookalike 的投放人群管理”。
- 贡献价值分析:营销转化会涉及站外广告投放、落地页设计、网站内部功能和体验优化、站内运营活动策划和执行等主要部门。各部门如何“分配”对转化的贡献,可考虑通过本节方法进行评估。
- 效果优化提升:根据本节提供的方法,如果想要优化特定样本或总体预测结果(提高预测准确性或降低误差),则可以基于对预测结果 SHAP 值贡献最大的样本及其值的变化规律来优化结果。在营销执行过程中,通过素材和文案设计、渠道组合和投放触点、日期和时间等季节性控制、落地页选择、投放内容管理等方面,来思考各个因素对转化的贡献价值。