在本笔记本中,我们使用 M5 预测竞赛中的一部分数据,比较了 TimeGPT 与三种预测模型的性能:经典模型 (ARIMA)、机器学习模型 (LightGBM) 和深度学习模型 (N-HiTS)。我们希望重点介绍用户喜爱 TimeGPT 的三个最受欢迎的优势:

🎯 准确性:TimeGPT 通过精确捕捉复杂模式,始终优于传统模型。

速度:生成预测的速度更快,无需对每个时间序列进行大量的训练或调优。

🚀 易用性:最少的设置和无需复杂的预处理,使 TimeGPT 易于访问并开箱即用!

在深入研究本笔记本之前,请访问我们的控制面板生成您的 TimeGPT api_key 并亲自尝试!

目录

  1. 数据介绍
  2. 模型拟合
    1. 拟合 TimeGPT
    2. 拟合 ARIMA
    3. 拟合 Light GBM
    4. 拟合 NHITS
  3. 结果与评估
  4. 结论

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from nixtla import NixtlaClient
from utilsforecast.plotting import plot_series
from utilsforecast.losses import mae, rmse, smape
from utilsforecast.evaluation import evaluate
nixtla_client = NixtlaClient(
    # api_key = 'my_api_key_provided_by_nixtla'
)

1. 数据介绍

在本笔记本中,我们使用了来自 M5 预测 - 准确性竞赛的聚合数据集。该数据集包括 7 个每日时间序列,每个时间序列有 1,941 个数据点。每个时间序列的最后 28 个数据点 被作为测试集,以便我们评估模型在未见过数据上的性能。

df = pd.read_csv('https://datasets-nixtla.s3.amazonaws.com/demand_example.csv', parse_dates=['ds'])
df.groupby('unique_id').agg({"ds":["min","max","count"],\
                             "y":["min","mean","median","max"]})
dsy
minmaxcountminmeanmedianmax
unique_id
FOODS_12011-01-292016-05-2219410.02674.0855232665.05493.0
FOODS_22011-01-292016-05-2219410.04015.9840293894.09069.0
FOODS_32011-01-292016-05-22194110.016969.08912916548.028663.0
HOBBIES_12011-01-292016-05-2219410.02936.1226172908.05009.0
HOBBIES_22011-01-292016-05-2219410.0279.053065248.0871.0
HOUSEHOLD_12011-01-292016-05-2219410.06039.5945395984.011106.0
HOUSEHOLD_22011-01-292016-05-2219410.01566.8402891520.02926.0
df_train = df.query('ds <= "2016-04-24"')
df_test = df.query('ds > "2016-04-24"')

print(df_train.shape, df_test.shape)
(13391, 3) (196, 3)

2. 模型拟合 (TimeGPT, ARIMA, LightGBM, N-HiTS)

2.1 TimeGPT

TimeGPT 提供了一种强大、简化的时间序列预测解决方案,以最小的努力即可提供最先进的结果。使用 TimeGPT,无需数据预处理或特征工程——只需初始化 Nixtla 客户端并调用 nixtla_client.forecast 即可生成针对您的独特时间序列量身定制的准确、高性能的预测。

# Forecast with TimeGPT
fcst_timegpt = nixtla_client.forecast(df = df_train,
                       target_col = 'y', 
                       h=28,                              # Forecast horizon, predicts the next 28 time steps
                       model='timegpt-1-long-horizon',    # Use the model for long-horizon forecasting
                       finetune_steps=10,                 # Number of finetuning steps
                       level = [90])                      # Generate a 90% confidence interval
INFO:nixtla.nixtla_client:Validating inputs...
INFO:nixtla.nixtla_client:Inferred freq: D
INFO:nixtla.nixtla_client:Querying model metadata...
INFO:nixtla.nixtla_client:Preprocessing dataframes...
INFO:nixtla.nixtla_client:Calling Forecast Endpoint...
# Evaluate performance and plot forecast
fcst_timegpt['ds'] = pd.to_datetime(fcst_timegpt['ds'])
test_df = pd.merge(df_test, fcst_timegpt, 'left', ['unique_id', 'ds'])
evaluation_timegpt = evaluate(test_df, metrics=[rmse, smape], models=["TimeGPT"])
evaluation_timegpt.groupby(['metric'])['TimeGPT'].mean()
metric
rmse     592.607378
smape      0.049403
Name: TimeGPT, dtype: float64

2.2 经典模型 (ARIMA)

接下来,我们将传统的统计模型 ARIMA 应用于相同的预测任务。经典模型依靠线性假设,利用历史趋势和季节性进行预测。然而,它们难以捕捉数据中复杂的非线性模式,导致准确性低于其他方法。此外,ARIMA 的迭代参数估计过程对于大型数据集来说计算量很大,因此速度较慢。

📘 为什么选择 TimeGPT 而非经典模型?

  • 复杂模式:TimeGPT 捕捉经典模型遗漏的非线性趋势。

  • 最少预处理:TimeGPT 几乎不需要或完全不需要数据准备。

  • 可扩展性:TimeGPT 可以高效地扩展到多个时间序列,无需重新训练。

from statsforecast import StatsForecast
from statsforecast.models import AutoARIMA
#Initiate ARIMA model
sf = StatsForecast(
    models=[AutoARIMA(season_length=7)],
    freq='D'
)
# Fit and forecast
fcst_arima = sf.forecast(h=28, df=df_train)
fcst_arima.reset_index(inplace=True)
test_df = pd.merge(df_test, fcst_arima, 'left', ['unique_id', 'ds'])
evaluation_arima = evaluate(test_df, metrics=[rmse, smape], models=["AutoARIMA"])
evaluation_arima.groupby(['metric'])['AutoARIMA'].mean()
metric
rmse     724.957364
smape      0.055018
Name: AutoARIMA, dtype: float64

2.3 机器学习模型 (LightGBM)

第三,我们使用机器学习模型 LightGBM 执行相同的预测任务,并通过我们的 mlforecast 库提供的自动化流程实现。虽然 LightGBM 可以捕捉季节性和模式,但要获得最佳性能通常需要详细的特征工程、仔细的超参数调优以及领域知识。您可以尝试我们的 mlforecast 库来简化此过程并快速入门!

📘 为什么选择 TimeGPT 而非机器学习模型?

  • 自动模式识别:从原始数据中捕捉复杂模式,无需特征工程。

  • 最少调优:无需大量调优即可良好工作。

  • 可扩展性:无需重新训练即可跨多个时间序列进行预测。

import optuna
from mlforecast.auto import AutoMLForecast, AutoLightGBM

# Suppress Optuna's logging output
optuna.logging.set_verbosity(optuna.logging.ERROR)
# Initialize an automated forecasting pipeline using AutoMLForecast.
mlf = AutoMLForecast(
    models=[AutoLightGBM()],
    freq='D',
    season_length=7,            
    fit_config=lambda trial: {'static_features': ['unique_id']}
)

# Fit the model to the training dataset.
mlf.fit(
    df=df_train.astype({'unique_id': 'category'}),
    n_windows=1,
    h=28,
    num_samples=10,
)
fcst_lgbm = mlf.predict(28)
test_df = pd.merge(df_test, fcst_lgbm, 'left', ['unique_id', 'ds'])
evaluation_lgbm = evaluate(test_df, metrics=[rmse, smape], models=["AutoLightGBM"])
evaluation_lgbm.groupby(['metric'])['AutoLightGBM'].mean()
metric
rmse     687.773744
smape      0.051448
Name: AutoLightGBM, dtype: float64

2.4 N-HiTS

最后,我们使用了 N-HiTS,这是一种专为时间序列预测设计的先进深度学习模型。该模型产生了准确的结果,展示了其捕捉数据中复杂非线性模式的能力。然而,与 TimeGPT 相比,设置和调优 N-HiTS 需要显着更多的时间和计算资源。

📘 为什么选择 TimeGPT 而非深度学习模型?

  • 设置更快:快速设置和预测,与神经网络冗长的配置和训练时间不同。

  • 更少调优:只需最少的调优和预处理即可良好工作,而神经网络通常需要大量调整。

  • 易用性:部署简单且准确性高,无需深厚的技术专业知识即可使用。

from neuralforecast.core import NeuralForecast
from neuralforecast.models import NHITS
# Initialize the N-HiTS model.
models = [NHITS(h=28, 
                input_size=28, 
                max_steps=100)]

# Fit the model using training data
nf = NeuralForecast(models=models, freq='D')
nf.fit(df=df_train)
fcst_nhits = nf.predict()
test_df = pd.merge(df_test,fcst_nhits, 'left', ['unique_id', 'ds'])
evaluation_nhits = evaluate(test_df, metrics=[rmse, smape], models=["NHITS"])
evaluation_nhits.groupby(['metric'])['NHITS'].mean()
metric
rmse     605.011948
smape      0.053446
Name: NHITS, dtype: float64

3. 性能比较与结果

使用 RMSE(均方根误差)和 SMAPE(对称平均绝对百分比误差)评估每个模型的性能。RMSE 强调模型控制显着误差的能力,而 SMAPE 通过将误差归一化为百分比来提供相对性能视角。下面,我们展示了所有组别的性能快照。结果表明 TimeGPT 在这两项指标上均优于其他模型。

🌟 要更深入地了解基准测试,请查看我们的基准测试仓库。总结结果显示在下方

整体性能指标

模型RMSESMAPE
ARIMA724.95.50%
LightGBM687.85.14%
N-HiTS605.05.34%
TimeGPT592.64.94%

每个时间序列的明细

下方是每个单独时间序列组的指标。TimeGPT 在所有时间序列组中始终提供准确的预测。在许多情况下,其性能与针对特定数据的模型一样好甚至更好,展示了其在不同数据集上的多功能性和可靠性。

基准测试结果

要更全面地深入了解模型准确性和性能,请探索我们的时间序列模型竞技场!TimeGPT 继续在基准测试中以卓越的性能领先!🌟

4. 结论

在本笔记本的最后,我们汇总了一个方便的表格,向您精确展示 TimeGPT 与其他预测模型相比最闪光的地方。☀️ 将其视为快速指南,帮助您为独特的项目需求选择最佳模型。我们相信 TimeGPT 将成为您预测之旅中的宝贵工具。别忘了访问我们的控制面板,生成您的 TimeGPT api_key 并立即开始!祝您预测愉快,并享受未来的见解!

场景TimeGPT经典模型 (例如,ARIMA)机器学习模型 (例如,XGB, LGBM)深度学习模型 (例如,N-HITS)
季节性模式✅ 只需最少设置即可良好工作✅ 通过调整(例如,SARIMA)处理季节性✅ 通过特征工程良好工作✅ 有效捕捉季节性模式
非线性模式✅ 表现出色,尤其擅长处理复杂的非线性模式❌ 性能有限❌ 没有大量特征工程时表现不佳✅ 对非线性关系处理良好
大型数据集✅ 可轻松扩展到许多时间序列❌ 慢且资源密集✅ 通过优化实现可扩展❌ 对于大型数据集需要大量资源
小型数据集✅ 性能良好;只需一个数据点即可开始✅ 性能良好;处理非常稀疏的数据时可能会遇到困难✅ 如果提取了足够的特征,性能尚可❌ 可能需要最小数据量才能有效学习
需要预处理✅ 需要最少的预处理❌ 需要进行缩放、对数变换等,以满足模型假设❌ 对于复杂模式需要大量的特征工程❌ 需要数据归一化和预处理
准确性要求✅ 只需最少调优即可实现高准确性❌ 处理复杂的准确性要求时可能会遇到困难✅ 通过调优可以实现良好的准确性✅ 可能实现高准确性,但需要大量资源
可扩展性✅ 具有高度可扩展性,只需最少的任务特定配置❌ 不易扩展✅ 中等可扩展性,每个任务都需要特征工程和调优❌ 由于资源需求,可扩展性有限
计算资源✅ 高效,可在 CPU 上无缝运行,无需 GPU✅ 轻度到中度,对于大型数据集扩展性差❌ 中度,取决于特征复杂性❌ 资源消耗高,通常需要 GPU
内存要求✅ 对于大型数据集内存使用高效✅ 中等内存要求❌ 对于大型数据集或许多时间序列情况内存使用高❌ 对于大型数据集和多个时间序列内存消耗高
技术要求&领域知识✅ 低;最少的技术设置,无需领域专业知识✅ 低到中度;需要理解平稳性❌ 中度到高度;需要特征工程和调优❌ 高;复杂的架构和调优