深度學習技術的進步推動了時間序列分析領域的革新,從傳統的統計方法如 ARIMA 和 ETS,到機器學習模型如 XGBoost 和 LightGBM,再到如今根據深度學習的 TimeGPT 等基礎模型,時間序列預測的技術不斷演進。TimeGPT 作為首個專為時間序列預測設計的預訓練基礎模型,採用了編碼器-解碼器結構,並結合注意力機制來捕捉過去事件的多樣性,進而推斷未來分佈,其創新架構為時間序列預測開啟了新的正規化。隨著 TimeGPT 等模型的出現,時間序列分析的效率和準確性都得到了顯著提升,這也為各行各業的長期規劃和決策管理提供了更強大的工具。同時,文章也探討了供應鏈管理中常見的牛鞭效應和購物車裝載現象,這些現象會導致需求預測失準,進而影響供應鏈的穩定性和效率。透過資訊分享、改進需求預測模型以及最佳化庫存管理策略,可以有效減輕這些現象的負面影響。最後,文章以航空乘客預測案例示範如何使用 Python 的 NeuralForecast 函式庫和多層感知機(MLP)模型進行時間序列預測,並詳細解釋了程式碼的運作原理和引數設定,這為讀者提供了實務操作的參考。

時間序列與生成式人工智慧的交會

2019年,OpenAI 釋出了完整版的 GPT-2 語言模型,該模型是根據超過九百萬份檔案的資料集訓練而成。2020年,轉換器(Transformers)在自然語言處理中被廣泛採用,AI 推動的聊天機器人在客戶服務中變得流行,GPT-3也隨之問世。2021年,DALL-E 和 Midjourney 引入了影像生成的生成式人工智慧技術。2022年,Stability AI 開發了 Stable Diffusion,這是一個根據文字描述生成影像的深度學習文字到影像模型,同時 ChatGPT 也釋出了 GPT-3.5,一個能夠存取至2021年網路資料的 AI 工具。2023年,TimeGPT 作為第一個時間序列預測的基礎模型發布,隨後生成式人工智慧競賽開始升溫,微軟將 ChatGPT 技術整合到 Bing 中;Google 釋出了自己的生成式 AI 聊天機器人 Bard;OpenAI 也釋出了 GPT-4。

生成式人工智慧與時間序列

過去十年間,機器學習技術逐漸普及且展現出顯著潛力。傳統上,統計方法如 ARIMA、ETS、MSTL、Theta 和 CES 在時間序列分析和預測中佔據主導地位,因其可靠性而在各個領域廣泛應用。然而,隨著機器學習模型如 XGBoost 和 LightGBM 的興起,這些模型在競賽和實際應用中表現出色。

深度學習的興起標誌著時間序列分析的重大轉變。深度學習方法在學術界頗受歡迎,並逐漸被大規模工業預測任務所採用。目前對於時間序列資料進行應用研究正在開展,並調查基礎模型潛在的好處。這些基礎模型由大量時間序列資料集獨立訓練而成,類別似於大型轉換器模型。

這些模型旨在最小化預測誤差,並利用過去的資料視窗來預測未來。這些發展可能會開啟時間序列分析的一個新時代,深化我們對時間資料的理解,並提高各種領域的預測效率。

轉換器展示了在建模長距離依賴和順序資料中的相互作用方面的卓越能力,這使其非常適合時間序列建模。已經有許多轉換器變體被開發來解決該領域中的具體挑戰並取得成功應用於預測、異常檢測和分類別等方面。特別是季節性和週期性仍然是時間序列分析中的重要方面。

TimeGPT:預訓練基礎模型

TimeGPT 是第一個適用於時間序列預測的預訓練基礎模型,能夠在不需要額外訓練的情況下在各種領域和應用中產生精確預測。其架構由編碼器-解碼器結構組成,每一層都包含殘差連線和層正規化。最終將解碼器的輸出對映到預測視窗維度的一個線性層。基本直覺是根據注意力機制可以捕捉過去事件的多樣性並準確地推斷可能的未來分佈。

此次創新標誌著一個重大突破並為新的預測正規化鋪平了道路。以上討論的一些新技術更易於使用、更準確、更節省時間並顯著降低了計算複雜性。

目前正在進行的進步旨在透過開發更先進的生成模型、採用創新訓練技術以及建立更優秀的評估指標來提高生成內容在影像、文字、音訊和影片等各種格式中的真實性、保真度和多樣性。

少樣本學習(few-shot learning)和零樣本學習(zero-shot learning)進步將使生成模型能夠僅需最少或無訓練資料即可處理新任務或領域,從而減少對大規模標註資料集的依賴並提高適應能力。

確保生成模型在對抗攻擊下具有穩健性和安全性是其實際佈署不可或缺的一部分。未來研究將重點放在建立對抗操縱防禦並防止生成式人工智慧被惡意利用方面。此外,開發能夠持續學習和適應新資料和知識同時保留之前學到資訊的演算法對於持續動態實際環境中的使用至關重要。

隨著 AI 變得越來越普及,解決隱私、偏見、公平性以及合理使用合成媒體等倫理和社會問題將是必要之舉。這需要跨領域合作以及設立倫理準則、監管框架和責任措施。

TimeGPT 模型架構

  graph TD;
    A[Input Data] --> B[Encoder];
    B --> C[Attention Mechanism];
    C --> D[Decoder];
    D --> E[Linear Layer];
    E --> F[Forecasting Window];

內容解密:

此圖示展示了 TimeGPT 模型架構的主要元件及其相互連線方式:

  • Input Data:代表輸入到 TimeGPT 模型中的原始時間序列資料。
  • Encoder:負責將輸入資料編碼為固定尺寸的表示。
  • Attention Mechanism:根據注意力機制捕捉過去事件的多樣性,以便更好地推斷未來分佈。
  • Decoder:使用編碼器輸出來解碼並產生預測結果。
  • Linear Layer:將解碼器輸出對映到預測視窗維度。
  • Forecasting Window:代表最終預測結果輸出。

這種架構設計能夠有效捕捉長期依賴關係並透過注意力機制提升預測準確性。

未來趨勢與挑戰

未來幾年內,我們可以期待以下幾個重要趨勢:

  • 多樣化應用場景:隨著基礎模型在更多行業中的應用擴充套件(如金融、醫療、物流),我們可以看到更多創新應用案例。
  • 技術融合:AI 與其他前沿技術如區塊鏈、物聯網(IoT)以及增強現實(AR)相結合將帶來全新的應用場景。
  • 倫理與隱私:隨著 AI 技術深入日常生活中的人們更加關注其透明度與隱私問題,相關法律法規也將日益完善。
  • 持續學習與適應:AI 模型將需要具備持續學習與適應能力以應對不斷變化的人類需求與環境變化。

總結來說,「TimeGPT」作為第一個專門為時間序列預測設計的人工智慧基礎模型標誌著一個重要突破。它不僅提升了預測精確度與效率但也為我們如何理解與利用時間序列資料提供了一個新視角。「TimeGPT」有潛力改變各行各業中如何進行長期計劃與決策管理。同時它也為我們帶來了一系列新挑戰包括技術融合、倫理考量以及持續學習能力等方面需要我們進行深入研究探索以期達成最佳效果。

時序分析與生成式AI

大語言模型介紹

大語言模型(LLM)是透過海量資料訓練而開發的模型,這使它能夠理解並生成與人類相似的回應。這些模型在翻譯、摘要、創作內容、時序預測以及影像和影片生成等任務中特別有用。LLM 已經在自然語言處理和電腦視覺等領域廣泛應用。除了文字、影像和圖形之外,LLM 還顯示出在分析時序資料方面的巨大潛力,這對氣候科學、物聯網、醫療、交通管理、音訊處理和金融等領域都有益。

時序資料是指按時間順序排列的數值觀測結果。它們通常具有明顯的時間相關性,這意味著後續的觀測值可能受到之前觀測值的影響。因此,時序分析需要特殊的方法來處理這種相依性。本文將探討並詳細歸類別各種方法來利用LLM進行時序分析。

由於LLM最初是針對文字進行訓練的,因此在處理數值性質的時序資料時存在挑戰。本文將探討從LLM轉移和蒸餾知識到數值時序分析中的策略。

以下是一些LLM在時序資料中的應用範例:

  • 天氣預測:利用歷史氣象資料進行未來天氣狀況的預測。
  • 股市預測:利用歷史股票價格資料進行未來價格走勢的預測。
  • 流量管理:利用過去交通流量資料進行未來交通狀況的預測。

此圖示

  graph TD
    A[歷史資料] --> B[LLM 模型]
    B --> C[未來預測]
    D[天氣預測] --> E[天氣站點]
    F[股市預測] --> G[交易平台]
    H[流量管理] --> I[交通燈控制]

處理方式

玄貓認為,要讓 LLMs 更好地適用於時序資料分析,需要兩個主要策略:轉移學習和蒸餾學習。

轉移學習:這是利用已經在大規模文字資料上預訓練好的 LLM 模型,將其應用到特定的時序資料任務中。例如,可以先讓 LLM 模型學習大量的金融新聞文字,然後再用它來預測股票價格。

蒸餾學習:這是將大模型中的知識轉移到較小的模型中。小模型更適合實時推理和佈署。例如,可以先讓 LLM 模型學習大量的歷史天氣資料,然後將這些知識蒸餾到一個較小的模型中,用來實時預測未來天氣。

這些方法可以幫助我們更好地應用 LLM 模型到各種時序資料任務中。

牛鞭效應

牛鞭效應(Bull Whip Effect)是供應鏈中常見的一種現象。當零售商向製造商下訂單時,訂單量往往比最終消費者的購買量更具變動性。這會導致製造商或上游供應商對需求的不準確預測。

原因及影響

  1. 需求變動放大:零售商為了防止缺貨風險,會下更多訂單。
  2. 庫存管理問題:上游供應商可能面臨庫存積壓或短缺問題。
  3. 成本增加:頻繁調整生產計劃增加了營運成本。

改善策略

  1. 資訊分享:透過資訊科技手段提高供應鏈各環節間的資訊透明度。
  2. 需求預測改進:使用更精確的需求預測模型減少需求變動對供應鏈的影響。
  3. 庫存調整:最佳化庫存管理策略,避免過度或不足庫存問題。

購物車裝載現象

購物車裝載現象(Cart Loading)是在零售供應鏈中常見的一種情況。例如在感恩節期間,消費者通常會購買更多保質期較長的商品作為備貨。這種行為導致零售商難以準確估算需要備貨的數量。

原因及影響

  1. 促銷活動影響:促銷折扣和優惠券吸引消費者購買更多商品。
  2. 消費者行為變化:消費者改變購物習慣以滿足長期需求。

改善策略

  1. 促銷策略調整:設計更精準的促銷活動,減少對供應鏈的衝擊。
  2. 需求預測提升:使用更準確的消費者行為分析工具提升需求預測精確度。
  3. 庫存管理最佳化:根據歷史購買資料進行更精確的庫存規劃。

神經網路在時序分析中的應用

神經網路簡介

神經網路是一種模仿人腦結構和功能的人工智慧模型,廣泛應用於各種機器學習任務中。神經網路由多個層次組成,每一層包含多個神經元。神經元之間透過權重連線,權重決定了每個輸入對輸出結果的影響程度。

基礎知識

感知器(Perceptron)

感知器是最簡單形式的神經網路,由一個神經元構成。其工作原理如下:

  1. 接收多個二進位制輸入。
  2. 每個輸入乘以一個權重。
  3. 所有加權輸入之和透過階躍函式得到二進位制輸出。

感知器適用於簡單二分類別問題。例如:

def perceptron(input, weights, bias):
    weighted_sum = sum(w * x for w, x in zip(weights, input)) + bias
    return 1 if weighted_sum >= 0 else 0

內容解密:

  • input:輸入向量(例如特徵)。
  • weights:權重向量(決定每個特徵對最終結果的影響)。
  • bias:偏置項(調整啟用函式位置)。
  • weighted_sum:加權和(權重與特徵乘積之和)。
  • 啟用函式:階躍函式(二值化)。

感知器技術概述

感知器接收多個輸入訊號(例如特徵),每個訊號乘以對應權重後相加。最後加上偏置項並透過啟用函式得到最終輸出。

output = f(w1 * x1 + w2 * x2 + ... + wn * xn + b)

其中:

  • w1, w2, ..., wn:權重。
  • x1, x2, ..., xn:輸入訊號。
  • b:偏置項(允許啟用函式左右移動以更好地適合資料)。
  • f:啟用函式(通常是階躍函式)。

感知器決策過程

感知器透過計算加權輸入之和與偏置項之和來做出決策:

  • 若結果大於或等於零則輸出 1;
  • 否則輸出 0。

這使得感知器能夠進行簡單二分類別任務。

感知器如何學習? 感知器在訓練階段調整權重以最小化預測誤差:

  • 初始化權重為隨機值。
  • 對每個訓練樣本計算預測結果並比較實際結果。
  • 調整權重以減少誤差。

神經網路時序預測

在神經網路中,每個神經元都有一個偏差值 (b),這個偏差值是與每個神經元相關聯的常數。與權重不同的是,偏差值並不會與特定輸入結合,而是直接加到神經元的輸出上。偏差作為一種偏移或閾值,幫助神經元即使在加權和的輸入不夠強時也能啟用。這增加了網路的靈活性,使其能夠更有效地學習和預測。

在進行訓練時,權重和偏差的值會透過最佳化過程進行調整。最常用的技術是梯度下降法,搭配反向傳播演算法來更新引數。梯度下降法會計算錯誤的梯度,這個梯度是預測值和實際值之間的差異。梯度指向錯誤最陡峭下降的方向,從而調整權重和偏差以減少錯誤。這個過程會重複進行,直到預測錯誤最小化。

在訓練開始之前,人工神經網路(ANN)中的權重必須初始化為某些值。適當的權重初始化對於網路的收斂和效能起著關鍵作用。最常見的初始化方法是隨機初始化,即權重被賦予小隨機值。

多層感知機(MLP)

在前一節中,我們瞭解了感知機的工作原理。接下來,我們將探討多層感知機(MLP)。MLP 是一種至少包含三層的神經網路:輸入層、隱藏層和輸出層。每一層都會對前一層的輸出進行操作。

此圖示展示了多層感知機結構:

  graph TD
    A[輸入層] --> B[隱藏層]
    B --> C[輸出層]
    B1[隱藏層神經元1] --> C1[輸出層神經元1]
    B2[隱藏層神經元2] --> C1

在上圖中,我們使用以下符號:

  • ( a_i ):第 ( l ) 層第 ( i ) 個神經元的啟用(輸出)。
  • ( w_{ji} ):從第 ( l-1 ) 層第 ( j ) 個神經元到第 ( l ) 層第 ( i ) 個神經元的連線權重。
  • ( b_{i}^{l} ):第 ( l ) 層第 ( i ) 個神經元的偏差項。

隱藏層是指介於輸入層和輸出層之間的中間層。

使用 NeuralForecast 函式庫進行時序預測

在本文中,我們將使用 NeuralForecast 函式庫來進行時序預測。這個函式庫是用 Python 開發的一個專門用於時序預測的函式庫。它內建了多種資料集、統計測試、基準測試、評估工具和資料載入功能。使用這個函式庫的原因有很多,包括快速且精確的先進模型實作、對外部變數和靜態共變數的支援以及機率預測等。

以下是如何使用 NeuralForecast 函式庫來進行多層感知機(MLP)模型訓練並預測航空公司每月乘客人數。

實務案例:航空公司月乘客數量預測

首先,我們匯入所需的函式庫:

import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_percentage_error, r2_score
from IPython.display import display, Markdown
import matplotlib.pyplot as plt
from neuralforecast import NeuralForecast
from neuralforecast.losses.pytorch import MQLoss, DistributionLoss
from neuralforecast.models import MLP

接著,定義一個計算錯誤指標的函式來評估模型效能:

def calculate_error_metrics(actual, predicted, num_predictors=1):
    # 轉換為 numpy 陣列
    actual = np.array(actual)
    predicted = np.array(predicted)
    # 觀察數量
    n = len(actual)
    # 計算 MSE
    mse = mean_squared_error(actual, predicted)
    # 計算 RMSE
    rmse = np.sqrt(mse)
    # 計算 MAPE
    mape = mean_absolute_percentage_error(actual, predicted)
    # 計算 R-squared
    r2 = r2_score(actual, predicted)
    # 計算調整後 R-squared
    adjusted_r2 = 1 - ((1 - r2) * (n - 1) / (n - num_predictors - 1))
    print(f'MSE : {mse}')
    print(f'RMSE : {rmse}')
    print(f'MAPE : {mape}')
    print(f'r2 : {r2}')
    print(f'adjusted_r2 : {adjusted_r2}')

然後載入並處理航空乘客資料:

from neuralforecast.utils import AirPassengersDF

Y_df = AirPassengersDF.reset_index(drop=True)
Y_df.head()

# 資料切分:訓練集與測試集
train_data = Y_df.head(132)
test_data = Y_df.tail(12)

接著初始化並訓練 MLP 模型:

horizon = 12

model = MLP(
    h=horizon,
    input_size=12,
    loss=DistributionLoss(distribution='Normal', level=[80, 90]),
    scaler_type='robust',
    learning_rate=1e-3,
    max_steps=200,
    val_check_steps=10,
    early_stop_patience_steps=2
)

fcst = NeuralForecast(models=[model], freq='M')
fcst.fit(df=train_data, val_size=12)

最後進行預測:

Y_hat_df = fcst.predict()
Y_hat_df.head()

內容解密:

這段程式碼展示瞭如何使用 NeuralForecast 函式庫來訓練 MLP 模型進行時序預測。首先,我們匯入了必要的函式庫並定義了一個用於評估模型效能的函式 calculate_error_metrics。接著,我們從 neuralforecast 函式庫中載入了歷史航空乘客資料並將其分割為訓練集和測試集。

在初始化 MLP 模型時,我們設定了多個引數:horizon 用於設定預測週期長度;input_size 用於設定自迴歸輸入(lags);loss 用於設定損失函式;scaler_type 用於設定資料標準化方法;learning_rate 用於設定學習率;max_steps 用於設定最大訓練步數;val_check_steps 用於設定每次驗證損失檢查之間的訓練步數;以及 early_stop_patience_steps 用於設定早停耐心步數。

最後,我們使用 fit 函式對模型進行訓練並使用 predict 函式進行預測。這段程式碼展示瞭如何利用 MLP 模型來進行實務中的時序預測任務。