Chronos-Bolt:时间序列预测中速度与准确性的结合

2024年12月24日 由 alex 发表 38 0

最初的 Chronos 模型在时间序列基础领域掀起了波澜,它在广泛的预测任务中展现出了极高的预测准确性,但在实际应用中却极其缓慢。这就是为什么尽管 chronos-t5-small 是 HuggingFace 上下载量最高的模型之一,但更大版本的 Chronos 却没有得到广泛使用的原因之一。几天前发布的 Chronos-Bolt 改变了这一状况:它在每个模型尺寸上都显著加快了推理速度,同时全面提高了准确性!


2


在尝试了新的 Chronos-Bolt 之后,我发现即使是小模型也能准确预测出人类肉眼可见的模式。但我想进一步测试:我能否找到 Chronos-Bolt 在金融领域实际应用的场景?


通常,像 Chronos 这样的时间序列基础模型在涉及外生变量时才在金融领域有用,因为大多数证券没有明显的可推断模式。幸运的是,对我来说,证券的衍生品通常比证券本身更容易预测:因此,我决定尝试预测波动率。


我还想看看 Chronos-Bolt-Small 在实际运行中的速度如何。令我惊喜的是,我的预测不仅准确,而且在相当多的时间步长上只花了大约5秒钟!


3


现实世界测试:市场波动率

我特意选择了UVXY(ProShares Ultra VIX Short-Term Futures ETF)来测试Chronos-Bolt,因为它具有独特的衰减模式。接下来,我们将一起了解整个实施过程:


import yfinance as yf
import pandas as pd
from autogluon.timeseries import TimeSeriesDataFrame, TimeSeriesPredictor
import matplotlib.pyplot as plt
from datetime import timedelta
import numpy as np
# Fetch UVXY data
vix_futures = yf.download('UVXY', start='2022-01-01')
vix_futures = vix_futures.reset_index()
# Create DataFrame with required columns
vix_ts = vix_futures[['Date', 'Close']].copy()
vix_ts.columns = ['timestamp', 'target']
vix_ts['item_id'] = 'UVXY'
# Convert timezone-aware timestamp to timezone-naive datetime64[ns]
vix_ts['timestamp'] = vix_ts['timestamp'].dt.tz_localize(None)
# Create TimeSeriesDataFrame
full_data = TimeSeriesDataFrame(vix_ts)


时区处理可能看起来微不足道,但对模型的性能至关重要。我在几次失败的尝试后深刻地认识到了这一点。


首先查看数据

在做出预测之前,重要的是要可视化我们正在处理的数据:


plt.figure(figsize=(15, 7))
plt.plot(full_data.index.get_level_values('timestamp'),
         full_data['target'],
         label='Historical UVXY',
         color='blue')
plt.title('UVXY Historical Data (2x Leveraged VIX Futures ETF)')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()


4


设置预测器

这里事情就变得有趣了:


predictor = TimeSeriesPredictor(
    prediction_length=500,
    eval_metric='MASE',
    freq='B'  # Business day frequency - crucial for financial data
)
# Split data into train and validation sets
validation_length = 200  # 200 trading days for validation
last_date = full_data.index.get_level_values('timestamp').max()
validation_start = last_date - timedelta(days=validation_length)
train_end = validation_start - timedelta(days=1)
train_data = full_data[full_data.index.get_level_values('timestamp') <= train_end]
validation_data = full_data[full_data.index.get_level_values('timestamp') > train_end]
# Fit and predict
predictor = predictor.fit(
    train_data,
    presets="bolt_small",
    time_limit=600
)
predictions = predictor.predict(train_data)


'freq="B"'参数对于金融数据至关重要,它告诉模型预期的工作日频率。如果没有这个参数,你会在周末和节假日得到错误的预测。


结果可视化

可视化结果显示,模型不仅预测准确,还提供了一个我们可以用来检测异常的置信区间。


plt.figure(figsize=(15, 10))
# Plot training data
plt.plot(train_data.index.get_level_values('timestamp'),
         train_data['target'],
         label='Training Data',
         color='blue',
         alpha=0.5)
# Plot validation data
plt.plot(validation_data.index.get_level_values('timestamp'),
         validation_data['target'],
         label='Actual (Validation)',
         color='green',
         linewidth=2)
# Plot predictions with confidence intervals
plt.plot(predictions.index.get_level_values('timestamp'),
         predictions['mean'],
         label='Forecast',
         color='red',
         linestyle='--',
         linewidth=2)
plt.fill_between(predictions.index.get_level_values('timestamp'),
                 predictions['0.1'],
                 predictions['0.9'],
                 color='red',
                 alpha=0.2,
                 label='80% Confidence Interval')
plt.title('UVXY Forecast vs Actual (Validation Period)')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.grid(True)
plt.legend()
plt.show()


5


哪些方法奏效了(哪些没奏效)


结果揭示了一些重要信息:

  1. 模式识别:模型在没有进行任何微调的情况下准确预测了UVXY的衰减模式。这非常令人瞩目,因为它展示了模型识别和预测金融工具中复杂模式的能力。
  2. 局限性:当我在比特币和苹果股票数据上测试相同的设置时,结果明显不那么令人满意。这揭示了一个关键点:Chronos-Bolt在处理具有固有模式的时间序列时表现出色,但在处理受外部因素强烈影响的资产时则显得力不从心。
  3. 内存效率:小型模型(4800万个参数)表现非凡,而且其内存效率比原始模型提高了20倍,这意味着你可以在基本硬件上运行它。


实际应用


以下是我看到的真正价值所在:

  1. 异常检测:模型的速度使其适用于实时异常检测。你可以持续进行预测并与实际值进行比较,从而标记出显著偏差。
  2. 模式验证:在部署复杂的交易策略之前,你可以使用Chronos-Bolt快速验证你的资产是否展现出可预测的模式。
  3. 风险管理:模型的置信区间提供了一种快速评估预测不确定性的方法——更宽的区间表明风险更高的时期。


展望未来

关键的好处不仅仅是速度的提升,还有它所启用的实际应用。能够在本地以如此改进的性能运行这些模型,为之前不可行的实时应用开辟了可能性。同样令人兴奋的是,Chronos模型的大小得到了如此大的缩减,同时在点和概率预测方面都保持了最先进的水平!


6


无论你是在构建交易系统、风险管理工具,还是仅仅需要快速的模式验证,Chronos-Bolt的速度和准确性都使其非常适合在交易和风险管理系统中进行快速迭代。只需记住:它在具有固有模式的时间序列上表现最为出色,而不是那些受外部因素主导的时间序列。


文章来源:https://medium.com/kx-systems/chronos-bolt-when-speed-meets-accuracy-in-time-series-forecasting-6dd387bad6d2
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消