組合特征的構(gòu)建技巧,如何快速構(gòu)建百大組合特征池。
特征工程--無序/有序類別/數(shù)值特征的組合特征!

本文我們討論無序類別特征和有序類別特征以及無序類別特征和數(shù)值特征的組合特征構(gòu)建策略,這是數(shù)據(jù)競賽中的核心部分,本文將介紹如何基于這些特征構(gòu)建出上百的特征,并介紹其中常見的一些非常有效的黃金組合特征。

1. 有序類別特征當(dāng)無序
當(dāng)我們將有序類別特征當(dāng)作是無序類別特征的時候,所有無序類別特征+無序類別特征的策略在此便可以被拿過來直接使用。
2. 有序類別特征預(yù)處理再組合
有序類別特征,因為存在相對大小關(guān)系,可以基于大小判斷先對有序類別特征進(jìn)行重組,重組的策略有很多,例如:
直接使用現(xiàn)有的工具包分箱; 基于業(yè)務(wù)理解進(jìn)行分組。
我們以用戶的消費為例,假設(shè)我們有一列特征為用戶的消費范圍,共分為十組:0-1000、1001-3000、3001-5000、5001-10000、10001-20000、2001-50000、50001-100000、、100001-200000、200001-500000、500001以上。如果我們知道部分業(yè)務(wù)消息,消費金額在5000以下的為普通用戶,在5001-20000之間的為白銀用戶,在20001-100000之間的為黃金用戶,100001及之上的為鉆石用戶。分完組之后將有序類別特征當(dāng)無序類別特征處理即可。
3. 有序類別特征當(dāng)做數(shù)值特征處理
此處的內(nèi)容我們會在無序類別特征和數(shù)值特征的組合特征處一起介紹。

該小節(jié)內(nèi)的為了方便表示我們將A作為無序類別特征,B作為數(shù)值特征。
1. 數(shù)值特征當(dāng)做有序類別特征
數(shù)值特征可以作為高基數(shù)的有序類別特征來對待,所以在之前用于無序類別特征和有序類別特征的策略在此可以直接使用。
2. 基于A/B的統(tǒng)計特征
我們將可以直接使用工具包進(jìn)行計算得到的統(tǒng)計特征df.groupby(A)[B].transform(sts)稱之為:A關(guān)于B的傳統(tǒng)統(tǒng)計特征。這是非常通用的一組特征,其構(gòu)建的思路也非常簡單,就是計算組內(nèi)(無序類別特征)數(shù)值特征的統(tǒng)計信息,例如:
均值; 方差; 最大值; 最小值; 中位數(shù); 偏度; 分位數(shù)(四分位數(shù)等); 眾數(shù); skewness; 峰度系數(shù); 求和; 其它統(tǒng)計特征。
改組特征幾乎在所有的競賽中都會被使用和構(gòu)建,而且往往能帶來非常大的提升。很多朋友會在這里枚舉十幾甚至更多的統(tǒng)計特征。
df['A_B_mean'] = df.groupby('A')['B'].transform('mean').values
df['B_A_median'] = df.groupby('B')['A'].transform('median').values
df['A_B_std'] = df.groupby('A')['B'].transform('std').values
df['A_B_max'] = df.groupby('A')['B'].transform('max').values
df['A_B_min'] = df.groupby('A')['B'].transform('min').values
......
3. B+A/B的統(tǒng)計演變特征
此處我們講的 B+A關(guān)于B統(tǒng)計演變特征是基于原始B特征和A關(guān)于B的統(tǒng)計特征衍生而來,相對復(fù)雜一些。下面我們列舉一些常見的有效特征。
3.1.流量平滑特征
該特征也是較為通用的特征之一,直接用數(shù)值特征處于統(tǒng)計均值或者中位數(shù)即可,幾乎所有的數(shù)據(jù)競賽都可以直接使用。
df['B_div_A_B_mean'] = df['B'] / (df['A_B_mean'] + 1e-5)
df['B_div_A_B_median'] = df['B'] / (df['A_B_median'] + 1e-5)
3.2.黃金組合特征
該特征是之前Kaggle GM在kaggle論壇分享的,稱其為黃金組合特征,一共有三個特征。
原始的數(shù)值特征; 基于A關(guān)于B的均值特征; B減去A關(guān)于B的均值特征;
這三個一起使用時得到的效果往往是最佳的。
df['B_minus_A_B_mean'] = df['B'] - df['A_B_mean']
3.3.組內(nèi)歸一化特征
該特征的構(gòu)建和我們平時在對數(shù)據(jù)進(jìn)行歸一化是類似的,減去組內(nèi)的均值再除以標(biāo)準(zhǔn)差。
df['B_minus_A_B_mean'] = (df['B'] - df['A_B_mean']) / (df['A_B_std'] + 1e-9)
3.4.其它
上面是我們見到目前最為有效的三個特征組合策略,肯定還有其它的特征組合策略,我們只需要將我們的統(tǒng)計特征和B進(jìn)行其它形式的加減乘除等等變化即可得到成百上千的特征,但是最終的效果如何則不得而知。
4. A/B的統(tǒng)計+A/B統(tǒng)計演變特征
A/B的統(tǒng)計+A/B統(tǒng)計演變特征是直接基于A/B統(tǒng)計特征之后得到的值進(jìn)行加減乘除等轉(zhuǎn)換之后得到的特征,此處我們重點列舉幾個常見的有效的特征。
4.1.Gap特征
Gap特征就是計算一些分位數(shù)的一些差值信息,這個特征在一些分位數(shù)為較強(qiáng)特征的競賽中可以拿到非常好的效果。
df['A_B_gap1'] = df['A_B_0.9q'] - df['A_B_0.1_q']
df['A_B_gap2'] = df['A_B_0.75q'] - df['A_B_0.25_q']
...
4.2.數(shù)據(jù)傾斜
均值大于中位數(shù),正傾斜;均值小于中位數(shù),負(fù)傾斜。
此處我們用差值和比例值來表示這些信息。
df['magic_feature1_1'] = df['A_B_median'] - df['A_B_mean']
df['magic_feature1_2'] = df['magic_feature1_1'].map(abs)
df['magic_feature2'] = df['A_B_median'] / df['A_B_mean']
4.3.變異系數(shù)(CV):
變異系數(shù)度量標(biāo)準(zhǔn)差相對于均值的離中趨勢,我們用=標(biāo)準(zhǔn)差/均值的方式來計算。
df['cv'] = df['A_B_std'] / df['A_B_mean']
4.4.其它
上面三種在所有的問題中都是非常值得嘗試的特征,我們也可以基于其它不同的特征進(jìn)行組合構(gòu)建新的特征。
雙一流高校研究生團(tuán)隊創(chuàng)建 ↓
專注于目標(biāo)檢測原創(chuàng)并分享相關(guān)知識 ?
整理不易,點贊三連!
