計算廣告是網際網路最重要的商業模式之一,廣告投放效果通常通過曝光、點選和轉化各環節來衡量,大多數廣告系統受廣告效果資料回流的限制隻能通過曝光或點選作為投放效果的衡量标準開展優化。騰訊社交廣告發揮特有的使用者識别和轉化跟蹤資料能力,幫助廣告主跟蹤廣告投放後的轉化效果,基于廣告轉化資料訓練轉化率預估模型(pCVR,Predicted Conversion Rate),在廣告排序中引入pCVR因子優化廣告投放效果,提升ROI。本題目以移動App廣告為研究對象,預測App廣告點選後被激活的機率:pCVR=P(conversion=1 | Ad,User,Context),即給定廣告、使用者和上下文情況下廣告被點選後發生激活的機率。
提供的資料主要有以下幾種:
1 訓練資料檔案(train.csv),其中使用者、APP等資訊為獨立檔案
2 使用者基礎特征檔案(user.csv),包含使用者的年齡性别等
3 使用者App安裝清單檔案(user_installedapps.csv)
4 使用者App安裝流水檔案(user_app_actions.csv),提供了訓練資料開始時間之前16天開始連續30天的操作流水,即第1天0點到第31天0點
5 App特征檔案(app_categories.csv),提供了每種APP的特征。
6 廣告特征檔案(ad.csv)
7 廣告位特征檔案(position.csv)
測試資料從訓練資料時段随後1天(即第31天)的廣告日志中按照與訓練資料同樣的采樣方式抽取得到。需要根據訓練資料所給出的資訊,對資料集中Label -1的待預測資訊進行預測。
資料的預處理主要通過pandas實作,主要包括了平滑,采樣,将資料分級操作。預處理的目的主要是解決以下問題:
1 不同量綱
2 資訊備援
3 定性資訊量化
4 缺失值處理
5 提高資訊使用率
第一個版本資料處理代碼如下:

有這麼一句話在業界廣泛流傳:資料和特征決定了機器學習的上限,而模型和算法隻是逼近這個上限而已。
由于資料集裡面特征較多,對時序的要求不是很高。于是重點放在了特征的分析與選擇上。開始特征選擇使用了sklearn裡面的feature_selection子產品。
但是這個子產品跑起來比較占記憶體電腦實在不給力,特征多起來之後程式運作非常耗時。之後改用pandas直接進行一些統計分析。
同理對每個資料集都進行如上處理。特征的選擇主要關注幾點:特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什麼用。特征與目标的相關性:這點比較顯見,與目标相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。選擇方法主要使用Filter方法。
訓練模型使用了xgboost,由于github上開發團隊把windows檔案夾給删了,裝這個算法庫還破費了一些時間。裝上以後簡單跑了一下效果還不錯:
Xgboost的調參網上也有一些部落格講,通用的方法是使用cv函數,确定幾個重要參數的範圍。根據cv函數的傳回分數調整。另外feature_important分析也很重要,正好在這個函數裡面一起看了。
在這些之後模型的精度也就到極限了,再想提高就需要從特征中重新挖掘可用的資訊了。我想到的是交叉統計。直接把id特征相乘,之後再對id乘積的表格中的個數進行統計,這樣就增加了一倍多的特征,成績也有所上升。之後根據編碼的原理,把特征進行分級編碼,得到一些有效的次元,也還比較有效
實際上我們可以使用sklearn完成幾乎所有特征處理的工作,而且不管是資料預處理,還是特征選擇,抑或降維。如果電腦給力的話,可以用它很友善的完成。在這期間有很多不會的,還需要再磨煉一下水準,有時候哪塊不會就拿IRIS(鸢尾花)資料集開刀。學會了再拿到比賽裡用。最後發現其實不一定要使用各種特征,因為各個特征也有有随機因素在裡面的,如果把特征用的很多,最後模型都不知道拟合到哪去了,關鍵還是結合賽題背景。