数据分析中常见的"数据陷阱" !!!

简介: 数据分析中常见的"数据陷阱" !!!

辛普森悖论

做数据分析的人相信对辛普森悖论(Simpson's Paradox)早已耳熟能详,所谓辛普森悖论,通俗来说就是观测者在观测分组指标时得到了性质 A,但在汇总指标情况下却到了不一样甚至完全相反的性质 B。工作中辛普森概率非常常见,举个简单的例子:

甲乙两篮球队都出自 857 俱乐部,甲篮球队五个人与 NBA 全明星队作战十轮,一轮 10 分钟,得分高的队伍则认为获得该轮篮球赛的胜利。然而比赛结果甲篮球队只赢得了 2 场,其胜率为百分之 10。乙篮球队五个人和当地老年篮球队同样作战十轮,结果却拿下了九场对局,胜率为百分之 90。857 俱乐部数据分析员拿着下面这个简单的报表找到了篮球经理,经理决定让乙篮球队代表 857 俱乐部参加各大篮球联赛,对于经理的这次安排存在的潜在隐患有待商榷,但这种分配肯定是不合理的,仔细观察后发现甲篮球队的实力确实是有目共睹的。

640.png

篮球队的例子很容易看出问题所在,数据分析员并未考虑分组获取指标的背景,只是单纯地将分组得到的结果进行总体的比较,从而得出了不一样的选择。读到这里相信读者心中也有疑问,有谁会范这样的错误,这不是傻吗?而以上只是帮大家建立起对辛普森悖论的初步认识,接下来再给一个更具理论话的例子:

某公司要对旗下两款购物平台的用户留存进行性别分析,数据分析员说当日女生留存率为 42%而男生为 21%,女生的留存率是男生留存率的两倍,从而认为该公司旗下的购物平台更受女生喜爱,更能吸引女性用户的眼球。项目组经理却确认为,这样的运动商品购物平台,在性别上不应该出现这么大的用户留存差异,甚至男生的留存率应该高于女生,于是让数据分析员做一个完整的调查报告(如下):

640.png

很容易看出,对于 AB 购物平台,分别分析性别留存率的时候男生都是大于女生,但是总体分析时,男生的留存率却远远小于女生,这就是最能体现辛普森悖论的例子。

分析用户留存的例子说明了简单的将分组数据汇总分析是不一定能反映真实情况的。在本例中,可以清晰地看出女生偏爱选择注册 A 购物平台,而正好偏爱注册 A 购物平台的女生中选择留存的人数也占多数,就导致了女生总体留存量较大(分子大了),相反男生更偏爱注册 B 购物平台,但恰好 B 购物平台的留存人数少之又少,即使 A 购物平台中男生的留存率大,但是基数相对较少,导致整体留存量偏少(分子小了),所以会出现以上的分组总体观测结果相反的结论。在分析时需要具体讨论注册的新增用户对我的收益大还是用户的留存率对我的收益大,可在分析时根据注册用户的多少设置分析留存的权重,或者说分析留存率时性别因素对于这一指标根本毫无影响甚至受别的因素干扰,需要去分析更多的因素(具体分析某因素对某项指标的影响时可能用到概率统计中的统计假设检验,该部分内容后续可分享,本篇主要分享数据陷阱的基础知识)。

针对以上两个例子,都需要具体分析分组的情况下更多的因素,因此数据分析中如何避免辛普森悖论即可从此入手,除了运用组别权重分析各组对指标的影响外,还可以运用很多统计检验方法,所有的方法都需结合场景和实际情况进行分析。

罗杰斯现象

罗杰斯现象又称为Will Rogers悖论,这一悖论起源于美国喜剧演员 Will Rogers,他曾说:当俄克流民离开俄克拉荷马州并且搬到加利福尼亚州,他们同时提升了两个州的平均智力水平。这是什么意思呢?罗杰斯现象通俗来讲,就是将 A 组中的部分元素移动到 B 组中后,A 组和 B 组的统计水平同时上升。为什么会出现这种情况,举个例子如下:

640.png

A 组定义:新用户:冲高当日注册用户;回流用户:冲高当日回流用户;老用户:其他活跃用户 B 组定义:新用户:冲高前七天-冲高日注册用户;回流用户:冲高前七天-冲高日回流用户;老用户:其他用户 假设某款 APP 投入了一段促销广告,分别对广告投放当天的新用户平均消费额、回流用户平均消费额、老用户平均消费额进行比较。得到如下结果:

640.png

有人就此得出定论:投放该促销广告能够一定程度上促使用户消费......仔细推敲发现这样的结论是及其不科学的。从定义可知 A 组中的老用户被分到了 B 组的新用户和回流用户中,倘若 A 组中刚好处在前七天到冲高前日的用户消费低迷,拉低了 A 整体老用户消费的平均水平,而正好这段广告的投放非但促进用户的消费,反而让用户产生了厌倦心理从而削弱了用户的消费心理,导致 A 分组中出来的这部分“消费低迷用户”到了 B 组中反而成了拉高整体消费的用户群,就使得 B 组在 A 组的元素移到 B 组后,平均消费指标看似还在提升可事实却是我们刚刚说的广告让当日新增用户产生了厌倦心理且并未促进消费。

640.png

那如何避免罗杰斯现象呢,在如上的例子中,我们需要对比前后平均消费值升高的原因,找到原因后若确定是罗杰斯现象的产生,需要结合更多的因素来讨论某一行为的变化是否带给了我们想要的正向结果。

多重比较谬误

多重比较谬误简单来讲,就是假设在 A/BTest 实验中,我们需要分析行为 a 对整个群体的影响,此时比较 AB 两个不同群体的差异(假设两个群体分别呈现了几十个数据指标)时,我们从中找出了具有差异的指标后则认为行为 a 就是造成了这类指标差异的原因。刚学习数据分析的时候曾认为这类谬误也不是那么没道理,如果同样采取以上的例子,分析投放某广告对用户的行为有和影响,在进行 AB 实验后,发现在观测的众多指标中,对照组和实验组在用户注册性别比例上存在很大的出入,则我会认为投放这类广告对新的男性(或女性)用户更有吸引力。真实这样吗?如果只是通过这样的简单分析就开始进入全量用户的广告投放,对某一性别的用户做特别的宣传,容错率是特别低的,若实验结论错误,是会给个人和团队甚至公司带来很大损失的。下面将阐述对多重比较谬误的理解:

640.png

从概率论的角度对多重比较谬误的出现有了初步的认识,而在具体实验中,我们会通过假设检验的方式判断新的策略在小样本上的体现是否在大盘上也具有同样的效果。以显著性实验 T 检验为例,

640.png

假设 X1 表示实验组的用户新增,X2 表示对照组的用户新增,对于某实验采取 95%的置信区间,5%的假阳性概率(实验本身没有效果,但是计算出来结果是有效果的),此时计算 t 值检验 p 值与 5%比较,观测其是否显著。若 20 个指标中,在数据都正确的情况下,根据上图中假设不难推出,至少有一个指标是错误的概率为 1-95%^20 约为 64%,即在 20 个指标的实验中,至少有一个无效指标被错认为是有效的概率为 64%!

简单来说,多重比较谬误是进行多次假设检验时,整体第一类错误概率会随检验次数增加而提升。当我们发现一个指标 A 变差了,为了寻找指标 A 变差的原因,便广泛地寻找其他同样变差的指标,并且把发现的同样变差的指标 B 当成是指标 A 变差的原因,此时我们就产生了误判的概率,若我们观察的指标数量越大,误判的概率就越大。

工作中经常遇到有做推荐算法的同学为了让自己的算法今早上线,会投机的选择这样的无效实验指标来支撑自己的算法,这样是非常不科学且不负责任的做法,正确的做法是我们首先要足够了解自己的算法是怎样影响用户的,用户的某指标如何改变也有个大致的预期,从而再对比实验结果看是否有差异。而统计学上一共给出了两种修正策略:family-wise error rate(FWER)和 false discovery rate(FDR).

此时回顾一下假设检验的相关问题,假设一个对应一个机器学习中的二分类问题:原假设(640.png)为真以为着这一策略是无效的,原假设为假意味着这一策略是有效的(为什么原假设倾向于设定为我们更想要拒绝的假设即所谓的”小概率事件“,需理解第一类和第二类错误的实质以及在其在实验中对实际情况的影响,可结合下文理解)。在假设检验中如果得到 p 值小于显著性水平 α,则拒绝了原假设且认为这一策略是有效的,可称该次检验是“显著的”,若得到 p 值大于显著性水平 α,则同意了原假设认为这一策略是无效的,可称此次检验是“不显著的”。这个地方可能会有点绕,但是捋清楚假设检验的基本概念并且掌握实际实验中所面临的具体问题后,这些障碍便可迎刃而解。同样再这个例子中,由于一个策略既有可能是有效的,也有可能是无效的,我们也可能拒绝有效的,也可能接纳了无效的,所以针对一次检验我们可能得到四种可能的结果:

  • 若原假设为真但被拒绝(H0 is true but rejected)的概率为 α,即这一策略是无效的但被我们误认为有效,因此犯第一类错误(type Ⅰ error)的概率为 α;
  • 则原假设为真但被接受的概率为(1-α),即我们接纳”这一策略是无效的“这一说法;
  • 若原假设为假但被拒绝的概率为 β,即这一策略是有效的但被我们误认为无效的概率为 β,我们叫这种错误为第二类错误(type Ⅱ error),其概率为 β;
  • 则原假设为假但被接受的概率为(1-β),即我们接纳”这一策略是有效的“这一说法;
    很多说法会将第一类错误和第二类错误进行比较,我认为这样的比较是没有意义的,因为在具体的生活实践中,没有一个死板的说法认为拒真就一定比取伪要好,只是在大多数工作情况下会认为我想得到一个正向的策略,但是我不能接受得到一个本身就错误的策略还花大价钱去投入使用(谁都不想因此被领导叭叭),同样的例子,医院发明了一个新冠病毒探测仪,原假设就可以设定为探测者为无病(我希望探测仪探测出来有病的患者,所以原假设倾向于设定为我们要拒绝的事件),从而才会得出第一类错误是将没病的认为有病的,这是我们可以接受的,而第二类错误就是将有病的认为没病,你能接受那国家都不能接受。但是也不是说我们一点都不关注第二类错误,精益求精的我们希望 α 和 β 的错误都同样降到最小。
    而多重比较谬误是描述整体第一类错误的概率会随检验次数增加而提升。假设有 m 个人投放了此次策略,每个人选择这个策略后得到反馈这个事件都是独立的,因此每个人得到无效结果(原假设)的概率都是 α,假设 α=0.05,若 m=20,要保证 20 个指标都得到有效的结果,概率为 0.95^20,约为 35.8%,也就意味着至少有一个人得到无效结果的概率是 64%,所以我们的目标是如何降低这个 64%,即减少犯第一类错误的风险。因此 FWER 采用最简单的方式,将 n 次实验的 p 值对应记为p1,p2……pn,显著性水平为 α,所以只需要将pi<=α/n,简单说来就是将每个独立事件的显著性水平降低到 α/m,从而保证整体得到有效结果的概率变大。但是这个方法太直接,直截了当降低显著性水平会导致第二类错误的升高,FDR 相较于 FWER 就显得”缓和“许多。FDR(false discovery rate)错误发现率,表示在 n 次拒绝的结果中错误发现的比例的期望;
  • 若原假设为真但被拒绝的检验次数为 R;
  • 原假设为真但被接受的检验次数为 Q;
  • 原假设为假但被拒绝的检验次数为 W;
  • 原假设为假但被接受的检验次数为 X;

其中 R+Q+W+X=n,此时 FDR=E[R/(R+W)];该修正方法要让 FDR 不超过 α,很轻松可证 FDR=E[R/(R+W)] ≤((R+Q)/n)α≤α。观察((R+Q)/n)发现,对于显著性水平的设定只是在 FWER 的基础上乘了一个 R+Q 的值,这个值表示实验中原假设(策略是无效的)真实出现的次数。在具体工作中肯定不会知道 R+Q 的具体值,但是会根据之前的经验和一些别的工作指标来将 m 次检验(或者对指标的检验)进行排序,设置显著性水平为(α/n)*i,i 表示排序时的参数,这是控制多重比较谬误时比较常用的方式。

总结

方法论固然重要,但是结合实践才能让方法论烙印于心。以上为目前工作中有遇到过的一些数据分析问题及处理方式,曾经学习概率统计的时候,知识点会比较独立,总是不知道运用到具体场景这些东西是怎么展示的,一把抓地学习以为什么都是重点,但它也确实都是重点,因为受众群体不一样,A 知识点受众于机械,B 知识点受众于医疗都是不一定的,所以需要不断探索不断学习,不断结合实际。第一次写分享可能有些东西阐述不太能让人明白甚至产生歧义(平时我说话就这样),但是还是希望批评指正,大家共同学习共同进步!

相关文章
|
2月前
|
数据挖掘 PyTorch TensorFlow
|
22天前
|
机器学习/深度学习 人工智能 搜索推荐
某A保险公司的 数据图表和数据分析
某A保险公司的 数据图表和数据分析
48 0
某A保险公司的 数据图表和数据分析
|
3月前
|
数据采集 DataWorks 数据挖掘
提升数据分析效率:DataWorks在企业级数据治理中的应用
【8月更文第25天】本文将探讨阿里巴巴云的DataWorks平台如何通过建立统一的数据标准、规范以及实现数据质量监控和元数据管理来提高企业的数据分析效率。我们将通过具体的案例研究和技术实践来展示DataWorks如何简化数据处理流程,减少成本,并加速业务决策。
403 54
|
30天前
|
机器学习/深度学习 数据采集 数据可视化
如何理解数据分析及数据的预处理,分析建模,可视化
如何理解数据分析及数据的预处理,分析建模,可视化
44 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
40 5
|
3月前
|
存储 数据挖掘 数据处理
DataFrame探索之旅:如何一眼洞察数据本质,提升你的数据分析能力?
【8月更文挑战第22天】本文通过电商用户订单数据的案例,展示了如何使用Python的pandas库查看DataFrame信息。首先导入数据并使用`head()`, `columns`, `shape`, `describe()`, 和 `dtypes` 方法来快速概览数据的基本特征。接着,通过对数据进行分组操作计算每位顾客的平均订单金额,以此展示初步数据分析的过程。掌握这些技能对于高效的数据分析至关重要。
39 2
|
3月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
87 2
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
59 0
|
3月前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
3月前
|
供应链 数据可视化 数据挖掘
【python】python省市水资源数据分析可视化(源码+数据)【独一无二】
【python】python省市水资源数据分析可视化(源码+数据)【独一无二】