创建预测

将历史数据扩展到未来。

Creating projections

开始你的预测

你现在已将数据从 Metabase 指标存储导入到电子表格中。这构成了你的历史数据(在财务术语中称为“实际数据”)。

在大多数模型中,下一步是创建你的预测(也称为预报)。请注意,预报基于预期的行动方案,而预测基于各种假设情况(但这两个术语经常互换使用)。

什么是预测?为什么要进行预测?

当你进行预测时,你是在尝试预测某个系统未来将如何发展。常见示例如下:

  • 天气预报:对未来几天特定地理区域天气的预测。
  • 通过建模随时间变化的感染患者数量来预测流行病的传播。
  • 建模业务的客户增长。

通常有两个原因需要进行预测:

  1. 决定如何应对结果。 掌握准确的天气预报,我可以决定明天是否去徒步旅行。或者在更极端的情况下,我可以决定是否在飓风来临前撤离。
  2. 决定如何影响结果。 很难影响明天的天气,但有些结果你可以影响。如果你正在考虑今天是否额外花费10万美元用于营销活动,了解它未来对客户数量可能产生的影响,可以帮助你决定该活动是否值得投资。

预测通常基于两个要素:

  1. 历史观测。
  2. 理解系统如何运作。

预测与猜测有着根本的区别。你可以猜测明天是否会有飓风,但这种猜测并不是决定是否撤离家园的好理由。

相反,你更愿意依赖天气预报,气象学家根据对过去和当前天气状况的详细观测,结合对天气模式如何演变的(复杂)理解来制作预报。当然,预报可能会出错,但预报越准确,出错的可能性就越低。

示例:预测水库水位

在接下来的两个关于预测和场景的模块中,我们将通过一个示例来阐述概念:管理水库水位。

想象一下你是你所在地区水库的管理者。当地居民使用水库中的水进行饮用、洗涤、水球大战等等。河流和运河会随着时间补充水库。

作为一名负责任的水库管理者,你需要监测水位。你还希望预测水位如何随时间变化。

预测水库水位可能看起来是一个随机的例子,但请耐心听我们解释。水流入和流出水库的情况,恰好很好地类比了订阅业务中客户的流入和流出。

月末水库水量的基本计算方法是:

期末水位 = 期初水位 + 雨水流入量(来自河流)- 居民用水流出量

假设你对每月平均流入的水量有很好的掌握。你感兴趣的是预测流出部分。

你的基本计算方法是:

水流出量 = 当地人口 * 每位居民用水量

在电子表格模型中,你会这样设置:

月份 一月 二月 三月
当地人口 100,000 100,000 100,000
每位居民每月用水量,立方米 10 10 10
每月总水流出量,立方米 1m 1m 1m

如何创建预报

通常,你会从一个单一的预报开始,这是你对未来的核心看法。

回到我们的电子表格模型,我们已经从 Metabase 导入了大量实际数据。以水库为例,我们的电子表格看起来是这样的:

月份 一月 二月 三月
实际数据 (A) 或预测数据 (P) (A) (A) (A)
当地人口 100,000 100,000 100,000
每位居民每月用水量,立方米 10 10 10
每月总水流出量,立方米 1m 1m 1m

我们有3个时间序列(人口、用水量和总水流出量)。为了创建我们的预报,我们需要将这些时间序列向前预测。

识别并建模你的驱动时间序列

你如何将这些时间序列向前预测?回到你最初创建预报的原因,你想要知道的数字是每月的用水流出量。但孤立地预测流出量是困难的。通常你会将流出量分解成其组成部分,直到你得到可以预测的东西。

在我们的案例中,我们将指标分解为:

水流出量 = 当地人口 * 每位居民用水量

我们可以合理准确地预测这个方程中的最后两个变量:

  • 你查看了当地研究,历史上当地人口每年增长6%,预计将继续如此(每月大约0.5%,不考虑复利)。
  • 当你回顾过去的数据并将用水量与人口进行比较时,你发现每位居民的用水量每年基本保持在10立方米。

凭借这些知识,你可以预测这两个驱动时间序列。

月份 三月 四月 五月
实际数据 (A) 或预测数据 (P) (A) (P) (P)
当地人口 100,000 100,500 101,000
每位居民每月用水量,立方米 10 10 10
每月总水流出量,立方米 1m ? ?

从这里,你可以使用以下公式(参见公式列)预测你的因变量时间序列,即每月总水流出量:

月份 三月 四月 五月 公式
实际数据 (A) 或预测数据 (P) (A) (P) (P)  
当地人口 100,000 100,500 101,000 A
每位居民每月用水量,立方米 10 10 10 B
每月总水流出量,立方米 1m 1.005m 1.01m A * B

总结一下,我们从我们想知道的因变量时间序列(每月水流出量)开始,然后将其分解为可以独立预测的组成部分,这些组成部分就是我们的驱动时间序列。

什么是好的驱动时间序列?

从根本上说,驱动时间序列需要是可以独立预测的。这里面有判断的成分。对于当地人口,我们假设你有所谓的每年6%增长率的可靠来源。这样一来似乎是合理的。

但是,如果你无法直接预测你选择的驱动因素,你需要将它们分解成各自的驱动时间序列。例如,你可能想将每位居民的用水量分解成其自身的驱动因素:

每位居民用水量 = 每位居民饮用水量 + 每位居民后院平均面积 * 每单位后院面积用水量

请注意,你可以在这里不断深入,将驱动因素进一步分解。分解的深度将决定你模型的复杂程度。但这里存在一个权衡。通常,你的模型越复杂,你花在构建、更新和调试上的时间就越多——而这些工作可能并不会带来更好的预测。

选择你可以影响的驱动因素也很有帮助。例如,在财务模型中,产品成本是一个很好的驱动因素,因为你决定了产品的成本。此外,你很可能希望看到价格变化的影响,因此将产品成本用作驱动因素是个好主意。

预测驱动时间序列的方法

让我们来了解如何为基线模型创建预测。也就是说,你正在尝试根据驱动因素过去的行为,尽可能忠实地预测它们。在下一个模块中,我们将讨论如果你想偏离此基线(例如,如果你正在考虑使用场景来创建对未来的替代视图)该怎么做。

电子表格模型中用于预测驱动因素的常见预测方法有几种。

常数法

常数法假设你的驱动因素不随时间变化。

实现常数法的一种方法是假设该数字在时间上具有相同、单一的绝对值:

月份 三月 四月 五月
实际数据 (A) 或预测数据 (P) (A) (P) (P)
驱动指标 10 10 10

在电子表格模型中使用常数法:

  • 将你的指标的绝对值写入工作表顶部的输入单元格(本例中为单元格 B2)
  • 将驱动预测单元格链接回该输入单元格
  A B C D
1 假设      
2 指标 1 值 10    
3        
4 预报      
5 月份 三月 四月 五月
6 实际数据 (A) 或预测数据 (P) (A) (P) (P)
7 驱动指标 10 =$B$2 =$B$2

另外,你可以通过取最近期间的平均值来使用常数法。常见的范围是最近的12、6或3个月。

月份 一月 二月 三月 四月 五月
实际数据 (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 月份 一月 二月 三月 四月 五月
6 实际数据 (A) 或预测数据 (P) (A) (A) (A) (P) (P)
7 驱动指标 9 11 10 =AVERAGE($B2:$D2) =AVERAGE($B2:$D2)

移动窗口法

移动窗口法假设你未来的指标变化率与最近的指标变化率相同。

实际数据和预测数据混合使用以进行下一次预测。例如,你可以取前三个月的移动平均值

月份 一月 二月 三月 四月 五月
实际数据 (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 月份 一月 二月 三月 四月 五月
6 实际数据 (A) 或预测数据 (P) (A) (A) (A) (P) (P)
7 驱动指标 9 11 10 =AVERAGE(B2:D2) =AVERAGE(C2:E2)

线性增长法

使用线性增长法,你可以按固定速率预测数字增长。对于我们的用水需求模型,你可能需要考虑你所在地区的洗车业务数量。平均每四个月会开设一家新洗车店,即每月0.25家洗车店。

你的驱动时间序列可能看起来像这样:

月份 一月 二月 三月 四月 五月
实际数据 (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 月份 一月 二月 三月 四月 五月
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%。

月份 三月 四月 五月
实际数据 (A) 或预测数据 (P) (A) (P) (P)
人口 100,000 105,000 110,250

在此示例中,四月的值表示比五月的值增加5%,依此类推。

在电子表格中建模指数增长:

  • 在顶部创建一个输入单元格,其中包含你的指标的月增长率。如果你的模型按季度或年度运行,此金额将是季度或年度增长率。
  • 在你的时间序列预测单元格中,你需要将前一个单元格的值乘以 1 + 月增长率。你需要加上 1,这样你就是将前一个单元格的值乘以 105%,而不是 5%。
  • 将公式向右填充。
  A B C D E F
1 假设          
2 人口月增长率 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行都这样做,其中每行都有自己的输入。如果你想更改一个输入数字,你必须逐行检查,更新数字,然后确保没有遗漏任何旧数字的实例。将其与只更新一个输入单元格进行比较。

将所有假设集中在一处,在查看下一个模块中的场景时会派上用场。

感谢你的反馈!

财务模型

下一页 →
© . All rights reserved.