周翔宇,高仲合
(曲阜師范大學,山東 曲阜 273100)
由于互聯網產業的發展,從海量的信息數據中挖掘用戶的興趣點并給用戶進行推送,能有效的提升用戶對于信息獲取的效率。傳統的單一維度下的協同過濾推薦算法,如基于鄰域的推薦和基于物品的推薦具有一定的局限性,如用戶場景的時刻變化、用戶行為稀疏等。因此,基于傳統的推薦算法之上融入地理位置信息和用戶上下文行為特征,對于研究和構建一個針對于用戶個性化需求的推薦系統具有重要意義。
協同過濾算法是目前在商品推薦領域最為經典的解決方法,傳統的協同過濾算法一般分為兩種思路,分別是基于物品和基于用戶的推薦方法[1],協同過濾的核心是計算物品或者用戶之間的相似度,根據用戶之間的相關性或者用戶對于物品的偏好程度來進行推薦。
(1)基于用戶的協同過濾
計算用戶之間的相似度,給目標用戶推薦的項為和該用戶相似用戶的喜好項[2]。
(2)基于物品的協同過濾
計算物品直接的相似度,當目標用戶表現出對某物品有興趣時對其推薦相似物品。
傳統的推薦算法主要依賴于與用戶特征及待推薦項的特征,通過關聯分析具有某種喜好的用戶特點或者分析某類特定人群的一般喜好[3]。協同過濾算法的核心是計算出相應維度下的相似度從而按照規則計算出用戶感興趣的列表[4],常用的計算相似度的方法如下:
(1)歐幾里得距離

(2)余弦相似度

協同過濾算法主要依賴于與用戶特征及待推薦項的特征,通過關聯分析具有某種喜好的用戶特點或者分析某類特定人群的一般喜好[5],這種方式固然在一定程度上可以起到推薦的作用但在一些情況下難免存在局限性。
在本文論述的基于地理位置和用戶行為特征進行優化的算法思路中也借鑒了傳統的協同過濾算法,在計算相似度的過程中引入地理位置特征和用戶行為特征來多樣化樣本的維度,從而達到普適性更好,用戶特點更加個性化的推薦模型。
傳統的推薦算法僅是根據用戶和物品的相似度這兩個維度來進行相關計算與推薦,但在一些線上與線下結合的產品中存在一定的局限,為了優化推薦算法,本文提出了加入地理位置信息和用戶行為特征這兩個維度,通過優化后,可以使傳統的推薦算法適用于更多的應用場景。
本文介紹推薦算法中需要引入地理位置特征及用戶行為的上下文特征,如天氣、地點、時間、用戶點擊item序列、用戶操作序列等信息。并且整理地理位置與推薦項的關聯關系來進一步提升推薦的適配度,針對于地理位置信息進行分類。算法描述如下:
算法:根據不同地理位置尋找最適合的推薦類型。
輸入:用戶U,U所在位置L。
過程:
1.m種位置類型分別對應的n種最常去興趣點的概率矩陣Mmm;
2.m1=getType(L) //獲取位置L的類型;
3.P(m1)={m1n1,m1n2,m1n3,…,m1nn} //從興趣點位置類型矩陣中獲得對應概率;
4.R=Sort(P(m1)) // 對該類型地點去的興趣點概率排序;
5.res=R[0-k] // 從排序結果中選取前K個可能去的類型。
輸出:res。
采集用戶的地理位置變化軌跡,在服務端匯總各個用戶的行動軌跡,相似用戶的行動軌跡的可參考的程度較大,計算用戶ui和用戶uj相似度的公式見式(3):

這種思路是將實時地理位置、該用戶常去的地理位置、工作地、居住地等不同類型的位置信息根據相關經驗適配不同類型的推薦項,從而能夠使最終的推薦效果具有較好的泛化性。
針對基于地理位置信息的推薦模型,增加一步優化,對相似用戶計算軌跡的相似度,對于固定的地理位置變化軌跡中包含較多的興趣點可能是該區域的熱點區域,可以通過排序來設定同一區域中興趣點的推薦權重。算法描述如下:
算法:同一區域中興趣點的推薦權重。
輸入:多個用戶U的行為軌跡T,U所在位置L。
過程:
1.P1=getPoi[L] // 獲得L區域所有的興趣點;
2.P2=intersect1d[T1,T2] // 對相似度高的用戶求軌跡中的興趣點交集;
3.P3=Sort[P1] // 對L區域的興趣點按照簽到次數進行排序;
4.P4=intersect1d(P3[0-k],P2) // 尋找用戶可能感興趣且受歡迎的興趣點;
5.R=Sort[P4] // 對上一步交集結果排序;
6.res=R[0-k] // 從排序結果中選取前K個可能去的類型。
輸出:res。
用戶的行為軌跡其實可以在很大程度上反應出用戶的行為習慣或者偏好,而推薦模型的任務就是去尋找用戶這種潛在的行為習慣或偏好,而將用戶行為維度考慮到推薦算法的規則中能夠使推薦效果更加個性化,從而更加切合用戶的個人喜好。
2.1.1 實驗目的
對本文論述的基于地理位置和用戶行為特征的推薦算法進行驗證,對文中提到的推薦算法進行具體實現,并對推薦結果進行評估
2.1.2 實驗方案
本文選用Foursquare數據集中2014年2月份到2015年2月份在紐約市的簽到數據進行算法驗證,使用Python進行數據的預處理操作,從包含有地理標記的數據條目中對簽到記錄進行提取。對預處理數據進行使用本文提到的算法思路進行數據分析,并得出推薦結果,最后對推薦效果進行評估。
2.2.1 數據預處理
使用Python對下載的Foursquare數據集進行跟過濾篩選,過濾掉地點為空的數據,并整理Foursquare中的各個字段。
最終整理后的數據包含用戶編號、用戶姓名、用戶基本信息、簽到內容、簽到時間、經緯度、城市。
清洗各個字段中無效值及排序。依據各個維度的具體情況,使用0值填充或者均值填充的方式進行數據補全,對補全后的數據按照簽到時間維度進行排序,得到每個用戶的行為軌跡,并將處理后的結果數據保存為csv格式用于數據分析。

表1 預處理后的數據
2.2.2 數據分析
(1)計算用戶行為相似度:我們使用numpy模塊中求交集的內置函數計算出用戶行為的相似度
(2)計算初始推薦列表:根據預處理后的Foursquare數據集,通過分析興趣點受歡迎程度生產初始列表,并記錄不同用戶對此推薦列表的反饋評分,生成最初的評估推薦策略的模型訓練數據
在實驗中,我們基于Foursquare數據集嘗試使用了基于用戶和地理位置的協同過濾算法編寫Python腳本進行數據分析。并將計算結果輸出到文本文件中用于后續分析使用。
將計算結果進行規范化,按照地點、簽到次數、是否推薦三個列進行格式化輸出,并將最終結果寫入文本文件用來評估我們策略在Foursquare數據集上的表現。
至此我們按照設定的推薦策略得到了一個推薦列表,對此結果使用Logit回歸進行驗證我們的策略推薦效果。我們按照是否推薦和簽到次數做Logit回歸,根輸出結果我們的Logit回歸迭代計算8次后,驗證集上推薦的準確率為97.5%
簽到次數與是否推薦繪制散點圖如圖1所示。

圖1 簽到次數推薦結果散點圖
從圖1可以看出,最終結果也較為符合自然規律,對于簽到次數較多的熱點區域,不推薦的可能性比較小,這也和實際情況較為貼合。
本文提出的基于地理位置信息和用戶行為特征的推薦算法,并結合Foursquare數據集進行驗證,創新點在于基于傳統的推薦算法之上加入了地理位置與用戶行為特征這兩個維度,并進一步優化,可以更好地適用于線上線下相結合的互聯網應用軟件中,提升推薦算法的效率。