用蒙特卡洛计划改进决策

栏目: 编程工具 · 发布时间: 6年前

内容简介:用蒙特卡洛计划改进决策

本文要点

  • 说明蒙特卡洛计划与基于速度的计划方法有怎样的差异
  • 列举两个例子,展示蒙特卡洛计划的好处,并予以探讨
  • 用Excel电子表格实现一个简单的蒙特卡洛示例
  • 看一个很酷、很快速判定人类评估的精确度的方法
  • 了解如何在组织中推广蒙特卡洛计划

在2010年,我通过用C#创建了一个定制的蒙特卡洛计划工具,帮助了一个初创企业IPO,这个 工具 可评估新的小型业务产品按期交付的可能性。这个工具的输出,是分布于可能的发布日期上的可能性,帮助软件交付团队及其领导做出决策权衡。当产品按期发布时,恰恰比IPO提前了几周,公司的首席技术官和创始人说,这是史上本公司按期交付的首款产品。在用蒙特卡洛做计划之前,这个公司用的是标准项目管理和敏捷计划法。

除了改进评估之外,蒙特卡洛计划还有助于改变制定计划相关的文化和思维方式。当C层管理者向工程副总裁询问一个数据时,能够就此数据的可信程度进行充满智慧的交流。该工程副总裁开始说,“发布是不确定日期的,它具有或然率。”这反过来带来重大变革,包括要跟进的指标(从速率到端到端的精细化管理),以及产品管理组是如何思考风险的。

这是蒙特卡洛带来更好的结果和决策的众多示例中的一例。蒙特卡洛计划基于历史数据形成完整的可能性分布。与此相反,标准敏捷计划法形成平均情况分析的直线。

蒙特卡洛计划的简单示例

让我们看一个蒙特卡洛计划的简单示例,来了解一下它的好处。

假设一支Scrum团队,它的速率范围从80到120呈均匀分布。这支Scrum团队想要知道在六个迭代版本中将完成多少个点。如果团队简单计算平均速率将得出6个迭代能完成600个点(6*100)。与此相反,蒙特卡洛会用20个样本来进行模拟:

用蒙特卡洛计划改进决策

结果显示,6个迭代有10%的可能速率为平均92,比平均分析显示的整整少了8%。这个数据马上引起产品负责人的兴趣,发起了一次有意义的讨论:“如果在发布日期到来时,待办事项中8%的内容还未完成会发生什么?如果这是不可接受的,我们有哪些选择可以拿出来探讨?”

这个可能性是如何计算出来的?蒙特卡洛采样了历史分布,在本例中是80到120的均匀分布。为绘制以上图表,我对此分布采样了20次。以下为其中一个样本:

用蒙特卡洛计划改进决策

这个样本由6个迭代构成,因为团队想要评估6个迭代的发布。在这个具体样本中,速率范围最低为91,最高为120。其平均值为108.5。在上个图片中,这个样本反映为X轴上的那个“108”块状条。

以下为另一个样本:

用蒙特卡洛计划改进决策

在这个样本中,速率范围最低为87,最高为113,平均值为95。

假设每个样本都是一种“未来的可能性”。蒙特卡洛从历史信息和恰当的权重创建这些未来的可能性。

蒙特卡洛最大的其中一个好处是,它适用于任何分布,甚至每个都是未知的也可以。在本样本示例中,分布是已知的,问题也足够简单,在6个迭代末期可能的分布有一个闭合解。然而,通常实际上没那么简单。

更复杂的蒙特卡洛计划示例

对于那些在真实世界中遇到的问题,不可能或很难快速用蒙特卡洛法得出封闭解。我在客户端遇到过这么一种现实情况,它极为常见,如下:

用蒙特卡洛计划改进决策

这个模型的关键部分:

  • 有两个产品开发团队在并行开发。每个团队的速率为100上下浮动20(均匀分布)。
  • 每支团队必须完成575个点。
  • 业务验收有95%的可能性在一周之内完成,有100%的可能性在两周内完成。
  • 这个目标是在13周里完成工作:6个迭代(12周)开发,一周为业务验收。

该项目按期完成的几率是多少?蒙特卡洛给出的结果是大约45%。

蒙特卡洛计划与任何直线评估都不近似

由于平均情况分析(比如由许多Scrum团队使用的基于计划的标准速率)比蒙特卡洛要更容易,那么很自然就会去想,是否有些平均情况直线评估和蒙特卡洛的结果近似呢?为验证这个可能性,我们将看针对这个更复杂的问题,在三种速率假定下会发生什么情况。

  • 最好的情况假定:项目速率=120个点
  • 平均的情况假定:项目速率=100个点
  • 最差的情况假定:项目速率=95个点

在这三种情况下,业务验收都花一周。很明显,在一开始时这三种评估的工作量相差就很远。最好的情况和平均情况假定下表示有100%的可能按期完成,然而最差情况下表示没可能按期完成。

既然最初评估相差很远,那么针对这些假定,多少迭代后得出的结果能与蒙特卡洛一开始得出的45%的或然率相接近呢?这里有20个样本运行的结果:

用蒙特卡洛计划改进决策

该图表显示:

  • 最佳情况分析(蓝线),直到迭代6,成功可能性都是 过于乐观
  • 平均情况分析(红线),直到迭代3,成功可能性也都是 过于乐观
  • 最差情况分析(绿线),直到迭代4,成功可能性都是 过于悲观

总之,没有直线与蒙特卡洛的结果近似。为什么会这样?置信区间的变化与时间平方根成正比,所以任何直线在较长时间周期上都会越来越远。此外,平均情况分析总形成一个单一的结果,要么如期完成,要么不能如期完成,这显然是不对的。

有没有一种方法,可以调整直线分析得出更好的结果吗?一些敏捷专家建议,创建直线近似数去形成置信区间。例如,取近五个迭代的最低的三个速率得出“悲观”评估,而取近五个迭代的最高的三个速率得出“乐观”评估。问题是,这些直线法的实际结果将处于低直线评估和高直线评估之间,而它们会随着时间的变化而变化,它不是恒定的。所以这些直线“低”和“高”的边界是不确切的。正如之前所述,置信区间的变化与时间平方根成正比,所以没有直线接近实际,除非是非常短的时段。

蒙特卡洛的优势

以下是我为什么喜欢蒙特卡洛模拟的原因:

  • 它们是向端到端模拟迈进的一步,是对公司运营和绩效特征的理解。最后,蒙特卡洛有助于回答这样的问题:加一倍的团队数量,或者加一倍的时间,哪个选择更好?
  • 蒙特卡洛针对成本、时间和范围(或其他别的东西)生成完整的可能性分布,它能改进决策制定。
  • 蒙特卡洛克服了标准敏捷计划法的重大缺陷:
  • 对于多支团队或有依赖的团队来说,基于速率的计划实践通常是无效的,因为速率根本就未涉及待办事项中的一个条目到底要花多长时间。而且,在单团队的情况下,基于速率的计划就是直线平均情况分析,它未提供对信心或变数的度量。
  • SAFe建议,投票决定对PI(程序增量)计划的信心:“一旦程序风险已被处理了,团队就对实现计划目标的信心投票。”虽然这种人文主义的计划方法值得赞赏,但它是不完备的,值得用定量的方法予以补充。
  • 未以严谨的方法处理依赖关系。
  • 像所有人类评估一样,在敏捷计划中采用的评估往往有严重的个人和组织偏见。

对蒙特卡洛的担忧

以下是我听说的几个常见的对蒙特卡洛法计划的担忧:

  • 未来与过去不同,由于样本取自历史数据,所以会形成不佳的结果。这可能是个非常技术性的问题,但我更愿意去简化它:系统要么是稳定的,要么是不稳定的。如果它是稳定的,那么历史样本就充分有效。如果系统是不稳定的,那么没有什么预测方法能使管理者足够满意。
  • 创建一个蒙特卡洛模拟很困难。它比做平均情况直线分析要难一些。但使用Troy Magennis提供的Excel电子表格可以容易一些。在下面的段落中,我将说明如何使用Excel去创建一个简单的蒙特卡洛模拟。
  • 高管不理解可能性分布。我同样有这样的体验。所以与其向高管们展示可能性分布,还不如找出关键决策点的可能性,然后这么去交流:“有15%的可能无法达成你的目标,你将无法获得回报。”
  • 使用评估的问题不是如何形成结果的,而是如何理解的。无论评估是如何产生的,这都是个非常共性的问题。然而,如果评估方法不是严格定量的,就会演变成政治活动和“管理者的预期值”。
  • 当没有历史数据时,蒙特卡洛是无效的。这一点儿都没错!在这种情况下,我经常建议团队把做计划和评估的时间降到最低,而是开始动手干起来,产出历史绩效数据。

对蒙特卡洛的终极反对意见是,在考虑计划和检查评估时,组织经常缺乏信心和共识,它并不能处理这种情况。缺乏信心和共识就邀请管理者在不考虑历史绩效的前提下设定目标。这种担心可以理解,我建议分别来处理。有许多达成共识的举措,比如分发“价值美元”,邀请干系人去购买特性或截止日期,这将揭示不同的假定和权衡倾向。一旦参与的每个人对当前现实和目标有了共同的理解,蒙特卡洛计划可能就适合了。

证明人类评估不精确

阻碍蒙特卡洛计划的一大障碍是,对人类评估的精确性的盲目自信。

这里有个简单的技巧,我拿来证明一个人类评估是精确的还是不精确的:

  1. 选择一个要予以评估的工作事项。在团队层面,通常会是个用户故事。在程序层面,通常会是个方案或工程。
  2. 选择一组将要进行评估的专家。在团队层面,几乎总是做这项工作的人。在程序层面,经常是一组高级工程师。
  3. 把专家分为两组,请他们分别对该工作事项予以评估。
  4. 定义度量的误差。举个简单的例子:设m为两个估值的平均值,x2为两个估值中较大的一个。该指标为x2/m - 1。例如,如果两个 估值为80和120,那么指标为20%(120/100 - 1)
  5. 在形成评估的成本超过其估值之前询问参与者,这个指标会有多差。针对在之前步骤中定义的指标,范围通常为10%到25%。
  6. 计算指标并汇报结果。

多半,结果会显示高于需要创建的有用的评估。这为讨论蒙特卡洛的估值,以及应对其太难操作的关注点提供了一个契机。在近期对400人的公司的培训活动中,我在大约30分钟里执行了这些步骤,一个故事的偏差为33%(也就是说,乐观估值是悲观估值的两倍)。

如果引入蒙特卡洛计划

蒙特卡洛计划可能不适用于所有的情况。如果条件具备,我喜欢这样去引入它:

  1. 理解现有做计划的实践。
  2. 说明现有方法和标准敏捷方法的缺陷。
  3. 使用公司的实例说明蒙特卡洛法的好处和不同。
  4. 量化商业收益。
  5. 推广蒙特卡洛计划的应用范围。

第一步往往会被忽视,但它是引入这种变革的关键组成部分(而且,实际上对于任何其他变革来说都是如此)。所幸,我从未遇到过一家享受它的计划方法或觉得结果高度精确的公司。实际上,在财富500强企业中,我为一些年度计划负责人提供过咨询,他们告诉我,“计划和实际就没什么关系!”在这种情况下,主要问题是获取历史计划数据,为工作体系建模。

用一个简单的电子表格体验一下蒙特卡洛计划

在Excel中可以使用randbetween和hlookup函数创建一个简单的蒙特卡洛计划电子表格。

公式看起来是这样的:

用蒙特卡洛计划改进决策

单元格A1、B1和C1包含数字1、2和3。把它们假设为最近的三个迭代。单元格A2、B2和B3是团队在每个迭代达成的速率。

第四行包含以下公式:

=HLOOKUP(RANDBETWEEN(1,3),$A$1:$C$2,2)

RANDBETWEEN生成一个1和3之间的随机数(因为这里有三个迭代)。调用这个随机数N,HLOOKUP返回第N个迭代的速率。所以第四行采样历史分布去创建另一个三个迭代序列。

你可以重复第四行许多次,作为你想要创建的直方图(可能性分布),然后做其他类型的分析。在本文开始我给出的这两个例子中,我把第四行重复了20次,创建了20个样本。大多数蒙特卡洛案例都使用超过1000个样本。

总结

蒙特卡洛计划采样历史分布以给出未来可能出现的严谨的、定量的结果。

相比标准平均情况直线敏捷方法,它具有巨大的优势,你可以使用一个简单的Excel电子表格开启蒙特卡洛之旅。

其他资源

如果你想要更深入地研究蒙特卡洛计划,可以查阅一下这些其他资源:

关于作者

用蒙特卡洛计划改进决策 Michael de la Maza 是一名Scrum联盟认证的企业教练(CEC)。作为一名敏捷咨询师,他主要为Paypal、State Street、edX、Carbonite、Unum和 Symantec提供服务。以前,他是Softricity(2006年被微软收购)的公司战略副总裁和Inquira(2011年被甲骨文收购)的共同创始人。它是《Professional Scrum with TFS 2010》和《 Why Agile Works: The Values Behind The Results 》的合著者。他持有麻省理工学院的计算机科学博学位。Michael是一名活跃的教练,还是BayALN的协办方,这是一个在旧金山的敏捷用户群。他热爱参与、创建和分享游戏,共同组织了2010年敏捷游戏大会、2011年敏捷游戏大会和2016年敏捷游戏西部大会。他就职于Scrum联盟的认证团队教练复核委员会和虚拟教练委员会。他热衷于指导Scrum Master和想要深入理解敏捷的敏捷教练。他还通过 Techstars Boston指导和投资初创企业。

查看英文原文: Monte Carlo Planning Improves Decision Making


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++Templates中文版

C++Templates中文版

David Vandevoorde、Nicolai M.Josuttis / 陈伟柱 / 人民邮电出版社 / 2008-2 / 69.00元

本书是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例3方面的有用资料,为读者打下C++模板知识的坚实基础。 全书共22章。第1章全面介绍了本书的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板......一起来看看 《C++Templates中文版》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具