边界预测
在预测中,我们经常希望确保预测结果保持在一定范围内。例如,在预测产品的销量时,我们可能要求所有预测结果都为正数。因此,预测结果可能需要有边界。
使用 TimeGPT,您可以通过在调用预测函数之前对数据进行转换来创建边界预测。
1. 导入包
首先,我们安装并导入所需的包
👍 使用 Azure AI 端点
要使用 Azure AI 端点,请设置
base_url
参数
nixtla_client = NixtlaClient(base_url="you azure ai endpoint", api_key="your api_key")
2. 加载数据
我们使用来自 《预测:原理与实践》 的 年度鸡蛋价格 数据集。我们期望鸡蛋价格严格为正,因此我们希望将预测值限制为正。
注意
您可以使用
pip
安装pyreadr
ds | y | unique_id | |
---|---|---|---|
84 | 1984-01-01 | 100.58 | eggs |
85 | 1985-01-01 | 76.84 | eggs |
86 | 1986-01-01 | 81.10 | eggs |
87 | 1987-01-01 | 69.60 | eggs |
88 | 1988-01-01 | 64.55 | eggs |
89 | 1989-01-01 | 80.36 | eggs |
90 | 1990-01-01 | 79.79 | eggs |
91 | 1991-01-01 | 74.79 | eggs |
92 | 1992-01-01 | 64.86 | eggs |
93 | 1993-01-01 | 62.27 | eggs |
我们可以看看价格在 20 世纪是如何演变的,这表明价格呈下降趋势。
3. 使用 TimeGPT 进行边界预测
首先,我们转换目标数据。在这种情况下,我们将在预测之前对数据进行对数变换,以便我们只能预测正价格。
我们将创建未来 10 年的预测,并包含预测分布的 80、90 和 99.5 百分位数。
📘 Azure AI 中的可用模型
如果您正在使用 Azure AI 端点,请务必设置
model="azureai"
nixtla_client.forecast(..., model="azureai")
对于公共 API,我们支持两种模型:
timegpt-1
和timegpt-1-long-horizon
。默认情况下使用
timegpt-1
。关于如何以及何时使用timegpt-1-long-horizon
,请参阅本教程。
创建预测后,我们需要反转之前应用的转换。对于对数变换,这意味着我们需要对预测进行指数化
现在,我们可以绘制预测图。我们包含了多个预测区间,表示预测分布的 80、90 和 99.5 百分位数。
预测和预测区间看起来是合理的。
让我们将这些预测与未应用转换的情况进行比较。在这种情况下,可能会预测出负价格。
事实上,我们现在观察到预测区间变为负值
例如,在 1995 年
unique_id | ds | TimeGPT | TimeGPT-lo-99.5 | TimeGPT-lo-90 | TimeGPT-lo-80 | TimeGPT-hi-80 | TimeGPT-hi-90 | TimeGPT-hi-99.5 | |
---|---|---|---|---|---|---|---|---|---|
0 | eggs | 1994-01-01 | 66.859756 | 43.103240 | 46.131448 | 49.319034 | 84.400479 | 87.588065 | 90.616273 |
1 | eggs | 1995-01-01 | 64.993477 | -20.924112 | -4.750041 | 12.275298 | 117.711656 | 134.736995 | 150.911066 |
2 | eggs | 1996-01-01 | 66.695808 | 6.499170 | 8.291150 | 10.177444 | 123.214173 | 125.100467 | 126.892446 |
3 | eggs | 1997-01-01 | 66.103325 | 17.304282 | 24.966939 | 33.032894 | 99.173756 | 107.239711 | 114.902368 |
4 | eggs | 1998-01-01 | 67.906517 | 4.995371 | 12.349648 | 20.090992 | 115.722042 | 123.463386 | 130.817663 |
5 | eggs | 1999-01-01 | 66.147575 | 29.162207 | 31.804460 | 34.585779 | 97.709372 | 100.490691 | 103.132943 |
6 | eggs | 2000-01-01 | 66.062637 | 14.671932 | 19.305822 | 24.183601 | 107.941673 | 112.819453 | 117.453343 |
7 | eggs | 2001-01-01 | 68.045769 | 3.915282 | 13.188964 | 22.950736 | 113.140802 | 122.902573 | 132.176256 |
8 | eggs | 2002-01-01 | 66.718903 | -42.212631 | -30.583703 | -18.342726 | 151.780531 | 164.021508 | 175.650436 |
9 | eggs | 2003-01-01 | 67.344078 | -86.239911 | -44.959745 | -1.506939 | 136.195095 | 179.647901 | 220.928067 |
这证明了对数变换在使用 TimeGPT 获取边界预测方面的价值,它使我们能够获得校准更佳的预测区间。
参考资料