
使用 PyCaret 进行时间序列预测:构建多步预测模型
图片由 Editor | Midjourney & Canva 提供
熟悉时间序列预测
时间序列预测利用过去的信息来预测未来的数据,在金融、天气和库存等领域都很有用。准确的时间相关预测有助于企业做出更好的决策。
单步预测是指预测时间序列中的下一个值。此方法仅关注一个未来的时间点。多步预测是指预测未来多个时期(例如几周或几个月)的数值。有两种方法可以做到这一点:
- 直接预测:为每个未来时间步长创建一个新模型。
- 递归预测:模型使用过去的预测来预测下一个值。
多步预测在金融、供应链和天气预报等领域很有用。
什么是 PyCaret?
PyCaret 是一个 Python 工具,可以轻松进行预测。它自动化了机器学习工作流中的许多步骤,例如选择模型、特征工程和找到表现最佳的模型。PyCaret 可以帮助实现以下目标:
- 易于使用:PyCaret 通过其简单的界面,可以轻松设置机器学习模型。
- 全面的模型选择:PyCaret 提供许多时间序列模型,如 ARIMA、ETS 和 Prophet。
- 自动特征工程:PyCaret 会创建有用的特征,例如过去的数据点和移动平均,以提高预测的准确性。
- 模型调优和评估:PyCaret 通过调整设置和检查模型性能来帮助改进模型。
在本文中,我们将展示如何构建多步预测。多步预测意味着预测的不仅仅是下一个单一值。PyCaret 在数据、模型和结果检查方面提供帮助。我们将解释如何构建和改进您的预测模型。
在继续学习本文之前,您可能需要先阅读本系列的前 3 篇文章。
在开始之前,请确保已安装 PyCaret。您可以使用 pip 进行安装。
1 |
pip install pycaret |
准备数据
在本示例中,我们将使用航空公司乘客数据集。它显示了每月航空公司乘客数量。
1 2 3 4 5 6 7 8 9 |
import pandas as pd from pycaret.time_series import * # 加载数据集 url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv" data = pd.read_csv(url, header=0, index_col=0, parse_dates=True) # 显示前几行 print(data.head()) |
这里,Month 列是时间索引。Passengers 列是我们想要预测的目标变量。
初始化 PyCaret
PyCaret 中的 setup() 函数会为您的数据准备建模。它会自动处理诸如检测趋势、填充缺失值和编码分类特征等任务。此步骤为时间序列预测设置了环境。
1 2 3 4 5 6 7 8 |
# 初始化 PyCaret 时间序列预测环境 ts_setup = setup( data=data, target='Passengers', session_id=123, fold=3, fh=12 ) |
setup 中的关键参数包括:
- data:时间序列数据。
- target:我们想要预测的列的名称(Passengers)。
- fh:预测范围(预测到多远);此处,我们预测未来 12 个月。
创建基线模型
基线模型是预测的起点,有助于评估更复杂的模型。PyCaret 提供 create_model() 来轻松构建一个。ETS(指数平滑)模型是时间序列数据的良好基线。它能够捕捉数据中的趋势和季节性。
1 2 |
# 创建基线 ETS 模型 model_baseline = create_model('ets') # ETS 代表指数平滑 |
ETS 模型简单有效,适用于时间序列数据。
比较模型
PyCaret 拥有许多预测模型,您可以使用 compare_models() 来测试和比较它们。此函数根据模型的性能对模型进行排名。您可以按 MASE(平均绝对缩放误差)对模型进行排序,以帮助找到最佳模型。
1 2 |
# 比较所有模型 best_model = compare_models(sort='MASE') # 按 MASE(平均绝对缩放误差)排序 |
PyCaret 根据性能对模型进行排名。在其他条件相同的情况下,选择误差最小的模型以获得更好的预测。
调优模型
选择模型后,您可以通过微调其设置来提高其准确性。使用 tune_model() 函数来优化超参数。
1 2 |
# 调优最佳模型 tuned_model = tune_model(best_model) |
PyCaret 会自动调整模型的参数以获得更好的结果。
进行多步预测
在训练和调优模型后,下一步是进行多步预测。您可以使用 PyCaret 中的 predict_model() 函数来执行此操作。它有助于预测特定时间段的未来值。
1 2 3 |
# 预测未来 12 个月 future_forecast = predict_model(tuned_model) print(future_forecast) |
这将生成一个包含以下内容的表格:
- 历史预测:过去数据点的预测值。
- 未来预测:未来 12 个月(或设定的范围)的预测。
可视化结果
可视化有助于理解模型性能。PyCaret 提供内置的绘图工具。
模型诊断
PyCaret 包含有用的诊断图来评估模型的性能。其中一个图是残差诊断图,显示模型残差。
1 2 |
# 绘制模型诊断图 plot_model(tuned_model, plot='diagnostics') |
预测图
PyCaret 还允许您可视化预测。它显示实际值、预测值和未来预测。
1 2 |
# 绘制预测图 plot_model(tuned_model, plot='forecast') |
导出和部署模型
模型准备就绪后,您可以保存它,以便将来无需重新训练即可再次使用。
保存模型
使用 save_model() 函数来保存模型。这将存储模型,以便您将来可以使用它。
1 2 |
# 保存训练好的模型 save_model(tuned_model, 'multi_step_forecast_model') |
加载模型
当您需要已保存的模型时,可以使用 load_model() 函数加载它。这将把模型重新加载到内存中。
1 2 |
# 加载已保存的模型 loaded_model = load_model('multi_step_forecast_model') |
结论
PyCaret 使时间序列预测变得简单快捷,只需几行代码即可帮助您构建多步预测模型。PyCaret 会自动处理数据清理和特征创建等任务,并提供许多您可以根据需要选择的预测模型。多步预测可帮助您随时间预测未来值,这对于规划和决策非常有用。借助 PyCaret,即使是初学者也能快速创建准确的模型,并立即从时间序列数据中获得见解。
暂无评论。