歷時四個多月的2014阿里巴巴大數據競賽終于告一段落,在競賽第三季即將開始之前,CSDN與排名前9的團隊取得聯系,并做了簡要采訪。而在領略天貓推薦算法大賽Top 9團隊風采之前,我們首先對大賽背景進行一個簡要的回顧。
首屆競賽以天貓推薦算法大挑戰為主題,提供抽樣后的1千多萬天貓用戶,2萬多個天貓品牌,總計5.7億條經脫敏后的天貓海量真實用戶的行為記錄數據。所有的數據經過嚴格的脫敏處理,切實保障消費者與品牌商的數據隱私。選手通過建立算法模型分析用戶在天貓上的行為日志,建立用戶的品牌偏好,并預測他們在將來一個月內對品牌下商品的購買行為。大賽平臺基于阿里云的開放數據處理服務ODPS,為高校學子提供大數據實戰機會。
此次“腳踏實地”的數據競賽,獲得了高校和科研機構的強烈反響――從大數據競賽3月10日宣布報名以來,在短短的一個月內,就迅速吸引了全球14個國家和地區7276支隊伍參賽,經過了4個月的多輪選拔,有幾百只隊伍堅持下來了,并且取得了非常不錯的成績。而更值得關注的是,選手的成績已經超過了內部賽的阿里工程師(ps:內部賽的周期很短)。比賽接下來將進入第三賽季,第二賽季的TOP 3選手將受邀參加天貓雙十一實戰,與天貓算法團隊正面交鋒,使用真實的第一手數據,讓其算法上線接受真實流量的考驗。
9th:Give
Give,來自浙江大學計算機學院數字媒體與企業智能計算實驗室,浙大直博生。7月29號的F1成績是6.10%,結合評委打分,最后排名第9。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
Give:
解題思路:從用戶的歷史行為中提取特征,下一個月有購買分為類別1,未購買分為類別0。
1. 數據預處理:通過對數據進行仔細觀察,發現原始數據中有兩天的點擊數據全部丟失,其他日期內也有部分點擊數據的丟失,推測原因可能是點擊的時候用戶未登錄,或者是在手機等設備中點擊導致數據丟失。我們根據用戶以往的行為記錄和品牌以往的行為記錄,推測用戶在購買前的點擊次數,對這部分的缺失數據進行填充。此外還對點擊狂魔(疑似爬蟲)數據進行了平滑。由于我們是在特征提取前對原始數據進行的數據預處理,因此在特征提取階段保證了數據的一致性。
2. 特征提取:提取的方式采用map-reduce編寫的代碼一次提取完成,避免頻繁的使用SQL進行表連接。特征包括用戶特征、品牌特征、用戶-品牌特征和綜合類特征。用戶特征反應了用戶的購買力和一些行為偏向;品牌特征反應了品牌的熱門程度、周期性、季節性、購買趨勢以及品牌整體的行為偏向;用戶-品牌特征反應了用戶對這個品牌喜愛程度、購買意向;復合類特征考慮了很多心理學和業務上的特點,建立行為轉移、周期、偏好等復雜的特征。
3. 正負樣本采樣:所有的用戶-品牌特征組中,在下一個月產生了購買的比例極小(1:300+),樣本分布嚴重不均衡,因此對負樣本進行了隨機采樣。不同模型的最佳采樣比例會有區別,RF采樣比在1:8左右,GBRT采樣比在1:11~1:14左右。
4. 模型:最終采用的是GBRT模型,模型思想是Boosting,Boosting算法都是一個迭代的過程,每一次新的訓練都是為了改進上一次的結果。
著重攻堅方向在這次比賽中,花費時間最多的是特征的提取,考慮什么樣的用戶會購買,什么樣的品牌會被購買,什么樣的行為預示用戶會購買一個品牌。
算法亮點1. 數據預處理步驟填充了缺失的點擊數據,并且填充的值是根據用戶和品牌的歷史行為進行填充,盡可能還原了真實的行為。
2. 由于本人是資深的網購愛好者,因此從自身的經驗和用戶心理出發,思考了一批結合業務的特征,包括行為轉移、周期、偏好等。
CSDN:談談比賽感想。
Give:對研究數據挖掘、信息檢索等領域的很多研究者來說,數據是非常珍貴的,但是對于還在高校的人,數據是很難獲得的,現有的一些公開數據集,規模上一般也都比較小。阿里巴巴擁有海量商品、賣家、用戶、交易、評價的數據,這些數據是很多從事數據挖掘方面研究者夢寐以求的。經歷了幾個月的比賽,不論是在學術研究水平上還是心理上都有了巨大的成長。天池平臺給我們這些在校的學生提供了一個很好的機會去真正接觸大數據,使得我們的研究思路能夠在真實的數據中進行檢驗。這次比賽也讓我懂得了在逆境中的堅持:當第一賽季眼看要進不了第二賽季的時候,我堅持了下來;在第二賽季成績半個多月沒有進展的時候,我也堅持了下來;在換數據集前還徘徊在10名之外,但是在最后7天,一個人熬夜奮戰,又沖回到了前10。
CSDN:ODPS使用感受,優點及建議。
Give:優點:ODPS提供了豐富的機器學習算法,還有強大的計算能力。建議:(1)ODPS平臺資源調度優化:小任務能保證在一定時間內可以分配到資源;大任務可以運行慢一些,但是保證不會報錯中途停止;以團隊為單位限制資源使用量。(2)錯誤提示信息可以更人性化。
清水灣沙灘青年流浪者是來自香港科技大學的碩士研究生,之前在ACM/ICPC亞洲區預賽,百度之星,Google Code Jam等其他算法類大賽中均取得過不錯的成績。在最后一星期更換數據集后一直穩定在第5名左右,F1分數在6.12左右。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
清水灣沙灘青年流浪者:第一賽季因為數據量小,所以主要依靠少數個特征基礎上的人工規則,最終得分7.21,排名第121進入第二賽季。
第二賽季,在模型使用方面,先期主要是攻破線性Logistic Regression(LR)模型,使用大部分參賽隊都沒有使用的dummy coding的思路處理了所有的特征,包括使用了id類特征以及特征與特征之間的dummy conjunction來擬合非線性。并且對數值類特征采用包含式dummy coding解決了離散化后特征值長尾部分數據稀疏的問題。是所有的Top10隊伍中,Logistic Regression單模型分數最高的一支隊伍,這與大部分Top10隊伍僅僅使用GBRT,Random Forest為主的樹模型算法有較大區別。在后期發現,由于LR為代表的線性模型和GBRT為代表的樹模型預測結果重合度較低,所以在模型融合階段,僅僅使用了簡單的不同類別模型線性加權和同類別模型多次抽樣平均(Bagging)的方法融合了GBRT和LR兩個模型就獲得了較單LR或單GBRT明顯的提升。
在特征抽取方面,以業務理解為主,采取人工端只增不刪的原則,對于稍有業務含義的特征均直接加入模型,對于關聯性較大的特征之間并不做去重,以保證足夠多的信息能被模型使用,加強模型的擬合能力。在機器端使用例如L1正則化的手段來間接將機器自動化特征選擇融入模型以降低過擬合的風險。這樣既能保證效果又能降低人力成本。除此之外,由于線上和線下的數據的獲取時間不同,盡量選取隨時間變化較為穩定的特征以保證線上和線下數據分布的一致性,對于確實分布不一致但又比較重要的特征,需要嘗試單獨進行特殊轉換處理。
由于整體算法框架簡單,人工trick使用較少,魯棒性較高,在最后一星期更換數據集后一直穩定在第5名左右,F1分數在6.12左右,是更換數據集之后分數提升最大的隊伍之一,而換數據集之前3個月從未進入過前10名。是前10名隊伍中唯一的一匹”黑馬”。
CSDN:談談比賽感想。
清水灣沙灘青年流浪者:在大賽平臺方面,在高校進行研究往往使用的是小數據,并且即使有大數據也完全沒有并發量達到1000以上的集群讓我們來跑大數據。此次比賽最大的特點就是“大數據”+“大平臺”。相當于帶領我們走進了一個全新的實驗環境,拉近了我們與實際工業生產的距離,這對于激發學生的相關領域科研興趣有促進作用。大賽提供的ODPS平臺能滿足基本的分布式計算和基本機器學習和數據挖掘算法的需求,但是仍然有一定的功能限制,導致不少選手想要自己開發創新性的算法時遇到一定困難,希望今后平臺能夠進一步完善能滿足各種需求的編程接口。
在能力提升方面,我認為參加此次比賽對解決實際問題能力的提升有很大幫助。在學校做科學研究,往往過分強調創新,以創新為出發點,為了強調工作的創新性,往往忽略了創新的合理性和效果比較的嚴謹性,在撰寫學術文章時,往往也只是說好不說壞,逐漸產生了一種學術bias,文章看多了有時會覺得很糊涂,感覺每篇文章都像是best paper,難以分出高下。而做真實大數據的比賽,不以創新為出發點,而是從實際效果出發,選擇最合理的方法,著重考察學生應用所學知識解決問題的能力,在分享交流時,好的方法可以交流,不好的方法走過的坑也可以拿出來分析探討。希望今后學術界的創新精神和工業界的效果務實精神能有一個有機結合。
大賽建議方面,一是希望大賽平臺能更加完善,開放更多接口使大家能更好的實現自己的原創算法。二是希望能更多的介紹賽題的業務背景,激發大家對賽題的興趣,也是讓大家明白自己到底在做什么。
7th:Bazinga
Bazinga團隊由3名隊員組成,他們有兩位來自中科院計算所,一位來自中科院軟件所。最近一次公布F1得分是6.11。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體談一下特征抽取、訓練模型的建立,以及模型訓練的思想。
Bazinga:
1. 數據分析
原始數據是天貓用戶4個月的行為日志,日志的格式為(user_id,brand_id,action_type,date),其中四種行為分為用戶的點擊、購買、收藏和添加購物車。總共的日志條目達到了億級,均勻分布在給定的4個月中。總的用戶數為千萬級,品牌數為萬級。需要預測的目標是用戶在下個月會對哪些品牌有購買行為。評價指標是經典的F1指標。
2. 數據清洗
經過對數據的分析我們發現用戶的平均行為為50次,品牌的平均行為為2萬次,品牌的信息量明顯多于用戶,所以在品牌層面的信息相對可靠。在用戶平均行為次數為50的大背景下,我們發現少量用戶的一些異常行為,主要是有些瘋狂點擊不購買的用戶,這些用戶不僅不會對預測帶來收益,反而會成為我們的模型中的噪聲。于是我們對數據進行了一次過濾,過濾掉了點擊次數太大,而沒有購買的用戶的所有行為記錄。在剩下的數據上去構造樣本、特征并進行模型學習。
3. 建模得到一份干凈的數據后,我們就要構建本地的測試數據。現在的數據劃分如下圖所示。八月份的數據是不可見的線上測評數據,在線下,我們切分出7月的數據作為我們的本地測試的數據。
我們將這個問題看做是一個條件概率預測問題。就是給定歷史行為,預測下個月的購買行為。這個問題可以形式化為:
由于這是個有監督的學習問題,我們需要知道構造出來的一個(用戶,品牌)樣本的分類標簽是什么,而我們的模型是基于時序的,所以我們引入一個分割點的概念,分割點將時間軸分成兩個部分,分割點的前面是用戶的歷史行為,分割點的后面是這個歷史行為造成的結果,也就是我們所說的分類的標簽。簡單說來,我們用歷史行為進行特征的提取,并構造樣本,而這個樣本是正樣本還是負樣本,需要看分割點后面的時間區間上這個樣本對是否有購買行為。
在分割點的選取方面,我們分為了兩種選取方式,一種是固定分割點,一種是滑動分割點。固定分割是一種很自然的分割方式,也是此次比賽中大部分隊伍所采用的一種方式。滑動分割點是對固定分割點的一個擴展,可以產生更多的樣本,充分利用歷史信息。具體見下圖:
我們構造了如下特征。
Pair Features |
User Features |
Brand Features |
|
Counting Features |
action# |
action# |
action# |
action day# |
action day# |
action day# |
|
valid click# |
distinct action brand# |
distinct action user# |
|
valid click day# |
distinct first action brand# |
distinct first action user# |
|
action per brand per day# |
action per user per day# |
||
CVR Features |
cvr (buy#, click#) |
cvr (buy#, click#) |
cvr (buy#, click#) |
cvr (buy day, click day) |
cvr (buy day#, click day#) |
cvr (buy day#, click day#) |
|
cvr (distinct buy brand#, distinct click brand#) |
cvr (distinct buy user#, distinct click user#) |
||
Ratio Features |
ratio (click#, click day#) |
ratio (click a#, click b#) X C52 |
ratio (click a#, click b#) X C52 |
ratio (buy#, buy day#) |
ratio (buy a#, buy b#) X C52 |
ratio (buy a#, buy b#) X C52 |
|
Flag Features |
action flag |
action flag |
action flag |
other rules |
|||
Global Features |
first / last action day |
first / last action day |
|
first / last buy day |
first / last buy day |
first / last buy day |
|
active range length |
frequent user ratio |
主要用到的模型有GBRT和RF模型,這兩種模型是基于決策樹的模型,都是將若干個弱決策樹用某種方式聚合成森林來進行訓練和預測。不同的是GBRT是在梯度上建立決策樹,用Boosting的思想進行融合;而RF是在采樣出數據和特征后建立決策樹,并用Bagging的思想進行融合。
6. 融合在得到兩個基礎模型產生的結果后,我們用了一個簡單的兩級線性融合的方法對我們的模型進行融合。第一級融合是根據本地訓練集的結果學出來一個lr(Logistic Regression)線性模型進行融合;第二級則是簡單地對第一級的預測結果進行平均融合。
7. 流程化所有的前面的步驟我們都進行了流程化,也就是運行一個腳本便可以從最原始的數據表,運行到最后的提交結果表。
CSDN:談談比賽感想。
Bazinga:這次比賽,給了我們一次體驗工業界大數據的寶貴機會。與之前在實驗室接觸到的小規模數據集不同,大數據不僅擁有更大的數據規模,數據本身更加復雜,處理的難度更大。在參賽伊始,我們認真地分析了比賽的任務,并通過查閱資料去理解真實的業務場景。從利用簡單的規則做出最早的幾次提交,到后來利用機器學習的方法來提高預測的效果,我們對問題的認識進一步的加深,對數據也有更多的理解。值得一提的是,在這次比賽中,我們團隊的三位成員很好地進行了團隊協作。每位成員都會負責推進一塊子任務,同時,我們也會保持充分的溝通,遇到困難大家一起討論,尋找解決方案。高效的團隊協作讓我們一直保持著較好的成績。大賽組委會也為我們頒發了“最佳團隊獎”。
CSDN:ODPS使用感受,優點及建議。
Bazinga:ODPS具有很好的數據存儲能力和計算能力,并且簡單易用。但在實際使用過程中,我們也發現一些需要改進的地方。比如,可以加強一下MapReduce作業的可視化,讓我們可以方便地查看當前執行的精度,預計完成時間等信息。
6th:Kevin
Kevin,清華大學博士生,研究方向為復雜工業過程智能建模與優化,發表/錄用若干論文。29號封榜前為6.124%,最終排名第6。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
Kevin:
解題思路。首先是分析問題的特點,將本次比賽的推薦與傳統的推薦做了對比,以及對比賽與實際線上推薦進行了分析,指明了解題的基本思路。
算法亮點。算法的亮點是對不同的用戶-品牌類型進行了分類,并采取了不同的處理方法。
著重攻堅方向。根據對業務及數據的分析,著重進行了特征的構造。
特征抽取、訓練模型的建立,以及模型的訓練思想。根據對業務及數據的分析,對特征進行構造,并基于Case分析,迭代構造新的特征。模型采用比較適合本次比賽的RF/GBRT/LR等模型。
CSDN:談談比賽感想。
Kevin:比賽時間很長,單干參賽,很累。整個過程下來,收獲也很多,完成數據分析、數據預處理、特征提取、模型選擇、參數調優、模型融合及數據后處理整個項目流程,積累了獨立完整的數據挖掘實踐經驗。阿里巴巴第一次在ODPS平臺上舉辦外部的大型比賽,參賽隊伍是同類比賽中最多的,總體來說非常成功。
CSDN:ODPS使用感受,優點及建議。
Kevin:ODPS簡單、方便、易用,只需要懂得SQL及Python就可以滿足基本需求。只是提供的基礎算法還不是很多,建議提供更多的算法以及接口供外部實現算法用。
5th:Tyche團隊
Tyche團隊由來自南京大學的兩名碩士研究生組成,最后一天F1是6.12以上,最終成績第五。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
Tyche:
數據分析
提供的原始數據在天池集群的表t_alibaba_bigdata_user_brand_total_1中,字段分別為:user_id、brand_id、type、visit_datetime。用戶4種行為類型(type)對應代碼分別為:點擊:0;購買:1;收藏:2;購物車:3。原始數據條數有5.7億左右,用戶1000萬左右,品牌有3萬左右,需要預測的目標是用戶在下個月會對哪些品牌有購買行為。評價指標為經典的F1指標。 對數據簡要分析可以發現數據本身符合齊夫定律。
數據清洗
目的:去除一些噪聲數據。在此,我們盡可能去除離群點用戶(對分類器影響較大但本身正例又很少的用戶)。原始數據中存在一些爬蟲用戶。例如去除點擊量大于800,購買量為0點擊量大于5000,購買量少于50的用戶。
數據集劃分
目的:線下測試和線上結果相關性高度一致。我們和大多數數據集劃分的方式不同。在數據集劃分構造時我們對時間軸切兩刀,訓練集、驗證集、測試集都是完整的數據集,能夠更好的驗證模型的泛化性能。
特征提取
目的:提取對行為數據刻畫顯著的特征。特征的提取建立在對業務的理解的基礎上,努力得到類別更加多樣性,更加全面的特征。我們在這個環節突破了純粹從業務理解提取特征的思路,轉而考慮一下問題:當提取了一些類別的特征后,在對業務邏輯整體理解以及 已提取的特征內在聯系的基礎上,思考是否可以用一種思路把已提的大部分特征統一起來?如果能做到這個,我們就可以在已有特征的基礎上得到系統化的特征,而后在體系中,通過不同行為,不同時間段,不同行為指標的排列組合,可以較快的發現新類別的特征。而這些特征很可能有用。事實上我們有一半以上的有用特征都是這樣發現的,我們之前只提取了92維有用的特征,最后使用了241維特征。實際中我們使用Xmind畫出特征的思維導圖,方便我們找到我們所說的特征之間的內在聯系。
模型訓練
我們使用了random forest,gbrt,logistic regression三種模型。在訓練之前由于數據存在嚴重的類別不平衡問題,所以我們根據理論和實際對正例采用了up sampling的采樣方式,負例采用down sampling的采樣方式,正例個數:負例個數=2:20=1:10,效果比單純的up sampling或者 down sampling要好。
random forest屬于bagging類型的集成算法,gbrt屬于boosting類型的集成算法,共同特點是模型參數好調,很多情況下性能較好。比賽中,我們隊gbrt的調參根據gbrt每次優化的是上一步的殘差,所以我們使用每次訓練200棵樹再初始化參數再訓練的迭代式調參方式,大大節省了調參的時間。
另外我們針對gbrt樹的棵樹較大時候訓練時間長的問題,先用一個欠擬合的random forest初始化gbrt的殘差再用一個樹的棵樹不是很大的gbrt來訓練,從而能夠在相對短的時間內得到比用較大棵樹的gbrt還要高一些的性能。
由于在工業實際操作中對實時性要求很高,logistic regression 訓練,預測時間都比較少,用途較廣,所以借鑒有些公司采用的在使用logistic regression訓練時對連續特征進行長度為16等的二進制編碼的方法,得到了更好的性能。
模型融合
我們使用采樣的多樣性,特征的多樣性,模型的多樣性,分別得到模型差異化較大的多個模型然后采用stacking learning進行模型融合,在此使用的是線性模型,logistic regression。
在用stacking learning時,我們發現傳統的把多個model預測的confidence做特征,使用Logistic regression學習,效果不夠好。
為此我們考慮到優化的目標是F1,對confidence較高的那部分pair對,加強學習,選取confidence較大的500萬pair,使用logistic regression學習
此外,將這些feature(confidence),映射到多個高斯空間中,再用以上方法學習有輕微的提高。
輸出處理
考慮到比賽評價標準是F1,但大多模型優化的目標不是F1,所以我們考慮,能否針對F1,做更加精細的模型改進?
通過分析發現分類器更適用于預測結果中precision高的用戶,這類用戶稱為規律性用戶,所以我們對每個用戶的預測結果進行分析,增加預測結果中precision高的用戶的預測量。這相當于對不同用戶在分類器中的margin做了輕微的修正。
CSDN:談談比賽感想。
Tyche:以前并無參加過這樣的比賽,在這四個月里,由于隊友是室友,大量的討論經常在晚上,所以經常性晚睡,有時要睡時外面已經能夠看到“東方之既白”。
其實能夠全身心的投入到一件事情中是一種幸福。我最看重的是這份全身心投入的執著。在自己以后的學習,工作中這種精神我認為是一種寶貴的財富。
CSDN:ODPS使用感受,優點及建議。
Tyche:ODPS本身具有非常好的存儲性能和計算性能,但個人建議對模型的接口再多些,我們希望能針對要解決的問題對一些模型的內部核心代碼以及一些細節進行針對性的改進。
“數據心跳”,廈門大學碩士研究生,F1最后得分約為6.12%左右,最終排名第4。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
數據心跳:
解題思路
首先,由于這是一個比賽,所以我們一切都以提高 F1成績為目的。提高F1成績,最有效直接的就是做Retargeting,也就是一個二分類問題。
對于這個二分類問題,我們發現正負類可以繼續往下細分,所以我們將其轉化為一個多分類的問題。
算法亮點
對多分類問題,發現可以在訓練集上分成不重疊的幾類。據此對數據進行拆分,分成幾個子模型訓練,可以集中優化效果較好的子模型,充分利用了資源,提高了效率。
攻堅方向
如何科學地將二分類問題劃分為多分類問題。如果讓劃分既不會太細,并且劃分后可以提高成績。
特征抽取
由于個人對業務的不了解,特征抽取使用了偏工程化的提取方法。我先把各種統計粒度的特征都提取出來,以此保證特征的信息量。然后進行各種各樣的特征交叉,來提高單一特征的刻畫能力。
訓練模型
由于這次比賽是在阿里的odps平臺上,接口開放有限制,自己實現模型風險大,性價比不高。所以模型主要用的是ODPS內部的一個算法庫Xlib提供的模型。這次主要的模型是GBRT(梯度漸進回歸樹)和RF(隨機森林),主要就是用這兩類模型,以及他們的組合變種。模型的訓練也比較簡單,不需要自己造輪子,只要調用xlib提供的算法接口,一個函數就可以完成訓練過程。
模型訓練思想
主要用的是兩類模型。RF主要的思想就是用bagging,是一種并行的算法,用很多的弱模型組合出一個強模型。而GBRT主要的思想是boosting,是一種串行的算法,每棵樹用前一棵樹的殘差來訓練。
CSDN:談談比賽感想。
數據心跳:這是一個很好的比賽,也是很好一次學習機會。首先可以接觸到真實的工業界大數據,這是在很多實驗室夢寐以求的一件事,真實的數據也讓我們動手實踐,在真正的數據上探索和學習。然后是接觸了阿里巴巴開發的 odps平臺,這是一個很好的分布式計算平臺,把很多不同的任務都統一在一個平臺上,速度快,也讓我們學會了很多分布式編程的技巧。最后通過這次比賽和很多牛人交流和學習,也提高了自身的能力。
CSDN:ODPS使用感受,優點及建議。
數據心跳:ODPS是一個很好的平臺,他把SQL,MapReduce,MPI,統一在一個平臺上,這是一個很先進的技術,在世界上也是很領先的。并且ODPS的執行速度也很快,內部提供的很多算法庫效果也很好。建議的話,主要是對不同隊伍的資源分配和限制問題,這次比賽,有時候會出現一個隊伍,占了ODPS總資源的一半以上,希望有更合理的資源分配方案。
Fly402團隊由3名碩士研究生組成,其中兩位來自南京航空航天大學,一位來自東南大學,封榜前6.14%。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
Fly402:
解題思路
本次比賽賽題是根據用戶4個月在天貓的行為日志,建立用戶的品牌偏好,并預測他們在將來一個月內對品牌下商品的購買行為。由于預測“購買”以及給定數據集的抽樣方法的問題,預測未交互部分(用戶歷史行為沒有接觸的品牌)的準確度不高。所以整個比賽中的重點放在交互部分(用戶歷史行為接觸過的品牌),然后將這個問題轉為一個二分類問題,可以采用現有的有監督的分類回歸算法(邏輯回歸、SVM、隨機森林、GBRT)等,最后基于基本的算法模型進行模型融合。
算法亮點
攻堅方向
特征抽取
訓練樣本的基本形式是一對有交互的用戶品牌對,我們對這樣的用戶品牌對提取特征。首先,從總的分類上分為用戶的特征、品牌的特征、用戶對這個品牌的特征;其次,考慮用戶行為的周期性,從時間維度上分為最近一個星期、半個月、一個月等不同時間段的特征;然后,根據這次比賽給定的四種行為(點擊、購買、收藏、購物車),從類型維度上去提取特征。在多維度考慮的基礎上,主要提取的是點擊數、天數、訂單數這樣的特征。
這次比賽的目的是由給定的數據去促進業務的提高,從數據到業務需要算法以及特征體系的驅動,在特征抽取的過程中,最本質的一點是要去讓數據“貼合”業務,反過來就要求我們從業務指標出發提取特征。參照一些電商分析網站以及自己對業務的理解,諸如用戶購買力、品牌購買成本、轉化率、用戶對品牌的忠誠度等等指標都可以從給定的數據集得以體現。典型的,比如如何衡量品牌的購買成本,可以使用購買該品牌的用戶數、回頭客的數量、平均每個回頭客的回頭次數等等來體現這個指標。
特征抽取的最后一部分主要是在之前特征體系的基礎上做一些補充,主要有:
模型訓練
這次比賽我們團隊主要使用并且起作用的模型有三個:邏輯回歸、隨機森林和GBRT,邏輯回歸本質是一個線性模型,如果為了防止過擬合,可以添加正則化項;如果方便特征的篩選,可以使用逐步邏輯回歸;邏輯回歸在大數據量下精度會下降,可以通過添加大量的特征(比如啞變量的方式)來提高精度,這次比賽來看,跟隨機森林和GBRT相比,邏輯回歸單模型上存在天然的劣勢。隨機森林跟GBRT都是一種ensemble方法,隨機森林是一種多棵決策樹組合,最后bagging的方法;GBRT是一種boosting方法,每棵樹學習的是上一棵樹的殘差。對于模型的訓練我們團隊主要有兩點心得:
CSDN:談談比賽感想。
Fly402:比賽歷時142天,能夠走到最后的隊伍首先得是一只烏龜,我們很開心自己做到了這點,除此以外,通過142天的努力,我們不斷學習、不斷嘗試、不斷反思,擁抱海量真實數據,鍛煉了團隊合作能力,一切都是值得的!同時,我們也認識到了與優秀隊伍的差距,利用這次寶貴的學習機會,取長補短,更進一步!這次比賽給的是真實數據,真實數據的處理跟平時做實驗室差別很大,大數據量下的每一次嘗試都需要比較大的代價,我們在比賽的過程中,也嘗試了很多其他的算法,在這個數據集上效果都不好。但是通過不斷摸索,我們也積累了很多大數據處理的經驗。在探索大數據的路上,我們只能說,路漫漫其修遠兮,吾將上下而求索!
CSDN:ODPS使用感受,優點及建議。
Fly402:
優點:
建議:
KLMJV團隊是來自南京航空航天大學的碩士研究生, 最后獲得了6.14+%的F1值。
CSDN:請描述你的解題思路、算法亮點以及著重攻堅方向,并具體的談一下特征抽取、訓練模型的建立,以及模型的訓練思想。
KLMJV:對于這次比賽的問題,我也只能按照我這幾個月以來的經驗和學習到的知識來進行說明,有不到位或者錯誤的地方非常希望大家指出來,并給出改正意見,非常希望和你們交流。
大家從官網也可以了解到,這次的問題是根據用戶對品牌操作的四種行為和時間來預測用戶在下個月會購買的品牌,是一個購買預測問題,用戶和品牌字段經過加密處理,也就是最終我們只能從用戶的行為和時間上去提取關鍵信息來進行問題處理。
和很多拿到這個問題的同學一樣,一開始都覺得是推薦問題,那么通過查閱相關資料自然而然的都是協同過濾等相關推薦算法,實際效果可想而知。具體原因我認為是品牌的轉移成本,具體是什么意思呢?打個比方,一個普通的消費者,前三個月某一天購買了蘋果的一款手機,根據商品相似等算法我們可能得到蘋果和三星很相似,然后在第四個月系統向他推薦了三星,從一個消費者的正常心理來看,這種推薦很難促成交易的發生。也許這個比方不太恰當,但是這個例子反映的信息包括品牌的實際周期,用戶對品牌的黏度,消費能力,還有時間季節等因素,我們僅僅通過賽題給出的字段很難分析出這些因素,而這些都是反映品牌的轉移成本的關鍵因素,因為購買行為的發生不是一個單步,而是涉及到很多前因后果以及最終的整體相關性的問題。
上一篇 API企業化戰略部署三部曲(一)