廣告點擊率(CTR)預測項目
點擊率(Click through rate)預估用來判斷一條廣告被用戶點擊的概率,對每次廣告的點擊做出預測,把用戶最有可能點擊的廣告找出來,是廣告技術最重要的算法之一。
https://www.kaggle.com/c/avazu-ctr-prediction
模型評估
任何的AI系統需要有一個合理的評價指標,在沒有想好評價標准之前最好暫時不要去開啟項目的實施。因為一個沒有辦法評估的系統是沒有辦法去持續優化的,這是搭建任何AI系統時必須要考慮關鍵點。
對於廣告點擊率預測任務來說, 合理的評價指標是 F1-Score,由於此項目中, 正負樣本的比例有較大的差距, 更適合使用 F1-Score來評估訓練好的模型。
1. 特征選擇技術
- 嘗試所有的組合;
- 貪心算法;
- L1正則;
- 使用樹算法;
- 相關性技術;
嘗試所有的組合
一個數據中有10 個特征, 假如我們考慮包含3個以上(包括3個)特征的組合, 總共有多少種組合? (2^10 - 56)種組合;
由於只考慮3個特征以上的組合, 也就意味着要排除包含1個特征的組合和包含2個特征的組合, 分別是10個和45個 (10*9/2), 另外我們也需要排除空集合, 所以答案是 2^10-56。
我們完全可以把所有的可能性都羅列出來,並嘗試每一種組合,但這樣的問題點在於時間復雜度特別高,這種復雜度我們也稱之為指數級復雜度(exponential complexity)。
貪心算法
對於貪心算法的特征選擇, 它找出來的是sub-optimal特征組合; 這種方法需要借助於某個具體的模型一起使用;貪心算法的效率高;
貪心算法在特征選擇的問題上, 並不能保證找出來的特征組合是全局最優解。
L1正則 => Sparse
L1正則特別適用於樣本量少,但特征維度高的情況。一個經典的場景就是神經科學,如果把每個人大腦里的神經元看作是特征,那這個特征維度非常之高。另外,在建模環節里,有時候我們希望模型訓練過程
中產生一些稀疏性的特點,這時候L1的正則必然是我們的首選。
使用樹算法(決策樹)
相關性計算
特征選擇總結
那最后的問題是,特征選擇到底用什么方法比較好呢? 其實也沒有正確的答案,要看問題本身。比如我們要構建一個評分卡系統,而且這是跟錢直接打交道的,所以每一個使用的變量都要精心地設計。這時候,
我們通常花一些精力在變量相關性分析上,並決定哪些變量要放在模型里。通過相關性分析來選擇變量有一個很大的好處:就是很強的可解釋性,這也是金融領域的需求。
另外, sklearn里其實也提供了幾個常用的特征選擇的方法,可以去看下官方的文檔:https://scikit-learn.org/stable/modules/feature_selection.html
2. 網格搜索和貝葉斯優化
兩種用於超參數搜索的方法,分別為網格搜索和貝葉斯優化。
網格搜索技術
對於超參數的搜索,最常用的方法叫作網格搜索 (Grid Search),就是在可選的空間里,把每一種可能性逐一去嘗試,也是工業界里最常用的方法。網格搜索核心思想無非就是把預先定義好的所有可能的組合全部
搜索一遍,最終定下來哪一組超參數組合的效果最好。
網絡搜索(Grid Seard)
一個模型有3個超參數a, b, c, 對於這三個超參數我們去搜索最好的一種組合。
- 對於參數a, 使用np.linspace(1, 10, 10)來搜索,
- 對於參數b, 使用np.linspace(1,10,5)來搜索,
- 對於參數c, 使用np.logspace(0.01, 100, 5)
來搜索。請問: 對於此網格搜索,總共要考慮多少個組合? 10×5×5=250種
需要先了解 np.linspace和 np.logspace的用法。
np.linspace(1,10,10)的意思是在1和10的區間里取出10個點使得每個點之間的距離是一樣的。
網格搜索是最簡單的用於搜索超參數的方法。但由於需要把所有可能的組合全部考慮進來,時間復雜度非常高。但好處是,在網格搜索的前提下,這些操作都可以並行進行下去。
啟發式搜索
遺傳算法和貝葉斯優化都屬於經典的啟發式算法范疇。對於遺傳算法,我們也可以用它來做量化投資。另外,對於貝葉斯優化,這是一個嶄新的領域,它的內核是基於了貝葉斯思想,並內部使用了高斯過程等技
術。可以參考Ryan Adams的工作: http://www.cs.princeton.edu/~rpa