草庐IT

测试一下,读懂数据的能力,你有吗?

接地气的陈老师 2023-03-28 原文
​很多新人读不懂数据含义。对着报表,只会和复读机一样叨叨:“昨天销量100,今天销量120,增加20……”讲这些只要不是瞎子都能看得到的东西。也因此经常被笑话。咋办?!

读懂第一阶段:明指标

给一个数字:180,能看出含义不?

不能!

因为这就是孤零零一个数字,啥含义都没有。想读懂数据,至少它得是一个明确的数据指标。包含了指标名称,使用场景,计算口径。同样是180,我们换成:成年女性,身高180cm。是不是一下清晰很多了。

读懂第二阶段:立标准

而且很多人可能已经有了本能的判断:这个女生个子很高。这么判断,可能基于数据统计。根据2015年《中国居民营养与慢性病状况报告》,报告显示,成年男性平均身高167.1cm,女性155.8cm,也就意味着180cm已经超过大量男性身高了。可以定义为高。这么判断,也可能基于约定俗成的习惯。比如习惯来说,女生超过170已经算高个了,180更是超大个。肯定算是高了。

两种判断都没有错,其实都是进一步读懂数据的方法:统计法和习惯法。统计法基于数据统计上的差异进行高中低划分。习惯法则是把人们约定俗成的习惯量化。

从“成年女性,身高180cm”到“成年女性,个子非常高”是读懂数据的一个重要转折。因为180cm是一个客观数值,不能直接影响我们决策。但是“高”是一个判断结果,这个判断是会影响我们决策的。不信继续往下看。

读懂第三阶段:合场景

场景1:小明身高175,二姨很热情的介绍了一个180的女生来给他相亲。

场景2:小明在组织一次展会活动,需要5名模特,HR linda介绍了1个180女生给他。

问两种场景下小明的心情如何?

有些女生会嫌弃比自己矮的男生,很不幸,小明就是被深深嫌弃过的一名靓仔。所以小明遇到场景1估计就直接骂娘了:“早就说了不要找比我高的,你丫是诚心给我难堪吗!”——这就是无视别人要求的结果。

场景2估计小明会很开心。展会的模特嘛,就是要人高马大模样俏,这样才够排面。当然肯定出场费贵很多。这时候要是图便宜,随便找几个矮个子妹子,估计领导看到身高就要开骂了——给你们费用,不拿来贴门面,拿来擦屁股吗!

所以想再深度读懂数据,一定要结合具体场景。这里有两种做法:

1、基于业务逻辑推演

2、基于过往经验总结

两种方法,都需要对业务场景的深入了解(如下图):

读懂第四阶段:观态势

经过前三阶段,我们已知的信息是:

1、成年女性180cm属于:高

2、找模特需要个子:高

3、个子高+模样俏=价格贵

在这些基础上,再看数据,又会有新的解读。

比如你负责筹划展会,你下边的广告公司推荐的现场模特身高如下:

看完以后,你可能马上读出:这帮孙子又想黑我的费用!偷偷摸摸给我换了一批便宜的模特!是滴,这个解读就又比“诶呀,身高缩水这么多”更进一步,这就是第四阶段的解读。

同样的数据,如果你没有读出这个,直接发给了领导,领导看完可能立马解读出:这个新来的小伙子不懂业务呀,哪有排面活做得这么寒碜的。

同样的数据,如果领导没有处理,真的找了一批随便什么人去展会。你的经销商们看了以后,立马能解读出来:诶呀,今年这品牌实力是不是有问题呀,你看展台面积也缩水了,新品发布会也不热烈,模特都是凑数的,不行不行。

所有这些都是基于一个身高数据,所谓见微知著,其实背后都是有逻辑的推理(如下图):

读懂与瞎胡乱读的区别

当然,解读数据也是有限度的,过分解读,或者随便乱猜,都会导致错误理解。比如:

随便乱猜:你看模特都是美女,所以他们的老总肯定好色。

过度解读:你看这次请了九个美女模特,肯定有九款产品发布。

读懂与随便乱猜的最大区别,就是证据数量。比如上边经销商质疑品牌商实力,并不只是孤零零地看模特身高变化,也看了展台、看了新品发布会,有多个证据支持,解读自然接近真实。随便乱猜常常是毫无依据(好色的证据呢?)过度解读,常常是孤证不立(除了九个模特,还有其他证据吗?)。

当然并不排除我们获得了更多证据以后,有个新的解读。逻辑性+证据数量,是判断数据解读的唯一标准。只要有充足的证据+合理的逻辑,我们就有理由接受结论。

为啥企业里解读数据很难

为啥例子里解读数据很容易,可实际工作中很难呢?答:因为身高、相亲、展会模特这些例子,本身业务含义非常简单清晰,容易懂。可实际工作里,数据分析师常常脱离业务,对具体销售、运营、产品、售后等等情况一无所知,只能通过:销售额,毛利、活跃率、转化率等几个数字做简单猜测。

常见的问题,比如:

不懂业务含义:为啥相亲要关注身高?不是看有没有感觉吗?

不懂业务情况:为啥小明不喜欢高个子女生?高个子才是靓女啊!

不懂业务逻辑:为啥展会一定要找高个子模特?随便去几个人不行吗?

这样导致的结果,是无从对数据下判断。于是只能流于“昨天销量120,今天140,增长20,增长了16.7%”这种毫无意义的流水账。关键是,这些判断很有可能在业务看来是常识,所以在沟通中出现了“业务懒得说,数据不知道问”的尴尬场面。最后怪罪到数据分析师头上的时候,他还可怜巴巴地:我又没相过亲,我又没做过展会,呜呜呜……

所以想解读得深入、具体,就得贴近业务,学会从具体操作中抽象出数据含义,将业务方的判断量化。​

有关测试一下,读懂数据的能力,你有吗?的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  5. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐