如果?零售中价格影响的预测
您可以使用 TimeGPT 预测一组时间序列,例如零售中的产品需求。但如果您想评估该产品的不同定价方案怎么办?执行此类情景分析可以帮助您更好地了解定价如何影响产品需求,并有助于决策制定。
在本示例中,我们将向您展示:* 如何使用 TimeGPT 将价格作为外部变量预测产品需求 * 如何评估影响产品需求的不同定价方案
1. 导入包
首先,我们导入所需的包并初始化 Nixtla 客户端。
👍 使用 Azure AI 端点
要使用 Azure AI 端点,请记住也要设置
base_url
参数
nixtla_client = NixtlaClient(base_url="you azure ai endpoint", api_key="your api_key")
2. 加载 M5 数据
让我们看看预测来自 M5 数据集 的产品销售量的示例。M5 数据集包含美国 10 家零售店的每日产品需求量(销售量)。
首先,我们使用 datasetsforecast
加载数据。这返回
Y_df
,包含每个唯一产品(unique_id
列)在每个时间戳(ds
列)的销售量(y
列)。X_df
,包含每个唯一产品(unique_id
列)在每个时间戳(ds
列)的附加相关信息。
提示
您可以在此处找到有关在 TimeGPT 预测中包含外部变量的教程。
unique_id | ds | y | |
---|---|---|---|
0 | FOODS_1_001_CA_1 | 2011-01-29 | 3.0 |
1 | FOODS_1_001_CA_1 | 2011-01-30 | 0.0 |
2 | FOODS_1_001_CA_1 | 2011-01-31 | 0.0 |
3 | FOODS_1_001_CA_1 | 2011-02-01 | 1.0 |
4 | FOODS_1_001_CA_1 | 2011-02-02 | 4.0 |
5 | FOODS_1_001_CA_1 | 2011-02-03 | 2.0 |
6 | FOODS_1_001_CA_1 | 2011-02-04 | 0.0 |
7 | FOODS_1_001_CA_1 | 2011-02-05 | 2.0 |
8 | FOODS_1_001_CA_1 | 2011-02-06 | 0.0 |
9 | FOODS_1_001_CA_1 | 2011-02-07 | 0.0 |
在本示例中,我们将仅保留 sell_price
列中的附加相关信息。此列显示产品的销售价格,我们预计在不同销售价格下需求会波动。
unique_id | ds | sell_price | |
---|---|---|---|
0 | FOODS_1_001_CA_1 | 2011-01-29 | 2.0 |
1 | FOODS_1_001_CA_1 | 2011-01-30 | 2.0 |
2 | FOODS_1_001_CA_1 | 2011-01-31 | 2.0 |
3 | FOODS_1_001_CA_1 | 2011-02-01 | 2.0 |
4 | FOODS_1_001_CA_1 | 2011-02-02 | 2.0 |
5 | FOODS_1_001_CA_1 | 2011-02-03 | 2.0 |
6 | FOODS_1_001_CA_1 | 2011-02-04 | 2.0 |
7 | FOODS_1_001_CA_1 | 2011-02-05 | 2.0 |
8 | FOODS_1_001_CA_1 | 2011-02-06 | 2.0 |
9 | FOODS_1_001_CA_1 | 2011-02-07 | 2.0 |
3. 使用价格作为外部变量预测需求
我们将仅预测一个产品在数据集中所有 10 家零售店的需求。我们选择一个价格变化很多、由 FOODS_1_129_
标识的食品产品。
我们合并两个数据框以创建将在 TimeGPT 中使用的数据集。
unique_id | ds | y | sell_price | |
---|---|---|---|---|
0 | FOODS_1_129_CA_1 | 2011-02-01 | 1.0 | 6.22 |
1 | FOODS_1_129_CA_1 | 2011-02-02 | 0.0 | 6.22 |
2 | FOODS_1_129_CA_1 | 2011-02-03 | 0.0 | 6.22 |
3 | FOODS_1_129_CA_1 | 2011-02-04 | 0.0 | 6.22 |
4 | FOODS_1_129_CA_1 | 2011-02-05 | 1.0 | 6.22 |
5 | FOODS_1_129_CA_1 | 2011-02-06 | 0.0 | 6.22 |
6 | FOODS_1_129_CA_1 | 2011-02-07 | 0.0 | 6.22 |
7 | FOODS_1_129_CA_1 | 2011-02-08 | 0.0 | 6.22 |
8 | FOODS_1_129_CA_1 | 2011-02-09 | 0.0 | 6.22 |
9 | FOODS_1_129_CA_1 | 2011-02-10 | 3.0 | 6.22 |
让我们研究一下这些产品在数据最后一年中的需求(我们的目标 y
)如何演变。我们看到,在加利福尼亚州的商店(带有 CA_
后缀)中,该产品销售是间歇性的,而在其他地区(TX
和 WY
)销售则不那么间歇。请注意,该图仅显示了 8 家商店(共 10 家)。
接下来,我们查看这些产品在整个可用数据中的 sell_price
。我们发现在 2011 年至 2016 年期间价格变化相对较少——总共约 20 次。请注意,该图仅显示了 8 家商店(共 10 家)。
接下来转向我们的预测任务。我们将预测数据集的最后 28 天。
要在 TimeGPT 中使用 sell_price
外部变量,我们必须将其添加为未来值。因此,我们创建一个包含 unique_id
、时间戳 ds
和 sell_price
的未来值数据框。
unique_id | ds | sell_price | |
---|---|---|---|
1938 | FOODS_1_129_CA_1 | 2016-05-23 | 5.74 |
1939 | FOODS_1_129_CA_1 | 2016-05-24 | 5.74 |
1940 | FOODS_1_129_CA_1 | 2016-05-25 | 5.74 |
1941 | FOODS_1_129_CA_1 | 2016-05-26 | 5.74 |
1942 | FOODS_1_129_CA_1 | 2016-05-27 | 5.74 |
1943 | FOODS_1_129_CA_1 | 2016-05-28 | 5.74 |
1944 | FOODS_1_129_CA_1 | 2016-05-29 | 5.74 |
1945 | FOODS_1_129_CA_1 | 2016-05-30 | 5.74 |
1946 | FOODS_1_129_CA_1 | 2016-05-31 | 5.74 |
1947 | FOODS_1_129_CA_1 | 2016-06-01 | 5.74 |
接下来,我们将输入数据框限制为除预测期最后 28 天之外的所有数据
unique_id | ds | y | sell_price | |
---|---|---|---|---|
19640 | FOODS_1_129_WI_3 | 2016-05-13 | 3.0 | 7.23 |
19641 | FOODS_1_129_WI_3 | 2016-05-14 | 1.0 | 7.23 |
19642 | FOODS_1_129_WI_3 | 2016-05-15 | 2.0 | 7.23 |
19643 | FOODS_1_129_WI_3 | 2016-05-16 | 3.0 | 7.23 |
19644 | FOODS_1_129_WI_3 | 2016-05-17 | 1.0 | 7.23 |
19645 | FOODS_1_129_WI_3 | 2016-05-18 | 2.0 | 7.23 |
19646 | FOODS_1_129_WI_3 | 2016-05-19 | 3.0 | 7.23 |
19647 | FOODS_1_129_WI_3 | 2016-05-20 | 1.0 | 7.23 |
19648 | FOODS_1_129_WI_3 | 2016-05-21 | 0.0 | 7.23 |
19649 | FOODS_1_129_WI_3 | 2016-05-22 | 0.0 | 7.23 |
让我们调用 TimeGPT 的 forecast
方法
unique_id | ds | TimeGPT | |
---|---|---|---|
0 | FOODS_1_129_CA_1 | 2016-05-23 | 0.875594 |
1 | FOODS_1_129_CA_1 | 2016-05-24 | 0.777731 |
2 | FOODS_1_129_CA_1 | 2016-05-25 | 0.786871 |
3 | FOODS_1_129_CA_1 | 2016-05-26 | 0.828223 |
4 | FOODS_1_129_CA_1 | 2016-05-27 | 0.791228 |
📘 Azure AI 中可用的模型
如果您使用 Azure AI 端点,请务必设置
model="azureai"
nixtla_client.forecast(..., model="azureai")
对于公共 API,我们支持两种模型:
timegpt-1
和timegpt-1-long-horizon
。默认情况下,使用
timegpt-1
。请参阅 此教程,了解如何以及何时使用timegpt-1-long-horizon
。
我们绘制预测值、实际值以及预测期前的最后 28 天数据
4. 如果?在预测需求时改变价格
当我们在预测期改变产品的价格时会发生什么?让我们看看当我们增加或减少 sell_price
5% 时,我们的预测如何变化。
让我们使用 TimeGPT 创建一组新的预测。
📘 Azure AI 中可用的模型
如果您使用 Azure AI 端点,请务必设置
model="azureai"
nixtla_client.forecast(..., model="azureai")
对于公共 API,我们支持两种模型:
timegpt-1
和timegpt-1-long-horizon
。默认情况下,使用
timegpt-1
。请参阅 此教程,了解如何以及何时使用timegpt-1-long-horizon
。
让我们结合我们的三个预测。我们看到,正如我们所预期的,如果降低(增加)价格,需求预计会略有增加(减少)。换句话说,更便宜的产品会带来更高的销售量,反之亦然。
注意
价格弹性是衡量(产品)需求对价格变化的敏感程度的指标。在此阅读更多信息。
unique_id | ds | TimeGPT | TimeGPT-sell_price_plus_5% | TimeGPT-sell_price_minus_5% | |
---|---|---|---|---|---|
0 | FOODS_1_129_CA_1 | 2016-05-23 | 0.875594 | 0.847006 | 1.370029 |
1 | FOODS_1_129_CA_1 | 2016-05-24 | 0.777731 | 0.749142 | 1.272166 |
2 | FOODS_1_129_CA_1 | 2016-05-25 | 0.786871 | 0.758283 | 1.281306 |
3 | FOODS_1_129_CA_1 | 2016-05-26 | 0.828223 | 0.799635 | 1.322658 |
4 | FOODS_1_129_CA_1 | 2016-05-27 | 0.791228 | 0.762640 | 1.285663 |
5 | FOODS_1_129_CA_1 | 2016-05-28 | 0.819133 | 0.790545 | 1.313568 |
6 | FOODS_1_129_CA_1 | 2016-05-29 | 0.839992 | 0.811404 | 1.334427 |
7 | FOODS_1_129_CA_1 | 2016-05-30 | 0.843070 | 0.814481 | 1.337505 |
8 | FOODS_1_129_CA_1 | 2016-05-31 | 0.833089 | 0.804500 | 1.327524 |
9 | FOODS_1_129_CA_1 | 2016-06-01 | 0.855032 | 0.826443 | 1.349467 |
最后,让我们绘制不同定价方案下的预测,展示 TimeGPT 在一组产品价格变化时如何预测不同的需求。在图表中,我们可以看到,对于特定产品在某些时期,折扣增加了预期需求,而在其他时期和对于其他产品,价格变化对总需求的影响较小。
在本示例中,我们向您展示了:* 如何使用 TimeGPT 将价格作为外部变量预测产品需求 * 如何评估影响产品需求的不同定价方案
重要提示
- 此方法假设历史需求和价格行为对未来需求具有预测作用,并忽略了影响需求的其他因素。要包含这些其他因素,请使用额外的外部变量,为模型提供更多关于影响需求的因素的背景信息。
- 此方法对影响需求的未建模事件(例如突发市场变化)很敏感。要包含这些事件,如果过去也观察到此类突发变化,请使用指示此类变化的额外外部变量。