[深度學習] 時間序列分析工具TSLiB庫使用指北

落痕的寒假發表於2024-08-28

TSLiB是一個為深度學習時間序列分析量身打造的開源倉庫。它提供了多種深度時間序列模型的統一實現,方便研究人員評估現有模型或開發定製模型。TSLiB涵蓋了長時預測(Long-term forecasting)、短時預測(Short-term forecasting)、缺失值填補(Missing value imputation)、異常檢測(Anomaly detection)和分類(Classification)等五種主流時間序列任務,是從事時間序列分析研究者的理想工具。TSLiB庫官方地址見:Time-Series-Library

目錄
  • 1 TSLiB庫的使用
    • 1.1 時序任務介紹
    • 1.2 TSLiB庫介紹
      • 1.2.1 環境安裝
      • 1.2.2 TimesNet網路使用
    • 1.3 TSLiB庫支援的資料集
      • 1.3.1 長時預測
      • 1.3.2 短時預測
      • 1.3.3 缺失值填補
      • 1.3.4 分類
      • 1.3.5 異常檢測
    • 1.4 模型訓練
  • 2 參考

1 TSLiB庫的使用

1.1 時序任務介紹

TSLiB 支援的五種時序任務概述如下:

任務型別 定義 特點 應用場景示例
長時預測 預測時間序列在未來較長時間段內的變化趨勢 需要考慮長期趨勢和季節性因素,使用複雜的模型來捕捉長期依賴性 股票價格預測、長期能源需求預測等
短時預測 預測時間序列在近期的未來值 通常關注短期波動,模型需要快速響應新資料 短期銷售預測、交通流量預測等
缺失值填補 填補時間序列中缺失的資料點 需要保持時間序列的連續性和一致性 時間序列預處理、歷史資料補全等
異常檢測 識別時間序列中的異常或離群點 需要區分正常波動和異常事件 網路安全監控、裝置故障檢測等
分類 將時間序列資料分為不同的類別或標籤 通常基於時間序列的特徵進行分類 客戶行為分析、醫療診斷等

本文寫作時,TSLiB彙集截至2024年3月,在五項不同任務表現排名前三名的模型如下:

任務 第一 第二 第三
長時預測-過去96步 iTransformer TimeMixer TimesNet
長時預測-搜尋 TimeMixer PatchTST DLinear
短時預測 TimesNet Non-stationary
Transformer
FEDformer
缺失值填補 TimesNet Non-stationary
Transformer
Autoformer
分類 TimesNet FEDformer Informer
異常檢測 TimesNet FEDformer Autoformer

TSLiB庫中參與以上排名的深度學習時序模型如下:

還有一些深度學習時序模型包含在TSLiB庫中,但是尚未參與TSLiB庫的效能排行榜。可以關注TSLiB的官方連結 ,查詢最新結果:

1.2 TSLiB庫介紹

1.2.1 環境安裝

整個專案的結構說明如下圖所示:

安裝程式碼如下:

git clone https://github.com/thuml/Time-Series-Library
pip install -r requirements.txt

本文主要基於TimesNet模型來介紹TSLiB庫的使用。TimesNet模型支援長時預測、短時預測、缺失值填補、異常檢測和分類,同時也是TSLiB作者團隊提出的模型。TimesNet具體介紹如下:TimesNet: 時序基礎模型,預測、填補、分類等五大任務領先。TSLiB庫基於TimesNet網路的使用教程見:TimesNet_tutorial.ipynb

1.2.2 TimesNet網路使用

TimesNet是一個通用的時間序列神經網路,可處理各種不同的時間序列任務。從TimesNet的相關庫載入可以看到,其關鍵元件包括實現快速傅立葉變換的fft函式和Inception特徵提取主幹網路。

import torch    
import torch.nn as nn
import torch.nn.functional as F
import torch.fft
from layers.Embed import DataEmbedding
from layers.Conv_Blocks import Inception_Block_V1   

基於快速傅立葉變換的資料轉換

TimesNet的核心理念在於實現從一維資料到二維資料的轉化。當下,多數現存方法主要聚焦於時間序列的時間維度以獲取時序依賴性。原始的一維序列,恰似直線上依次排布的點,其主要呈現的是相鄰時間點間的直接變動。例如,昨日的資料為0,今日的資料為12,僅能察覺出簡易的增長或減少。然而,事實上,現實世界中的時間序列通常具備多重週期性,諸如每日週期、每週週期、每月週期等;並且,每個週期內部的時間點存在依賴關係(如今天10點與12點),不同相鄰週期內的時間點同樣存在依賴關係(如今天10點與明天10點)。以氣溫變化的時間序列為例,每天不同時刻的氣溫變動形成每日週期,每週的平均氣溫變化構建每週週期。將時間維度轉化為二維,有利於更精確地把控氣溫的變化規律與趨勢。

由此,作者提出TimesBlock模組來實現相關功能,它透過以下步驟來處理時間序列資料:

  1. 基礎頻率提取:透過快速傅立葉變換(Fast Fourier Transform, FFT)對時間序列資料進行頻域分析,從而獲取資料的基本頻率成分。
  2. 時間序列重塑:將時間序列資料根據主基礎頻率重新組織成二維變化形式。這通常意味著將時間序列分解成多個頻率分量,並將其表示為二維矩陣。
  3. 二維卷積:對這些二維矩陣執行二維卷積操作,這有助於捕捉時間序列資料中的區域性模式和結構。
  4. 輸出重構:將卷積操作的輸出重新組織,並與相應的權重相加,形成最終的輸出結果。

如下所示的圖中,時間序列展現出三個週期性階段(Period 1、Period 2、Period 3)。其中,紅色代表週期內的變化(類似於環比,比如昨天與今天的變化情況),藍色則表示週期間的變化(類似於同比的概念,例如今天10點和明天10點的對比)。此時間序列被轉換為三種不同的二維資料。在每個二維資料中,每一列用於表徵週期內的變化情況,而每一行則用於體現週期間的變化狀況:

那麼,應如何確定時間序列裡的週期性呢?可運用快速傅立葉變換這一方法。對時間序列實施快速傅立葉變換操作後,其主要的週期將會呈現出相應具有高幅值的頻率分量。設定一個超引數k,接著僅選取幅值最大的topk個頻率分量,如此便能獲取到k個主要的週期。具體操作如下圖,假設設定k為3,經過快速傅立葉變換後,發現頻率分量幅值最大的三個頻率分別為 10Hz、20Hz 和 30Hz ,那麼這三個頻率所對應的週期就是主要週期。然後將1D時間序列按照這三個週期進行重塑,再用2D卷積處理並聚合結果,就能有效地捕捉到多週期的時序變化特徵:

TimesBlock模組

TimesBlock實現了對時序變化特徵進一步特徵提取的功能,程式碼的實現位於models檔案下的TimesNet.py檔案:TimesBlock類。TimesBlock類定義如下:

class TimesBlock(nn.Module):
    def __init__(self, configs):
        super(TimesBlock, self).__init__()
        pass

    def forward(self, x):
        pass

基於TimesBlock模組,可以構建適應於各類時序序列任務的TimesNet模型。相關程式碼位於models檔案下的TimesNet.py檔案:TimesNet類。實現TimesNet模型的Model類定義如下:

class Model(nn.Module):
    def __init__(self, configs):
        super(Model, self).__init__()
        self.configs = configs
        self.task_name = configs.task_name
        pass

    # 長時預測和短時預測
    def forecast(self, x_enc, x_mark_enc, x_dec, x_mark_dec):
        ...

    # 缺失值填補
    def imputation(self, x_enc, x_mark_enc, x_dec, x_mark_dec, mask):
        pass

    # 異常檢測
    def anomaly_detection(self, x_enc):
        pass
        
    # 分類
    def classification(self, x_enc, x_mark_enc):
        pass

    # 推理
    def forward(self, x_enc, x_mark_enc, x_dec, x_mark_dec, mask=None):
        if self.task_name == 'long_term_forecast' or self.task_name == 'short_term_forecast':
            dec_out = self.forecast(x_enc, x_mark_enc, x_dec, x_mark_dec)
            pass
        if self.task_name == 'imputation':
            dec_out = self.imputation(
                x_enc, x_mark_enc, x_dec, x_mark_dec, mask)
            pass
        if self.task_name == 'anomaly_detection':
            dec_out = self.anomaly_detection(x_enc)
            pass
        if self.task_name == 'classification':
            dec_out = self.classification(x_enc, x_mark_enc)
            pass

Model類在初始化函式中透過接收configs引數,並根據其中的task_name來決定執行哪個任務的處理邏輯。這使得模型可以透過修改配置來切換模型執行的任務,而無需對程式碼結構進行大的改動。同時從以上程式碼可以看到,如果未來需要新增一個新的任務,比如迴歸,可以輕鬆地新增一個新的方法regression來處理相關邏輯,大大增加了程式碼的靈活性。

模型訓練

TimesNet網路的訓練、驗證和測試的相關程式碼是在exp目錄下實現的。以長時預測為例,用於長時預測任務的模型訓練過程可以簡要地分為幾個部分,包括資料準備、建立儲存路徑、初始化、最佳化器和損失函式選擇、使用混合精度訓練、訓練迴圈、驗證和提前停止、學習率調整、載入最佳模型。相關程式碼位於exp/exp_long_term_forecasting.py檔案

  1. 模型訓練,支援自動混合精度(AMP):原始碼位於exp/exp_long_term_forecasting.py
  2. 早停(EarlyStopping):原始碼位於utils/tools.py
  3. 最佳化器和損失計算,使用Adam最佳化器和MSEloss來衡量實際資料和預測資料之間的損失:原始碼位於exp/exp_long_term_forecasting.py
  4. 驗證和測試:原始碼位於exp/exp_long_term_forecasting.py
  5. 資料集選擇,提供工廠函式支援不同資料集讀取:原始碼位於data_provider/data_factory.py
  6. 資料讀入,根據選擇的資料集和資料集載入的配置來讀取和劃分資料集:原始碼位於data_provider/data_loader.py

資料集支援

TSLiB的官方倉庫提供了常見時序預測資料集的下載:谷歌雲百度雲,然後將下載後的資料集放入dataset目錄即可。

1.3 TSLiB庫支援的資料集

本節主要介紹TSLiB所使用的時序資料集。這些資料集在時序列分析領域中已被前人研究,並經過精心清洗以符合統一的格式標準。鑑於時序列分析領域的相對不成熟,現有的資料集多依賴於網路爬蟲技術獲取,或與現實應用場景存在一定差距。這些資料集的具體介紹可以檢視TimesNet的論文:TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis

更多時序資料集的介紹見:時間序列論文標準資料集TimesNet復現結果

1.3.1 長時預測

長時預測是各大時序模型主要支援的任務。在長時預測中,TSLiB庫基於均方誤差(MSEloss)損失來訓練模型。注意特徵數不包含時間特徵,但包含預測目標特徵。這是因為TSLiB中整合的長時預測模型會在訓練過程中將預測變數作為輸入特徵的一部分進行學習。

資料集 資料輸入特徵數 樣本長度 時間粒度
ECL 321 26304 1小時
ETTh1/ETTh2 7 17420 1小時
ETTm1/ETTm2 7 69680 15分鐘
Exchange_rate 8 7588 1天
ILI 7 966 1周
Traffic 862 17544 1小時
Weather 21 52696 10分鐘

注意資料集的預測目標列都被命名為”OT“。這一命名為了構建一個標準化的長時預測資料集,將所有預測目標列的命名統一為與ETT資料集列名相一致的形式。

ECL

ECL(electricity)資料集涵蓋了321位客戶在四年期間的每小時用電記錄,旨在預測不同區域的電力需求。鑑於資料中存在缺失值,資料集中的最後一列被作為預測目標。在TSLiB中基於Dataset_Custom類來讀取資料集。

ETT

ETT-small電力變壓器溫度(Electricity Transformer Temperature)資料集,主要應用於電力系統時間預測的相關研究。此資料集涵蓋了中國兩個不同地區為期兩年的資料,由兩個小時級資料集(ETTh1、ETTh2)以及兩個15分鐘級資料集(ETTm1、ETTm2)共同構成。每個資料點均包含2016年7月至2018年7月這段時間內的目標值“油溫度”以及6個電力負載特徵。在TSLiB中基於Dataset_ETT_hourDataset_ETT_minute類來讀取資料集。各列描述如下:

  • date: 記錄的日期;
  • HUFL: High Use Full Load;
  • HULL: High Use Less Load;
  • MUFL: Middle Use Full Load;
  • MULL: Middle Use Less Load;
  • LUFL: Low Use Full Load;
  • LULL: Low Use Less Load;
  • OT: 油溫度(Oil Temperature),預測的目標值。

Exchange_rate

Exchange_rate資料集包括澳大利亞、英國、加拿大、瑞士、中國、日本、紐西蘭和新加坡八個國家的每日匯率資料,時間跨度從1990年到2016年。在TSLiB中基於Dataset_Custom類來讀取資料集。

ILI

ILI(illness)資料集包括了從2002年到2020年間美國疾控中心的各周流感資料。在TSLiB中基於Dataset_Custom類來讀取資料集。各特徵列描述如下:

  • date: 記錄的日期;
  • %WEIGHTED ILI:國家層面的加權比例;
  • %UNWEIGHTED ILI:州層面的加權比例;
  • AGE 0-4: 4歲以下患者數;
  • AGE 5-24: 5到24歲患者數;
  • ILITOTAL:具有流感樣症狀的患者總數;
  • NUM.OF PROVIDERS:報告資料的醫療提供者的數量;
  • OT:TOTAL PATIENTS,訪問醫療提供者的患者總數。

Traffic

Traffic資料集包含了來自美國加州交通部的862個感測器在2016至2018年間每小時的資料記錄。這些資料詳細記錄了舊金山灣區高速公路上各感測器所測量的道路佔用率。道路佔用率的數值範圍在0到1之間,0表示道路完全空閒,而1表示道路完全擁堵,這個數值範圍反映了道路的實際使用情況。最後一列作為特徵列。在TSLiB中基於Dataset_Custom類來讀取資料集。

Weather

Weather資料集涵蓋了21項關鍵氣象指標,包括空氣溫度和溼度等。資料採集自2020年,以每10分鐘的頻率進行記錄。在TSLiB中基於Dataset_Custom類來讀取資料集。各列描述如下:

  1. p (mbar) / 氣壓(毫巴):大氣壓力的度量,單位為毫巴;
  2. T (degC) / 溫度(攝氏度):空氣的熱力學溫度,單位為攝氏度;
  3. Tpot (K) / 勢溫(開爾文):考慮溼度影響後的空氣溫度,單位為開爾文;
  4. Tdew (degC) / 露點溫度(攝氏度):空氣中水蒸氣凝結成露水的溫度,單位為攝氏度;
  5. rh (%) / 相對溼度(百分比):空氣中水蒸氣含量與飽和水蒸氣含量的比值,以百分比表示;
  6. VPmax (mbar) / 最大蒸氣壓(毫巴):空氣中水蒸氣可能達到的最大壓力,單位為毫巴;
  7. VPact (mbar) / 實際蒸氣壓(毫巴):當前空氣中水蒸氣的實際壓力,單位為毫巴;
  8. VPdef (mbar) / 蒸氣壓差(毫巴):實際蒸氣壓與最大蒸氣壓之間的差值,單位為毫巴;
  9. sh (g/kg) / 比溼(克/千克):單位質量空氣中水蒸氣的質量,單位為克/千克;
  10. H2OC (mmol/mol) / 水汽濃度(毫摩爾/摩爾):空氣中水蒸氣的摩爾濃度,單位為毫摩爾/摩爾;
  11. rho (g/m³) / 空氣密度(克/立方米):單位體積空氣中的質量,單位為克/立方米;
  12. wv (m/s) / 水平風速(米/秒):風在水平方向上的速度,單位為米/秒;
  13. max. wv (m/s) / 最大風速(米/秒):記錄期間風速的最大值,單位為米/秒;
  14. wd (deg) / 風向(度):風的來向,以角度表示;
  15. rain (mm) / 降水量(毫米):降水的總量,單位為毫米;
  16. raining (s) / 降雨時間(秒):降雨持續的時間,單位為秒;
  17. SWDR (W/m²) / 直接太陽輻射(瓦特/平方米):單位面積上接收到的直接太陽輻射能量,單位為瓦特/平方米;
  18. PAR (μmol/m²s) / 光合有效輻射(微摩爾/平方米秒):植物進行光合作用的有效輻射,單位為微摩爾/平方米秒;
  19. max. PAR (μmol/m²s) / 最大光合有效輻射(微摩爾/平方米秒):記錄期間光合有效輻射的最大值,單位為微摩爾/平方米秒;
  20. Tlog (degC) / 對數平均溫度(攝氏度):對數平均法計算的平均溫度,單位為攝氏度;
  21. OT / CO2 (ppm,我搜尋的,不一定對,但正確率可能性大約80%):二氧化碳的濃度單位 “parts per million”(百萬分比濃度)。

1.3.2 短時預測

TSLiB在處理短時和長時預測任務時,其核心差異僅在於預測的時間跨度。深度學習時序預測模型能夠一次性生成整個預測序列。因此,從模型結構的視角分析,短時預測與長時預測在本質上並無顯著區別,主要的調整僅涉及模型輸出長度這一超引數的設定。對於短時預測而言,採用對稱平均絕對百分比誤差(SMAPE)作為損失函式的計算基準。
TSLiB使用M4資料集來評價模型短時預測的能力。M4資料集的詳細介紹見:M4。M4資料集是第四屆Makridakis預測競賽的多個時序資料集合,由年度、季度、月度、每週、每日、每小時等不同資料顆粒的時間序列組成,分為訓練集和測試集。其涵蓋經濟、金融、商業、社會、環境等多個領域,M4資料集主要下資料檔案如下:

  • Yearly-train.csv:年度資料訓練集
  • Yearly-test.csv:年度資料訓練集
  • Quarterly-train.csv:季度資料訓練集
  • Quarterly-test.csv:季度資料訓練集
  • Monthly-train.csv:月度資料訓練集
  • Monthly-test.csv:月度資料訓練集
  • Weekly-train.csv:每週資料訓練集
  • Weekly-test.csv:每週資料訓練集
  • Daily-train.csv:每日資料訓練集
  • Daily-test.csv:每日資料訓練集
  • Hourly-train.csv:小時資料訓練集
  • Hourly-test.csv:小時資料測試集
  • M4-info.csv:資料集描述檔案,檔案各列含義如下:
    • M4id:資料的ID
    • category:資料所處領域
    • Frequency:資料的頻率
    • Horizon:資料的序列長度
    • SP:資料的時間顆粒度
    • StartingDate:資料起始時間

1.3.3 缺失值填補

缺失值填補是一項旨在預測時間序列中某些缺失值的任務,因此在某種程度上類似於預測。缺失值填補Imputation涉及到的資料集有ECL、ETT、Weather資料集。這些資料集在長時預測已經提到了。TSLiB庫中用於實現Imputation的模型架構與長時預測相同。然而,其區別在於,TSLiB在訓練過程中會對輸入資料中的部分資訊進行掩碼處理,隨後利用模型預測輸入資料中被掩碼的值。並基於均方誤差(MSEloss)損失計算掩碼部分的差值。這一階段不需要訓練標籤的參與。

1.3.4 分類

TSLib庫基於CrossEntropyLoss損失來訓練時序分類模型,注意輸入資料特徵不包含時間特徵和分類特徵。時序分類訓練流程類似於影像分類模型的訓練流程。

資料集 輸入資料特徵數 訓練樣本長度 分類類別數
EthanolConcentration 3 261個(1751, 3)的特徵向量 4
FaceDetection 144 5890個(62, 144)的特徵向量 2
Handwriting 3 150個(152,3)的特徵向量 26
Heartbeat 61 204個(405,61)的特徵向量 2
JapaneseVowels 12 270個(29,12)的特徵向量 9
PEMS-SF 963 267個(144,963)的特徵向量 7
SelfRegulationSCP1 6 268個(896,6)的特徵向量 2
SelfRegulationSCP2 7 200個(1152,7)的特徵向量 2
SpokenArabicDigits 13 6599個(93,13)的特徵向量 10
UWaveGestureLibrary 3 120個(315,3)的特徵向量 8

EthanolConcentration

EthanolConcentration資料集是一個多變數時間序列資料集,它包含了44種不同真實威士忌酒瓶中水和乙醇溶液的原始光譜資料。這些資料用於預測樣本中的乙醇濃度。資料集中的乙醇濃度分別為35%、38%、40%和45%,其中40%是蘇格蘭威士忌的最低法定酒精含量。資料集包含524個多變數時間序列,分為訓練集(261個樣本)和測試集(263個樣本)。每個時間序列由1751個時間點組成,記錄了三個變數的測量值。這些變數代表了在不同波長下的光譜強度,資料覆蓋了從226nm到1101.5nm的波長範圍,取樣頻率為0.5nm。輸入資料集的列包括:

  1. 時間點:表示時間測量點。
  2. 變數1:表示第一個光譜強度測量值。
  3. 變數2:表示第二個光譜強度測量值。
  4. 變數3:表示第三個光譜強度測量值。

此外,還有一個數值向量classes,它包含了與輸入資料相對應的四個類別,每個類別與不同的乙醇濃度相關聯。因此模型對維度維度為(1751,3)的向量進行分類,判斷其屬於哪個類別。在TSLiB中基於UEAloader類來讀取資料集,此類和普通時序資料讀取類不一樣。裡面過於囉嗦,因為分類原始資料被統一為ts格式,需要過多資料處理程式碼。

FaceDetection

FaceDetection資料集屬於面部時序資料,其中每組包含62個觀測值,每個觀測值又有144個特徵點。該資料集主要用於區分輸入資料表示人臉還是非人臉。這個資料集的讀取速度較為緩慢。在TSLiB中基於UEAloader類來讀取資料集。

Handwriting

Handwriting資料集包含26個字母的手寫樣本,共有150個訓練用例和850個測試用例。資料集中包含的三個特徵維度為加速度計和陀螺儀的輸出。在TSLiB中基於UEAloader類來讀取資料集。

Heartbeat

Heartbeat資料集是一個心跳音訊監測時序資料,根據心跳聲音分為聲音正常和異常兩類。共有204訓練用例和205個測試用例。在TSLiB中基於UEAloader類來讀取資料集。

JapaneseVowels

JapaneseVowels資料集記錄了來自9名男性日語說話者的語音時間序列。特徵為12個LPC cepstrum coefficients,共有270訓練用例和370個測試用例。在TSLiB中基於UEAloader類來讀取資料集。

PEMS-SF

PEMS-SF資料描述了舊金山灣區高速公路不同車道的佔用率,介於0和1之間。測量範圍為2008年1月1日至2009年3月30日,每10分鐘取樣一次。資料庫中的每一天視為一個維度為963(在整個研究期間持續執行的感測器數量)、長度為6x24=144的單一時間序列。共有267訓練用例和173個測試用例。在TSLiB中基於UEAloader類來讀取資料集。

SelfRegulationSCP

SelfRegulationSCP1和SelfRegulationSCP2資料集為深入研究自我調節相關的皮層慢電位時序資料資料集。資料集詳細介紹見:A spelling device for the paralysed。在TSLiB中基於UEAloader類來讀取資料集。

SpokenArabicDigits

SpokenArabicDigits資料集包含與口語阿拉伯數字對應的梅爾頻率倒譜系數(MFCC)的時間序列。從44名男性和44名女性阿拉伯語母語者那裡採集了由8800個(10 位數字 × 10 次重複 × 88 位說話者)樣本。每個樣本由13個梅爾頻率倒譜系數(MFCCs)組成,以代表10個阿拉伯語口語數字。共有6599個訓練用例和2199個測試用例。在TSLiB中基於UEAloader類來讀取資料集。

UWaveGestureLibrary

UWaveGestureLibrary資料集是一個有關手勢運動的時序資料集合。其中,時序資料是由每個運動對應的 X、Y、Z 座標構成,且每個序列的長度為315。該資料集一共記錄了8種不同的手勢。共有120個訓練用例和320個測試用例。在TSLiB中基於UEAloader類來讀取資料集。

1.3.5 異常檢測

異常檢測在訓練時類似於缺失值填補Imputation的訓練方式,即訓練模型重建輸入資料,並使用MSEloss來計算重建誤差。在測試階段,模型嘗試重建輸入資料。如果重建誤差高於某個閾值,則認為資料點是異常的。閾值通常設定為訓練資料的高百分位數,這樣只有那些重建誤差極高的資料點才會被標記為異常。然後得到預測的異常標籤,並與真實異常標籤進行比較,計算準確率等評估指標。

資料集 資料輸入特徵數 序列長度
MSL 55 100
PSM 25 100
SMAP 25 100
SMD 38 100
SWaT 51 100

MSL

MSL(Mars Science Laboratory rover)資料集包含火星好奇號探測器的異常情況。輸入為55個通道的探測資料。訓練集無label,測試集有狀態label。狀態label為0或者1(0為訊號沒傳送,而1訊號代表已傳送)。資料集更多介紹可檢視https://github.com/khundman/telemanom。共有58317個訓練用例、11664個驗證用例(來自訓練資料末端20%資料)和73729個測試用例。在TSLiB中基於MSLSegLoader類來讀取資料集。在訓練時,每次隨機提取100個連續序列進行資料重建。

PSM

PSM資料集是從eBay公司的多個應用程式伺服器節點內部收集的,共有132481個訓練用例、26398個驗證用例(來自訓練資料末端20%資料)和87841個測試用例。在TSLiB中基於PSMSegLoader類來讀取資料集。

SMAP

SMAP資料集是航天器資料集,輸入為25個通道的探測資料。共有135084個訓練用例、26938個驗證用例(來自訓練資料末端20%資料)和427518個測試用例。在TSLiB中基於SMAPSegLoader類來讀取資料集。

SMD

SMD(伺服器機組資料集,Server Machine Datase)由38個感測器資料組成。共有708405個訓練用例、141681個驗證用例(來自訓練資料末端20%資料)和708420個測試用例。在TSLiB中基於SMDSegLoader類來讀取資料集。

SWaT

SWaT資料集包含了水處理系統中感測器的時序異常資料。這些資料特徵涵蓋了來自51個感測器和執行器的資訊。資料集記錄了連續11天的執行情況,其中前7天為正常操作,後4天則模擬了遭受41次階段性攻擊的情況。資料的時間粒度為每秒一次。共有495000個訓練用例、99000個驗證用例(來自訓練資料末端20%資料)和449919個測試用例。在TSLiB中基於SWATSegLoader類來讀取資料集。

1.4 模型訓練

TSLiB庫為各種時序任務提供了不同模型的訓練指令碼,具體內容請參見TSLiB專案倉庫的scripts資料夾。以資料集ETTh1為例,檢視TimesNet在長時預測任務中的表現:

model_name=TimesNet

python -u run.py \
  --task_name long_term_forecast \
  --is_training 1 \
  --root_path ./dataset/ETT-small/ \
  --data_path ETTh1.csv \
  --model_id ETTh1_96_96 \
  --model $model_name \
  --data ETTh1 \
  --features M \
  --seq_len 96 \
  --label_len 48 \
  --pred_len 96 \
  --e_layers 2 \
  --d_layers 1 \
  --factor 3 \
  --enc_in 7 \
  --dec_in 7 \
  --c_out 7 \
  --d_model 16 \
  --d_ff 32 \
  --des 'Exp' \
  --itr 1 \
  --top_k 5 

不同訓練任務和不同模型對應不同的訓練引數。這些訓練引數的介紹可以透過專案run.py檔案中argparse引數找到所有引數的含義和介紹:https://github.com/thuml/Time-Series-Library/blob/main/run.py#L19-L135

在Linux環境下執行以下程式碼即可執行相關指令碼。注意,不同模型的指令碼中包含多次訓練選項,需要提取並使用單次執行選項:

./scripts/long_term_forecast/ETT_script/TimesNet_ETTh1.sh

在訓練過程中,會輸出訓練集、驗證集和測試集的資料集損失。許多深度學習領域的程式碼庫普遍傾向於在訓練過程中實時列印測試集的損失資料。這種做法目的是為了快速調參,同時避免逐個測試資料集。但是在工程專案中這樣做是不對的,因為測試資料洩露了。

Epoch: 2, Steps: 265 | Train Loss: 0.3978408 Vali Loss: 0.8001348 Test Loss: 0.3954313

在模型訓練完成後,將立即進行模型測試,以評估模型在測試集上的表現。注意,TSLiB並未提供模型推理的程式碼,需要自行編寫相關程式碼:

print('>>>>>>>start training : {}>>>>>>>>>>>>>>>>>>>>>>>>>>'.format(setting))
exp.train(setting)

print('>>>>>>>testing : {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'.format(setting))
exp.test(setting)
torch.cuda.empty_cache()

訓練好的模型權重儲存在checkpoints資料夾中。測試集詳細結果將儲存到results資料夾中。此外還有詳細的視覺化結果,以PDF格式儲存到test_results資料夾中,內容如下所示。

在上圖中,橫軸表示序列長度,縱軸則顯示預測結果。由於資料在處理過程中經過歸一化處理,預測結果和實際結果均為負值。需要注意的是,TimesNet模型在訓練和推理階段也會對輸入資料進行歸一化處理。

2 參考

  • Time-Series-Library
  • TimesNet: 時序基礎模型,預測、填補、分類等五大任務領先
  • TimesNet_tutorial.ipynb
  • TimesBlock類
  • TimesNet類
  • TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis
  • 時間序列論文標準資料集
  • TimesNet復現結果
  • M4
  • A spelling device for the paralysed

相關文章