天貓推薦算法大賽總結

原文:http://closure.blog.ustc.edu.cn/?p=117算法

阿里此次天貓推薦算法大賽題目的核心是給定用戶對品牌的四個月的操做記錄,預測下個月哪些用戶對哪些品牌產生購買行爲,這能夠抽象爲一個01分類問題,更確切的能夠抽象爲一個點擊率預估(CTR)。與其說這是一次比賽,我以爲更多的是一次認識,一次對大數據價值的深入認識,在分享本身的體會以前,我真心的感謝阿里,給咱們提供這樣一種機會,讓咱們在學校裏能夠接觸真實的數據業務需求,讓所學的理論能夠有一次真實的實踐機會。學習

關於此次比賽,我想簡單分享下幾個比較重要的點:大數據

第一點:特徵提取,也稱特徵工程優化

在真實的業務場景中,特徵和模型同樣重要,花費一樣的人力物力,作特徵工程有可能比做模型和算法優化來的有效。天貓的大數據競賽能夠簡單抽象爲一個點擊率預估問題,給定用戶對品牌的操做行爲,判斷下個月買的可能性爲多少。這裏特徵工程作的核心工做即構建用戶對品牌的特徵體系:由於原始數據集是關於用戶對品牌在某個時間的某個行爲操做,它是一個四維的張量,因此在提取feature的時候要充分考慮到這四個維度張量的信息。咱們最終的目標是把這四維張量壓縮爲一個二維的feature矩陣,並在這個feature上作模型的訓練和預測。如何把這四維張量的信息通過加工提取造成一個二維的feature矩陣,這應該是作比如賽的第一步,並且是重要的一步。如今大部分選手用的都是基於業務、經驗或者嘗試來進行手工提取,因此這個比賽誰的業務理解深入,經驗足可能會有更好的結果。blog

下面我說下咱們組的特徵提取的過程:深度學習

咱們把特徵集分爲三個部分:第一是用戶對品牌的直接特徵體系,包括點擊購買收藏和購物車,第一次點擊購買,最後一次點擊購買等;第二是用戶的特徵體系,包括用戶總購買,總點擊,點擊轉化比等;第三是品牌的特徵體系,包括品牌購買用戶,購買次數,點擊轉化比等等。爲了把時間這一張量加入到特徵體系中,咱們按照時間分片,每一個片裏面提取相應的特徵體系。基於一種觀察,用戶對品牌的購買行爲和他最近的行爲較爲相關,因此時間片的劃分應該知足最近的時間分片較細,較遠的時間片劃分粗粒度一些;這樣就把時間這一張量的信息粗糙構建到feature中。數學

固然這只是一個很粗糙的一個特徵體系的構建,還有不少的優化空間。自動化

下面我說下幾個優化的點,這幾點對咱們的成績都有不小的提高:model

第一點:關於品牌或者用戶的特徵挖掘,簡單的統計雖然對整個結果的準確性有必定提高,可是絕對不是最大的提高,一個很簡單的例子:A和B兩個品牌都被買了1000次,可是A品牌中不少人買了再買,而後再買,可是B品牌大部分買了一次都再也不買了,這是個很大的區別,也就是說在對品牌進行特徵建模的時候,把用戶的因素更加深入的結合到品牌中挖掘更加本質的特徵,有點相似於尋找最優解同樣,總有個方向最快通向最優解,可是如何找到這個最有方向,須要咱們深層去思考,這可能就是業務吧。方法

還有一點,A用戶對B1和B2兩個品牌都產生過一次操做,而且這兩個品牌的特徵體系基本相同,那如何判斷對哪一個品牌買的可能性更大呢?這個基於簡單統計的可能就難以去作,可是咱們深層的考慮下,經過協同過濾,咱們發現A用戶曾經買的品牌中不少和B1產生一種聯繫,可是和B2品牌沒啥聯繫,這樣明顯的A用戶買B1的可能性就更大一些。

因此在作特徵工程的時候,除了簡單的數學統計外,咱們仍是要深刻思考整個業務場景,挖掘更加本質的特性,纔會有更大的提高。

作好了特徵工程,下面一個重要的一點就是模型選擇和優化:

通常來講,好的特徵體系,不一樣的模型都會有不錯的效果,可是咱們仍是要根據不一樣模型的特色作特定的優化。咱們在比賽中主要用到了邏輯迴歸、隨機森林、梯度加強迴歸樹。首先說下咱們在邏輯迴歸上遇到的一個大坑,對於邏輯迴歸要求特徵具備線性可比較,一個簡單的例子,一個用戶對一個品牌點擊了10次和100次,是否是點擊100次的那個品牌必定比點擊10的那個品牌要買的可能性大10倍,我想確定不是,可能買的可能性就大那麼一點點而已,因此咱們要對特徵進行一些變換,讓其具備線性可比較性,咱們採起的措施是進行log變換,效果比原始數據要好不少。隨機森林,雖然它能夠適應與連續和離散的特徵,且不須要特徵具備線性化特徵,可是連續特徵給模型的訓練帶來很大的開銷,且容易出現過擬合,若是對特徵進行離散化,也許會有更好的效果,常見的就是等距和等頻分箱,進行離散化處理,感受效果也不錯。固然還有其餘優化,好比邏輯迴歸中正則化調整,隨機森林和GBRT的參數調優等,都會對結果有必定提高。

而後還要說一點,關於模型融合,這一點對於比賽來講,多是決賽的最後一步:

關於模型融合,多是比賽最後階段最重要的環節,這一環節咱們沒有作的很好,可是仍是分享下組裏的一些思路:其實gbrt和隨機森林自己就是兩個融合模型,一個是基於boosting的集成學習,一個是基於bagging的集成學習。下面說下模型的融合方案,能夠分紅兩大方面:第一是模型內部的融合;第二是模型和模型之間的融合。關於模型內部融合,能夠從如下方面考慮,第一是屢次採樣,進行結果融合;第二是不一樣特徵子空間進行訓練,結果進行融合;第三是簡單模型級聯融合,以線性迴歸爲例,構建級聯的線性model,每一個新的線性model是之前一個線性model的偏差爲目標,作到偏差的級聯消除。關於模型之間的融合,能夠利用最小二乘計算最優的模型權重係數,而後進行融合。整體來講,模型融合咱們可能須要再去深刻研究下。

最後說一些咱們沒來得及作,可是值得嘗試的方向:

首先關於特徵提取,咱們能夠對特徵進行組合,造成必定富特徵,也許能夠提高分類器的精度,至於如何組合,目前我尚未自動化組合學習的思路,可是人工組合是一個可行的方法。

關於上述咱們介紹的從四維張量到二維特徵矩陣的提取,是否是有更加自動的方法去作自動特徵提取,這一方面,我調研了兩個方案:一個是張量分解,把高維轉化爲幾個低維的乘積;另一個是深度學習,無監督自學習特徵,固然這兩點可能作的難度要大不少。

關於gbrt,天池默認的是最小二乘的迴歸模型,其實這種基於gradient boosting的加強學習模型能夠經過簡單的轉化,轉化爲分類模型,好比mlr(多分類邏輯迴歸)實際上就是一種gradient boosting的分類模型,這樣可能比把分類問題強行轉化爲迴歸問題更靠譜一些。

咱們隊是「衝刺了!」,二階段第51名,雖然名次有點遺憾,可是學到了太多東西,感謝阿里!附咱們隊合影,感謝可愛的隊友。

相關文章
相關標籤/搜索