草庐IT

我搭建了一个强大的数据预警模型

接地气的陈老师 2023-03-28 原文
​数据分析能主动做出预警,是所有人的终极期望。可现实是很惨淡的,经常是指标已经下跌了,业务部门忙得团团转了,数据分析才慢慢悠悠地分析“昨天为啥DAU下降30%”。

最后辛苦半天落个“我早知道了,早干啥去了!”的抱怨。那如何提前做出预警?今天系统讲解一下。

一、第一步:清晰角色

首先要清晰:预警是给到人的警报。因此谁需要听这个警报,是第一顺位要考虑的。在实际工作中,有四大类角色:

进行预警第一步,就是要先明确要预警的业务场景,把一个场景内所有相关责任人都考虑进来,避免漏了角色(如下图)。

二、第二步:收集动作

其次要注意:问题因人而起,也因人而终。因此第二顺位需要考虑的,是这四类角色对指标走势,到底有啥影响。要分门别类地收集这四类人计划开展的动作,从而为第三步的评估做准备(如下图)。


注意:收集影响动作,是有顺序的,应该从高层→前台→中台→后台。

因为这是这四类人影响指标的顺序是这样的:

  • 高层定的目标,决定了前台执行难度
  • 前台执行质量,决定了中台辅助难度
  • 实际业绩结果,决定了后台支撑难度
  • 后台支撑好坏,决定了问题是否扩大

在工作中,这四个环节环环相扣。如果配合得好,即使出现问题,也能化险为夷。如果配合得差,则相互拖累,越做越错(如下图)。


在实际工作中,并不是一个简单清晰的工作闭环从头做到位,然后再做下一个。每个部门都是一堆工作同时在进行。因此,收集部门动作并非一蹴而就的,而是需要有畅通的信息渠道,特别是当指标开始出现问题苗头时,业务部门做出的应激反应,要有一定程度了解。这样才能更好地辅助判断,做出准确警报。

三、第三步:数据评估

有了第二步动作收集,可以开始第三步数据评估。数据评估是预警的最关键一步,是避免执行期间看到数据波动脑袋空空的关键。

之所以能提前感知指标波动的风险,是基于:过去发生的未来会重现,这样一个简单的道理。因此,有必要对过程发生过什么,进行深入评估。(如下图)

这里涉及多种具体分析方法,之前文章都有分享,不再一一赘述了。

四、第四步:做出预警

有了以上准备,可以做出预警了。预警模型建立后,从制定计划阶段开始,就能开始运作。并且贯穿定方案、做执行、做复盘的各个阶段,并且涵盖了主力、辅助的角色(如下图)。

比如制定了销售目标,那么:

定方案阶段:销售的方案(包括销售计划、人力配置、配套物料/辅销品)是否能支撑当前目标?如果支撑不住,这时就能直接预警,提醒问题。

做执行阶段-作为主力的销售:是否各销售团队执行到位?执行不到位是谁没有到位?影响多少大盘?作为主力角色,只要其下某些分支出现问题,都是要直接发出预警的,避免问题恶化。

做执行阶段-作为辅助的供应链:达标率太好的情况下,是否购货充足?达标率太差的情况下,是否有积压风险?如果销售表现好,但关联的辅助部门马上面临缺货风险,此时也要及时预警!

注意:在过程中预警的时候,要考虑业务部门应激行动。比如有可能业绩很好,库存马上要断,此时应了解是否有补货计划,如果有,在预警时要提及此时,并且分乐观(100%按时完成计划)、保守(50%或更少完成计划)、悲观(无法完成计划),分别给出预警,以及预估结果(如下图)。

这样的预警,给管理层的体验非常好

1、管理层能通过分析师的工作,掌控业务全局。

2、在定方案阶段就能预知风险,从而做充足的准备。

3、在过程中,不但能看到预警数值,而且能大概锁定问题方向,减少了过程中被“打闷棍”的感觉。

4、看到预警结果的时候,能同步看到预期处理方案,从而快速做出决策判断。

这样,比事后看到诸如“DAU跌了一大截”“销售连续4天不达标”等结果以后再问为什么,体验好太多了。理想的状态下,可能只要一两个关联指标变差,就能马上感知到主指标跳水的风险。

五、数据预警的错误姿势

数据预警的错误做法,当然是指望一个神威无敌大将军模型,能把所有指标100%预测准确。实际影响指标的因素太多,且外部环境压力,内部主动行为,都很难量化。因此完全把宝赌在靠着极其有限的几个数预测的模型,完全不靠谱。

真正靠谱的做法,是数据分析师保持高度的消息灵通,按照上文的四个步骤,提前做好准备,才能应对变化。未卜肯定先知不了,但是卜过,就有机会发现问题。

很多不懂行的人,会以为数据真的能让人开天眼般洞察一切。实际上恰恰相反,一个数据分析师,得先开天眼,对公司情况了若指掌,之后才能对数据走势做出判断。

这一点切记切记。​

有关我搭建了一个强大的数据预警模型的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  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 - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  9. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  10. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

随机推荐