前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >教你更科学地花钱:因果推断在增长业务ROI量化评估上的应用

教你更科学地花钱:因果推断在增长业务ROI量化评估上的应用

作者头像
腾讯灯塔小明
发布于 2022-09-08 06:46:24
发布于 2022-09-08 06:46:24
1.1K0
举报
文章被收录于专栏:敏捷分析敏捷分析

点击蓝字关注我们

作者:李金霞Polarisli

知乎专栏:《数据分析方法与实践》

创作者:「守望北极星的猫」

---了解作者其他作品,请点击【文末原文链接】---

丨导语丨

做增长业务,常用的策略手段有渠道拉新、拉活、节假日活动等,这几个业务都是需要花钱的,每年分配的预算有限,如何权衡在各项业务上的投入成本,如何花钱效率最高,将好钢用在刀刃上是需要运营管理者去思考和决策的,如何决策更科学,那就不得不提到因果推断这种科学的量化方法,每笔投入的 ROI 量化评判标准统一,自然就可比较。

有一套关于花钱的经典面试题:

新年伊始,业务部门要做新一年的规划,部门需要在渠道拉新、拉活、节假日活动3个地方花钱,你如何判断花钱是否值得,分配是否合理?

这里面隐含的一个问题是:上述3个地方你的评估标准是否统一,比如用户价值统一用 LTV 衡量,后续统一计算 ROI 即可,最忌讳的是不同业务有不同的标准,比如拉新看次留、拉活看回流量、A活动看签到量、B活动看积分消耗量等,不统一则不可纵向比较。

渠道拉新相对容易,因为本身拉来的是一个新用户,自身计算 LTV 即可,但是拉活、活动因为要计算增益,就需要找对比组。比如拉活,要对比拉活和未拉活,活动要对比参与活动和未参与活动的两个群体。

这里面就会引入新的问题——对比的两个群体,本身就是不同质的,近期高活用户更有可能参与活动,未参与活动里面掺杂的更多的是低活和回流用户,自然参与活动的用户无论人天还是留存都会比未参与活动的人群高,那你怎么能证明是活动本身带来的增益呢?

明显直接拿参与未参与群体进行对比,会存在混淆因子&自选择偏差

● 控制转化的唯一变量不是「是否参与活动」,若影响转化的唯一变量,不只是「参与活动与否」这个属性,会得出错误结论。

● 人群属性分布不一致的两个组不能直接比较

①参与活动用户本身就是相对高活的用户,可能没有活动也会回来,本身易转化

②其它属性特征导致用户更容易参与活动,而未参与活动的用户本身就是不活跃且不宜转化的

③用户因为节假日的影响,自然频率上升

④活动期间多种策略同时影响用户,不只活动一种策略

为了解决这个效果评估的问题,本文采用因果推断中的倾向性得分加权的方法,找到对照组和实验组同质的用户群进行比较分析。(还有一种常用的方法——PSM倾向性得分匹配,经对比,PSM倾向性得分匹配方法能够处理的数据量在几w级别,且随着数据量的增加计算效率降低很快,甚至出现计算不出结果的情况,故推荐倾向性得分加权的方法)。

什么是因果推断

在做用户增长时,我们要回答的终极问题是“如果对产品施加 T 策略,对业务目标是否有影响,影响有多大?”我们对产品施加的策略为「因」,因此而出现的结果为「果」,中间控制住混淆变量 X ,保证 T 策略是唯一影响因素。

这样就可以回答,因为 T 策略的施加,导致结果 Y 增益了多少。

因果效应

ATE (Average Treatment Effect):

即平均处理效应,这里的E是“期望”,对所有用户取期望。最终匹配的干预组和控制组在因变量上的平均差异,即干预对所有人的平均效应。

ATT (Average Treatment Effect on the treated):

即处理组平均处理效应,这里的E是对所有T=1的用户取期望。直观来说,ATT为实验组样本接触到干预后,干预对受到干预的人的平均因果效应。

因果评估方法倾向性加权得分

从整体用户群中随机抽样,分成两组人群——实验组:参与活动用户;控制组:未参与活动用户,带入二元逻辑回归模型进行迭代,计算得到倾向性得分 P,按照 P 计算权重系数 W 用于均衡控制组人数分布,保证控制组和实验组人数分布基本一致。

详细原理如下:

倾向性评分是指在一组协变量条件下(X),对象 i 接受 treatment (T=1) 的概率值。这个概率值的计算最常用的是逻辑回归模型,也可以选用随机森林、神经网络等模型。

在相似的得分下,treatment 和 control 基线资料的分布应该是平衡的。

因果效应 ATT、ATE 和倾向性得分的关系如下:

ATE:

这里的治疗组即为实验组,ei 即为通过模型计算出的概率得分。

ATT:

至此,我们就计算出了权重系数 w。

增益效应评估

套入上述公式,即可计算得出 ATT 或 ATE。

倾向性加权得分在活动效果量化增益上的应用

以下以参与某活动为例,讲解倾向性加权得分方法在活动 ROI 量化增益上的应用。

01实验组和测试组划分

因果推断本质上是在人为模拟 AB Test,那么模拟的 AB 两组,也要符合真实 AB test 分组的定义。

注意此处很重要,否则会得出错误的分组结果。

02将因果推断模型计算过程工程化

提高复用性、缩短开发周期

不同的模型,使用的特征变量基本一致,可以将常用特征变量固定化自动化采集,丰富特征变量库,便于提高模型的复用性,同时缩短开发周期,高效给出策略建议。

03迭代优化逻辑回归模型,

计算概率P、权重系数w

通过常用的逻辑回归算法计算倾向性加权得分 P,对分类变量进行热编码,匹配加权结果更均匀。

1)观察变量显著性

对于不显著的变量可弱化模型在该变量上的匹配效果。

2)匹配结果量化

  • 实验组和控制组样本量接近1:1
  • SMD < 0.1

SMD 即 Standarized Mean Difference

SMD 的一种计算方式为:(实验组均值 - 对照组均值)/ 实验组标准差。

以上量化指标符合规则,则说明加权匹配成功。

3)量化增益值及显著性校验

s_treat = 1.62 说明参与活动用户较未参与活动用户30日人天增益为1.62,且结果显著,量化评估结果可用。

量化活动增益 ROI

常用衡量指标为 LTV,对比参与活动组和未参与活动组的 LTV 差异即为 LTV 增益,这里面的难点为从活动开始计算多长时间的增益算活动带来的,也就是说因活动带来的增益有多大且会持续多长时间?

由活动带来的增益会分为3部分:

渠道投放新增 + 活动裂变新增 + 首次参与活动的老用户

新增即求相应的新增用户 LTV 即可,这里暂且不表,另外为什么要限定是首次参与活动的老用户呢?限定老用户首次参与活动后,那么其每日因活动带来的增益就不会和多次参与活动的老用户增益混淆在一起,导致不能很好的量化活动增益。

LT 即我们要计算的活动生命周期时长增益,LT 可以等价看成参与活动组和未参与活动组用户在后续 N 日日活跃率的增益,N 日日活跃率增益相加即为 LT 增益。选择看日活跃率的好处是我们可以从曲线走势上看出以下两点,间接验证模型的匹配加权效果。

① 参与活动和未参与活动用户在参与活动前是否可以看成同一个人?即参与活动前两组用户的日活跃率曲线是否重合,以此来验证倾向性加权得分的效果。

② 将 N 日时间周期拉长,从后续留存时长变化趋势上帮我们清晰地定位到活动效应的存续周期。

至此,我们便完整地完成了活动效果量化 ROI 的增益计算。

另外,因为也考虑了模型的工程化,此方法可以快速延伸到拉活、某功能改版上线等的后续增益评估上。

点击下方“阅读原文”关注作者知乎专栏

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯灯塔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
input输入框内容规范正则总结
input type=text 只能输入数字(去掉e和小数点): <input type="number" onkeydown="return event.keyCode !== 69" /> <input type="text" onkeydown="return ( event.ctrlKey || event.altKey || (47<event.keyCode && event.keyCode<58 && event.shiftKey===false) || (95<event.
Daotin
2020/09/08
1.4K0
如何限制input输入类型
1.只能输入和粘贴汉字 <input onkeyup="value=value.replace(/1/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/2/g,''))"><br/> <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData(
小柒2012
2018/04/13
2.4K0
java正则表达式大全
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输
静谧星空TEL
2021/04/27
1.4K0
一个正则表达式测试(只可输入中文、字母和数字)
  在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。之前在用java时特别是对用户名或密码使用正则非常爽,写脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够。这里就罗列了从网上找的很有用的资料,感谢大神们的贡献。 首先举一个例子: 匹配9-15个由字母/数字组成的字符串的正则表达式: NSString * regex = @"^[A-Za-z0-9]{9,15}$"; NSPredicate *pred = [NSPredi
猿人谷
2018/01/17
5.6K0
C#常见正则表达式
"^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1
恋喵大鲤鱼
2018/08/03
7180
jQuery最方便的前端验证方式2种(非空验证与比较验证)
字符串长度限制、判断字符长度 、js 限制输入、限制不能输入、textarea 长度限制
红目香薰
2023/04/06
2.3K0
jQuery最方便的前端验证方式2种(非空验证与比较验证)
常用正则表达式
/^([0-9]{1,}\.[0-9]{1,}|[0-9]{1,})$/    数字或小数点
Java架构师必看
2020/04/22
6480
一些常用实用的正则表达式
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符
听着music睡
2018/05/18
6940
Javascript 笔记
JavaScript表单验证电话号码,判断一个输入量是否为电话号码,通过正则表达式实现。 //检查电话号码 function isTel(str){        var reg=/^([0-9]|[\-])+$/g ;        if(str.length<7 || str.length>18){         return false;        }        else{          return reg.exec(str);        } }
Hongten
2018/09/18
1.9K0
Web阶段:第四章:常用的正则表达式
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:”^[0-9]*$” 只能输入n位的数字:”^\d{n}$” 只能输入至少n位的数字:”^\d{n,}$” 只能输入m~
Java廖志伟
2022/09/28
3970
详细的正则表达式
只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\d{m,n}$" 只能输入零和非零开头的
Dawnzhang
2018/10/18
6260
经典正则表达式
正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。
Java架构师必看
2021/03/22
7900
JS只能输入数字,数字和字母等的正则表达式
1.只能输入英文   <input type="text" onkeyup="value=value.replace(/[^a-zA-Z]/g,'')"> 2.只能输入中文、英文、数字、@符号和.符号   <input type="text" onkeyup="value=value.replace(/[^a-za-z0-9u4e00-u9fa5@.]/g,'')"> 3.只能输入字母和汉字   <input onkeyup="value=value.replace(/[d]/g,'') "onbefore
磊哥
2018/05/08
18.7K0
PHP常用正则表达式大全
  匹配数字   "^\d+$" //非负整数(正整数 + 0)   "^[0-9]*[1-9][0-9]*$" //正整数   "^((-\d+)|(0+))$" //非正整数(负整数 + 0)  
思梦php
2018/03/09
2.6K0
PHP常用正则表达式大全
NET中验证控件表达式汇总
ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效。这些控件如下:     1、RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交信息。     2、Comparidator:比较验证。比较两个字段值是否相等,如密码和确认密码两个字段是否相等;比较一个字段与一个具体的值。     3、Rangidator:范围验证。验证一个字段是否在某个范围中,如成绩字段要是0~100范围中。     4、Regularexpression_rV
欢醉
2018/01/22
1.2K0
知识总结:常用正则表达式正则表达式
正则表达式 常用正则表达式大全!(例如:匹配中文、匹配html) 匹配中文字符的正则表达式: [u4e00-u9fa5]  评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包
牛客网
2018/04/28
9850
Java 正则表达式的用法和实例
6、\S符号:非空字符 7、\s符号:空字符,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。 8、\r符号:空格符,与\n、\tab相同
全栈程序员站长
2022/08/30
1.2K0
Java 正则表达式的用法和实例
PHP常用正则表达式汇总
正则表达式匹配IP ((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]) 1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$"  //非负整数(正整数 + 0) 3. "^[0-9]*[1-9][0-9]*$"  //正整数 4. "^((-\d+)|(0+))$"  //非正整数(负整数 + 0) 5. "^-[0-
大师级码师
2021/10/27
2.4K0
PHP 正则表达式及常用正则汇总
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。
V站CEO-西顾
2018/06/10
3.8K2
JS 限制输入框只输入数字和小数点
onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')"
week
2018/08/27
7.5K0
推荐阅读
相关推荐
input输入框内容规范正则总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文