Kaggle知識(shí)點(diǎn):5種時(shí)序特征處理方法
在Kaggle競(jìng)賽匯總?cè)掌谑菐в行畔⒎浅6嗟淖侄危c普通的字段不同,時(shí)序字段可以將歷史的信息保留,同時(shí)帶有季節(jié)性和周期性的信息。
1 與日期相關(guān)的特征
在處理時(shí)序特征時(shí),可以根據(jù)歷史數(shù)據(jù)提取出工作日和周末信息,擁有關(guān)于日、月、年等的信息對(duì)于預(yù)測(cè)值非常有用。
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()

2 與時(shí)間相關(guān)的特征
如果我們有時(shí)間戳,我們可以類(lèi)似地提取更細(xì)粒度的特征。例如,我們可以確定記錄數(shù)據(jù)的當(dāng)天的小時(shí)或分鐘,并比較營(yíng)業(yè)時(shí)間和非營(yíng)業(yè)時(shí)間之間的趨勢(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['Hour']?=?data['Datetime'].dt.hour?
data['minute']?=?data['Datetime'].dt.minute?
data.head()

我們可以從日期列中提取一些特征。以下是我們可以生成的完整功能列表:

3 滯后特征 Lag Features
如果我們正在預(yù)測(cè)一家公司的股票價(jià)格。前一天的股價(jià)對(duì)于做出預(yù)測(cè)很重要,時(shí)間的值受時(shí)間的值的影響很大。過(guò)去的值稱(chēng)為滯后數(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['lag_1']?=?data['Count'].shift(1)
data?=?data[['Datetime',?'lag_1',?'Count']]
data.head()

我們可以讓模型決定哪個(gè)是最有價(jià)值的。因此,如果我們訓(xùn)練線性回歸模型,它將為滯后特征分配適當(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ù))圖。
4 滑動(dòng)/滾動(dòng)窗口特征
如何根據(jù)過(guò)去的值計(jì)算一些統(tǒng)計(jì)值?這種方法稱(chēng)為滾動(dòng)窗口方法,因?yàn)槊總€(gè)數(shù)據(jù)點(diǎn)的窗口都不同。

由于這看起來(lái)像一個(gè)隨著每個(gè)下一個(gè)點(diǎn)滑動(dòng)的窗口,因此使用此方法生成的特征稱(chēng)為“滾動(dòng)窗口”特征。我們將選擇一個(gè)窗口大小,取窗口中值的平均值,并將其用作特征。讓我們?cè)?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)

5 擴(kuò)展窗口特征
在滾動(dòng)窗口的情況下,窗口的大小是恒定的,擴(kuò)展窗口功能背后的想法是它考慮了所有過(guò)去的值。每一步,窗口的大小都會(huì)增加 1,因?yàn)樗紤]了系列中的每個(gè)新值。
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)


相關(guān)閱讀:
