因果关系分析方法

article/2025/5/10 21:09:37

因果关系推断,可以说是数据分析领域最难的问题之一,争吵很多年也没有定论。经常同学们被问到:“到底这个问题的原因是什么!”都会觉得分析起来很挠头,今天我们系统讲解下。

1 常见方法1:拆解法

最常见的用来求因果关系的方法,是拆解法。把一个结果指标,从多个角度拆解,找到影响它的原因。举例:昨天有4个推广渠道,一共获客100,今天只获客80,问为啥获客少了。

拆解法做法(如上图):

1、把总获客数,按四个渠道拆解,发现A渠道获客最少。得到结论1:因为A渠道少了,所以总获客少了。

2、把A渠道的获客,按获客流程拆解,拆解为展示页-落地页-转化三步,发现是转化环节少了,得到结论:因为A渠道的转化环节出了问题,所以总获客少了。

3、小结:因为A渠道转化环节出问题,这是获客少的原因。

看起来回答的很完美,原因找到了!

可这种答法经不起业务部门再问一句:那为什么A转化差了呢?

l 我也没改文案呀?

l 投放经费也没少呀?

l 前后只差1天,为啥差异这么大?

l 为啥只有A变差了,其他又不变呢?

一个都回答不上来……

所谓的拆解法,本质上只是通过细分,锁定了问题发生的位置。并不能找到元凶。所以常常被用来发现问题,而不是解释问题(如下图)。

2 常见方法2:相关系数法

统计学里有相关分析的方法。而且有个看起来很复杂公式(如下图)

很多同学一看就来劲了!于是把两个指标带进去算相关系数,而且还到处百度

● 相关系数0.99算不算大

● 相关系数0.9算不算大

● 相关系数0.8算不算大

● 相关系数0.7算不算大

● 反正相关系数足够大,就算是相关了!

这次有一个复杂的公式做支撑,应该很科学了吧

这么搞,很容易搞出来统计学领域经典的“龙脉梗”

1、中国GDP年年涨

2、我家门前的树年年涨

3、把两个数据带进去,算出相关系数0.99

4、所以我家门前的树是中国的龙脉!

相关分析、回归分析、聚类分析,本质上不是“分析”,而是计算。通过计算,得出两列数字或者几列数字之间的关系。至于这个关系到底有没有含义,计算公式本身就不负责解释了。因此套到现实中经常搞出来各种奇葩结果。

所有的统计学方法都有类似的问题,只能解释数据本身的关系,解释不了现实中的关系。更本质地看:是否所有业务行为,外部因素都能量化?完全不是。比如消费者对品牌的信任,比如产品体验好坏,比如文案感受,是很难量化到一个稳定、可靠的指标的。因此,用统计学方法,可以大范围地筛选过滤指标,但是很难推理出真实因果。

3 常见方法3:趋势分析法

既然复杂的方法不好用,有没有简单的办法?有!比如基于最朴素的感觉:既然A会引发B,那么A产生了B就该产生,A结束了,B会慢慢结束(或者B死掉)。人们就此总结出了因果推断四大原则。

四大原则:

1、原因发生在结果以前

2、原因发生以后,结果发生

3、原因持续期间,结果持续

4、原因消失以后,结果消失

这样的推断,符合人们的直观逻辑。更重要的是需要的数据少!只要一个指标走势就能看图说话了。所以非常好用。

BUT,这么干有个很大的问题,就是无法剔除杂糅因素,只能观察到影响最大的那个因素。更无法看到隐藏在背后的深层因素。比如观察外因的时候,只能观察到天气、限行这种明显的因素;观察内因的时候,只能观察到降价这种因素。其他小因素根本观察不到。

因此,这种方法常常用来做排除法,剔除不合理的借口。比如:“你说天气不好业绩就不好,那为啥人家天气差照样有业绩!”至于到底推动业绩的因素是啥?不知道,还得用其他方法分析。

4 常见方法4:控制变量法

想剔除杂糅因素,最好的办法就是分组测试,把样本塞到密封箱子里,然后一组组地测试效果。比如我想测用户对不同文案响应率,理论上,我应该用同样的商品、价格、转化位置,选同一批人,同一个渠道,然后可以开测了:

但是测试手段也有问题:

1、很难找到一模一样的两组人,完全剔除杂糅因素。

2、很难穷尽目标用户类型,因此测来测去可能都是同一类人的意见。

3、测试环境很难完全封闭,特别是要测试的是大促销、新品这种热门话题。4、很难在合法合规的情况下,完全搞差异化方案,涉嫌价格歧视与欺骗消费者,《反垄断法》和工商局都不是吃干饭的。

5、消费者永远是趋利的,他们会自己想办法突破测试屏蔽,最后选优惠最大的方案。

导致的结果,就是这种测试,适合即时反馈的+封闭信息渠道+个性化推送的场景。是滴,就是类似打车软件、短视频软件的场景。稍微反馈速度慢一点,比如电商平台搞大数据杀熟,很容易在消费者换几个手机号登陆比价的时候被发现。最后还是哪个便宜买哪个……

5 为什么常见方法不管用

综上,我们会发现,在因果推断领域,几乎没有一种方法完全可靠,包括很多经典的统计学方法和科学实验方法。为什么会这样?

因为本质上,企业经营是个社会科学问题,不是自然科学问题。自然科学领域,是有一些物理、化学、数学等基础原理支撑的,这些原理是稳定、科学、可量化的,因此可以通过数据统计+科学实验,慢慢地发现背后的自然规律。社会科学问题完全不是这样!社会科学问题本身就是多因素共同影响,容易被人操控改变,感性且冲动的。因此在社会科学领域,很难直接套用自然科学的方法解决问题。

再加上,企业里上班的人,都是有立场、有态度、有企图的。当他们张嘴问:“这个问题到底是因为什么产生的?”或者问“这个功劳到底是因为什么出来的?”的时候,他们的潜意识里装的就是:功劳是我的,多少得蹭一点,锅都是别人的,硬甩也得甩出去。因此即使有靠谱的方法,大家也不见得就愿意用,即使有结论,大家也会找其他理由搪塞。

所以面对因果推断的时候,要认真区分问题场景。如果涉及:设计、生产、研发等客观性高一些的部门,可以用各种科学方法认真推断。如果涉及:营销、运营、产品、销售这些主观性高的部门,可以参考陈老师在【数据分析终极一问:多影响因素下,到底咋归因?!】文章里教的方法,慢慢讨论。总之,结合商业场景,具体问题具体分析,才是解决问题之道。


http://chatgpt.dhexx.cn/article/5uOneyS6.shtml

相关文章

因果分析来了!

我是小z,也可以叫我阿粥~ 本文的分享主题为观测数据因果推断,希望通过本文可以让大家对观测数据因果推断有一个整体的了解,明晰当前观测数据因果推断的困境和主要处理方法,以及在特定问题中的一套通用解法。 具体将围绕以下3部分展…

因果分析:原理、方法论、应用

什么是因果分析? 因果分析(Causal Analysis)是分析彼此之间的因果关系。 因果推断(Causal Inference)是基于原因推结果,是因果分析的一部分。 因果分析是数据分析、数据科学中重要的方法,广泛应用于A/B实验,异常分析&#xff0…

C语言有负号的除法以及求余运算规则

举例说明 abc…d 1753…2 被除数除数商…余数 有负号的运算规则 求: -17除以5的商和余数17除以-5的商和余数-17除以-5的商和余数 答: abc…d 用a代表被除数,用b代表除数,用c代表商,用d代表余数. c的数值是|a|/|b|,c是正号还是负号由a和b的负号数量决定;d的正负号和a相同…

C语言取余问题

如果 % 左边的操作数是正数&#xff0c;则取余的结果为正数或零&#xff1b;如果 % 左边的操作数是负数&#xff0c;则取余的结果为负数或零。 例如代码运行如下&#xff1a; 主代码&#xff1a; #include<iostream> using namespace std; int main() {cout<<(13…

c语言怎么对大数求余,C语言:大数取余

大数取余数(数组) 今天做学校的oj时遇到一题&#xff0c;问题可见一下截图&#xff1a; 查遍各大论坛&#xff0c;都没有遇到合适的方法&#xff0c;普通方法不可用&#xff0c;要采用数组的形式。 被除数超过long long类型&#xff0c;不能采用常规思路&#xff0c;否则会出现…

C语言--求余问题

C在线工具 | 菜鸟工具 在c语言中&#xff0c;如果 a为一个四位数 那么a%1000/100是啥&#xff1f; 假设a的值为1345&#xff0c;那么当计算a%1000时&#xff0c;值为345 #include <stdio.h>int main() {int a 1345;int b a%1000;printf("%d",b); } 而345/…

软件开发流程图

文件下载https://download.csdn.net/download/weixin_43250197/12243113

嵌入式软件开发的特点和流程

嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件&#xff0c;被广泛应用于工业控制、消费电子、医疗、通信等领域&#xff0c;我们常见的手机、电脑、数码相机等都运用到了嵌入式软件技术。为了确保嵌入式系统的运行&#xff0c;嵌入式软件迅速崛起&#xff0c;在整个软件…

一套完整的软件开发流程是怎样的?

​做什么事都需要一个流程&#xff0c;软件开发也不例外。 那么&#xff0c;一个软件从无到有到底是怎么开发的&#xff1f;一个软件产品的结果为什么是这样&#xff1f;为什么开发的速度不能再快一点。为什么程序员大多秃顶&#xff1f;他们有那么忙吗&#xff1f;完整的软件…

汽车软件V流程开发

1.系统需求分析 调研并输出系统需求文档 2.系统架构设计 通常和第一步并行&#xff0c;并在系统需求文档中体现。第1和第2步都是系统层级的&#xff0c;下面应该分软件和硬件两个分支&#xff0c;这里我们只关注软件这个分支。 3.软件需求分析 输出软件需求文档&#xff0…

详解自动驾驶安全软件开发流程

1 引言 自动驾驶汽车开发越来越重视性能、质量和性价比&#xff0c;自动驾驶口碑成为新技术应用取得市场成功的关键&#xff0c;而口碑的建立依赖于相关软件开发流程、周期、时间和质量。一家汽车企业只有拥有或者其软件开发供应商具有成熟的软件开发团队、软件开发流程、可复用…

软件开发流程:需求评审流程

1 常规需求 图1 常规需求评审流程 2 非常规需求 图2 非常规需求评审流程 3 紧急需求 图3 紧急需求评审流程

软件开发流程知识概括

软件开发流程知识概括 软件开发流程简述开发流程详解软件开发流程涉及的图软件开发总结 软件开发流程简述 研发流程简述&#xff1a; 研发流程详解&#xff1a; 需求提出&#xff1a; ①这个环节主要是产品爸爸给我们提需求&#xff0c;每个需求都是他们从用户&#xff0c…

软件开发的一般流程是什么?

软件开发流程分为: 需求确认——概要设计——详细设计——编码——单元测试——集成测试——系统测试——维护 软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软…

python----列表操作

1. append(添加&#xff0c;添加的类型不变) a [1, 2] b [3, 4] c a.append(b) print(a--->, a) print(b--->, b) print(c--->, c)2. extend(末尾添加&#xff0c;会合并成一个列表) a [1, 2] b [3, 4] c a.extend(b) print(a--->, a) print(b--->, b) …

python——列表基础操作

1.列表的格式 列表的相关操作&#xff1a; 2.添加append()列表里面包含列表: extend和append的区别&#xff1a;append的最终列表中添加的是一个元素&#xff0c;extend的最终列表中显示的是追加的多个元素 第二种方式extend(): 指定对应索引新增数据insert&#xff1a; &am…

在python中、列表中的元素可以是_Python列表操作集合

对于python列表里元素的操作主要分为以下几个方面&#xff1a; 1、向列表里面加元素&#xff1b; 向python列表里面添加元素主要有三种方法&#xff1a; &#xff08;1&#xff09;append&#xff08;&#xff09; append()对于列表的操作主要实现的是在特定的列表最后添加…

python使用下标可以修改列表的元素值吗_Python列表操作最全面总结

1.列表添加元素 列表中可以使用append、insert、extend方法实现元素的添加。 append会把新元素添加到列表末尾 A = ["a", "b", "c"] A.append("d") print(A) 输出 [a, b, c, d] insert(index, object) 在指定位置index前插入元素objec…

Python列表操作常用函数、方法大全

目录 简介列表基本方法访问列表元素&#xff08;即索引&#xff09;index方法enumerate()函数 在列表中添加元素append方法insert方法 修改列表元素删除列表元素del语句pop()函数remove方法 列表排序sort方法sorted()函数reverse方法 列表长度 len()函数列表转换 列表高阶操作数…

Python列表操作方法详解

这篇文章主要介绍了Python列表操作方法详解,需要的朋友可以参考下. 本节内容 0、列表常用功能汇总1、定义列表2、访问列表中的元素3、切片4、追加5、插入6、修改7、拷贝8、删除9、扩展10、统计11、翻转12、排序13、获取下标值14、清空列表列表是Python最常用的数据类型之一,通…