Nixtla的TimeGPT是一种用于时间序列数据的生成式预训练预测模型。TimeGPT可以在没有训练的情况下,仅使用历史值作为输入,为新的时间序列生成准确的预测。TimeGPT可以用于各种任务,包括需求预测、异常检测、财务预测等等。
TimeGPT 利用 Transformer 架构和基于 Google 和多伦多大学 2017 年开创性工作的自注意力机制。该模型是根据来自公开数据的 1000 亿个数据点进行训练的。
TimeGPT模型的工作方式类似于人类阅读句子的方式-从左到右。它查看过去数据的窗口,我们可以将其视为“标记”,并预测接下来会发生什么。这种预测是基于模型在过去数据中识别出的模式,并推断到未来。
该API提供了与TimeGPT的接口,允许用户利用其预测能力来预测未来事件。TimeGPT还可以用于其他与时间序列相关的任务,例如假设情景、异常检测等等。
1、官网网站:
https://docs.nixtla.io
# Import the colab_badge module from the nixtlats.utils package
from nixtlats.utils import colab_badge
# 导入colab_badge函数
from IPython.display import colab_badge
# 调用colab_badge函数,显示Colab徽章
colab_badge('docs/getting-started/1_getting_started_short')
# 导入load_dotenv函数,用于加载.env文件中的环境变量
from dotenv import load_dotenv
# 加载dotenv模块,用于从.env文件中加载环境变量
load_dotenv()
True
# 导入TimeGPT模块
from nixtlats import TimeGPT
/home/ubuntu/miniconda/envs/nixtlats/lib/python3.11/site-packages/statsforecast/core.py:25: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from tqdm.autonotebook import tqdm
您可以实例化TimeGPT
类并提供您的凭据。
# 导入TimeGPT类
from timegpt import TimeGPT
# 创建TimeGPT对象,传入token参数,如果没有提供则默认使用环境变量中的TIMEGPT_TOKEN
timegpt = TimeGPT(token='my_token_provided_by_nixtla')
# 创建一个TimeGPT对象,用于生成时间相关的文本。
timegpt = TimeGPT()
您可以通过调用validate_token
方法来测试您的令牌的有效性。
# 调用timegpt模块的validate_token()函数进行token验证
timegpt.validate_token()
INFO:nixtlats.timegpt:Happy Forecasting! :), If you have questions or need support, please email [email protected]
True
现在您可以开始进行预测了!让我们导入一个经典的AirPassengers
数据集的示例。该数据集包含1949年至1960年期间澳大利亚每月的航空公司乘客数量。首先,让我们加载数据集并绘制它:
# 导入pandas库,用于数据处理和分析
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/air_passengers.csv')
# 显示数据集的前5行
df.head()
timestamp | value | |
---|---|---|
0 | 1949-01-01 | 112 |
1 | 1949-02-01 | 118 |
2 | 1949-03-01 | 132 |
3 | 1949-04-01 | 129 |
4 | 1949-05-01 | 121 |
# 使用timegpt模块的plot函数绘制图表
# 参数df为数据集,time_col为时间列,target_col为目标列
timegpt.plot(df, time_col='timestamp', target_col='value')
下一步,使用SDK的forecast
方法预测接下来的12个月。设置以下参数:
df
:包含时间序列数据的pandas dataframe。h
:要预测的步数。freq
:时间序列的频率,使用Pandas格式。参见pandas可用的频率。time_col
:标识日期时间戳列的列。target_col
:我们想要预测的变量。# 使用timegpt库中的forecast函数对数据进行预测
# 参数说明:
# - df: 待预测的数据框
# - h: 预测的时间步数
# - freq: 预测的时间频率
# - time_col: 时间列的列名
# - target_col: 目标列的列名
timegpt_fcst_df = timegpt.forecast(df=df, h=12, freq='MS', time_col='timestamp', target_col='value')
# 打印预测结果的前几行
timegpt_fcst_df.head()
INFO:nixtlats.timegpt:Validating inputs...
INFO:nixtlats.timegpt:Preprocessing dataframes...
INFO:nixtlats.timegpt:Calling Forecast Endpoint...
timestamp | TimeGPT | |
---|---|---|
0 | 1961-01-01 | 437.837952 |
1 | 1961-02-01 | 426.062744 |
2 | 1961-03-01 | 463.116577 |
3 | 1961-04-01 | 478.244507 |
4 | 1961-05-01 | 505.646484 |
# 导入必要的库
import timegpt
# 使用timegpt库中的plot函数绘制图表
# 参数df为原始数据集,timegpt_fcst_df为预测数据集
# time_col参数指定时间列的名称为'timestamp'
# target_col参数指定目标列的名称为'value'
timegpt.plot(df, timegpt_fcst_df, time_col='timestamp', target_col='value')
您还可以通过增加时间范围参数来生成更长的预测。例如,让我们预测接下来的36个月:
# 使用timegpt模块中的forecast函数对数据进行预测
# 参数df表示输入的数据框
# 参数h表示预测的时间步数
# 参数time_col表示时间列的名称
# 参数target_col表示目标列的名称
# 参数freq表示数据的频率
timegpt_fcst_df = timegpt.forecast(df=df, h=36, time_col='timestamp', target_col='value', freq='MS')
# 打印预测结果的前几行
timegpt_fcst_df.head()
INFO:nixtlats.timegpt:Validating inputs...
INFO:nixtlats.timegpt:Preprocessing dataframes...
WARNING:nixtlats.timegpt:The specified horizon "h" exceeds the model horizon. This may lead to less accurate forecasts. Please consider using a smaller horizon.
INFO:nixtlats.timegpt:Calling Forecast Endpoint...
timestamp | TimeGPT | |
---|---|---|
0 | 1961-01-01 | 437.837952 |
1 | 1961-02-01 | 426.062744 |
2 | 1961-03-01 | 463.116577 |
3 | 1961-04-01 | 478.244507 |
4 | 1961-05-01 | 505.646484 |
# 使用timegpt模块中的plot函数来绘制图表
# 参数df是原始数据,timegpt_fcst_df是预测数据
# time_col指定时间列的名称,target_col指定目标列的名称
timegpt.plot(df, timegpt_fcst_df, time_col='timestamp', target_col='value')
或者一个更短的:
# 使用timegpt模块的forecast函数对数据进行预测
# 参数df表示输入的数据框
# 参数h表示预测的时间步长
# 参数time_col表示时间列的名称
# 参数target_col表示目标列的名称
# 参数freq表示数据的频率
timegpt_fcst_df = timegpt.forecast(df=df, h=6, time_col='timestamp', target_col='value', freq='MS')
# 使用timegpt模块的plot函数绘制原始数据和预测数据的图形
# 参数df表示原始数据框
# 参数timegpt_fcst_df表示预测数据框
# 参数time_col表示时间列的名称
# 参数target_col表示目标列的名称
timegpt.plot(df, timegpt_fcst_df, time_col='timestamp', target_col='value')
INFO:nixtlats.timegpt:Validating inputs...
INFO:nixtlats.timegpt:Preprocessing dataframes...
INFO:nixtlats.timegpt:Calling Forecast Endpoint...
TimeGPT-1目前针对短期预测进行了优化。虽然forecast
方法可以允许任何正数和大的预测范围,但预测的准确性可能会降低。我们目前正在努力提高对长期预测的准确性。
freq参数表示连续数据点之间的时间单位,特别关键。幸运的是,您可以将具有DateTime索引的DataFrame传递给预测方法,确保您的时间序列数据配备了必要的时间特征。通过将适当的freq参数分配给DataFrame的DateTime索引,您可以向模型提供有关观测之间一致间隔的信息,无论是天(‘D’)、月(‘M’)还是其他适当的频率。
# 将DataFrame的索引设置为'timestamp'列
df_time_index = df.set_index('timestamp')
# 将索引转换为DatetimeIndex对象,并设置频率为'MS'(月初)
df_time_index.index = pd.DatetimeIndex(df_time_index.index, freq='MS')
# 使用timegpt模型对DataFrame进行预测,预测未来36个时间点的值
# 预测使用的数据为df,时间列为'timestamp',目标列为'value'
forecast_result = timegpt.forecast(df=df, h=36, time_col='timestamp', target_col='value')
INFO:nixtlats.timegpt:Validating inputs...
INFO:nixtlats.timegpt:Preprocessing dataframes...
INFO:nixtlats.timegpt:Inferred freq: MS
WARNING:nixtlats.timegpt:The specified horizon "h" exceeds the model horizon. This may lead to less accurate forecasts. Please consider using a smaller horizon.
INFO:nixtlats.timegpt:Calling Forecast Endpoint...
timestamp | TimeGPT | |
---|---|---|
0 | 1961-01-01 | 437.837952 |
1 | 1961-02-01 | 426.062744 |
2 | 1961-03-01 | 463.116577 |
3 | 1961-04-01 | 478.244507 |
4 | 1961-05-01 | 505.646484 |