kaggle(05)---Event Recommendation Engine Challenge(基礎版)

文章目錄

  • 目錄
    • 1.比賽相關介紹
      • 1.1 比賽介紹
      • 1.2 數據集介紹
      • 1.3 評價標準介紹
      • 1.4 個人理解
    • 2. 解決方案
      • 2.1 統計用戶和event信息
      • 2.2 計算用戶相似度
      • 2.3 用戶社交關系信息處理
      • 2.4 構建event和event相似度數據
      • 2.5 活躍度/event熱度數據
      • 2.6 構建特征
      • 2.7 模型構建和預測
    • 3. 遇到的問題
    • 4. 總結

目錄

kaggle比賽官網鏈接
下載好的數據集鏈接(百度云,提取碼:ino3)

1.比賽相關介紹

1.1 比賽介紹

根據user actions, event metadata, and demographic information(社交信息)預測用戶對哪個event感興趣

1.2 數據集介紹

共有六個文件: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除外。每行對應于在我們的應用程序中向用戶顯示的事件。 event是一個標識我們系統中事件的id。 user是表示系統中用戶的id。 invite 是一個二進制變量,指示用戶是否已被邀請參加該事件。 timestamp是ISO-8601 UTC時間字符串,表示用戶在我們的應用程序中看到事件時的大致時間(+/- 2小時)。 有興趣是一個二進制變量,指示用戶是否單擊了此事件的“感興趣”按鈕; 如果用戶單擊了“興趣”,則為1;如果用戶未單擊該按鈕,則為0。類似地, not_interested是一個二進制變量,指示用戶是否點擊了此事件的“Not Interested”按鈕; 如果用戶單擊按鈕則為1,否則為0。用戶可能會看到一個事件,并且單擊既不感興趣也不感興趣,因此有些行包含0,0作為 感興趣的值,not_interested。
  • users.csv包含有關我們的一些用戶(包括列車和測試文件中出現的所有用戶)的人口統計數據,它包含以下列: user_id, locale, birthyear, gender, joinedAt, location和 timezone。 user_id是我們系統中用戶的ID。 locale是一個表示用戶區域設置的字符串,其格式應為 language _ territory。birthyear是一個4位整數,表示用戶出生的年份。 性別是男性還是女性,具體取決于用戶的性別。 joinedAt是ISO-8601 UTC時間字符串,表示用戶首次使用我們的應用程序時。 location 是表示用戶位置的字符串(如果已知)。timezone是一個有符號整數,表示用戶的UTC偏移量(以分鐘為單位)。
  • user_friends.csv包含有關此用戶的社交數據,包含兩列:user和friends。 user是我們系統中用戶的id,而 friends是用戶朋友ID的空格分隔列表。
  • events.csv 包含有關我們系統中事件的數據,并且有110列。前九列是 event_id,user_id,start_time,city,state,zip,country, lat和lng。 event_id是事件的id,user_id 是創建事件的用戶的id。 城市, 州, 郵編和 國家/地區代表有關場地位置的更多詳細信息(如果已知)。 lat 和lng 是代表場地的緯度和經度坐標的浮點數,四舍五入到小數點后三位。 start_time 是ISO-8601 UTC時間字符串,表示事件計劃何時開始。最后101列需要更多解釋; 首先,我們確定了在我們事件的大型隨機子集的名稱或描述中出現的100個最常見的詞干(通過Porter Stemming獲得)。最后101列是count_1, count_2,…, count_100, count_other,其中 count_N是一個整數,表示第N個最常見詞干出現在此事件的名稱或描述中的次數。 count_other 是其余詞的統計,其莖不是100個最常見的詞干之一。
  • event_attendees.csv包含有關哪些用戶參加了各種事件的信息,并包含以下列: event_id,yes,maybe,invite和no。event_id 標識事件。是,也許, 邀請,并且沒有以空格分隔的用戶ID列表,表示用戶表示他們要去,可能去,被邀請或不去參加活動。

從數據介紹主要有3類數據

1.用戶的歷史數據 => 對event是否感興趣/是否參加
2.用戶社交數據 => 朋友圈
3.event相關的數據 => event相關的信息

簡單思考

1.要把更多維度的信息納入考量
2.協同過濾是基于 用戶-event 歷史交互數
3.需要把社交數據 和 event相關信息 作為影響最后結果的因素納入考量
4.視作分類模型, 每一個人 感興趣/不感興趣 是target, 其他影響結果的是feature
5.影響結果的feature包括由協同過濾產出的推薦度

初步思路簡圖
在這里插入圖片描述

1.3 評價標準介紹

  • 對于測試集中的每個用戶,提交事件列表。這些事件為模型預測出的用戶最感興趣到用戶最不感興趣的排序。

  • 此競賽的評估指標是前200個推薦的平均精度(任何一個用戶的最大事件數為116,因此200不會產生有意義的限制)。您可以在 Kaggle wiki上找到有關此評估指標的更多信息 。

  • 可以從數據頁面下載樣本提交文件。提交文件的格式應如下:

有一個標題:“用戶,事件”
包含兩列
用戶:按排序順序的用戶ID
事件:以空格分隔的推薦事件列表,從用戶最感興趣的事件列表到用戶最不感興趣的事件列表
提交樣本的前幾行:
用戶,事??件
1776192,2877501688 1024025121 4078218285 2972??428928 3025444328 1823369186 2514143386 
3044012,2529072432 1532377761 1390707377 1502284248 3072478280 1918771225 
4236494,152418051 4203627753 2790605371 799782433 823015621 2352676247 110357109

1.4 個人理解

  • 我們需要從users.csv,user_friends.csv,events.csv和 event_attendees.csv文件提取出一些對預測用戶是否會對某些事件感興趣的特征。
  • 最終我們需要實現一個模型能夠輸出每個用戶對所有事件的一個感興趣程度,并根據感興趣程度對事件進行降序排序輸出。

2. 解決方案

具體代碼

2.1 統計用戶和event信息

  • 1.讀取train.csv和test.csv文件
  • 2.統計出用戶和事件信息,構建用戶-索引字典和事件-索引字典
  • 3.構建用戶-事件字典和事件-用戶字典
  • 4.構建用戶-事件-興趣矩陣
  • 5.構建關聯用戶字典和關聯事件字典。

2.2 計算用戶相似度

  • 1.讀取user.csv文件
  • 2.對user數據結構中的每一列進行處理,主要是將字符型的數據轉換為數值型的數據,其中locale(locale庫進行處理),joinedAt(datetime進行事件處理),location(pycountry進行編碼)。
  • 3.將處理后的特征進行歸一化處理。
  • 4.通過scipy.spatial.distance庫中的函數計算每兩個用戶之間的相似度,從而構成一個用戶相似矩陣。

2.3 用戶社交關系信息處理

  • 1.讀取user_friends.csv文件
  • 2.統計每個用戶其朋友的數量(如果你有更多的朋友,可能你性格外向,更容易參加各種活動)
  • 3.統計每個用戶其朋友參與事件的情況,構建用戶-用戶朋友參與事件情況矩陣。(如果你朋友會參加某個活動,可能你也會跟隨去參加一下)

2.4 構建event和event相似度數據

  • 1.讀取events.csv文件
  • 2.將數據按照屬性是否有具體的意義劃分為兩個矩陣
  • 3.對具有意義的屬性列進行hash處理,其余的列復制即可。
  • 4.對上面的2個矩陣進行歸一化處理
  • 5.對上面兩個矩陣分別計算用戶-event和event-event相識度,構建兩個相似度矩陣。

2.5 活躍度/event熱度數據

  • 1.讀取event_attendees.csv文件
  • 2.統計每個活動參加和不參加的人數,從而計算出互動的活躍度。

2.6 構建特征

  • 1.讀取之前幾個步驟保存下來的文件
  • 2.基于之前的得到的特征,根據User-based協同過濾,得到event的推薦度;
  • 3.根據基于物品的協同過濾,得到Event的推薦度;
  • 4.基于用戶的朋友個數來推斷用戶的社交程度。朋友對用戶的影響
  • 5.活動本身的熱度
  • 6.把前面user-based協同過濾和item-based協同過濾以及各種熱度和影響度作為特征組合在一起生成新的train,用于分類器分類使用。

2.7 模型構建和預測

  • 讀取前面保存好的訓練集進行模型的訓練(XGBT)
  • 進行交叉驗證,判斷模型的性能
  • 使用模型對測試集上的用戶進行預測。

3. 遇到的問題

  • 由于電腦性能有限,所以在統計用戶和時間信息的時候,我們只關注在train和test兩個文件中出現的用戶和事件,其余的不作考慮,因為我們最終是要對通過對train中的數據的學習,然后對test中用戶的預測。其他的沒有出現的用戶則不用考慮。如果電腦的性能允許的話,最好是對所有的用戶都進行考慮。否則會出現用戶的一些朋友在不在考慮的用戶范圍內。
  • 再用文件user.csv文件計算用戶相似度矩陣的時候,我們需要對該文件中的一些類型屬性進行處理,尤其是國家屬性和時間屬性。其中國家屬性不能簡單使用one-hot進行處理,否則矩陣會非常的稀疏,應該使用pycountry庫對其進行編碼處理。時間屬性則需要將年月進行提出。在將特征數據都轉換為數值型的數據后,需要對特征數據進行歸一化處理,然后使用scipy對每個用戶兩兩之間計算相似性(向量的相似性)
  • 時間屬性特征一定要單獨處理
  • 有具體含義的特征和沒有具體含義的特征需要單獨進行處理
  • 構建event-event相似矩陣的時候,也要對特征進行處理(類別性的數據,數值型的數據)

4. 總結

  • 了解問題
  1. 問題分析
    • 通過查閱資料,了解要解決的問題是什么(分類還是回歸)
    • 通過查閱文檔,了解給出的數據中每個屬性代表的意義。
    • 結合實際的生活和自己的理解,給出初步的解決方案。

2.初步想法:
- 1.通過查閱資料發現本文解決的問題是一個推薦問題,需要我們輸出TOPN.
- 2.從給出的數據可以看出,除了傳統的基于用戶的協同過濾和基于物品(活動)的協同過濾外,還應該利用用戶的朋友圈的信息

3.具體方案:

  • 1.基于user.csv文件,得出用戶-用戶之間的相似度矩陣
    • 方法1:通過歷史行為,找出關聯用戶
    • 方法2:通過用戶的信息,即該數據集中其他的屬性信息,通過度量不同用戶之間向量的距離作為用戶之間的相似度。
  • 2.基于event,得出event-event之間的相似度矩陣和用戶-event的相似度矩陣。
    • 方法1:基于用戶的歷史信息,找出關聯的事件和用戶關聯的事件
    • 方法2:基于事件的屬性,即數據中其他屬性的信息,衡量不同事件的向量的距離作為事件與事件之間的相似度。
  • 3.基于friend.csv文件,得出用戶的朋友數目和用戶朋友的活躍度
    • 用戶的朋友數目越多,則其越外向,越有可能參與活動
    • 用戶朋友都是那種樂意參加活動的人,那么用戶自己參加活動的可能性也會很高。
  • 4.基于event_attendees.csv文件得出互動的活躍度
    • 活躍度越高的事件,用戶參加的可能性越大。

4.具體實施:

  • 1.數據清洗
    • 類別數據轉換為數值型的數據
    • 事件數據進行拆分
    • 缺失數據進行填充
  • 2.處理用戶和活動之間的關聯數據
    • 得到用戶列表(不重復)
    • 得到活動列表(不重復)
    • 得到用戶和活動的的關聯數據。
  • 3.用戶與用戶之間的相似度矩陣
    • 通過用戶信息計算用戶之間的相似性
    • 通過用戶的活動行為計算用戶之間的相似性(如果兩個用戶參加的活動好多都相同,那么這兩個用戶之間相似)
  • 4.構建event 和 event之間的相似度矩陣
    • 通過event的屬性信息計算event之間的相似性
    • 通過用戶參與活動的歷史信息計算event之間的相似性。(相似的用戶購買的產品也相似)
  • 5.用戶社交關系挖掘
    • 統計每個用戶的朋友信息
    • 統計每個用戶朋友活躍度信息(參加活動總數/總的朋友數)
  • 6.統計event熱度
    • 統計每個活動參與的人數信息作為活動的熱度標準
  • 7.串起所有的數據處理和準備流程
    • 計算上訴的特征,并進行保存
  • 8.構建特征
    • 讀取上訴保存的特征
    • 基于用戶-用戶的相似度矩陣,得出基于用戶的活動推薦度
    • 基于活動-活動的相似度矩陣,得出基于活動的活動推薦度
    • 合并所有的特征,并進行保存
  • 9.建模與預測
    • 模型訓練
    • 參數調節
    • 模型評估
    • 進行預測

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多校一道KMP+DP的題

難啊,多校當時根本不會做 題目描述 White Cloud has a rectangle carpet of n*m. Grid (i,j) has a color colorA[i][j] and a cost costA[i][j]. White Rabbit will choose a subrectangle B of p*q from A and the color of each grid is colorB[0...p-1][0..…

Python(2)-第一個python程序、執行python程序三種方式

第一個Python 程序1. 第一個Python 程序2. 常用兩Python個版本3. 程序執行的三種方式3.1 解釋器3.2 交互式運行Python程序3.3 IDE(集成開發環境)-pycharm1. 第一個Python 程序 Python 源程序就是一個特殊格式的文本文件,所以可以采用任意的文…

推薦算法---FM,協同過濾

文章目錄目錄1.FM算法產生背景2.FM算法模型3.FM算法VS其他算法4.推薦算法總結目錄 1.FM算法產生背景 在傳統的線性模型如LR中,每個特征都是獨立的,如果需要考慮特征與特征直接的交互作用,可能需要人工對特征進行交叉組合;非線性…

借助桶排序思想完成的一道題

問題: 數組排序之后的相鄰數的最大差值; 嗯,你可以排序,然后找相鄰的最大差值。 但是你覺得這么簡單我寫他干啥。 最優解:時間復雜度O(N),空間O(1) 那我們開始說這種方法: 1)遍…

Python(3)-Pycharm基本使用技巧

初識Pycharm1.界面2.恢復初始設置3.第一次打開Pycharm4.打開一個項目5.設置解釋器的版本。6.新建項目7.編輯器、控制臺的字體設置Pycharm–適合于開發管理大型項目,項目是用以解決復雜功能的軟件。1.界面 導航區–主要有什么文件 編輯區–編輯具體的文件 控制臺窗口…

推薦算法概述(01)

1.什么是推薦系統 用戶沒有明確的需求,你需要的是一個自動化的工具,它可以分析你的歷史興趣,從龐大的電影庫中找到幾部符合你興趣的電影供你選擇。這個工具就是個性化推薦系統。 推薦系統的主要任務 推薦系統的任務就是聯系用戶和信息&…

CSDN-Markdown編輯器使用小技巧

Markdown編輯器使用小技巧1.圖片無法顯示1.圖片無法顯示 1.檢查圖片的命名格式是否正確,數字不能作為圖片名稱開頭,雖然window操作系統下能夠識別,但是導入圖片的時候會造成無法顯示的錯誤。

何為布隆過濾器

問題的提出 我們有一個不安全網頁的黑名單,包含了100億個黑名單網頁的URL,每個網頁URL最多占用64B.。 現在我們要設計一個網頁過濾系統,這個系統要判斷該網頁是否在黑名單里,但是我們的空間有限,只有30GB. 允許有萬分之一的判斷…

推薦算法--利用用戶行為數據(02)

文章目錄目錄1.什么是用戶行為數據?1.1用戶行為分類2.用戶行為數據如何使用?2.1 用戶活躍度和物品流行度的分布2.2 用戶活躍度和物品流行度的關系2.3 協同過濾算法3.實驗設計和算法評測4.基于鄰域的的推薦算法4.1 基于用戶的協同過濾算法4.2 基于物品的協…

《Head First設計模式》第九章(2)組合模式

組合模式 ? 基于前一篇迭代模式的案例進行需求更新,餐廳的菜單管理系統需要有煎餅屋菜單和披薩菜單。現在希望在披薩菜單中能夠加上一份餐后甜點的子菜單。 在迭代模式中,披薩菜單是用數組維護的,我們需要讓披薩菜單持有一份子菜單&#xf…

Python(4)--Pycharm安裝、使用小技巧

Pycharm安裝1.專業版Pycharm 安裝2.設置Pycharm桌面快捷圖標3.Linux卸載一個軟件4.教育版Pycharm的安裝5.多文件項目演練(Pycharm針對學生和教師開發了免費使用版)1.專業版Pycharm 安裝 1.官網下載安裝包 .tar.gz 2.解壓縮 tar -zxvf 文件名 3.移動解壓…

推薦算法--推薦系統冷啟動問題(03)

文章目錄目錄1.什么是冷啟動問題?1.1冷啟動問題1.2 冷啟動問題的分類1. 用戶冷啟動2 物品冷啟動3 系統冷啟動2.如何解決冷啟動問題?2.1利用用戶注冊信息2.2選擇合適的物品啟動用戶的興趣2.3利用物品的內容信息2.4 發揮專家的作用目錄 1.什么是冷啟動問題…

《Head First 設計模式》第十章-狀態模式 狀態模式

狀態模式 策略模式和狀態模式是雙胞胎,在出生時才分開。你已經知道,策略模式是圍繞可以互換的算法來創建成功業務的,然而,狀態走的是更崇高的路,它通過改變對象內部的狀態來幫助對象控制自己的行為。 定義狀態模式 …

推薦算法--利用用戶標簽數據(04)

文章目錄流行的推薦系統通過3種方式聯系用戶興趣和物品 (1):利用用戶喜歡過的物品,給用戶推薦與他喜歡過的物品相似的物品,這是基于物品的算法。 (2):利用和用戶興趣相似的其他用戶…

Python(5)-注釋

Python注釋1.單行注釋2. 多行注釋(塊注釋)3.注釋的使用和代碼規范pyhton 的注釋 使用自己熟悉的語言(中文),解釋代碼。Python解釋器在執行文件時不會執行井號右邊邊的內容。1.單行注釋 # 井號后面跟著注釋內容 灰灰的虛…

玩具kv數據庫

介紹 用java寫一個簡陋的kv數據庫(倆小時的貨),用來復習一下java流知識、線程、socket等知識。 客戶端:很簡單的寫了一下功能:就是發送用戶的命令,還有接收數據顯示出來 服務端:redis類&#…

網絡原理知識點總結

第一章: 計算機網絡系統由資源子網和通信子網組成。 計算機網絡系統主要由網絡通信系統、操作系統和應用系統構成 互聯網基礎結構發展的三個階段: 第一階段:從單個網絡 ARPANET 向互聯網發展的過程。 第二階段:建成了三級結構…

推薦算法--時效性(05)

時效性 推薦系統應該考慮時間效應,因為用戶的興趣是有時間變化的。用戶一年前喜歡的東西現在不一定感興趣,相比于推薦過去喜歡的物品,推薦用戶近期喜歡的物品更有參考價值。而在新聞更是如此,推薦過去跟用戶興趣一致的新聞已經失去…

初識博弈論(1)

博弈論與主流經濟學的新發展1.經濟學的研究內容2.博弈論的研究內容3.博弈論的發展簡史4.經濟學發展的趨勢本系列博文主要記錄了學習張維迎老師的《博弈論與信息經濟學》一書相關內容,如果有誤之處懇請指出;或對照張老師的書籍進行學習。1.經濟學的研究內…

c語言實現排序和查找所有算法

c語言版排序查找完成,帶詳細解釋,一下看到爽,能直接運行看效果。 /* Note:Your choice is C IDE */ #include "stdio.h" #include"stdlib.h" #define MAX 10 void SequenceSearch(int *fp,int Length); void Search(int …