微信
ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
时间序列分析和预测是数据科学中最具挑战性的两个领域,原因在于数据的异质性以及获取预测结果所需的多个步骤。
2019年之前,用于探索时间序列数据最流行的Python库是statsmodels。该库包含分析时间序列趋势、季节性和噪声的功能,还拥有一套专门用于预测的统计模型。
当机器学习(ML)模型开始流行时,人们普遍期望它们在预测任务中超越统计模型,因为它们具有优越的处理复杂非线性关系的能力,这是简单自回归方法无法捕捉的。然而,大多数机器学习模型假设数据点是独立同分布(i.i.d.)的,而这对于时间序列数据并不成立。因此,要让机器学习模型处理这类数据,必须通过创建滞后变量或滚动平均值等特征来手动打破连续数据点之间的依赖关系。结果,你会在预测流水线中添加额外的预处理步骤。除此之外,由于统计模型和机器学习模型通常位于不同的Python库中,比较它们的预测准确性可能相当具有挑战性。
当专门的Python库出现时,一切都发生了变化,这些库将预处理和时间序列建模整合到一个统一的框架中。这类库的例子包括DARTS和sktime。
DARTS最大的优势在于其可用的模型列表。你可以像训练ARIMA模型一样轻松地训练Transformer或N-BEATS模型。它还处理外生变量,并自动生成滞后变量和基于日期的特征。
另一方面,sktime可以轻松地与Scikit-learn库集成。这意味着你可以使用sktime进行时间序列预处理,然后使用任何Scikit-learn回归器进行预测。
当然,DARTS和sktime帮助数据科学家创建了可用于生产的预测模型。然而,预处理流水线和模型仍然需要由用户选择。现在,得益于智能体(agents)的革命,这些步骤可以自动化。这正是TimeCopilot的意义所在——一个智能体框架,自动化你的时间序列分析和预测流水线。它决定哪些特征和模型提供**预测,全部基于一个提示。这听起来像魔法吗?是的,这就是为什么在这篇博客中我们将深入探讨这个有前途的库。
TimeCopilot是第一个开源的智能体框架,专门用于自动化时间序列分析和预测。通过单一提示,TimeCopilot完成特征分析、模型选择、交叉验证和预测生成。
这个工具的一个突出特点是可以从广泛的模型池中选择,从经典的统计模型(如ARIMA或ETS)到机器学习模型(如LightGBM),以及几个基础模型,包括Chronos、Moirai和TimeGPT。得益于与sktime的无缝集成,模型列表得到了扩展。
TimeCopilot文档相当完整。它包括快速入门介绍和几个示例,帮助你立即开始实验。
TimeCopilot可以用作自动时间序列预测器,也可以作为指导你完成预测过程的智能体。我们将使用真实数据集展示这两种功能。
我们使用TimeCopilot在一个具有主导趋势和季节性的数据集上运行时间序列流水线。我们从开源Python库TFB获取数据集。你可以在这个GitHub仓库中找到它,文件名为dataset2.csv。
用于TimeCopilot实验的时间序列数据
在使用TimeCopilot之前,我们需要安装它。
重要提示!TimeCopilot目前不支持运行在Intel x86_64处理器上的macOS机器。如果你有这种机器,可以在Google Colab中运行TimeCopilot。
对于Linux和Windows机器,请遵循工具用户指南中给出的安装说明。在这些操作系统中安装TimeCopilot时,我们建议使用uv而不是pip,因为前者确保安装TimeCopilot的最新版本。
要在Colab中安装TimeCopilot,使用:!uv pip install timecopilot。注意:在Colab中安装后,请重启运行时,以便会话识别已安装的包。
TimeCopilot有两个功能:一个统一的时间序列预测框架,称为TimeCopilotForecaster,以及一个指导你完成预测过程的智能体助手,简称为TimeCopilot。
TimeCopilotForecaster允许你在统一的API中实验广泛的统计模型、机器学习、神经网络甚至基础模型,用于时间序列预测。
在我们的实验中,我们尝试TimeCopilotForecaster。首先,我们读取数据并将其分成训练集和测试集。注意:如果你使用Colab,请确保挂载你的驱动器并选择存储数据的正确路径。
TimeCopilot可以在单个数据框中以长格式分析多个时间序列。因此,它需要一个unique_id列来标识每个时间序列。该工具还需要数据框列的特定名称:ds表示日期,y表示目标变量。
在使用TimeCopilotForecaster之前,请确保输入时间序列中没有缺失日期或值;否则,TimeCopilot将引发错误。
一旦我们读取并分割了数据,就可以调用TimeCopilotForecaster。在这个类中,你需要指定要运行的模型。我们使用了3个模型:AutoARIMA、Chronos和Prophet。
TimeCopilotForecaster支持广泛的模型集,包括许多统计、机器学习和神经网络模型,以及基础模型。在测试TimeCopilot中所有可用模型后,以下是可用模型的摘要。AutoLGBM和TimesFM有一些特殊说明。
TimeCopilot可用模型摘要
在上面的代码片段中,你可以看到进行模型交叉验证是多么容易。这对于评估它们的预测准确性非常重要。在示例中,我们指定了3个折叠和90天的预测范围。
交叉验证的结果是一个包含unique_id、ds(日期)和y(目标)的表格。它还包含每个折叠的截止日期(格式:YYYY-MM-DD)。在此示例中,截止日期为:2022-04-06、2022-07-05和2022-10-03。交叉验证表显示每个折叠中每个模型的预测结果。
TimeCopilotForecaster交叉验证结果。
在配备T4 GPU的Colab Notebook中,所选模型的训练和交叉验证耗时49秒。
TimeCopilotForecaster依赖于Nixtla的UtilsForecast库,该库包含广泛的错误指标列表。我们使用MAE和RMSE来评估我们的交叉验证。
模型的错误指标通过平均每个留出点集的误差来计算。预测误差如下:
预测误差指标。
根据表格,Chronos的错误最低。现在让我们将每个模型在90天预测范围内的预测与测试数据集的真实值进行比较。
TimeCopilotForecaster的forecast方法的输入参数是训练数据集和预测范围。在生产环境中,输入数据集是完整的时间序列数据。
forecast方法还支持置信区间。如果模型支持,你可以指定期望的置信水平列表,以百分比表示。在我们的示例中,我们使用了90%的置信水平。添加置信水平时,返回的数据框会为每个指定的水平包含下限和上限区间列。
时间序列预测。
正如交叉验证所示,Chronos在留出样本上提供了最准确的预测。因此,该模型为预测范围提供了**估计。然而,请注意,仍有改进预测的空间。对时间序列进行一些预处理,如去除趋势或季节性,可能会有帮助。
TimeCopilot的一大优势是其在使用sktime模型方面的多功能性。sktime是最完整的时间序列分析和预测Python库之一,包含数百种预测算法。在TimeCopilot中使用sktime使这个工具变得强大而多功能。
要在TimeCopilotForecaster中使用sktime模型,你需要创建TimeCopilot的Forecaster类的包装器。在这个包装器中,你必须定义一个forecast方法。在那里,你调用sktime模型,用训练数据集拟合它,并在预测范围内进行预测。
这里我们展示如何在TimeCopilotForecaster中集成sktime模型的示例:
注意,我们为forecast方法定义了level和quantiles作为输入参数,即使它们没有被使用。这些参数是TimeCopilot的Forecaster类所必需的。
TimeCopilotForecaster包含绘图功能;然而,我们为了演示目的选择创建自己的绘图功能。如果你有兴趣探索我们的绘图功能和代码,请访问我们的GitHub仓库。在那里,你会发现更多如何使用TimeCopilot的示例。
正如我们在引言中提到的,TimeCopilot可以作为智能体助手,在预测过程中为你提供指导。你可以用 plain English 提问,并获得预测、分析、验证和模型比较。
要开始使用智能体助手,你必须拥有你最喜欢的LLM的API密钥。TimeCopilot支持多个LLM提供商,包括OpenAI、Ollama和AWS Bedrock。对于最后一个,我们提交了一个PR来解决其连接问题。
有几种方法可以设置你的LLM的API密钥。其中之一是在你的shell中设置:
GPT plus 代充 只需 145# bash
export OPENAI_API_KEY=“your-new-secret-key”
在Colab中,你将你的API密钥添加为密钥,然后通过以下Python代码在Python中访问你的密钥:
from google.colab import userdata userdata.get(‘secretName’)
使用与之前相同的数据集,你可以使用以下代码将TimeCopilot作为智能体运行:
在这里,我们要求TimeCopilot分解时间序列数据并为我们提供预测。这些是智能体的结果:
智能体对时间序列的属性进行了详细分析!这非常有用,因为它节省了时间并简化了决定哪个模型最适合进行预测的过程。但是,请注意TimeCopilot不会为你进行数据预处理(见响应中的第8点)。
请注意,智能体回答了我们查询的第一部分,但它没有创建预测及其分析。因此,我们建议你将自己的请求分成较小的查询,如下所示:
在这种情况下,在对时间序列进行简要分析后,智能体将回答每个查询。
令人印象深刻,不是吗!
尽管它无法生成分解图,但分析相当完整,并提供了指定范围的预测。
最后,在智能体模式中包含sktime模型就像导入相应的模型一样简单。有关更多信息,请访问这个博客。
6、结束语
TimeCopilot是一个强大的工具,结合了LLM的能力与最先进的时间序列模型。这个包可以彻底改变我们进行时间序列分析和预测的方式。在其智能体模式下,它帮助用户识别异常、趋势和季节性。此外,它提供的数据分析非常准确,使用户更容易选择模型。
尽管智能体无法创建分解图,因为该功能未包含在可用工具中,但我们非常确信这个功能以及许多其他工具将在不久的将来成为TimeCopilot的一部分。
TimeCopilot等工具正在使数据科学家的工作更加高效。现在,我们不必花费时间寻找正确的算法或从头开始编写预测流水线代码,而是可以探索不同的时间序列预处理技术或开发新算法来改进预测。
原文链接: TimeCopilot: Automatic time series analysis & pipeline
汇智网翻译整理,转载请标明出处
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/244999.html