【时间序列】时间序列建模的时间戳与时序特征衍生思路
特征錦囊:時間序列建模的時間戳與時序特征衍生思路
時間序列模型在我們?nèi)粘9ぷ髦袘?yīng)用的場景還是會很多的,比如我們?nèi)ヮA(yù)測未來的銷售單量、預(yù)測股票價格、預(yù)測期貨走勢、預(yù)測酒店入住等等,這也是我們必須要掌握時序建模的原因。而關(guān)于時間戳以及時序值的特征衍生,在建模過程中起到的作用是十分巨大的!之前寫過一篇關(guān)于日期特征操作的文章——《關(guān)于日期特征,你想知道操作都在這兒~》,可以先回顧下,里面有關(guān)于日期特征的基礎(chǔ)操作手法。
🚅 Index
01 時間序列數(shù)據(jù)類別簡介
02 時間戳的衍生思路
03 時間戳的衍生代碼分享
04 時序值的衍生思路
05 時序值的衍生代碼分享
🏆 01 時間序列數(shù)據(jù)類別簡介
我們就拿經(jīng)典的時間序列模型來說一下,一般來說數(shù)據(jù)集里的數(shù)據(jù),可以分為3大類。
1)Y值:我們也稱之為時序值。如下表中的銷量字段;
2)時間戳:標記本條記錄發(fā)生時間的字段,如下表中的統(tǒng)計日期字段。oh,對了如果不是單時間序列的,比如數(shù)據(jù)集中記錄的是多家店鋪的時序數(shù)據(jù),需要結(jié)合序列屬性信息,比如店鋪名稱、店鋪所在城市;
3)其他字段:顧名思義。
而我們今天關(guān)注的是時間戳和時序值的特征衍生。
🏆 02 時間戳的衍生思路
雖然時間戳就只有1個字段,但里面其實包含的信息量還是很多的,一般來說我們可以從下面幾個角度來拆解,衍生出一系列的變量。
1)時間戳本身特征
直接使用Pandas的series提取時間戳特征,比如說哪年、哪季度、哪月、哪周、哪日、哪時、哪分、哪秒、年里的第幾天、月里的第幾天、周里的第幾天。
2)0-1特征
一般是與真實場景結(jié)合來用,比如說工作日、周末、公眾假日(春節(jié)、端午節(jié)、中秋節(jié)等)、X初、X中、X末(X代表年、季度、月、周)、特殊節(jié)日(如運營暫停、服務(wù)暫停)、日常習慣叫法(如清晨、上午、中午、下午、傍晚、夜晚、深夜、凌晨),從而可以衍生出:
是否工作日
是否春節(jié)
是否月初
是否服務(wù)期外
是否凌晨
等等等等
3)時間差特征
一般也是與真實場景結(jié)合來用,比如說工作日、周末等等,比如:
距離春節(jié)還有N天
距離周末還有N天
舉例下月初還有N天
等等等等
🏆 03 時間戳的衍生代碼分享
首先我們捏造一些數(shù)據(jù),用來測試代碼。
#?導(dǎo)入相關(guān)庫包 import?pandas?as?pd import?numpy?as?np import?datetime import?time import?random from?calendar?import?monthrange?#?捏造數(shù)據(jù) df?=?pd.DataFrame([['零售店01',?'2021-10-01',?'2021-10-01?11:47:34',?'1993-11-03',?'深圳',?100],['零售店01',?'2021-10-02',?'2021-10-02?12:47:34',?'1993-11-04',?'深圳',?120],['零售店01',?'2021-10-03',?'2021-10-03?11:47:34',?'1993-10-03',?'深圳',?140],['零售店01',?'2021-10-04',?'2021-10-04?08:47:34',?'1993-02-03',?'深圳',?170],['零售店01',?'2021-10-05',?'2021-10-05?11:47:34',?'1993-02-03',?'深圳',?190],['零售店01',?'2021-10-06',?'2021-10-06?15:47:34',?'1993-04-03',?'深圳',?10],['零售店01',?'2021-10-07',?'2021-10-07?17:47:34',?'1993-02-03',?'深圳',?20],['零售店01',?'2021-10-08',?'2021-10-08?19:47:34',?'1993-06-03',?'深圳',?420],['零售店01',?'2021-10-09',?'2021-10-09?11:47:34',?'1993-03-03',?'深圳',?230],['零售店01',?'2021-10-10',?'2021-10-10?20:47:34',?'1993-02-20',?'深圳',?80]],columns=['店鋪名稱',?'統(tǒng)計日期',?'大促開始時間',?'店長出生日期',?'店鋪所在城市',?'銷量']) df.head()1)時間戳本身特征
這個就是提取datetime本身的實體特征,利用Pandas的Series方法即可。
2)0-1特征
這里我們需要引入一些關(guān)于真實場景的日期來結(jié)合著判斷是否。
3)時間差特征
#?獲取前一天日期 df['yesterday']?=?df['datetime64']?-?datetime.timedelta(days=1) #?日期差計算(天) df['day_dif']?=?(df['datetime64']?-?df['yesterday']).dt.days #?日期差計算(小時) df['hour_dif']?=?(df['datetime64']?-?df['yesterday']).values/np.timedelta64(1,?'h')?#?換成?D?則為?天🏆 04 時序值的衍生思路
本例中的時序值是銷量字段,一般我們在對時序值進行操作前,需要對數(shù)據(jù)的時序進行排序和補全,然后才開始操作,時序值的特征衍生主要有幾個角度。
1)時間滑動窗口統(tǒng)計
基于某段時間窗,統(tǒng)計數(shù)據(jù)情況,也叫做Rolling Window Statistics,統(tǒng)計的方式一般有min/max/mean/median/std/sum等,比如我們選擇滑動窗口為7天,那么可以衍生的變量分別是:過去7天內(nèi)銷量最小值/最大值/均值/中位數(shù)/方差/之和。
在使用此類特征的時候,要注意一下多步預(yù)測的問題。
2)lag滯后值
lag可以理解為向前滑動時間,比如lag1表示向前滑動1天,即取T-1的時序值作為當前時序的變量。
🏆 05 時序值的衍生代碼分享
1)時間滑動窗口統(tǒng)計
因為方法叫做Rolling Window Statistics,所以代碼里關(guān)于這塊的實現(xiàn)也有1個叫rolling的方法,這個方法在時序建模中很好用,后面單獨一篇文章講下。
2)lag滯后值
#?衍生lag變量 for?i?in?[1,2,3]:df["lag_{}".format(i)]?=?df['銷量'].shift(i)📚 Reference
[1] 一度讓我懷疑人生的時間戳特征處理技巧。
https://mp.weixin.qq.com/s/dUdGhWY8l77f1TiPsnjMQA
[2] 時間序列樹模型特征工程匯總
https://blog.csdn.net/fitzgerald0/article/details/104029842
[3] 時間序列的多步預(yù)測方法總結(jié)
https://zhuanlan.zhihu.com/p/390093091
[4] 時間序列數(shù)據(jù)的特征工程總結(jié)
https://zhuanlan.zhihu.com/p/388551117
[5] Pandas Series dt
https://pandas.pydata.org/docs/reference/api/pandas.Series.dt.date.html
總結(jié)
以上是生活随笔為你收集整理的【时间序列】时间序列建模的时间戳与时序特征衍生思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue学习:事件传递(冒泡和捕获),事件
- 下一篇: android如何获得开发者权限,And