1. 程式人生 > >時間序列(time serie)分析系列之時間序列特徵(feature)7

時間序列(time serie)分析系列之時間序列特徵(feature)7

文章目錄

1.問題描述

時間序列資料作為一種典型的資料,常存在於各行各業。比如客流、車流、銷量、KPI指標等等。
如何對時序資料加以利用,比如做未來預測,交通擁堵分類等問題。在採用機器學習演算法之前,首先需要我們構建特徵。因為大多數時序資料都是單變數或者維度特別少,所以特徵的構建就比較重要。
筆者總結了幾種特徵,供大家參考,有更好的思路,非常歡迎提出來大家一起探討。


2.特徵構建

常見的時序資料格式如下:

時間time 物件value
2019-01-01 1234
2019-01-02 2334
2019-01-03 4324
2019-01-04 5314
2019-01-05 5890
2019-01-06 6782

對於上述這種單變數時序資料,如何構造特徵呢?也不外乎兩點,時間和物件:

  • 時間特徵
  • 平移特徵
  • 視窗特徵

2.1時間特徵

因為時序資料是與時間相關聯的資料分佈於變化。因此可以提取出部分時間特徵:

  • 每天中的小時hour
  • 每個月中的天day
  • 每年中的季度season
  • 工作日/非工作日weekday/weekend
  • 節假日是否holiday or not
    如何提取相關特徵呢?在pandas模組中,可以很容易提取。
data["time"] = pd.to_datetime(data["time"])#設定時間格式
data.set_index('time',drop=True,inplace=
True)#將時間列設定為索引 data["hour"] = data.index.hour#構建特徵 data["day"] = data.index.weekday data["month"] = data.index.month ...
時間time 物件value day month weekday
2019-01-01 1234 1 1 1
2019-01-02 2334 2 1 2
2019-01-03 4324 3 1 3
2019-01-04 5314 4 1 4
2019-01-05 5890 5 1 5
2019-01-06 6782 6 1 6

可以通過時間序列的週期等特徵,提取相關的時間特徵,檢視重要性,最終保留相關特徵。


2.2平移特徵

平移特徵也成為lag特徵,通過將物件value進行平移操作,獲取的特徵。平移特徵可以將時序資料,轉化為監督問題。

時間time 物件value lag_1 lag_2
2019-01-01 1234 NaN NaN
2019-01-02 2334 1234 NaN
2019-01-03 4324 2334 1234
2019-01-04 5314 4324 2334
2019-01-05 5890 5314 4324
2019-01-06 6782 5890 5314

從上表可以看出平移(lag)特徵的意義了吧,通過將物件value向前滑動,如lag_1,向前滑動1位,lag_2,向前滑動2位。
那如何選擇lag的大小呢?
這裡面還有沒確定的說法,按照筆者的嘗試,主要根據你的時序資料的特性進行嘗試。比如按照時序資料的週期,以及臨近時間的相關性等。
但如果lag的大小選擇過小的話,容易產生過擬合;選擇過大的話,容易產生欠擬合。可以嘗試半個週期大小上下浮動除錯。


2.3視窗特徵

除了上述特徵以外呢,還可以將時間和物件兩個特徵結合起來,構建新的特徵,基於視窗的特徵。

  • 視窗內均值mean
  • 視窗內最大值max
  • 視窗內最小值min
時間time 物件value lag_1 window_2_max
2019-01-01 1234 NaN NaN
2019-01-02 2334 1234 1234
2019-01-03 4324 334 1234
2019-01-04 5314 1324 1324
2019-01-05 5890 2314 2314
2019-01-06 6782 1890 2314

注意這裡面數據與上面的圖表略有區別。window_2_max,window=2的最大值。其他的視窗特徵類似。
不一定所有特徵都有用,還需要嘗試,檢視特徵重要性。
視窗大小的選擇,也是需要嘗試的。

3.總結

上述內容,主要講述了時序資料,如何提取相關的特徵。希望在實踐中不斷的嘗試。如果有好的想法,歡迎留言。謝謝。