推荐系统炼丹笔记:令人着迷的时间动态CF算法
背景
本文是一篇較老的文章,是Yahoo的研究員關于協同過濾中時間動態建模的最為細致的討論。
顧客對產品的偏好隨著時間的推移而變化。隨著新選擇的出現,產品的認知和受歡迎程度也在不斷變化。同樣地,顧客的偏好也在不斷演變,導致他們不斷地重新定義自己的品味。因此,在設計推薦系統或一般客戶偏好模型時,時間動態建模是一個關鍵。然而,這會有獨特的挑戰。在跨多個產品和客戶的生態系統中,許多不同的特征同時發生變化,而其中許多特征又相互影響,這些變化往往是微妙的,并與一些數據實例相關聯。這將問題與概念漂移(concept drift)探索區分開來。傳統的時間窗或實例衰減方法可能無法奏效,因為它們在丟棄數據實例時會丟失太多信號。需要一種更敏感的方法,以便更好地區分瞬態效應和長期模式。我們提供的范例是創建一個模型來跟蹤數據生命周期中隨時間變化的行為。這允許我們利用所有數據實例的相關組件,同時丟棄那些被建模為不相關的組件。
跟蹤不斷變化的客戶偏好
消費者的喜好會伴隨著時間而變化, 客戶喜好漂移的這一方面突出了文獻中一個共同的范式,即全球漂移概念影響整個數據。在推薦系統中,我們面臨一種更為復雜的概念漂移(concept drift),即許多用戶的相互關聯的偏好在不同的時間點以不同的方式漂移。
這需要學習算法來跟蹤多種變化的概念。此外,與單個消費者相關聯的典型的低量的數據實例需要更簡潔有效的學習方法,從而最大限度地利用數據中的信號。
- instance selection: (1).丟棄和系統當前狀態低相關的;一個常見的變體是時間窗口方法,只考慮最近的實例。這個簡單模型的一個可能的缺點是,它對所考慮的時間窗口內的所有實例都賦予相同的意義,而完全丟棄所有其他實例。當時間偏移突然時,這可能是合理的,但當時間偏移是漸進的時,則不太合理。(2).一個精化是實例權重是基于實例的估計相關性進行加權的。使用時間衰減函數,當實例發生在更深的過去時,我們會對其進行加權。(3).第三種方法是基于集成學習,它保持了一系列預測因素,這些因素共同產生最終結果。這些預測因素根據其與當前時間點的感知相關性進行加權,例如,在最近的實例中更成功的預測者獲得更高的權重。
所以我們嘗試對變化的用戶喜好進行建模:
- 尋求能夠解釋整個時間段內用戶行為的模型,而不僅僅是當前行為(同時受到性能限制)。這是能夠從每個時間點提取信號而忽略噪聲的關鍵;
- 應該捕捉到多個不斷變化的概念。有些依賴于用戶,有些依賴于商品。同樣,有些是漸進的,有些是突然的;
- 雖然我們需要為每個用戶和/或商品分別建模獨立的漂移“概念”或喜好,但必須在單個框架內組合所有這些概念。這允許跨用戶和商品建模交互,從而識別更高級別的模式;
- 一般來說,我們不會試圖推斷未來的時間動態,例如,估計用戶偏好的未來變化。這可能非常有用,但太難了,尤其是在已知數據量有限的情況下。相反,我們的目標是捕獲過去的時間模式,以便將持續信號從瞬態噪聲中分離出來。這確實有助于預測未來的行為.
時間感知的分解模型
因子模型剖析
這種純因子模型很好地捕捉了用戶和項目之間的交互作用。然而,大部分觀察到的評分值都是由于與用戶或者商品相關聯的影響,而與它們的交互作用無關。一個主要的例子是,典型的CF數據顯示出很大的用戶和項目偏差,即一些用戶給出的評分高于其他用戶,而某些項目的評分高于其它商品。
我們將把這些不涉及用戶商品交互的影響封裝在基線預測值中。這些基線預測器傾向于捕捉大部分觀察到的信號,特別是數據中的大部分時間動態。因此,對它們進行精確的建模是至關重要的,這樣可以更好地識別真正代表用戶-商品交互的信號部分,并且應該進行因式分解。
時變基線預測因子
通過兩個主要的時間效應,大部分時間變異性包含在基線預測因子中。
- 第一個問題是解決:一個商品的受歡迎程度隨著時間的推移而變化。例如,電影可能會因為外部事件(如演員在新電影中的出現)而進入或退出流行狀態。這一點在我們的模型中得到了體現,即項目偏差不是一個常數,而是一個隨時間變化的函數。
- 第二個主要的時間效應與用戶偏見有關-用戶隨著時間的推移改變了他們的基準評分。例如,一個傾向于給一部普通電影評“4星”的用戶,現在可能會給這樣一部電影評“3星”,這是因為前面解釋過的各種原因。因此,在我們的模型中,我們希望將參數bu作為時間的函數。
基于上述的問題,我們對之前我們的假設進行修改:
決定如何將時間線劃分為多個箱子時,應在實現更高分辨率(因此,更小的箱子)和每個箱子有足夠評級(因此,更大箱子)的需求之間取得平衡。對于電影分級數據,有各種各樣的垃圾箱大小,它們的準確度大致相同。在我們的實現中,每個bin對應于大約連續10周的數據,因此在數據集中,總共有30個bin跨越所有的時間。一天t與一個整數Bin(t)相關聯(在我們的數據中是一個介于1和30之間的數字),因此電影偏差被分成固定部分和時間變化部分:
雖然binning參數在項目上工作得很好,但對用戶來說這是一大的挑戰。一方面,我們想要一個更好的分辨率,以便用戶檢測非常短暫的時間效應。另一方面,我們不期望每個用戶有足夠的打分,以產生可靠的估計孤立的bins。不同的函數形式可以用來參數化用戶時間行為,但也伴有不同的復雜性和準確性。
上面的函數已經非常好了,但在許多應用程序中,會出現與一天或一個會話相關的突然漂移。例如,在電影分級數據集中,我們發現一個用戶在一天內給出的多個評分往往集中在一個值上。這種影響不會超過一天。這可能反映了用戶當天的情緒,一天內給出的評分對彼此的影響,或多人帳戶中實際評分者的變化。為了解決這種短暫的影響,我們為每個用戶和每一天分配一個參數,吸收特定日期的變化。這個參數用表示。注意,在某些應用程序中,要使用的基本原始時間單位可以短于或長于一天。
所以我們得到線性函數:
基于曲線的模型變為:
將上面所說的綜合起來,我們使用線性函數加入突變的情況來建模得到:
于是我們最終就需要優化下面的式子:
實驗對比
上面的時間沒有考慮時間的周期性影響,我們也可以將其加入進來(但在我們但數據集中并沒有發現明顯但周期性,所以暫時就沒有使用).
時變因子模型
上面主要都是在討論時間對于baseline predictor的影響,同時這也會影響用戶和商品的交互。此處我們使用用戶的每個喜好.
于是我們有:
于是我們便可以得到 timesSVD++.
實驗對比
所有的方法都得益于越來越多的因素維度,這使得它們能夠更好地表達復雜的電影用戶交互。請注意,timeSVD++相對于SVD++的改進比SVD++相對于SVD++的改進更為顯著
鄰域模型的時間動力學
原先的加入i2i的信息,
于是我們的優化目標變為:
通過加入時間信息,我們可以將原先的RMSE從0.9002降低為0.8885.
小結
跟蹤客戶對產品偏好的時間動態帶來了獨特的挑戰。每個用戶和商品都可能在其特性上經歷一系列不同的變化。此外,我們通常需要在一個模型中對所有這些變化進行建模,從而將用戶(或產品)相互連接,以識別共同的行為模式。僅僅是老的實例的衰減或多個獨立模型的使用會損失太多信號,從而降低預測精度。我們采用的解決方案是在整個時間段內建立時間動態模型,使我們能夠智能地將時間因素和全局時間因素分離開來。我們將此方法應用于兩種主要的推薦技術。在因子分解模型中,我們模擬了用戶和產品特性隨時間的變化方式,以便從噪聲模式中提取長期趨勢。在一個商品-商品鄰域模型中,我們展示了如何通過學習用戶評價的兩個項目之間的影響如何隨時間衰減來揭示項目之間更基本的關系。在因子分解和鄰域模型中,時間動態的包含被證明對提高預測質量非常有用,比各種算法的增強更有效。這導致了迄今為止在廣泛分析的電影分級數據集上公布的最佳結果。
參考文獻
總結
以上是生活随笔為你收集整理的推荐系统炼丹笔记:令人着迷的时间动态CF算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统炼丹笔记:RecSys2020-
- 下一篇: java信息管理系统总结_java实现科