预测网站流量
我们的任务是预测网站 cienciadedatos.net 未来 7 天的每日访问量。
在本教程中,我们将展示
-
如何加载用于 TimeGPT 预测的时间序列数据
-
如何使用 TimeGPT 创建交叉验证预测
本教程改编自 Joaquín Amat Rodrigo 和 Javier Escobar Ortiz 的文章《使用机器学习和 Python 预测网站流量》。我们将向您展示
-
您如何获得接近 10% 的更优预测结果;
-
使用明显更少的代码行;
-
并且所需运行时间仅为原教程的一小部分。
1. 导入软件包
首先,我们导入所需的软件包并初始化 Nixtla 客户端。
👍 使用 Azure AI 端点
要使用 Azure AI 端点,请记住同时设置
base_url
参数
nixtla_client = NixtlaClient(base_url="你的 azure ai 端点", api_key="你的 api 密钥")
2. 加载数据
我们加载网站访问数据,并将其设置为适合 TimeGPT 使用的格式。在这种情况下,我们只需为时间序列添加一个标识符列,我们将其命名为 daily_visits
。
日期 | 用户 | 唯一ID | |
---|---|---|---|
0 | 2020-07-01 | 2324 | 每日访问量 |
1 | 2020-07-02 | 2201 | 每日访问量 |
2 | 2020-07-03 | 2146 | 每日访问量 |
3 | 2020-07-04 | 1666 | 每日访问量 |
4 | 2020-07-05 | 1433 | 每日访问量 |
5 | 2020-07-06 | 2195 | 每日访问量 |
6 | 2020-07-07 | 2240 | 每日访问量 |
7 | 2020-07-08 | 2295 | 每日访问量 |
8 | 2020-07-09 | 2279 | 每日访问量 |
9 | 2020-07-10 | 2155 | 每日访问量 |
就是这样!不再需要预处理。
3. 使用 TimeGPT 进行交叉验证
我们可以按如下方式对数据执行交叉验证
唯一ID | 日期 | 截止点 | 用户 | TimeGPT | TimeGPT-lo-99.5 | TimeGPT-lo-90 | TimeGPT-lo-80 | TimeGPT-hi-80 | TimeGPT-hi-90 | TimeGPT-hi-99.5 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 每日访问量 | 2021-07-01 | 2021-06-30 | 3123 | 3310.908447 | 3041.925497 | 3048.363220 | 3082.721924 | 3539.094971 | 3573.453674 | 3579.891397 |
1 | 每日访问量 | 2021-07-02 | 2021-06-30 | 2870 | 3090.971680 | 2793.535905 | 2838.480298 | 2853.750488 | 3328.192871 | 3343.463062 | 3388.407455 |
2 | 每日访问量 | 2021-07-03 | 2021-06-30 | 2020 | 2346.991455 | 2043.731296 | 2150.005078 | 2171.187012 | 2522.795898 | 2543.977832 | 2650.251614 |
3 | 每日访问量 | 2021-07-04 | 2021-06-30 | 1828 | 2182.191895 | 1836.848173 | 1897.684900 | 1929.914575 | 2434.469214 | 2466.698889 | 2527.535616 |
4 | 每日访问量 | 2021-07-05 | 2021-06-30 | 2722 | 3082.715088 | 2736.008055 | 2746.997034 | 2791.375342 | 3374.054834 | 3418.433142 | 3429.422121 |
📘 Azure AI 中可用模型
如果您正在使用 Azure AI 端点,请务必设置
model="azureai"
nixtla_client.cross_validation(..., model="azureai")
对于公共 API,我们支持两种模型:
timegpt-1
和timegpt-1-long-horizon
。默认情况下使用
timegpt-1
。有关如何以及何时使用timegpt-1-long-horizon
,请参阅此教程。
在这里,我们执行了 8 折滚动交叉验证。让我们绘制包含预测区间的交叉验证预测结果
这看起来很合理,并且与此处获得的结果非常相似。
让我们检查交叉验证的平均绝对误差
唯一ID | TimeGPT | |
---|---|---|
0 | 每日访问量 | 167.691711 |
我们的回测 MAE 为 167.69
。因此,TimeGPT 不仅比此处完全定制的流程取得了更低的 MAE,预测误差也更低。
外部变量
现在让我们添加一些外部变量,看看是否能进一步提高预测性能。
我们将添加星期指标,这些指标将从 date
列中提取。
日期 | 用户 | 唯一ID | 星期_1 | 星期_2 | 星期_3 | 星期_4 | 星期_5 | 星期_6 | 星期_7 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 2020-07-01 | 2324 | 每日访问量 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 2020-07-02 | 2201 | 每日访问量 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
2 | 2020-07-03 | 2146 | 每日访问量 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
3 | 2020-07-04 | 1666 | 每日访问量 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
4 | 2020-07-05 | 1433 | 每日访问量 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
5 | 2020-07-06 | 2195 | 每日访问量 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 2020-07-07 | 2240 | 每日访问量 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
7 | 2020-07-08 | 2295 | 每日访问量 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
8 | 2020-07-09 | 2279 | 每日访问量 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
9 | 2020-07-10 | 2155 | 每日访问量 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
让我们使用添加的外部变量重新运行交叉验证过程。
唯一ID | 日期 | 截止点 | 用户 | TimeGPT | TimeGPT-lo-99.5 | TimeGPT-lo-90 | TimeGPT-lo-80 | TimeGPT-hi-80 | TimeGPT-hi-90 | TimeGPT-hi-99.5 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 每日访问量 | 2021-07-01 | 2021-06-30 | 3123 | 3314.773743 | 2793.566942 | 3043.304261 | 3085.668122 | 3543.879364 | 3586.243226 | 3835.980544 |
1 | 每日访问量 | 2021-07-02 | 2021-06-30 | 2870 | 3093.066529 | 2139.727892 | 2725.964112 | 2779.082154 | 3407.050904 | 3460.168946 | 4046.405166 |
2 | 每日访问量 | 2021-07-03 | 2021-06-30 | 2020 | 2347.973573 | 1386.090529 | 1915.487550 | 1973.679628 | 2722.267519 | 2780.459596 | 3309.856618 |
3 | 每日访问量 | 2021-07-04 | 2021-06-30 | 1828 | 2182.467408 | 1003.677454 | 1681.246491 | 1874.572327 | 2490.362488 | 2683.688324 | 3361.257361 |
4 | 每日访问量 | 2021-07-05 | 2021-06-30 | 2722 | 3083.629453 | 1257.248435 | 2220.430357 | 2556.408628 | 3610.850279 | 3946.828550 | 4910.010472 |
让我们再次绘制预测结果并计算误差。
唯一ID | TimeGPT | |
---|---|---|
0 | 每日访问量 | 167.22857 |
总之,我们在本笔记本中获得了以下预测结果
模型 | 外部特征 | 回测 MAE | |
---|---|---|---|
0 | TimeGPT | 否 | 167.691711 |
0 | TimeGPT | 是 | 167.228570 |
我们展示了如何预测网站的每日访问量。与原教程相比,我们使用明显更少的代码行,在所需运行时间的一小部分内,实现了接近 10% 的更优预测结果。
您是否注意到这花费了很少的精力?您不必做的事情包括
- 复杂的预处理 - 仅包含时间序列的表格就足够了
- 创建验证集和测试集 - TimeGPT 在一个函数中处理交叉验证
- 选择和测试不同的模型 - 只需一次 TimeGPT 调用
- 超参数调优 - 没有必要。
预测愉快!