创建预测
将您的历史数据扩展到未来。

开始您的预测
您现在已将您的数据从 Metabase 指标存储导入到电子表格中。 这构成了您的历史数据(或者在金融术语中,您的“实际值”)。
在大多数模型中,下一步是创建您的预测(也称为预报)。 请注意,预报基于预期的行动方案,而预测基于各种假设情况(但这两个术语通常可以互换使用)。
什么是预测? 为什么要进行预测?
当您创建预测时,您试图预测某些系统在未来将如何发展。 常见的例子有
- 天气预报:预测未来几天某个地理区域的天气。
- 通过对一段时间内感染患者数量进行建模来预测流行病的传播。
- 对企业的客户增长进行建模。
创建预测通常有两个原因
- 决定如何对结果做出反应。 掌握准确的天气预报后,我可以决定明天是否去远足。 或者在更极端的情况下,我可以决定是否在飓风来临前撤离。
- 决定如何影响结果。 很难影响明天的天气,但您可以影响某些结果。 如果您正在决定是否今天在营销活动上额外花费 10 万美元,那么了解这笔支出在未来可能对客户数量产生多大影响,可以帮助您决定该活动是否值得投资。
预测通常基于两个要素
- 历史观测。
- 了解系统如何运作。
预测从根本上不同于猜测。 您可以猜测明天是否会发生飓风,但这种猜测不足以成为您决定是否撤离家园的理由。
相反,您更愿意依赖天气预报,气象学家会根据过去和当前天气条件的详细观测,结合对天气模式如何演变的(复杂)理解来进行预报。 预报当然可能会出错,但预报越好,出错的可能性就越低。
示例:预测水库中的水位
在接下来的关于预测和场景的两个模块中,我们将通过一个示例来说明概念:管理水库中的水位。
假设您是您所在地区水库的经理。 当地居民使用水库中的水进行饮用、洗衣、水球大战等。 河流和运河会随着时间的推移补充水库。
作为一名负责任的水库管理员,您会监测水位。 您还希望预测水位随时间的变化情况。
预测水库水位可能看起来像一个随机的例子,但请耐心等待。 水流入和流出水库恰好与客户流入和流出订阅业务的情况非常相似。
您水库中月底的基本水量计算公式是
期末水位 = 期初水位 + 雨水流入量(来自河流)- 水流出量(给居民)
假设您已经很好地掌握了每个月流入的平均水量。 您有兴趣预测流出量部分。
您的基本计算公式是
水流出量 = 当地人口 * 每位居民的用水量
在电子表格模型中,您应将其设置为
月份 | 一月 | 二月 | 三月 |
---|---|---|---|
当地人口 | 100,000 | 100,000 | 100,000 |
每位居民每月用水量,立方米 | 10 | 10 | 10 |
每月总水流出量,立方米 | 1 百万 | 1 百万 | 1 百万 |
如何创建预测
通常,您会从单个预测开始,这是您对未来的中心看法。
回到我们的电子表格模型,我们已经从 Metabase 导入了一堆实际值。 以我们的水库示例为例,我们的电子表格看起来像这样
月份 | 一月 | 二月 | 三月 |
---|---|---|---|
实际值 (A) 或预测值 (P) | (A) | (A) | (A) |
当地人口 | 100,000 | 100,000 | 100,000 |
每位居民每月用水量,立方米 | 10 | 10 | 10 |
每月总水流出量,立方米 | 1 百万 | 1 百万 | 1 百万 |
我们有 3 个时间序列(人口、用水量和总水流出量)。 为了创建我们的预测,我们需要向前预测这些时间序列中的每一个。
识别和建模您的驱动时间序列
您如何向前预测这些时间序列? 回到您最初创建预测的原因,您想知道的数字是每月水流出量。 但水流出量很难单独预测。 通常,您会将水流出量分解为组成部分,直到得到您可以预测的内容。
在我们的例子中,我们将我们的指标分解为
水流出量 = 当地人口 * 每位居民的用水量
我们可以合理准确地预测此公式中的最后两个变量
- 您查看当地的研究,从历史上看,当地人口每年增长 6%,预计将继续这样做(每月约 0.5%,忽略复合增长)。
- 当您回顾过去的数据并将用水量与人口进行比较时,您会观察到每位居民的用水量一直相当稳定,为每年 10 立方米。
有了这些知识,您可以预测这两个驱动时间序列。
月份 | 三月 | 四月 | 五月 |
---|---|---|---|
实际值 (A) 或预测值 (P) | (A) | (P) | (P) |
当地人口 | 100,000 | 100,500 | 101,000 |
每位居民每月用水量,立方米 | 10 | 10 | 10 |
每月总水流出量,立方米 | 1 百万 | ? | ? |
从这里,您可以使用以下公式预测您的依赖时间序列,即每月总水流出量(请参阅“公式”列)
月份 | 三月 | 四月 | 五月 | 公式 |
---|---|---|---|---|
实际值 (A) 或预测值 (P) | (A) | (P) | (P) | |
当地人口 | 100,000 | 100,500 | 101,000 | A |
每位居民每月用水量,立方米 | 10 | 10 | 10 | B |
每月总水流出量,立方米 | 1 百万 | 1.005 百万 | 1.01 百万 | 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 | =B2 美元 | =B2 美元 |
或者,您可以使用常数法,方法是取最近期间的平均值。 常用的范围是最近 12 个月、6 个月或 3 个月。
月份 | 一月 | 二月 | 三月 | 四月 | 五月 |
---|---|---|---|---|---|
实际值 (A) 或预测值 (P) | (A) | (A) | (A) | (P) | (P) |
驱动因素指标 | 9 | 11 | 10 | 10 | 10 |
在电子表格模型中执行此操作
- 在预测单元格中使用 average 公式,参考后面的单元格
- 使用公式中的 $ 符号锁定参考(如下所示)并将其填充到整个区域
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 |
三个月移动平均预测将取最近三个实际值的平均值(如果存在这些实际值)(例如,四月份的预测)。 但是,如果这些月份尚未发生,则预测将取实际值和预测值的平均值(例如,五月份的预测)。
在电子表格模型中使用移动窗口法
- 在预测单元格中使用 average 公式,参考后面的单元格。
- 将其填充到整个区域,无需使用 $ 锁定单元格引用。
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) * B2 美元
:这里您将每月新增洗车店的数量乘以您的预测中的月数。 请注意,您正在使用$
锁定对范围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 | =D7 美元 + COUNTA(E6 美元:E6) * B2 美元 | =D7 美元 + COUNTA(E6 美元:F6) * B2 美元 |
指数增长法
某些指标自然会以指数方式增长。 也就是说,每个月您都会在前一个月的价值基础上增加固定百分比。 为了说明我们用水示例中的指数增长效应,让我们假设当地人口每月增长 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+B2 美元) | =E7 * (1+B2 美元) |
提取您的假设
在大多数这些方法中都存在假设。 例如,每月新增洗车店的数量或当地人口增长率。 良好的建模做法是在模型的顶部创建一个假设(或输入)部分,并将您的公式链接回这些单元格。
此部分为您提供了一个更新假设的统一位置,而无需遍历和编辑每个单独的公式。 将数值输入直接写入公式称为“硬编码”,这被认为是一种不良做法,因为它使模型难以更新。
想象一下,您将一个数字硬编码到一个公式中,然后将该值填充到一行中的 50 个单元格中。 然后您对模型中的所有 100 行执行此操作,其中每一行都有自己的输入。 如果您想更改一个输入数字,您必须梳理每一行,更新数字,然后确保您没有遗漏旧数字的任何实例。 将其与必须更新单个输入单元格进行比较。
当您查看下一个模块中的场景时,在一个位置拥有您的假设将派上用场。