隨身雲資料探勘競賽解題思路

shuaishuai3409發表於2016-01-27

隨身雲資料探勘競賽解題思路

前陣子參加牛客網舉辦的資料探勘競賽,資料來源源自中華萬年曆的“生活圈”資料,類似於朋友圈,使用者可以發表各種帖子,也可以對帖子內容進行贊踩等行為。資料內容是使用者11月份的帖子瀏覽記錄,以及前27天對帖子的贊踩記錄,共約8G。目標任務是根據使用者11月份的瀏覽記錄,以及前27天贊踩記錄,挖掘出使用者的個人喜好,然後預測使用者對月末28,29,30這三天出現的帖子的贊踩行為。詳細資料如下:

使用者11月份瀏覽記錄,記為A,內容為使用者id,帖子id,使用者對帖子的瀏覽次數和點選檢視詳情次數,資料量約為6g,分在了8個檔案裡。
帖子具體內容資料,記為B,內容為帖子id,帖子標題(可能為空),帖子內容;
使用者11月份前27天贊踩記錄,記為C,內容為使用者id,帖子id,贊踩(用1/0表示)。

當時限於計算資源和自身能力不足,未能處理完全部資料,頗有遺憾,故想在放假前這段時間,利用hadoop試著處理下全部資料。

解決方案

此次競賽要求參賽者線上提交28,29,30的預測資料,舉辦方利用真實資料進行比對,計算F1值進行排名。現在比賽結束,無法線上提交資料,由於舉辦方提供了前27天的贊踩行為資料,故自己將目標任務改為根據11月份前24天預測25,26,27日的贊踩行為,然後根據25,26,27日的真實資料計算F1值,線下判斷模型優劣。

1)  贊/踩影響因素分析:

根據舉辦方提供的資料,贊踩影響因素可確定為帖子的內容及帖子瀏覽次數。明顯,帖子內容為主要影響因素,更能體現使用者個人喜好。限於時間關係,這裡主要考慮帖子內容。解題大體思路就是對帖子內容進行關鍵詞提取,構造使用者喜好特徵向量,然後在測試資料上計算帖子相似度,越相似越有相同喜好。

2)  我們要預測25,26,27日的贊踩行為,就得先提取出測試資料和訓練資料以及真實資料。

測試資料:在資料集A中提取出25,26,27日使用者帖子瀏覽記錄。
訓練資料:在資料集A提取前24天的瀏覽記錄。
真實資料:在資料集C中提取出25,26,27日贊踩行為資料。

3)  帖子型別分析

帖子型別分為兩種,長文字和短文字。長文字由於其文字夠長,特徵夠多,故採用正常的分詞方法就可以提取出特徵。但是對於短文字,由於其口語化嚴重,特徵稀疏,得做文字擴充處理。思路為對使用者點贊(踩)的帖子進行彙總構建帖子集合,然後在這個集合上進行特徵提取,表示使用者喜好。

4)  帖子相似度匹配

訓練資料裡使用者喜好特徵向量構建好後,在測試資料進行相似度計算,採用餘弦相似度計算,然後按相似度進行排名,取topK。
5)  K值如何確定呢?提出點贊(踩)比概念。

假設當前使用者點贊帖子共有20條,那麼在這20條帖子提取出特徵向量後,在使用者歷史帖子瀏覽記錄中找尋與特徵向量相似的帖子,假設有100條,那麼點贊比就為20/100=1/5。那麼在測試資料計算目標帖子相似性時假設有80條,那麼認為其會對top16的帖子點贊,K=80*1/5。

6)  F1值公式計算

對測試資料進行預測後,得與真實資料進行比對,算出F1值。比賽時這是舉辦方計算的,在這裡得需要自己想怎麼計算測試資料和真實資料的F1值。計算出正確率和召回率,目前還沒有想這塊。

7)  計算難度

由於資料集A是按照時間排序給出的瀏覽記錄,要想得到某個使用者這一個月的記錄,得按使用者進行排序。即使分成了8個檔案,那對每個檔案按使用者進行排序後還要進行合併,6G的檔案工作量會很大。
在用R進行提取關鍵字時,遇到一個問題,它可以對一個字串提取關鍵字,例如“我愛北京天安門”,可以提取出來關鍵字“北京”“天安門”。可是當對檔案的某一行進行關鍵字提取時出不來結果,即使檔案的該行也改成了字串格式。這個問題困撓了我好久,實在不行就試試用java的Ansj或者jcseg分詞包。

實驗步驟

1)  搭建R+hadoop環境,我在自己的電腦上搭建過hadoop環境,但是用的cygwin,沒用虛擬機器,但是我覺得過程差不多。搭建完全分佈,再結合R估計得用2天時間。
2)  本地除錯程式碼,成功後在hadoop上執行,目前不清楚的是R如何遠端呼叫hadoop。大概需要5天時間。
3)  分析實驗結果。大概需要1天時間。

預期效果
比賽排名第一的F1值約為0.2,希望我的方法結果也能接近0.2。

相關文章