创建投影
将历史数据扩展到未来。
开始预测
您现在已将 Metabase 指标存储中的数据导入到电子表格中。这形成了您的历史数据(或用财务术语来说,您的“实际”数据)。
在大多数模型中,下一步是创建您的 预测(也称为 预测)。请注意,预测是基于预期的行动路线,而预测是基于各种假设情况(但这两个术语通常可以互换使用)。
什么是预测?为什么需要做预测?
当你创建预测时,你试图预测某个系统在未来将如何发展。常见的例子包括
- 天气预报:预测未来几天某个地理区域的天气。
- 通过模拟感染患者数量随时间变化来预测流行病的传播。
- 模拟企业的客户增长。
创建预测通常有两个原因
- 为了决定如何 反应 结果。有了准确的天气预报,我可以决定是否明天去远足。或者在更极端的情况下,我可以在飓风来临前决定是否疏散。
- 为了决定如何 影响 结果。很难影响明天的天气,但有一些结果是可以影响的。如果你今天决定是否要额外投资 100k 美元用于营销活动,了解这将对未来客户数量产生多大的影响,可以帮助你决定该活动是否值得投资。
预测通常基于两个要素
- 历史观察。
- 了解系统是如何运作的。
预测与猜测有根本的不同。你可以猜测明天是否会有飓风,但这种猜测并不能成为决定是否疏散家园的充分理由。
相反,您可能更愿意依赖天气预报,气象学家根据对过去和当前天气条件的详细观察,并结合对天气模式演变(复杂)的理解来做出预报。当然,预报可能会出错,但预报越好,出错的可能性就越低。
示例:预测水库水位
在接下来的两个关于预测和情景的模块中,我们将通过一个例子来说明概念:管理水库的水位。
想象一下,您是该地区水库的管理员。当地居民使用水库的水用于饮用、洗衣、水球大战等。河流和运河随着时间的推移补充水库。
作为一名负责任的水库管理员,您会监控水位。您还希望预测水位随时间的变化。
预测水库水位可能看起来像是一个随机的例子,但请耐心等待。水库中水的流入和流出恰好可以作为订阅业务中客户流入和流出的一个很好的类比。
您水库中水在月底的基本数学计算是
期末水位 = 起始水位 + 雨水(来自河流)的流入 - 水的流出(流向居民)
假设您对每月平均流入的水量有很好的把握。您对预测流出部分感兴趣。
您的基本数学计算是
水的流出量 = 当地人口 * 每居民用水量
在电子表格模型中,您将设置如下
月份 | 1月 | 2月 | 3月 |
---|---|---|---|
当地人口 | 100,000 | 100,000 | 100,000 |
每居民月用水量,立方米 | 10 | 10 | 10 |
总月水流出量,立方米 | 1m | 1m | 1m |
如何创建预测
通常,您会从一个单一的预测开始,这是您对未来前景的中央观点。
回到我们的电子表格模型,我们已经有从Metabase导入的一堆实际数据。使用我们的水库示例,我们的电子表格看起来像这样
月份 | 1月 | 2月 | 3月 |
---|---|---|---|
实际(A)或预测(P) | (A) | (A) | (A) |
当地人口 | 100,000 | 100,000 | 100,000 |
每居民月用水量,立方米 | 10 | 10 | 10 |
总月水流出量,立方米 | 1m | 1m | 1m |
我们有3个时间序列(人口、用水量和总水流出量)。要创建我们的预测,我们需要预测每个时间序列。
识别并建模您的驱动时间序列
您如何预测这些时间序列?回到您最初创建预测的原因,您想了解的是月度水流出量。但单独预测流出量是困难的。通常,您会将流出量分解为其组成部分,直到您到达可以预测的部分。
在我们的情况下,我们将我们的指标分解为
水的流出量 = 当地人口 * 每居民用水量
我们可以用合理的准确性预测方程中的后两个变量
- 您查看当地研究,并观察到当地人口每年增长6%,预计将继续如此(大约每月增长0.5%,忽略复利)。
- 当您回顾过去的数据并与人口对比用水量时,您观察到每居民用水量一直相对稳定,为每年10立方米。
有了这些知识,您可以预测这两个驱动时间序列。
月份 | 3月 | 4月 | 5月 |
---|---|---|---|
实际(A)或预测(P) | (A) | (P) | (P) |
当地人口 | 100,000 | 100,500 | 101,000 |
每居民月用水量,立方米 | 10 | 10 | 10 |
总月水流出量,立方米 | 1m | ? | ? |
从这里,您可以预测您的依赖时间序列,即总月度水流出量,以下公式(见方程列)
月份 | 3月 | 4月 | 5月 | 方程 |
---|---|---|---|---|
实际(A)或预测(P) | (A) | (P) | (P) | |
当地人口 | 100,000 | 100,500 | 101,000 | A |
每居民月用水量,立方米 | 10 | 10 | 10 | B |
总月水流出量,立方米 | 1m | 1.005m | 1.01m | A * B |
总结一下,我们开始于我们想要知道的内容,即我们的依赖时间序列(月度水流出量),并将流出量分解为我们可以独立预测的组成部分,这些组成部分是我们的驱动时间序列。
什么是一个好的驱动时间序列?
本质上,一个驱动时间序列需要是你可以独立预测的东西。这里有一个判断的元素。对于当地人口,假设你拥有可靠的6%年增长率数据。把它留在那里似乎是合理的。
但如果你不能直接预测你选择的驱动因素,你需要将它们分解成它们自己的驱动时间序列。例如,你可能想将每户居民的水使用量分解成其自身的驱动因素
每户居民的水使用量 = 每户居民的饮用水 + 每户居民的平均后院面积 * 每单位后院面积的水使用量
请注意,您可以继续进行,将驱动因素进一步分解。决定走多远将决定您模型的复杂度。但这里有一个权衡。通常,您的模型越复杂,您将花费更多的时间来构建、更新和调试它——这些工作可能不会带来更好的预测。
选择您能影响的驱动因素也有帮助。例如,在一个财务模型中,产品的成本是一个好的驱动因素,因为您决定产品的成本。此外,您很可能希望看到价格变化的影响,所以使用产品成本作为驱动因素是个好主意。
预测驱动时间序列的方法
让我们来看看如何创建一个基线模型的预测。也就是说,您正在尝试尽可能地基于它们过去的行为了解来预测您的驱动因素。在下一模块中,我们将讨论如果您想偏离这个基线(例如,如果您想使用场景来创建对未来的不同看法)该怎么办。
在电子表格模型中预测驱动因素通常使用几种常见的预测方法。
恒定方法
恒定方法假设您的驱动因素不会随时间变化。
实现恒定方法的一种方式是假设数值将保持相同、单一的绝对值随时间变化
月份 | 3月 | 4月 | 5月 |
---|---|---|---|
实际(A)或预测(P) | (A) | (P) | (P) |
驱动指标 | 10 | 10 | 10 |
在电子表格模型中使用恒定方法
- 将指标的绝对值写在表格顶部的输入单元格中(在本例中为B2单元格)
- 将驱动预测单元格链接回该输入单元格
A | B | C | D | |
---|---|---|---|---|
1 | 假设 | |||
2 | 指标1值 | 10 | ||
3 | ||||
4 | 预测 | |||
5 | 月份 | 3月 | 4月 | 5月 |
6 | 实际(A)或预测(P) | (A) | (P) | (P) |
7 | 驱动指标 | 10 | =$B$2 | =$B$2 |
或者,您也可以通过取最近时期的平均值来使用恒定方法。常见的范围包括最后12个月、6个月或3个月。
月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
---|---|---|---|---|---|
实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
驱动指标 | 9 | 11 | 10 | 10 | 10 |
在电子表格模型中这样做
- 在预测单元格中使用平均公式,引用后续单元格
- 使用公式中的$符号锁定引用,并将其填充到公式中(如下所示)
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 假设 | |||||
2 | 指标1值 | 10 | ||||
3 | ||||||
4 | 预测 | |||||
5 | 月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
6 | 实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
7 | 驱动指标 | 9 | 11 | 10 | =AVERAGE($B2:$D2) | =AVERAGE($B2:$D2) |
移动窗口方法
移动窗口方法假设您的未来指标的变化速率与您最近的指标相同。
使用实际数据和预测数据的混合来做出下一个预测。例如,您可以取前三个月的平均值
月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
---|---|---|---|---|---|
实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
驱动指标 | 10 | 15 | 20 | 15 | 16.6 |
三个月移动平均预测将取最后三个月实际值的平均值,如果存在(例如,四月的预测)。但如果这些月份尚未发生,预测将取实际值和预测的平均值(例如,五月的预测)。
在电子表格模型中使用移动窗口方法
- 在预测单元格中使用平均公式,引用后续单元格。
- 在整个范围内填充,不要使用$锁定单元格引用。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 假设 | |||||
2 | 指标1值 | 10 | ||||
3 | ||||||
4 | 预测 | |||||
5 | 月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
6 | 实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
7 | 驱动指标 | 9 | 11 | 10 | =AVERAGE(B2:D2) | =AVERAGE(C2:E2) |
线性增长法
使用线性增长法,您可以预测您的数字以固定速率增长。对于我们关于水需求的模型,您可能想考虑您所在地区汽车洗车业务的数量。平均而言,每四个月会新开一家汽车洗车店,或者每月0.25家。
您的时间序列数据可能如下所示
月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
---|---|---|---|---|---|
实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
汽车洗车店 | 35 | 35 | 35 | 35.25 | 35.5 |
是否应该对分数进行四舍五入是个人的风格问题。有些模型师可能会对四分之一家汽车洗车的说法感到疯狂,但通常不进行四舍五入不会影响模型的结果。
在电子表格模型中这样做
- 在顶部创建一个输入单元格,其中包含您的指标每月增加的金额。如果您的模型按季度或年度工作,则使用您的指标每季度或每年增加的金额。
- 在您的时间序列预测单元格中,您将构建以下公式
=$D7$
:这里您是指回我们的实际值的最后一个数字,您预测的起点。+COUNTA($E6:E6) * $B$2
:这里您是将每月新开汽车洗车店的数量乘以您的预测月数。注意,您使用$锁定第一个范围的引用$E6:E6
,这样随着范围的扩展和计算月份的增加,数字也会增加。
- 将公式向右填充。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 假设 | |||||
2 | 每月新汽车洗车店数量 | 0.25 | ||||
3 | ||||||
4 | 预测 | |||||
5 | 月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
6 | 实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
7 | 驱动指标 | 35 | 36 | 36 | =$D$7 + COUNTA($E6:E6) * $B$2 | =$D$7 + COUNTA($E6:F6) * $B$2 |
指数增长法
有些指标会自然地呈指数增长。也就是说,每个月您都会在前一个月的价值上增加一个固定的百分比。为了说明我们关于水使用量的例子中的指数增长效应,让我们假设当地人口每月增长5%。
月份 | 3月 | 4月 | 5月 |
---|---|---|---|
实际(A)或预测(P) | (A) | (P) | (P) |
人口 | 100,000 | 105,000 | 110,250 |
在这个例子中,4月的价值代表了5月价值的5%增加,依此类推。
在电子表格中建模指数增长
- 在顶部创建一个输入单元格,其中包含您指标的月增长率。如果您的模型按季度或年度工作,则此金额为季度或年度增长率。
- 在您的时间序列预测单元格中,您将前一个单元格的值乘以1 +
月增长率
。您添加1,以便您将前一个单元格的值乘以105%,而不是5%。 - 将公式向右填充。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 假设 | |||||
2 | 人口月增长率 | 5% | ||||
3 | ||||||
4 | 预测 | |||||
5 | 月份 | 一月 | 二月 | 3月 | 4月 | 5月 |
6 | 实际(A)或预测(P) | (A) | (A) | (A) | (P) | (P) |
7 | 驱动指标 | 100,000 | 105,000 | 110,250 | =D7 * (1+$B$2) | =E7 * (1+$B$2) |
提取您的假设
大多数这些方法中都有假设
。例如,每月增加的新汽车洗车店数量,或当地人口增长率。在模型顶部创建一个假设
(或输入
)部分并将公式链接回这些单元格是良好的建模习惯。
本节为您提供了一个更新假设的单一位置,而无需逐个编辑每个公式。将数值输入直接写入公式称为“硬编码”,这是一种不良做法,因为它使得模型难以更新。
想象一下,你在一个公式中硬编码一个数字,然后把这个值填充到一行中的50个单元格中。然后,你为模型中的100行都这样做,每一行都有自己的输入。如果你想更改一个输入数字,你必须逐行查找,更新数字,然后确保没有遗漏任何旧数字的实例。与此相比,你需要更新单个输入单元格。
将你的假设放在一个地方,在查看下一模块中的场景时将非常有用。