思码逸关钦杰:聊聊研效管理中的数据操纵

3月25日,思码逸咨询总监、研发过程提效专家关钦杰在 QECon 质效城市论坛【深圳站】分享了主题为《聊聊研效管理中的数据操纵》的演讲。

以下内容根据关钦杰老师分享内容整理:

在生活中,当我们去描述客观事实的时候,我们经常要用数据说话,比如,盐少许,就不如说盐 2 克更加科学精准。但是反过来我们也会发现,有时候数据不变,但说法不一样,结果和信息也会发生偏差。

我们今天也来聊一个相对轻松有趣的话题:研效管理过程当中数据操纵有哪些?我们有哪些反操纵的方法?数据本身不会说谎,但如何去呈现,传递的信息和结果可能会发生很大的一个反差

相关性不等于因果关系

首先是一个有意思的例子,现实生活当中我们经常说“鱼和熊掌不可兼得”,那我们来看这幅图,横轴代表品质,纵轴代表颜值,大家觉得这两组数据放在一起,它有相关性吗?显然是没有相关性的。

既然长得帅和品质好,没有相关性,那在单身的男女去找伴侣的时候,肯定要找一个又帅品格又好的。但扎心的现实是什么呢?我们去看这组数据。

在现实当中,我们不愿意和又丑又渣的人约会,就会剔除一部分样本。同时双方都有选择的权利,也有人可能会不愿意和你约会,又剔除了一部分数据之后,数据发生了变化——颜值和品质之间出现了负相关,也就是说越帅的人,具有“海王”体质的可能性相对高。这就是伯克森悖论

图片

伯克森悖论是说当我们去把所有的样本总和放在一起看的时候,你会发现这些数据之间不具备相关性。但是当机会不同的时候,它会造成一种机会上的相关性。选择机会不一样,会造成相关性也发生很大的变化。伯克森悖论时刻提醒我们,我们的直观感觉总是建立在我们能够注意到的现象之上的,但真实世界包含了很多被我们忽视的现象,要了解真实的情况,就需要把忽视掉的情况都考虑到。

接下来是实际研发管理中的一个实例,我们用了两组数据,一组是每周的加班时长,统计加班时长跟产出之间是否相关。结果显示,加班时长和产出之间并没有非常强的正相关关系。在标注出的红色区间中,一定的加班时长范围内产出量呈现聚集性分布。这说明卷更长的加班时间,对产出的影响可能是不大的。

图片

另一组数据也是大家比较关心的两个参数,一个是生育率,一个是房价。调查发现房价和生育率之间是很明显的负相关。对此,大家有两种解读。第一种解读是说,房价太高了,大家买不起房子所以就不生小孩;第二种解读是,在很多一二线城市,聚集了一些高收入的人群,他们的收入足以负担房价,但因为职业工作忙碌的原因,在30岁之前生小孩的概率非常低,因而也导致了这种负相关。

图片

这也就告诉我们,相关性不一定等于因果关系

在一些场景实例中,需求量与代码量也并不一定呈正相关,那可能会出现产品抱怨需求交付慢、研发委屈天天加班的情况,我们会问:研发的工作量都去哪了?这时,我们可以通过数据去做下钻分析:通过 commit message,将每一个commit对应到一个任务上去,这样可以清晰地看到每一个 commit 的目的和工作量,研发团队实际上在需求变更上花费了大量的工作量,而这些返工工作量也挤压了完成新需求开发的工作量。类似的下钻分析可以让我们更清楚地知道如何进行需求管理,让需求更稳更快地交付。

图片

因此,在实际的工作当中,当我们去看到一组数据的时候,不要马上为这组数据它是正相关还是负相关而欢呼,因为有相关性的两组数据,并不一定有因果关系。

百分比陷阱

谷歌曾经遭到公众质疑,认为谷歌搜索返回的结果当中有假新闻和虚假信息。对此,谷歌的一名副总裁回应说,日常搜索中确实有一小部分查询会返回误导性的内容,但是占比很小,只有约0.25%。乍一听,这个数字很小,问题好像也并不严重。但谷歌每天要处理50亿次搜索,0.25%意味着,每天有1200多万次搜索会返回虚假信息,足以造成较大的负面影响,并不是一个小问题。

谷歌副总裁的说法其实是在利用百分比的方式弱化问题。百分比对同一个数据,在表述上也是“可大可小”的,完全看你想强调什么。比如某个地方的消费税,从购买价格的4%提高到了6%,可以说是增长了2个百分点,也可以说是增长了50%,因为花同样的钱,要交的税比原来确实多了50%。

但这两种说法,给人的感觉完全不一样,如果我想让人觉得增税幅度微不足道,就可以说只增加了2个百分点。如果我想让人觉得增税幅度很大,就可以说税率增加了50%。这也就意味着,需求交付率可能是一个伪指标。为什么呢?我们需要问两个问题:

第一,需求的大小可比吗?

我们的需求交付率是多少?迭代的百分比是多少?这个百分比是可以比较的吗?未必,因为需求的复杂度不一样,拆分的颗粒度不一样,不见得交付了10个需求就比5个需求的工作量大。

第二,前置时长平均值可信吗?我们经常会看到说需求的交付前置周期,前置时长是多少天?需求的平均交付时长是13.5天,但我们把数据标准从均值改为80分位/85分位数,会发现大多数需求交付周期长达21天,比13.5天多了差不多50%,是非常大的差异。

为什么这两个数据之间有这么大的差异?我们来看一下场景实例。这是不同的产品线和不同时期需求的实际规模,也就是对应到我们所说的代码当量。

图片

我们用代码当量去校准需求的颗粒度。代码当量是在抽象语法树基础上计算开发工作量,可以挤压掉代码行统计水分,有效地去除编码过程中的不良习惯和噪音,比如空行注释等等不良的操作习惯。我们在这里将代码当量作为一个类等比的单位。即大家有统一认知的、更加接近实际开发工作量的单位,可以用来校准需求的颗粒度。

第一个维度是稳定性。当需求颗粒度在450当量以内时,不会受到太多需求变更的干扰,交付的速率相对来说更高,稳定性相对高。第二个维度是质量。需求颗粒度大于2500当量,重点缺陷密度呈现指数增长。

所以在这个过程中,我们需要给组织提供一个可以校准的方法,然后再利用历史数据得到一个最优区间,帮助我们去指导需求的颗粒度拆分。在拆分后落到实际研发的过程中,我们如何去规划也取决于估算标准故事点是否合理,需要我们对历史结果进行校准。

警惕数据删失

在前面的部分我们讲到,百分比和均值都有一定的陷阱,再去看数据时,需要多当心,深入地思考。那么我们还可以做哪些下钻分析?接下来我们来看第三个典型的数据操纵——警惕数据的删失。

在《拆穿数据胡扯》这本书中有一个有趣的例子,是关于死亡年龄与音乐类型的曲线,即从事的音乐类型与寿命之间的相关性。我们看到,从事传统音乐类型(如布鲁斯、爵士乐、福音音乐等)的音乐人似乎是比较安全的,而新风格的音乐表演(如朋克、金属,尤其是说唱和嘻哈)看起来非常危险。

而实际上是:

  • 导致这些数据有误导性的原因是右删失——在研究结束时仍然活着的人被从研究中删除了。

  • 说唱和嘻哈属于新的音乐类型,最多40多年的历史,大多数音乐人从20几岁开始从业,所以大多数人都健在。

  • 相比之下,爵士乐、蓝调、乡村等音乐已经存在一个多世纪了,所以多数人活到了80岁甚至更久。

图片

由于这个数据中剔除了健在的人,只把去世的人的数据拿进来了,所以导致这个数据看起来非常恐怖,不完整的数据统计周期会导致数据样本有这样大的偏差。

在场景实例中,也有样本范围选择偏倚的问题,比如可能会遇到,近一年半生产率呈现下降趋势,而近半年生产率呈现上升趋势。如何去反操纵呢?我们给出的反操纵术关键词是:不以高低论英雄。而是向外看水平,与行业相比,处于什么样的水平;向内看变化,与历史比,发生什么变化。

以上,我们引用了一些比较有趣的例子,大家可以结合现实中的实例去进行数据洞察以及反操纵的思考。

总结

  • 抽样偏差可能使无关数据间呈现相关性。

首先我们要解决抽样偏差的问题,如果要通过大样本分析得到清晰数据,我们需要解决抽样偏差和样本偏差本身的一些问题,抽样偏差有时候会使无关的数据呈现出某种相关性。

  • 相关性不等于因果关系

  • 为核心指标建立衡量健康度的指标阀

  • 不要光看均值,要结合大多数看

  • 不以高低论英雄,向外看水平,向内看变化

数据从来都不会说谎,但也不会说出全部真相。在这个时代我们去谈研发数字化的建设,更便捷地、更快速地获取了大量的数据的情况下,这些数据怎么呈现、怎么展示、怎么保证它的健康度,是我们未来很长一段时间需要不断去关注和思考的一个重要问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Source Insight4.0】解决注释中文乱码

本来用的好好的,结果今天创建一个新的项目就出现注释中文乱码!!! 然后上网查找说要修改为【Default encoding” :改成System Default(Windows ANSI) 或者Chinese Simplified(GB2312)】但是我的并没有效果。 最后是选…

Spring Boot Logging中文文档

本文为官方文档直译版本。原文链接 Spring Boot Logging中文文档 引言日志格式控制台输出彩色输出 文件输出文件轮转日志级别日志组使用日志关机钩子自定义日志配置Logback 扩展特定配置文件的配置环境属性 Log4j2 扩展特定配置文件的配置环境属性查找Log4j2 系统属性 引言 Sp…

Frida05 - 高级API用法

参考文档 https://api-caller.com/2019/03/30/frida-note/ https://frida.re/docs/javascript-api/#frida 数组打印 测试代码: private static class Bean {String a;int b;float c; }private void test() {Bean[] beans new Bean[3];beans[0] new Bean();be…

深度学习笔记_6经典预训练网络LeNet-18解决FashionMNIST数据集

1、 调用模型库,定义参数,做数据预处理 import numpy as np import torch from torchvision.datasets import FashionMNIST import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn.functional as F im…

Redis——Redis常用命令

Redis提供了丰富的命令,可以对数据库和各种数据类型进行操作,这些命令可以在Windows和Linux中使用。 1、键值相关命令 1.1、KEYS KEYS用于返回满足pattern的所有key,pattern支持以下通配符: *:匹配任意字符。&…

Python教程81:函数的位置参数、默认参数、动态参数、关键字参数(入门必看)

1.形式参数(Formal Parameters)和实际参数(Actual Parameters)是函数或方法定义和调用过程中的两个重要概念。举个例子,在下面的greet函数中,当我们调用greet(“李白”)时,"李白"就是…

electron这样使用更安全

背景: electron大家平时为了方便使用,或是一些网上demo的引导,会让渲染进程的业务界面支持直接使用nodejs,这种开发方式有一定的安全隐患,如果业务界面因为xss之类的漏洞被注入其他代码,危害非常大&#x…

Spring之容器:IOC(3)

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

华为云CodeArts Repo常见问答汇总

1.【Repo】codearts Repo最大支持上传文件大小 答&#xff1a;参考链接 https://support.huaweicloud.com/productdesc-codehub/codehub_pdtd_0005.html • 单文件上传大小限制&#xff08;评论中上传附件&#xff09;<50MB。 • 单文件上传大小限制&#xff08;代码…

某联合产权交易所持续购买监控易产品的维保服务,提升IT运维保障能力

在信息化时代&#xff0c;企业信息化的程度已经成为影响其核心竞争力的重要因素。某联合产权交易所&#xff08;以下简称“交易所”&#xff09;作为行业领导者&#xff0c;一直以来都积极推进信息化建设&#xff0c;致力于提升运维管理水平&#xff0c;以适应日益激烈的市场竞…

Rust 嵌入式开发

Rust 进行嵌入式开发: https://xxchang.github.io/book/intro/index.html # 列出所有目标平台 rustup target list# 安装目标平台工具链 rustup target add thumbv7m-none-eabi# 创建工程 cargo new demo && cd demo cargo add cortex-m-rt cargo add panic-halt carg…

二十九、获取文件属性及相关信息

二十九、获取文件属性及相关信息QFileInfo QFileInfo 提供有关文件在文件系统中的名称 位置 &#xff08;路径&#xff09;、访问权限及它是目录还是符号链接、等信息。文件的大小、最后修改/读取时间也是可用的。QFileInfo 也可以被用于获取信息有关 Qt resource . QFileInf…

科技的成就(五十四)

511、线路板按层数来分的话分为单面板&#xff0c;双面板&#xff0c;和多层线路板三个大的分类。线路板按特性来分的话分为软板(FPC)&#xff0c;硬板(PCB)&#xff0c;软硬结合板(FPCB)。是当代电子元件业中最活跃的产业&#xff0c;其行业增长速度一般都高于电子元件产业3个…

算法模板之双链表图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️使用数组模拟双链表讲解1.1 &#x1f514;为什么我们要使用数组去模拟双链表…

使用java调用python批处理将pdf转为图片

你可以使用Java中的ProcessBuilder来调用Python脚本&#xff0c;并将PDF转换为图片。以下是一个简单的Java代码示例&#xff0c;假设你的Python脚本名为pdf2img.py&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

Powershell summaries with types of scales of summaries

tiny,small,medium, large and huge scale of Powershell summaries I) many kinds of Tiny summaries of Powershell1.1) Powershell能干嘛&#xff1f; I) many kinds of Tiny summaries of Powershell 1.1) Powershell能干嘛&#xff1f; 此外&#xff0c;关于PowerShell脚…

Java数组(2)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Kotlin 笔记 -- Kotlin 语言特性的理解(二)

都是编译成字节码&#xff0c;为什么 Kotlin 能支持 Java 中没有的特性&#xff1f; kotlin 有哪些 Java 中没有的特性&#xff1a; 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…

图像与视频压缩算法

图像压缩是通过减少图像数据量来降低图像文件的大小&#xff0c;从而减少存储空间和传输带宽。有多种图像压缩算法&#xff0c;它们可以分为两大类&#xff1a;有损压缩和无损压缩。 无损压缩算法&#xff1a; Run-Length Encoding (RLE): 这是一种简单的无损压缩方法&#x…

西蒙子S7协议介绍

西门子的S7 协议&#xff0c;没有仍何关于S7协议的官方文档&#xff0c;是一个不透明的协议。关于S7的协议介绍&#xff0c;大都是非官方的一些七零八落的文档。 1. S7的通信模型 西蒙子S7 通讯遵从着基于TCP 的 Master&#xff08;client&#xff09; & Slave&#xff0…