天天看點

【SPA大賽】轉化率預估中的使用者偏好Emebeding

分享技巧:Emebeding降維(使用者偏好分析)

在Tencent廣告算法大賽中,在對使用者點選之後的轉化情況預估時,筆者主要需要考慮兩方面情況:

(1)使用者對點選的App偏好;

(2)具體點選場景與使用者的比對情況。

其中(1)又可分為:①具體使用者對App的偏好;②使用者的屬性對App的偏好。這兩點大緻可了解為:我喜歡APP,是以我下載下傳,或者雖然我以前沒接觸過這類APP,但這類APP對我這類人群具有天然的吸引力,是以我也下載下傳了。這裡主要分析①中使用者偏好。

根據比賽提供的資料,使用者偏好可以從以下三個方面尋找:①使用者近期的流水安裝;②使用者的曆史APP安裝;③使用者近期的點選情況。這三點中,重要性程度:①>②>③,但是①的資料量隻有部分,約占到全部資料量的1/10,②的資料量約1/2,③就更稀疏,訓練資料中300萬,去重的USERID有180萬,每個使用者的平均記錄隻有2條,想要找到對應該使用者在前面幾天點選該APP的記錄很困難,隻對部分使用者有效。

雖然在XGBOOST中,但過多的缺失會導緻重要的特征變得不重要,是以我們在進行Emebeding時隻采用曆史安裝資料,保證Emebeding資料的标準性,不需要再進行其他規範化處理。

使用者安裝曆史資料統計如下:

【SPA大賽】轉化率預估中的使用者偏好Emebeding

這裡我把未知類型的APP當作一類APP來看待,現在看來,未知種類的APP在考慮偏好時,應該去掉不予考慮。

使用者偏好可從使用者曆史安裝資料出發,近期使用者安裝流水資料作為近期使用者偏好在這裡不進入分析(實際上,近期的偏好更能反映使用者點選時的轉化情況),使用者曆史安裝資料中App種類較多,遠多于我們分析的50種App,是以在Emebeding時,隻統計使用者每小類安裝的APP數目,使用者安裝之後打開APP的幾率較大。Emebeding流程如下:

(1)統計每個使用者曆史安裝的各小類APP數目,生成(N*M)維資料表,N為使用者ID,M為APP種類數;

(2)對(1)生成的資料進行Tfidf轉換;

(3)利用TSNE流形對資料集降維至2維;

(4)将降維後的資料Join入點選流水記錄進行訓練。

統計使用者的APP安裝使用情況,共有5大類APP,50小類APP,1800多個APP,因為這1800個APP中在訓練資料中出現的隻有12個,且如果采用大類數目統計,這些大類APP安裝數目很容易占到非常大的特征權重,是以這裡隻按APP小類目進行統計。

統計出轉化與未轉化的分布如下圖,其實轉化與未轉化之間并沒有分開,隻是可以看見轉化了的分布較集中,越靠近中間的簇,是不是就轉化率越高,暫時還不清楚,筆者用Emebeding之後的特征與時間窗特征,xgboost單模型,可以跑到0.10059的分數。

【SPA大賽】轉化率預估中的使用者偏好Emebeding

主要工具:

sklearn中的feature_extraction.text.Tfidf(),sklearn中的mainfold.TSNE(),這個子產品隻能用來實驗,對于樣本數超出100000時,基本無能為力,是以這裡給大家提供一個額外的計算程式,實際上這個程式也好不了多少,筆者能力有限,是用MATLAB完成的這部分處理,有經驗的同學,Python程式可以輕松的轉為MATLAB程式。

TSNE是由SNE衍生出的一種算法,SNE最早出現在2002年,它改變了MDS和ISOMAP中基于距離不變的思想,将高維映射到低維的同時,盡量保證互相之間的分布機率不變,SNE将高維和低維中的樣本分布都看作高斯分布,而Tsne将低維中的坐标當做T分布,這樣做的好處是為了讓距離大的簇之間距離拉大,進而解決了擁擠問題。

TSNE算法原理:http://blog.csdn.net/zhangweiguo_717/article/details/70188517

TSNE的Python實作:http://blog.csdn.net/zhangweiguo_717/article/details/70998959