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

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

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

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