在多數(shù)數(shù)據(jù)和機(jī)器學(xué)習(xí)的blog里,特征工程 Feature Engineering 都很少被提到。做模型的或者搞Kaggle比賽的人認(rèn)為這些搞feature工作繁瑣又不重要不如多堆幾個(gè)模型,想入手實(shí)際問(wèn)題的小朋友又不知道怎么提取feature來(lái)建模型。我就用個(gè)性化推薦系統(tǒng)做個(gè)例子,簡(jiǎn)單說(shuō)說(shuō)特征工程在實(shí)際的問(wèn)題里是怎么做。
定義
特征工程 Feature Engineering 在一篇Kaggle blog上有很好的定義:
By feature engineering, I mean using domain specific knowledge or automatic methods for generating, extracting, removing or altering features in the data set.
基本上說(shuō)是,用目標(biāo)問(wèn)題所在的特定領(lǐng)域知識(shí)或者自動(dòng)化的方法來(lái)生成、提取、刪減或者組合變化得到特征。這些特征可能是顯而易見(jiàn)比如說(shuō)商品的品牌,也有可能需要復(fù)雜的模型計(jì)算,比如Facebook上用戶A和用戶B之間關(guān)系的緊密程度(FB使用了一個(gè)決策樹來(lái)生成一個(gè)描述這個(gè)程度的向量,這個(gè)向量決定了他們News Feed推薦內(nèi)容。)。這篇blog覆蓋了一些用領(lǐng)域知識(shí)的方法,自動(dòng)化方法在這里沒(méi)有提及。
背景
個(gè)性化推薦系統(tǒng) Personalized recommender system 比其他的機(jī)器學(xué)習(xí)方法更依賴特征工程,所以我拿它來(lái)當(dāng)作問(wèn)題的背景,結(jié)合我之前做過(guò)的一個(gè)推薦系統(tǒng)里相關(guān)經(jīng)驗(yàn)來(lái)說(shuō)說(shuō)特征工程具體是個(gè)什么東西。
關(guān)于推薦系統(tǒng)和個(gè)性化推薦系統(tǒng),可以參看 wikipedia 具體不贅述,以下的要點(diǎn)也盡量點(diǎn)到為止,否則這篇又成了“收藏了Mark了”但是不會(huì)讀的冗余長(zhǎng)文。以下如果不特別指出,我就用推薦系統(tǒng)作為“個(gè)性化商品推薦系統(tǒng)”的簡(jiǎn)稱。簡(jiǎn)單來(lái)說(shuō),推薦系統(tǒng)就是你買了商品A,我們給你算出來(lái)個(gè)推薦列表 B C D E 等等。商業(yè)上來(lái)說(shuō)個(gè)性化的推薦比一般化的推薦更能吸引顧客點(diǎn)擊或購(gòu)買,所以利用特征功能提取這些“個(gè)性化”的特征放到推薦模型里就很重要,比如在我們的推薦系統(tǒng)里,把“品牌”的特征加進(jìn)去,相對(duì)于 baseline 提高了20%左右的nDCG。推薦系統(tǒng)可以是機(jī)器學(xué)習(xí)的模型也可以是基于關(guān)聯(lián)或者統(tǒng)計(jì)規(guī)則的模型,對(duì)后者來(lái)說(shuō)特征對(duì)推薦效果的提升占的比重更大。
利用領(lǐng)域知識(shí)生成和提取特征
這幾乎是特征工程里占大半時(shí)間的工作了:如何描述個(gè)性化并且用變量表示成特征。一般方法就是,想想你就是該商品的目標(biāo)用戶,你會(huì)想要什么樣的個(gè)性化。
比如說(shuō)我們做一個(gè)女性衣服類的推薦引擎,這個(gè)網(wǎng)站賣各種牌子顏色尺寸等。我們列出可能相關(guān)的一些特征,然后在實(shí)際購(gòu)買數(shù)據(jù)里面檢查他們是否對(duì)購(gòu)買結(jié)果產(chǎn)生影響和關(guān)聯(lián)性。比如,從購(gòu)買數(shù)據(jù)里可以看出,女性對(duì)衣服的品牌多數(shù)有固定偏好,比如我太太就很喜歡LOFT的衣服。這些能對(duì)購(gòu)買產(chǎn)生影響的因素都可以成為特征。
這部分工作需要很多領(lǐng)域知識(shí),一般需要一組的研究人員討論,要認(rèn)真的思考這個(gè)特定問(wèn)題有些什么和別的問(wèn)題不同的特征,也建議和市場(chǎng)部銷售部等有領(lǐng)域知識(shí)的專家討論。經(jīng)驗(yàn)上來(lái)說(shuō),這些特征提取的越多越好,并不用擔(dān)心特征過(guò)多,因?yàn)橥扑]系統(tǒng)的數(shù)據(jù)量都比較大,并且基于一些規(guī)則可以很好的篩選特征。
很多機(jī)器學(xué)習(xí)的方法也可以拿來(lái)提取一些比較不容易得到的直接特征,比如說(shuō)原始數(shù)據(jù)里面沒(méi)有人工標(biāo)記過(guò)商品的顏色,這些顏色可以通過(guò)圖像識(shí)別得到。統(tǒng)計(jì)規(guī)則也可以從銷售數(shù)據(jù)里得到一些特征,比如該商品的流行程度。
注意,這些特征可能是固定不變的,比如顏色,品牌等。它也有可能隨著時(shí)間變化,比如商品的銷售排名。實(shí)際經(jīng)驗(yàn)來(lái)說(shuō),時(shí)間變化采樣的顆粒度要按照實(shí)際推薦效果來(lái)決定,很可能過(guò)去三個(gè)月的銷售排名對(duì)推薦效果來(lái)說(shuō)可以很穩(wěn)定,也或許昨天的排名對(duì)今天的推薦效果比三個(gè)月平均更好。
特征的表達(dá)
大家都知道特征可以是“紅”“綠”“藍(lán)”這些離散特征,也可以是1.57這樣的連續(xù)值特征。一個(gè)特征具體如何表達(dá),要看在它在具體模型上怎么用。某些特定問(wèn)題更傾向于離散特征,因?yàn)橄裢扑]系統(tǒng)這樣數(shù)據(jù)很大的情況可以利用模型訓(xùn)練這些特征得到比連續(xù)值表達(dá)更好的效果。