譯者 | 布加迪
審校 | 重樓
ChatGPT和Bard等大語(yǔ)言模型(LLM)的興起已極大地改變了許多人的工作、交流和學(xué)習(xí)方式,這已不是什么秘密。但除了取代搜索引擎外,LLM還有其他應(yīng)用。最近,數(shù)據(jù)科學(xué)家已重新改造LLM用于時(shí)間序列預(yù)測(cè)。
時(shí)間序列數(shù)據(jù)在從金融市場(chǎng)到氣候科學(xué)的各個(gè)領(lǐng)域無(wú)處不在。在人工智能進(jìn)步的推動(dòng)下,LLM 正在徹底改變我們處理和生成人類(lèi)語(yǔ)言的方式。本文深入研究時(shí)間序列語(yǔ)言模型如何提供創(chuàng)新的預(yù)測(cè)和異常檢測(cè)模型。
什么是時(shí)間序列模型?
大體上說(shuō),時(shí)間序列語(yǔ)言模型被重新改造后用于處理時(shí)間序列數(shù)據(jù),而不是處理文本、視頻或圖像數(shù)據(jù)。它們將傳統(tǒng)時(shí)間序列分析方法的優(yōu)點(diǎn)與語(yǔ)言模型的高級(jí)預(yù)測(cè)功能相結(jié)合。當(dāng)數(shù)據(jù)與預(yù)測(cè)或預(yù)期結(jié)果有明顯偏差時(shí),可以使用強(qiáng)大的預(yù)測(cè)來(lái)檢測(cè)異常。時(shí)間序列語(yǔ)言模型和傳統(tǒng)LLM之間的一些顯著差異如下:
- 數(shù)據(jù)類(lèi)型和訓(xùn)練:ChatGPT 之類(lèi)的傳統(tǒng) LLM 用文本數(shù)據(jù)進(jìn)行訓(xùn)練,但時(shí)間序列語(yǔ)言模型用連續(xù)的數(shù)值數(shù)據(jù)進(jìn)行訓(xùn)練。具體來(lái)說(shuō),預(yù)訓(xùn)練針對(duì)大型、多樣化的時(shí)間序列數(shù)據(jù)集(實(shí)際數(shù)據(jù)集和合成數(shù)據(jù)集)進(jìn)行,這使模型能夠很好地適用于不同的領(lǐng)域和應(yīng)用。
- 詞元化:時(shí)間序列語(yǔ)言模型將數(shù)據(jù)分解為塊而不是文本詞元(塊是指時(shí)間序列數(shù)據(jù)的連續(xù)段、塊或窗口)。
- 輸出生成:時(shí)間序列語(yǔ)言模型生成未來(lái)數(shù)據(jù)點(diǎn)的序列,而不是單詞或句子。
- 架構(gòu)調(diào)整:時(shí)間序列語(yǔ)言模型結(jié)合特定的設(shè)計(jì)選擇來(lái)處理時(shí)間序列數(shù)據(jù)的時(shí)間特性,比如可變上下文和范圍長(zhǎng)度。
與分析和預(yù)測(cè)時(shí)間序列數(shù)據(jù)的傳統(tǒng)方法相比,時(shí)間序列語(yǔ)言模型具有多個(gè)顯著優(yōu)勢(shì)。不像ARIMA 等傳統(tǒng)方法通常需要廣泛的領(lǐng)域?qū)I(yè)知識(shí)和手動(dòng)調(diào)整,時(shí)間序列語(yǔ)言模型則利用先進(jìn)的機(jī)器學(xué)習(xí)技術(shù)自動(dòng)從數(shù)據(jù)中學(xué)習(xí)。這使得它們?cè)趥鹘y(tǒng)模型可能不盡如人意的眾多應(yīng)用領(lǐng)域成為強(qiáng)大且多功能的工具。
- 零樣本性能:時(shí)間序列語(yǔ)言模型可以對(duì)未見(jiàn)過(guò)的新數(shù)據(jù)集進(jìn)行準(zhǔn)確預(yù)測(cè),而無(wú)需額外的訓(xùn)練或微調(diào)。這尤其適用于新數(shù)據(jù)頻繁出現(xiàn)的快速變化的環(huán)境。零樣本方法意味著用戶不必花費(fèi)大量資源或時(shí)間來(lái)訓(xùn)練模型。
- 復(fù)雜模式處理:時(shí)間序列語(yǔ)言模型可以捕獲數(shù)據(jù)中復(fù)雜的非線性關(guān)系和模式,ARIMA 或 GARCH等傳統(tǒng)的統(tǒng)計(jì)模型可能發(fā)現(xiàn)不了這些關(guān)系和模式,尤其是對(duì)于未見(jiàn)過(guò)或未預(yù)處理的數(shù)據(jù)。此外,調(diào)整統(tǒng)計(jì)模型可能很棘手,需要深厚的領(lǐng)域?qū)I(yè)知識(shí)。
- 效率:時(shí)間序列語(yǔ)言模型并行處理數(shù)據(jù)。與通常按順序處理數(shù)據(jù)的傳統(tǒng)模型相比,這大大縮短了訓(xùn)練和推理時(shí)間。此外,它們可以在單單一個(gè)步驟中預(yù)測(cè)更長(zhǎng)序列的未來(lái)數(shù)據(jù)點(diǎn),從而減少所需的迭代步驟數(shù)。
時(shí)間序列語(yǔ)言模型的實(shí)際運(yùn)用
一些用于預(yù)測(cè)和預(yù)測(cè)分析的最流行的時(shí)間序列語(yǔ)言模型包括:谷歌的TimesFM、IBM的TinyTimeMixer和AutoLab的MOMENT。
谷歌的TimesFM可能最容易使用。使用pip安裝它,初始化模型,并加載檢查點(diǎn)。然后,你可以對(duì)輸入數(shù)組或Pandas DataFrames執(zhí)行預(yù)測(cè)。比如:
<span style="font-weight: 400;">```python</span>
import pandas as pd
# e.g. input_df is
# unique_id ds y
# 0 T1 1975-12-31 697458.0
# 1 T1 1976-01-31 1187650.0
# 2 T1 1976-02-29 1069690.0
# 3 T1 1976-03-31 1078430.0
# 4 T1 1976-04-30 1059910.0
# ... ... ... ...
# 8175 T99 1986-01-31 602.0
# 8176 T99 1986-02-28 684.0
# 8177 T99 1986-03-31 818.0
# 8178 T99 1986-04-30 836.0
# 8179 T99 1986-05-31 878.0
forecast_df = tfm.forecast_on_df(
inputs=input_df,
freq="M", # monthly
value_name="y",
num_jobs=-1,
)
谷歌的TimesFM還支持微調(diào)和協(xié)變量支持,這是指模型能夠結(jié)合和利用額外的解釋變量(協(xié)變量)以及主要時(shí)間序列數(shù)據(jù),以提高預(yù)測(cè)的準(zhǔn)確性和穩(wěn)健性。你可以在此論文(https://arxiv.org/pdf/2310.10688)中詳細(xì)了解谷歌的TimesFM工作原理。
IBM的TinyTimeMixer包含用于對(duì)多變量時(shí)間序列數(shù)據(jù)執(zhí)行各種預(yù)測(cè)的模型和示例。此筆記本(https://github.com/ibm-granite/granite-tsfm/blob/main/notebooks/hfdemo/ttm_getting_started.ipynb)重點(diǎn)介紹了如何使用TTM(TinyTimMixer)對(duì)數(shù)據(jù)執(zhí)行零樣本預(yù)測(cè)和少樣本預(yù)測(cè)。下面的屏幕截圖顯示了TTM生成的一些估計(jì)值:
最后,AutoLab的MOMENT擁有預(yù)測(cè)和異常檢測(cè)方法,并附有一目了然的示例。它擅長(zhǎng)長(zhǎng)范圍預(yù)測(cè)。舉例來(lái)說(shuō),該筆記本表明了如何通過(guò)先導(dǎo)入模型來(lái)預(yù)測(cè)單變量時(shí)間序列數(shù)據(jù):
```python
from momentum import MOMENTPipeline
model = MOMENTPipeline.from_pretrained(
"AutonLab/MOMENT-1-large",
model_kwargs={
'task_name': 'forecasting',
'forecast_horizon': 192,
'head_dropout': 0.1,
'weight_decay': 0,
'freeze_encoder': True, # Freeze the patch embedding layer
'freeze_embedder': True, # Freeze the transformer encoder
'freeze_head': False, # The linear forecasting head must be trained
},
)
```
下一步是使用你的數(shù)據(jù)訓(xùn)練模型進(jìn)行正確的初始化。在每個(gè)訓(xùn)練輪次之后,都會(huì)針對(duì)測(cè)試數(shù)據(jù)集評(píng)估模型。在評(píng)估循環(huán)中,模型使用output = model(timeseries, input_mask) 這一行進(jìn)行預(yù)測(cè)。
```python
while cur_epoch < max_epoch:
losses = []
for timeseries, forecast, input_mask in tqdm(train_loader, total=len(train_loader)):
# Move the data to the GPU
timeseries = timeseries.float().to(device)
input_mask = input_mask.to(device)
forecast = forecast.float().to(device)
with torch.cuda.amp.autocast():
output = model(timeseries, input_mask)
```
結(jié)語(yǔ)
時(shí)間序列語(yǔ)言模型是預(yù)測(cè)分析領(lǐng)域的重大進(jìn)步,它們將深度學(xué)習(xí)的強(qiáng)大功能與時(shí)間序列預(yù)測(cè)的復(fù)雜需求結(jié)合在一起。它們能夠執(zhí)行零樣本學(xué)習(xí)、整合協(xié)變量支持,并高效處理大量數(shù)據(jù),這使它們成為各行各業(yè)的革命性工具。隨著我們見(jiàn)證這一領(lǐng)域的快速發(fā)展,時(shí)間序列 語(yǔ)言模型的潛在應(yīng)用和優(yōu)勢(shì)只會(huì)不斷擴(kuò)大。
若要存儲(chǔ)時(shí)間序列數(shù)據(jù),請(qǐng)查看領(lǐng)先的時(shí)間序列數(shù)據(jù)庫(kù)InfluxDB Cloud 3.0。你可以利用InfluxDB v3 Python客戶端庫(kù)和InfluxDB來(lái)存儲(chǔ)和查詢時(shí)間序列數(shù)據(jù),并運(yùn)用時(shí)間序列LLM進(jìn)行預(yù)測(cè)和異常檢測(cè)。你可以查看下列資源開(kāi)始上手:
- 客戶端庫(kù)深度探究:Python(第 1 部分):https://www.influxdata.com/blog/client-library-deep-dive-python-part-1/
- 客戶端庫(kù)深度探究:Python(第 2 部分):https://www.influxdata.com/blog/client-library-deep-dive-python-part-2/
原文標(biāo)題:Transform Predictive Analytics With Time Series Language Models,作者:Anais Dotis-Georgiou