内容简介:用蒙特卡洛计划改进决策
本文要点
- 说明蒙特卡洛计划与基于速度的计划方法有怎样的差异
- 列举两个例子,展示蒙特卡洛计划的好处,并予以探讨
- 用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%的可能无法达成你的目标,你将无法获得回报。”
- 使用评估的问题不是如何形成结果的,而是如何理解的。无论评估是如何产生的,这都是个非常共性的问题。然而,如果评估方法不是严格定量的,就会演变成政治活动和“管理者的预期值”。
- 当没有历史数据时,蒙特卡洛是无效的。这一点儿都没错!在这种情况下,我经常建议团队把做计划和评估的时间降到最低,而是开始动手干起来,产出历史绩效数据。
对蒙特卡洛的终极反对意见是,在考虑计划和检查评估时,组织经常缺乏信心和共识,它并不能处理这种情况。缺乏信心和共识就邀请管理者在不考虑历史绩效的前提下设定目标。这种担心可以理解,我建议分别来处理。有许多达成共识的举措,比如分发“价值美元”,邀请干系人去购买特性或截止日期,这将揭示不同的假定和权衡倾向。一旦参与的每个人对当前现实和目标有了共同的理解,蒙特卡洛计划可能就适合了。
证明人类评估不精确
阻碍蒙特卡洛计划的一大障碍是,对人类评估的精确性的盲目自信。
这里有个简单的技巧,我拿来证明一个人类评估是精确的还是不精确的:
- 选择一个要予以评估的工作事项。在团队层面,通常会是个用户故事。在程序层面,通常会是个方案或工程。
- 选择一组将要进行评估的专家。在团队层面,几乎总是做这项工作的人。在程序层面,经常是一组高级工程师。
- 把专家分为两组,请他们分别对该工作事项予以评估。
- 定义度量的误差。举个简单的例子:设m为两个估值的平均值,x2为两个估值中较大的一个。该指标为x2/m - 1。例如,如果两个 估值为80和120,那么指标为20%(120/100 - 1)
- 在形成评估的成本超过其估值之前询问参与者,这个指标会有多差。针对在之前步骤中定义的指标,范围通常为10%到25%。
- 计算指标并汇报结果。
多半,结果会显示高于需要创建的有用的评估。这为讨论蒙特卡洛的估值,以及应对其太难操作的关注点提供了一个契机。在近期对400人的公司的培训活动中,我在大约30分钟里执行了这些步骤,一个故事的偏差为33%(也就是说,乐观估值是悲观估值的两倍)。
如果引入蒙特卡洛计划
蒙特卡洛计划可能不适用于所有的情况。如果条件具备,我喜欢这样去引入它:
- 理解现有做计划的实践。
- 说明现有方法和标准敏捷方法的缺陷。
- 使用公司的实例说明蒙特卡洛法的好处和不同。
- 量化商业收益。
- 推广蒙特卡洛计划的应用范围。
第一步往往会被忽视,但它是引入这种变革的关键组成部分(而且,实际上对于任何其他变革来说都是如此)。所幸,我从未遇到过一家享受它的计划方法或觉得结果高度精确的公司。实际上,在财富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电子表格开启蒙特卡洛之旅。
其他资源
如果你想要更深入地研究蒙特卡洛计划,可以查阅一下这些其他资源:
- InfoQ 文章:#利用蒙特卡洛模拟为未评估的项目制定计划
- 视频: 蒙特卡洛计划
- 演讲: 蒙特卡洛计划(10页幻灯片 )
- 演讲: 蒙特卡洛计划(20多页幻灯片)
- 书籍: 《预测和模拟软件开发项目》
- 网站: 专注的目标 (Troy Magennis) .
- 网站: 可付诸行动的敏捷 (Daniel Vacanti) .
关于作者
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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Linear Optimization
Dimitris Bertsimas、John N. Tsitsiklis / Athena Scientific / 1997-02-01 / USD 89.00
"The true merit of this book, however, lies in its pedagogical qualities which are so impressive..." "Throughout the book, the authors make serious efforts to give geometric and intuitive explanations......一起来看看 《Introduction to Linear Optimization》 这本书的介绍吧!