kaggle(05)---Event Recommendation Engine Challenge(基础版)
文章目錄
- 目錄
- 1.比賽相關(guān)介紹
- 1.1 比賽介紹
- 1.2 數(shù)據(jù)集介紹
- 1.3 評價標準介紹
- 1.4 個人理解
- 2. 解決方案
- 2.1 統(tǒng)計用戶和event信息
- 2.2 計算用戶相似度
- 2.3 用戶社交關(guān)系信息處理
- 2.4 構(gòu)建event和event相似度數(shù)據(jù)
- 2.5 活躍度/event熱度數(shù)據(jù)
- 2.6 構(gòu)建特征
- 2.7 模型構(gòu)建和預(yù)測
- 3. 遇到的問題
- 4. 總結(jié)
目錄
kaggle比賽官網(wǎng)鏈接
下載好的數(shù)據(jù)集鏈接(百度云,提取碼:ino3)
1.比賽相關(guān)介紹
1.1 比賽介紹
根據(jù)user actions, event metadata, and demographic information(社交信息)預(yù)測用戶對哪個event感興趣
1.2 數(shù)據(jù)集介紹
共有六個文件:train.csv,test.csv, users.csv,user_friends.csv,events.csv和 event_attendees.csv。
- train.csv 有六列: user,event, invite,timestamp,interested和not_interested。 Test.csv 包含與train.csv相同的列,但interested和not_interested除外。每行對應(yīng)于在我們的應(yīng)用程序中向用戶顯示的事件。 event是一個標識我們系統(tǒng)中事件的id。 user是表示系統(tǒng)中用戶的id。 invite 是一個二進制變量,指示用戶是否已被邀請參加該事件。 timestamp是ISO-8601 UTC時間字符串,表示用戶在我們的應(yīng)用程序中看到事件時的大致時間(+/- 2小時)。 有興趣是一個二進制變量,指示用戶是否單擊了此事件的“感興趣”按鈕; 如果用戶單擊了“興趣”,則為1;如果用戶未單擊該按鈕,則為0。類似地, not_interested是一個二進制變量,指示用戶是否點擊了此事件的“Not Interested”按鈕; 如果用戶單擊按鈕則為1,否則為0。用戶可能會看到一個事件,并且單擊既不感興趣也不感興趣,因此有些行包含0,0作為 感興趣的值,not_interested。
- users.csv包含有關(guān)我們的一些用戶(包括列車和測試文件中出現(xiàn)的所有用戶)的人口統(tǒng)計數(shù)據(jù),它包含以下列: user_id, locale, birthyear, gender, joinedAt, location和 timezone。 user_id是我們系統(tǒng)中用戶的ID。 locale是一個表示用戶區(qū)域設(shè)置的字符串,其格式應(yīng)為 language _ territory。birthyear是一個4位整數(shù),表示用戶出生的年份。 性別是男性還是女性,具體取決于用戶的性別。 joinedAt是ISO-8601 UTC時間字符串,表示用戶首次使用我們的應(yīng)用程序時。 location 是表示用戶位置的字符串(如果已知)。timezone是一個有符號整數(shù),表示用戶的UTC偏移量(以分鐘為單位)。
- user_friends.csv包含有關(guān)此用戶的社交數(shù)據(jù),包含兩列:user和friends。 user是我們系統(tǒng)中用戶的id,而 friends是用戶朋友ID的空格分隔列表。
- events.csv 包含有關(guān)我們系統(tǒng)中事件的數(shù)據(jù),并且有110列。前九列是 event_id,user_id,start_time,city,state,zip,country, lat和lng。 event_id是事件的id,user_id 是創(chuàng)建事件的用戶的id。 城市, 州, 郵編和 國家/地區(qū)代表有關(guān)場地位置的更多詳細信息(如果已知)。 lat 和lng 是代表場地的緯度和經(jīng)度坐標的浮點數(shù),四舍五入到小數(shù)點后三位。 start_time 是ISO-8601 UTC時間字符串,表示事件計劃何時開始。最后101列需要更多解釋; 首先,我們確定了在我們事件的大型隨機子集的名稱或描述中出現(xiàn)的100個最常見的詞干(通過Porter Stemming獲得)。最后101列是count_1, count_2,…, count_100, count_other,其中 count_N是一個整數(shù),表示第N個最常見詞干出現(xiàn)在此事件的名稱或描述中的次數(shù)。 count_other 是其余詞的統(tǒng)計,其莖不是100個最常見的詞干之一。
- event_attendees.csv包含有關(guān)哪些用戶參加了各種事件的信息,并包含以下列: event_id,yes,maybe,invite和no。event_id 標識事件。是,也許, 邀請,并且沒有以空格分隔的用戶ID列表,表示用戶表示他們要去,可能去,被邀請或不去參加活動。
從數(shù)據(jù)介紹主要有3類數(shù)據(jù)
1.用戶的歷史數(shù)據(jù) => 對event是否感興趣/是否參加
2.用戶社交數(shù)據(jù) => 朋友圈
3.event相關(guān)的數(shù)據(jù) => event相關(guān)的信息
簡單思考
1.要把更多維度的信息納入考量
2.協(xié)同過濾是基于 用戶-event 歷史交互數(shù)
3.需要把社交數(shù)據(jù) 和 event相關(guān)信息 作為影響最后結(jié)果的因素納入考量
4.視作分類模型, 每一個人 感興趣/不感興趣 是target, 其他影響結(jié)果的是feature
5.影響結(jié)果的feature包括由協(xié)同過濾產(chǎn)出的推薦度
初步思路簡圖
1.3 評價標準介紹
-
對于測試集中的每個用戶,提交事件列表。這些事件為模型預(yù)測出的用戶最感興趣到用戶最不感興趣的排序。
-
此競賽的評估指標是前200個推薦的平均精度(任何一個用戶的最大事件數(shù)為116,因此200不會產(chǎn)生有意義的限制)。您可以在 Kaggle wiki上找到有關(guān)此評估指標的更多信息 。
-
可以從數(shù)據(jù)頁面下載樣本提交文件。提交文件的格式應(yīng)如下:
1.4 個人理解
- 我們需要從users.csv,user_friends.csv,events.csv和 event_attendees.csv文件提取出一些對預(yù)測用戶是否會對某些事件感興趣的特征。
- 最終我們需要實現(xiàn)一個模型能夠輸出每個用戶對所有事件的一個感興趣程度,并根據(jù)感興趣程度對事件進行降序排序輸出。
2. 解決方案
具體代碼
2.1 統(tǒng)計用戶和event信息
- 1.讀取train.csv和test.csv文件
- 2.統(tǒng)計出用戶和事件信息,構(gòu)建用戶-索引字典和事件-索引字典
- 3.構(gòu)建用戶-事件字典和事件-用戶字典
- 4.構(gòu)建用戶-事件-興趣矩陣
- 5.構(gòu)建關(guān)聯(lián)用戶字典和關(guān)聯(lián)事件字典。
2.2 計算用戶相似度
- 1.讀取user.csv文件
- 2.對user數(shù)據(jù)結(jié)構(gòu)中的每一列進行處理,主要是將字符型的數(shù)據(jù)轉(zhuǎn)換為數(shù)值型的數(shù)據(jù),其中l(wèi)ocale(locale庫進行處理),joinedAt(datetime進行事件處理),location(pycountry進行編碼)。
- 3.將處理后的特征進行歸一化處理。
- 4.通過scipy.spatial.distance庫中的函數(shù)計算每兩個用戶之間的相似度,從而構(gòu)成一個用戶相似矩陣。
2.3 用戶社交關(guān)系信息處理
- 1.讀取user_friends.csv文件
- 2.統(tǒng)計每個用戶其朋友的數(shù)量(如果你有更多的朋友,可能你性格外向,更容易參加各種活動)
- 3.統(tǒng)計每個用戶其朋友參與事件的情況,構(gòu)建用戶-用戶朋友參與事件情況矩陣。(如果你朋友會參加某個活動,可能你也會跟隨去參加一下)
2.4 構(gòu)建event和event相似度數(shù)據(jù)
- 1.讀取events.csv文件
- 2.將數(shù)據(jù)按照屬性是否有具體的意義劃分為兩個矩陣
- 3.對具有意義的屬性列進行hash處理,其余的列復(fù)制即可。
- 4.對上面的2個矩陣進行歸一化處理
- 5.對上面兩個矩陣分別計算用戶-event和event-event相識度,構(gòu)建兩個相似度矩陣。
2.5 活躍度/event熱度數(shù)據(jù)
- 1.讀取event_attendees.csv文件
- 2.統(tǒng)計每個活動參加和不參加的人數(shù),從而計算出互動的活躍度。
2.6 構(gòu)建特征
- 1.讀取之前幾個步驟保存下來的文件
- 2.基于之前的得到的特征,根據(jù)User-based協(xié)同過濾,得到event的推薦度;
- 3.根據(jù)基于物品的協(xié)同過濾,得到Event的推薦度;
- 4.基于用戶的朋友個數(shù)來推斷用戶的社交程度。朋友對用戶的影響
- 5.活動本身的熱度
- 6.把前面user-based協(xié)同過濾和item-based協(xié)同過濾以及各種熱度和影響度作為特征組合在一起生成新的train,用于分類器分類使用。
2.7 模型構(gòu)建和預(yù)測
- 讀取前面保存好的訓(xùn)練集進行模型的訓(xùn)練(XGBT)
- 進行交叉驗證,判斷模型的性能
- 使用模型對測試集上的用戶進行預(yù)測。
3. 遇到的問題
- 由于電腦性能有限,所以在統(tǒng)計用戶和時間信息的時候,我們只關(guān)注在train和test兩個文件中出現(xiàn)的用戶和事件,其余的不作考慮,因為我們最終是要對通過對train中的數(shù)據(jù)的學(xué)習,然后對test中用戶的預(yù)測。其他的沒有出現(xiàn)的用戶則不用考慮。如果電腦的性能允許的話,最好是對所有的用戶都進行考慮。否則會出現(xiàn)用戶的一些朋友在不在考慮的用戶范圍內(nèi)。
- 再用文件user.csv文件計算用戶相似度矩陣的時候,我們需要對該文件中的一些類型屬性進行處理,尤其是國家屬性和時間屬性。其中國家屬性不能簡單使用one-hot進行處理,否則矩陣會非常的稀疏,應(yīng)該使用pycountry庫對其進行編碼處理。時間屬性則需要將年月進行提出。在將特征數(shù)據(jù)都轉(zhuǎn)換為數(shù)值型的數(shù)據(jù)后,需要對特征數(shù)據(jù)進行歸一化處理,然后使用scipy對每個用戶兩兩之間計算相似性(向量的相似性)
- 時間屬性特征一定要單獨處理
- 有具體含義的特征和沒有具體含義的特征需要單獨進行處理
- 構(gòu)建event-event相似矩陣的時候,也要對特征進行處理(類別性的數(shù)據(jù),數(shù)值型的數(shù)據(jù))
4. 總結(jié)
- 了解問題
- 通過查閱資料,了解要解決的問題是什么(分類還是回歸)
- 通過查閱文檔,了解給出的數(shù)據(jù)中每個屬性代表的意義。
- 結(jié)合實際的生活和自己的理解,給出初步的解決方案。
2.初步想法:
- 1.通過查閱資料發(fā)現(xiàn)本文解決的問題是一個推薦問題,需要我們輸出TOPN.
- 2.從給出的數(shù)據(jù)可以看出,除了傳統(tǒng)的基于用戶的協(xié)同過濾和基于物品(活動)的協(xié)同過濾外,還應(yīng)該利用用戶的朋友圈的信息
3.具體方案:
- 1.基于user.csv文件,得出用戶-用戶之間的相似度矩陣
- 方法1:通過歷史行為,找出關(guān)聯(lián)用戶
- 方法2:通過用戶的信息,即該數(shù)據(jù)集中其他的屬性信息,通過度量不同用戶之間向量的距離作為用戶之間的相似度。
- 2.基于event,得出event-event之間的相似度矩陣和用戶-event的相似度矩陣。
- 方法1:基于用戶的歷史信息,找出關(guān)聯(lián)的事件和用戶關(guān)聯(lián)的事件
- 方法2:基于事件的屬性,即數(shù)據(jù)中其他屬性的信息,衡量不同事件的向量的距離作為事件與事件之間的相似度。
- 3.基于friend.csv文件,得出用戶的朋友數(shù)目和用戶朋友的活躍度
- 用戶的朋友數(shù)目越多,則其越外向,越有可能參與活動
- 用戶朋友都是那種樂意參加活動的人,那么用戶自己參加活動的可能性也會很高。
- 4.基于event_attendees.csv文件得出互動的活躍度
- 活躍度越高的事件,用戶參加的可能性越大。
4.具體實施:
- 1.數(shù)據(jù)清洗
- 類別數(shù)據(jù)轉(zhuǎn)換為數(shù)值型的數(shù)據(jù)
- 事件數(shù)據(jù)進行拆分
- 缺失數(shù)據(jù)進行填充
- 2.處理用戶和活動之間的關(guān)聯(lián)數(shù)據(jù)
- 得到用戶列表(不重復(fù))
- 得到活動列表(不重復(fù))
- 得到用戶和活動的的關(guān)聯(lián)數(shù)據(jù)。
- 3.用戶與用戶之間的相似度矩陣
- 通過用戶信息計算用戶之間的相似性
- 通過用戶的活動行為計算用戶之間的相似性(如果兩個用戶參加的活動好多都相同,那么這兩個用戶之間相似)
- 4.構(gòu)建event 和 event之間的相似度矩陣
- 通過event的屬性信息計算event之間的相似性
- 通過用戶參與活動的歷史信息計算event之間的相似性。(相似的用戶購買的產(chǎn)品也相似)
- 5.用戶社交關(guān)系挖掘
- 統(tǒng)計每個用戶的朋友信息
- 統(tǒng)計每個用戶朋友活躍度信息(參加活動總數(shù)/總的朋友數(shù))
- 6.統(tǒng)計event熱度
- 統(tǒng)計每個活動參與的人數(shù)信息作為活動的熱度標準
- 7.串起所有的數(shù)據(jù)處理和準備流程
- 計算上訴的特征,并進行保存
- 8.構(gòu)建特征
- 讀取上訴保存的特征
- 基于用戶-用戶的相似度矩陣,得出基于用戶的活動推薦度
- 基于活動-活動的相似度矩陣,得出基于活動的活動推薦度
- 合并所有的特征,并進行保存
- 9.建模與預(yù)測
- 模型訓(xùn)練
- 參數(shù)調(diào)節(jié)
- 模型評估
- 進行預(yù)測
總結(jié)
以上是生活随笔為你收集整理的kaggle(05)---Event Recommendation Engine Challenge(基础版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指Offer》60:n个骰子的点数
- 下一篇: 学习4层板设计