如前所述,所有的信息都可以通過恰當的編碼方式轉化為數字編碼,在此之上就是運算符的構造和選擇。在數據挖掘中我們通常把此稱作特徵工程。

一個完整的特徵工程流程包括特徵構造和特徵篩選兩個部分。隨著互聯網數據量的爆炸式增長,並且考慮到工程實現以及投入產出比,在大多數場景下,模型的選擇範圍逐漸縮小。此外,在實際建模過程中,通常訓練集的樣本數量遠小於測試集,對模型的泛化能力提出了更高的要求,因此深入調參的可能性逐漸降低。在這樣的背景下,特徵工程就體現出了更大的優勢—較低的複雜度和較強的泛化能力。有些時候,特徵構造可以說是解決問題的勝負手。但是特徵構造是一個很複雜的過程,而且其中方法形形色色,多是經驗邏輯,鮮有理論支撐。從構造的方法來看,基本可以分為兩大類:業務理解復現和枚舉尋優。

業務理解復現的思想很簡單,就是通過對業務的理解,構造出可能的運算符再進行驗證。例如,我們在評估一個人的消費能力時,最簡單的會聯想到這個人的消費金額和消費次數等特徵,但是這些特徵很容易受到一些擾動的影響,或者說本質上和消費能力並非完全等價。此時可以進一步對這個數據進行加工,例如生成單次平均消費金額的特徵。如果再進一步,考慮到一些日常小額消費或是突發大額消費的影響,可以將統計範圍限定在某些場景內。甚至可以將每次消費金額在對應場景下進行排序,以排序來代替絕對金額進行計算。此外,如果業務目標關注的是一些特定領域,或是為了提高其單次消費金額等,我們也可以根據不同消費類目進行加權計算。

當然,我們也可以進行一些類比,借鑒其他業務上的經驗,來推斷當下場景的問題。例如預測一個用戶每月繳納電費的時間,可以通過用戶的LBS信息圈定其居住範圍,並根據這個範圍獲取有記錄的其他用戶的繳納電費時間均值作為特徵,這個和協同過濾的思想類似,只不過用戶間的關係是以LBS作為中間介質,而非以商品。

很顯然這些運算符的構造都需要較強的數據理解能力和業務理解能力,需要理解數據的物理含義,並在業務中捕捉到關鍵之所在。往往在實際工作中,很可能會耗費大量的精力,而最後一無所獲。當然,這一方式構造的運算符,一旦驗證有效,很有可能對模型有顯著地提升,畢竟是完全基於業務理解的總結,所以這一方法還是被廣泛應用。但是,在很多時候,對業務理解不夠或是需要快速迭代模型,這個時候就需要一些暴力的方法以滿足更高的投入產出比,枚舉尋優的方法就是針對這樣的場景。

在實際應用中,枚舉尋優大多會被拆分為兩個步驟來做,也即常說的特徵生成和特徵篩選。特徵生成的常見方法很多,通常是藉助一些統計口徑的變化或表達式來進行批量處理。例如:

——改變時間統計口徑(近一年,近六個月,近一個月,白天,夜間,工作日等),以期在數據的時效性或是時間切片上獲取新的特徵。做出不同的時間切片是為了面對不同的問題或場景。對於需要長時間表現且低頻的場景時間週期可以適當拉長(如消費偏好等),而對於需要強時效性的數據則適合短時間週期的切片(如信貸場景評估資產水平)。其實,很多時候都會兼有多時間切片特徵,類似於信號處理是的低頻和高頻特徵共存。

——引入變數間的相關關係,常用的有特徵交叉(多適用於離散型變數)和因子分解機(Factorization Machine)等,以期在兩個或多個特徵間找到一個較好的且融合了多維度信息的特徵。離散的變數的特徵交叉,在一定程度上和簡單的決策樹是等價的。而因子分解機一般用於高維稀疏矩陣,變數多為0-1變數,類似於二維或多維的邏輯運算。

——多特徵間的線性或非線性變化。特別的,我們可以把PCA或SVD等維度轉換的方法視為一種特徵生成的方法,因為其產生的新特徵是基於原特徵的線性變換。此外,也可以通過一些初等函數實現變數間的運算構造新的特徵,如前所述,業務經驗中,這種非線性變換是較為常見的。

特徵篩選的理論更為成熟,基本通過和目標變數的相關度(covivginiinfogain等)來進行篩選,有些時候也會藉助一些簡單的模型(LRCARTNB等)。根據篩選邏輯主要可以分為Filter(過濾),Wrapper(封裝)和Embedded(嵌入)三個類別:

——Filter(過濾):根據按照既定規則或標準進行排序,保留滿足要求的特徵;

——Wrapper(封裝):根據既定規則或標準,對不同的特徵子集進行評價,保留最優的特徵子集,而不對子集內部的每個特徵進行評價;

——Embedded(嵌入):根據既定模型演算法,對不同的特徵子集進行評價,保留最優的特徵子集。

如果維度過高,在進行特徵篩選的時候需要考慮到計算效率,避免大量無效的計算,通常會採用Filter+Wrapper/Embedded的模式。當然,並行計算也是技術上的一個常見手段。

此外,由於目標函數也和模型之間存在一定關係,所以通常需要使得目標函數和模型的度量函數越接近越好。例如LR可以採用cov或iv,RF或GBDT等可以採用gini或infogain等。

隨著計算能力和計算效率的提升,直接通過模型來篩選特徵的方法也愈發常見。線性模型可以藉助LR+L1正則,非線性模型可以藉助RF或Xgboost直接對變數在模型中的重要度進行度量,以達到篩選變數的目的。

常規的模式下,特徵生成和特徵篩選是兩個獨立的步驟,但是我們也可以嘗試將這兩個步驟合併,藉助一些搜索演算法,可以更加高效地達到目的。而這樣做也存在一定的劣勢,如果搜索演算法選擇不恰當或者參數設置不佳,可能會導致陷入局部最優。

實現兩個步驟合併的方法很多,最簡單的就是基於符號回歸的思想進行搜索尋優,以期發現較優或最優的運算元。符號回歸的基礎是基因表達編碼(GEP),在此之上可以參考遺傳演算法等思想進行搜索尋優。當然,我們需要針對基因表達編碼單獨制定一套選擇、交叉和變異的邏輯,畢竟傳統的遺傳演算法是無法保證運算元的合法性的,而且無法保存其優勢子表達樹,從而會導致大量的無效計算或收斂速度較慢等情況。在尋優過程中,需要對參數進行調整,此外為了避免過擬合或保持一定的可解釋性,也需要限制運算元的複雜度。從本質來看,這一方法就是改變特徵的維度,以期獲取更優的分割面。

如下圖所示,在iris數據集上進行測試。如圖a所示,在原始的特徵空間下,由於理想的分割線是一個斜線,而在實際建模中,只能通過許多短線段來逼近。而在CART模型進行劃分時,會通過限制節點的最少樣本個數等方法以避免過擬合,從而導致劃分到一定程度就停止了,因此存在部分樣本的誤分。而在新的特徵空間下,數據分佈發生了改變,通過一個簡單的劃分即可實現很好的效果,從而避免了需要通過逼近的方式來實現,如圖b所示。將這一劃分方法投影到原特徵空間上,如圖c所示,可以發現這一劃分逼近了之前理想的分割。

在Thyroid Disease上進行相同的測試,圖a、c是原始特徵空間上的劃分,效果一般;如果將新的特徵空間上的劃分投影回原特徵空間上,如圖b、d所示,這樣的曲面劃分可以獲得更好的效果。

如前所述,特徵工程的本質就是運算符的構造和選擇,它是為後面的模型服務的。文中也提到了,這個過程和模型之間是存在較大聯繫的,而且部分過程就是模型的本質思想,因此如果能夠將兩者有效地結合,一定會收到更大的成果。


推薦閱讀:
相關文章