偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

六種有效的時(shí)間序列數(shù)據(jù)特征工程技術(shù)(使用Python)

開發(fā) 前端
在商業(yè)分析中,"時(shí)間"是一個(gè)核心概念。我們基于時(shí)間組件來(lái)分析銷售數(shù)據(jù)、收入、利潤(rùn)、增長(zhǎng),甚至進(jìn)行預(yù)測(cè)。然而,對(duì)于初學(xué)者來(lái)說(shuō),這可能是一個(gè)復(fù)雜的主題。在處理時(shí)間敏感的數(shù)據(jù)集時(shí),需要考慮時(shí)間序列數(shù)據(jù)的多個(gè)細(xì)微方面。

在商業(yè)分析中,"時(shí)間"是一個(gè)核心概念。我們基于時(shí)間組件來(lái)分析銷售數(shù)據(jù)、收入、利潤(rùn)、增長(zhǎng),甚至進(jìn)行預(yù)測(cè)。然而,對(duì)于初學(xué)者來(lái)說(shuō),這可能是一個(gè)復(fù)雜的主題。在處理時(shí)間敏感的數(shù)據(jù)集時(shí),需要考慮時(shí)間序列數(shù)據(jù)的多個(gè)細(xì)微方面。

在這個(gè)領(lǐng)域,沒有放之四海而皆準(zhǔn)的方法。我們不必總是強(qiáng)制使用傳統(tǒng)的時(shí)間序列技術(shù),如ARIMA(從經(jīng)驗(yàn)中得出這個(gè)結(jié)論)。在某些項(xiàng)目中,如需求預(yù)測(cè)或點(diǎn)擊預(yù)測(cè),可能需要依賴監(jiān)督學(xué)習(xí)算法。這就是時(shí)間序列特征工程發(fā)揮作用的地方。它有潛力將時(shí)間序列模型從一個(gè)良好的模型提升為一個(gè)強(qiáng)大的預(yù)測(cè)工具。

在本文中,我們將探討使用日期時(shí)間列提取有用信息的各種特征工程技術(shù)。

1、時(shí)間序列簡(jiǎn)介

在深入特征工程技術(shù)之前,讓我們先回顧一些基本的時(shí)間序列概念。這些概念將貫穿全文,因此提前熟悉它們很有幫助。是什么使時(shí)間序列項(xiàng)目區(qū)別于傳統(tǒng)機(jī)器學(xué)習(xí)問題呢?

在時(shí)間序列中,數(shù)據(jù)以等間隔捕獲,且序列中的每個(gè)連續(xù)數(shù)據(jù)點(diǎn)都依賴于其先前的值。

讓我們通過一個(gè)簡(jiǎn)單的例子來(lái)理解這一點(diǎn)。如果想預(yù)測(cè)某公司今天的股票價(jià)格,了解昨天的收盤價(jià)會(huì)有幫助,這是肯定的,如果我們有過去幾個(gè)月或幾年的數(shù)據(jù),預(yù)測(cè)網(wǎng)站的流量會(huì)容易得多。

我們還需要考慮另一個(gè)因素 - 時(shí)間序列數(shù)據(jù)可能存在某些趨勢(shì)或季節(jié)性。下面這張顯示某航空公司多年來(lái)預(yù)訂票數(shù)的圖表:

我們可以清晰地看到一個(gè)上升趨勢(shì)。這類信息可以用于做出更準(zhǔn)確的預(yù)測(cè)。

2、設(shè)置時(shí)間序列數(shù)據(jù)的問題

我們將處理一個(gè)有趣的問題來(lái)學(xué)習(xí)時(shí)間序列的特征工程技術(shù)。

我們有'JetRail'的歷史數(shù)據(jù),這是一種使用先進(jìn)技術(shù)高速運(yùn)行的公共鐵路交通系統(tǒng)。JetRail的使用量最近有所增加,我們需要根據(jù)過去的數(shù)據(jù)預(yù)測(cè)未來(lái)7個(gè)月JetRail的客流量。

加載數(shù)據(jù)集:

import pandas as pd                        
 data = pd.read_csv('Train_SU63ISt.csv')                      
 data.dtypes

這里有兩列 - 這是一個(gè)典型的單變量時(shí)間序列。日期變量的數(shù)據(jù)類型被識(shí)別為對(duì)象,即它被當(dāng)作分類變量處理。我們需要將其轉(zhuǎn)換為DateTime變量??梢允褂胮andas中的datetime函數(shù)來(lái)實(shí)現(xiàn)這一點(diǎn):

import pandas as pd                        
 data = pd.read_csv('Train_SU63ISt.csv')                      
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')                        
 data.dtypes

現(xiàn)在已經(jīng)準(zhǔn)備好了數(shù)據(jù),讓我們探討可以從這個(gè)變量中提取的不同特征。在介紹每種特征工程技術(shù)時(shí),將討論該技術(shù)可能有用的不同場(chǎng)景。

注意:本文中使用了一個(gè)簡(jiǎn)單的時(shí)間序列問題來(lái)演示不同的特征工程技術(shù)。只要存在日期時(shí)間列,就可以在自選的數(shù)據(jù)集上應(yīng)用這些技術(shù)。

3、日期相關(guān)特征

如果你熟悉預(yù)測(cè)特定產(chǎn)品銷售的任務(wù)。我們就可以根據(jù)歷史數(shù)據(jù)分析工作日和周末的銷售模式,獲取關(guān)于日、月、年等的信息可能對(duì)預(yù)測(cè)值有重要意義。

我們的任務(wù)是預(yù)測(cè)未來(lái)7個(gè)月內(nèi)每小時(shí)使用JetRail的人數(shù)。 這個(gè)數(shù)字在工作日可能會(huì)較高,而在周末或節(jié)假日期間可能會(huì)較低。因此一周中的具體日期(工作日或周末)或月份將是重要的因素。

在Python中提取這些特征相對(duì)簡(jiǎn)單:

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['year']=data['Datetime'].dt.year  
 data['month']=data['Datetime'].dt.month  
 data['day']=data['Datetime'].dt.day  
   
 data['dayofweek_num']=data['Datetime'].dt.dayofweek    
 data['dayofweek_name']=data['Datetime'].dt.weekday_name  
   
 data.head()

4、 時(shí)間相關(guān)特征

如果有時(shí)間戳,就可以提取更細(xì)粒度的特征。例如可以確定記錄數(shù)據(jù)的一天中的具體小時(shí)或分鐘,并比較營(yíng)業(yè)時(shí)間和非營(yíng)業(yè)時(shí)間的趨勢(shì)。

如果能夠從時(shí)間戳中提取'小時(shí)'特征,就可以對(duì)數(shù)據(jù)進(jìn)行更深入的分析。JetRail的客流量是在早晨、下午還是晚上更高,或者可以使用該值來(lái)計(jì)算整周的平均每小時(shí)客流量,即上午9-10點(diǎn)、10-11點(diǎn)等時(shí)間段(貫穿整周)使用JetRail的人數(shù)。

提取基于時(shí)間的特征與提取日期相關(guān)特征的方法類似。可以首先將列轉(zhuǎn)換為DateTime格式,然后使用.dt訪問器。以下是在Python中的實(shí)現(xiàn)方法:

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['Hour'] = data['Datetime'].dt.hour  
 data['minute'] = data['Datetime'].dt.minute  
   
 data.head()

同樣可以從日期列中提取多種特征。以下是可以生成的特征的完整列表:

5、滯后特征

在處理時(shí)間序列問題時(shí),有一個(gè)關(guān)鍵點(diǎn),可以利用目標(biāo)變量進(jìn)行特征工程!

考慮這樣一個(gè)場(chǎng)景 —正在預(yù)測(cè)一家公司的股票價(jià)格。那么前一天的股票價(jià)格對(duì)做出預(yù)測(cè)很重要,對(duì)吧?換句話說(shuō),t時(shí)刻的值極大地受到t-1時(shí)刻值的影響。這些過去的值被稱為滯后,所以t-1是滯后1,t-2是滯后2,依此類推。

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['lag_1'] = data['Count'].shift(1)  
 data = data[['Datetime', 'lag_1', 'Count']]  
 data.head()

我們?yōu)樾蛄猩闪藴笠惶卣?。但為什么選擇滯后一?為什么不是五或七?這是一個(gè)值得思考的問題。

我們選擇的滯后值應(yīng)該基于個(gè)別值與其過去值的相關(guān)性。

如果序列呈現(xiàn)每周趨勢(shì),即上周一的值可以用來(lái)預(yù)測(cè)這周一的值,那么創(chuàng)建七天的滯后特征可能更合適。

還可以創(chuàng)建多個(gè)滯后特征!假設(shè)想要從滯后1到滯后7的特征則可以讓模型決定哪個(gè)是最有價(jià)值的。例如訓(xùn)練一個(gè)線性回歸模型,它會(huì)為滯后特征分配適當(dāng)?shù)臋?quán)重(或系數(shù)):

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['lag_1'] = data['Count'].shift(1)  
 data['lag_2'] = data['Count'].shift(2)  
 data['lag_3'] = data['Count'].shift(3)  
 data['lag_4'] = data['Count'].shift(4)  
 data['lag_5'] = data['Count'].shift(5)  
 data['lag_6'] = data['Count'].shift(6)  
 data['lag_7'] = data['Count'].shift(7)  
   
 data = data[['Datetime', 'lag_1', 'lag_2', 'lag_3', 'lag_4', 'lag_5', 'lag_6', 'lag_7', 'Count']]  
 data.head(10)

確定相關(guān)性顯著的滯后有多種方法。例如可以使用ACF(自相關(guān)函數(shù))和PACF(偏自相關(guān)函數(shù))圖。

  • ACF: ACF圖衡量時(shí)間序列與其滯后版本之間的相關(guān)性
  • PACF: PACF圖衡量時(shí)間序列與其滯后版本之間的相關(guān)性,但在消除了已由中間比較解釋的變異之后

對(duì)于我們的例子,這里是ACF和PACF圖:

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
 plot_acf(data['Count'], lags=10)
 plot_pacf(data['Count'], lags=10)

偏自相關(guān)函數(shù)顯示與第一個(gè)滯后高度相關(guān),與第二個(gè)和第三個(gè)滯后的相關(guān)性較低。自相關(guān)函數(shù)顯示緩慢衰減,這表明未來(lái)值與其過去值有很強(qiáng)的相關(guān)性。

需要注意的是 — 移動(dòng)的次數(shù)等于數(shù)據(jù)中減少的值的數(shù)量。這樣在開始處看到一些包含NaN的行。這是因?yàn)榈谝粋€(gè)觀察沒有滯后值。在訓(xùn)練模型時(shí),需要從訓(xùn)練數(shù)據(jù)中移除這些行。

6. 滾動(dòng)窗口特征

在上一節(jié)中,我們討論了如何使用前面的值作為特征。

那么,如何根據(jù)過去的值計(jì)算一些統(tǒng)計(jì)量呢?這種方法被稱為滾動(dòng)窗口法,因?yàn)槊總€(gè)數(shù)據(jù)點(diǎn)的窗口都是不同的。

下面這個(gè)動(dòng)圖很好地解釋了這個(gè)概念:

由于這看起來(lái)像是一個(gè)隨每個(gè)新數(shù)據(jù)點(diǎn)滑動(dòng)的窗口,使用這種方法生成的特征被稱為"滾動(dòng)窗口"特征。

現(xiàn)在需要考慮的問題是 — 如何在這里進(jìn)行特征工程?讓我們從簡(jiǎn)單的開始。將選擇一個(gè)窗口大小,計(jì)算窗口內(nèi)值的平均值,并將其用作特征。下面是在Python中的實(shí)現(xiàn):

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['rolling_mean'] = data['Count'].rolling(window=7).mean()  
 data = data[['Datetime', 'rolling_mean', 'Count']]  
 data.head(10)

類似地,可以考慮計(jì)算選定窗口內(nèi)的總和、最小值、最大值等作為特征。

在時(shí)間序列中,近期性是一個(gè)重要因素。越接近當(dāng)前日期的值通常包含更多相關(guān)信息。

因此我們可以使用加權(quán)平均值,給予最近的觀察值更高的權(quán)重。數(shù)學(xué)上,過去7個(gè)值在時(shí)間t的加權(quán)平均值可以表示為:

w_avg = w1(t-1) + w2(t-2) + . . . . + w7*(t-7)

其中,w1>w2>w3> . . . . >w7。

7、擴(kuò)展窗口特征

這是滾動(dòng)窗口技術(shù)的一個(gè)高級(jí)版本。在滾動(dòng)窗口中,窗口的大小是固定的,而窗口隨時(shí)間推移而滑動(dòng)。因此只考慮最近的一組固定數(shù)量的值,忽略了更早的數(shù)據(jù)。

擴(kuò)展窗口特征的核心思想是考慮所有過去的值。

下圖展示了擴(kuò)展窗口函數(shù)的工作原理:

每一步窗口的大小都會(huì)增加一個(gè)單位,因?yàn)樗紤]了序列中的每個(gè)新值。這可以在Python中使用expanding()函數(shù)輕松實(shí)現(xiàn)。讓我們使用相同的數(shù)據(jù)來(lái)編寫代碼:

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')  
   
 data['expanding_mean'] = data['Count'].expanding(2).mean()  
 data = data[['Datetime','Count', 'expanding_mean']]  
 data.head(10)

8、領(lǐng)域特定特征

這是特征工程的精髓所在。

對(duì)問題陳述有深入理解,對(duì)最終目標(biāo)有清晰認(rèn)識(shí),以及對(duì)可用數(shù)據(jù)有充分了解,這些都是為模型設(shè)計(jì)有效的領(lǐng)域特定特征的關(guān)鍵。

讓我們通過一個(gè)例子來(lái)深入探討這一點(diǎn)。

以下是零售商提供的多個(gè)商店和產(chǎn)品的數(shù)據(jù)。我們的任務(wù)是預(yù)測(cè)產(chǎn)品的未來(lái)需求??梢钥紤]various characteristic,如lag特性或過去值的平均值等。

但是,讓我們思考一個(gè)問題 — 在整個(gè)數(shù)據(jù)集中從滯后1到滯后7構(gòu)建滯后特征是否真的合適?

顯然不是。不同的商店和產(chǎn)品的需求模式可能有顯著差異。在這種情況下,我們可以考慮基于商店-產(chǎn)品組合來(lái)創(chuàng)建滯后特征。 此外,如果我們了解產(chǎn)品特性和市場(chǎng)趨勢(shì),將能夠生成更準(zhǔn)確、更有針對(duì)性的特征。

不僅如此,對(duì)領(lǐng)域和數(shù)據(jù)的深入理解還將幫助我們更好地選擇滯后值和窗口大小?;陬I(lǐng)域知識(shí),可能能夠引入外部數(shù)據(jù)集,為模型增添更多價(jià)值。

例如,可以考慮以下問題:銷售是否受當(dāng)天天氣的影響?銷售是否會(huì)在國(guó)定假日期間出現(xiàn)顯著變化?如果是,那么可以利用外部數(shù)據(jù)集,將節(jié)假日信息作為一個(gè)特征納入模型。

時(shí)間序列的驗(yàn)證技術(shù)

我們討論的所有特征工程技術(shù)都可以用來(lái)將時(shí)間序列問題轉(zhuǎn)化為監(jiān)督機(jī)器學(xué)習(xí)問題。完成這一步后,就可以應(yīng)用線性回歸和隨機(jī)森林等機(jī)器學(xué)習(xí)算法。但在進(jìn)入模型構(gòu)建過程之前,還有一個(gè)關(guān)鍵步驟需要注意 — 為時(shí)間序列創(chuàng)建合適的驗(yàn)證集。

對(duì)于傳統(tǒng)的機(jī)器學(xué)習(xí)問題,我們通常隨機(jī)選擇數(shù)據(jù)子集作為驗(yàn)證集和測(cè)試集。但在時(shí)間序列問題中,每個(gè)數(shù)據(jù)點(diǎn)都依賴于其過去的值。如果我們隨機(jī)打亂數(shù)據(jù),我們可能會(huì)在未來(lái)數(shù)據(jù)上訓(xùn)練模型,而用過去的數(shù)據(jù)進(jìn)行預(yù)測(cè),這顯然是不合理的。

在處理時(shí)間序列問題時(shí),關(guān)鍵是要仔細(xì)構(gòu)建驗(yàn)證集,保持?jǐn)?shù)據(jù)的時(shí)間順序。

讓我們?yōu)槲覀兊膯栴}創(chuàng)建一個(gè)驗(yàn)證集。首先需要檢查擁有的數(shù)據(jù)跨度:

import pandas as pd  
 data = pd.read_csv('Train_SU63ISt.csv')  
 data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
 data['Datetime'].min(), data['Datetime'].max(), (data['Datetime'].max() -data['Datetime'].min())
 (Timestamp('2012-08-25 00:00:00'), Timestamp('2014-09-25 23:00:00'), Timedelta('761 days 23:00:00'))

我們有大約25個(gè)月的數(shù)據(jù)。保留最后三個(gè)月的數(shù)據(jù)用于驗(yàn)證,使用剩余的數(shù)據(jù)進(jìn)行訓(xùn)練:

data.index = data.Datetime
 Train=data.loc['2012-08-25':'2014-06-24']
 valid=data.loc['2014-06-25':'2014-09-25']  
 Train.shape, valid.shape
 ((16056, 3), (2232, 3))

很好!我們現(xiàn)在已經(jīng)準(zhǔn)備好了訓(xùn)練集和驗(yàn)證集??梢允褂眠@些特征工程技術(shù),并在這些數(shù)據(jù)上構(gòu)建和評(píng)估機(jī)器學(xué)習(xí)模型了。

總結(jié)

時(shí)間序列分析常被視為一個(gè)具有挑戰(zhàn)性的主題。這是可以理解的,因?yàn)樵谔幚砣掌诤蜁r(shí)間組件時(shí)涉及許多復(fù)雜的因素。但一旦掌握了基本概念并能夠熟練運(yùn)用特征工程技術(shù),將能夠更加得心應(yīng)手地處理時(shí)間序列項(xiàng)目。

在本文中,我們討論了一些可以用來(lái)處理時(shí)間序列數(shù)據(jù)的實(shí)用技術(shù)。通過使用這些特征工程技術(shù),可以將時(shí)間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題,并構(gòu)建有效的回歸模型。

責(zé)任編輯:華軒 來(lái)源: DeepHub IMBA
相關(guān)推薦

2024-09-29 16:26:15

2022-01-11 18:21:11

存儲(chǔ)技術(shù)數(shù)據(jù)

2021-12-10 13:08:31

數(shù)據(jù)倉(cāng)庫(kù)BI數(shù)據(jù)存儲(chǔ)

2019-10-12 01:10:09

物聯(lián)網(wǎng)無(wú)線技術(shù)IOT

2018-07-23 15:35:17

機(jī)器學(xué)習(xí)特征工程技能數(shù)據(jù)科學(xué)

2021-07-29 09:00:00

Python工具機(jī)器學(xué)習(xí)

2018-09-04 10:24:35

網(wǎng)絡(luò)流量提取工具

2025-05-19 00:02:00

數(shù)據(jù)脫敏加密算法數(shù)據(jù)庫(kù)

2010-06-13 11:28:39

UML序列圖

2022-12-05 16:38:48

Python統(tǒng)計(jì)信息預(yù)測(cè)模型

2011-03-31 14:53:13

數(shù)據(jù)中心節(jié)能

2025-08-07 02:11:00

2019-09-02 11:14:08

隔離虛擬機(jī)操作系統(tǒng)

2023-06-01 16:45:11

React開發(fā)JavaScript

2023-08-15 15:44:55

React開發(fā)

2023-09-06 08:00:00

ChatGPT數(shù)據(jù)分析

2011-06-07 09:36:18

2012-10-15 13:26:31

云計(jì)算架構(gòu)

2016-01-15 17:36:29

云計(jì)算云應(yīng)用

2025-02-27 00:00:30

SpringJava方式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)