2009CTA-Collaborative filtering with temporal dynamics

作者以及單位

Yehuda Koren(寫這個文章的時候作者單位是雅虎,目前在google)
留意到這篇文章的主要原因:谷歌Rendle和本文作者在2020發(fā)布的On the Difficulty of Evaluating Baselines A Study on Recommender Systems談到在movielens-10m數(shù)據(jù)集上最好的baseline是timeSVD++(參考14)。


ml-10的rmse算法排序結(jié)果

雖然是2009年的文章,但是這個文章提出的timeSVD++在rmse的效果是目前(2021年)最好的,所以研究一下該算法。看了網(wǎng)上很多分析,沒有說透,所以結(jié)合原文和代碼,嘗試分析一下。

解決問題

隨著顧客不斷選擇新的商品,顧客的行為模型會發(fā)生持續(xù)不斷的改變。為了應(yīng)對這種改變,通常的做法是使用時間窗口(一段時間內(nèi)認(rèn)為不變)或者不斷衰減(越舊的信息權(quán)重越小)方法,但是這些方法都丟失了大量的小而美的數(shù)據(jù)實例,導(dǎo)致準(zhǔn)確不夠,而這篇文章在協(xié)同過濾的基礎(chǔ)上做了改進(jìn),提出了基于協(xié)同過濾的時間動態(tài)性算法。

原文是: Within the ecosystem intersecting multiple products and customers, many different characteristics are shifting simultaneously, while many of them influence each other and often those shifts are delicate and associated with a few data instances.
This distinguishes the problem from concept drift explorations(這個概念后面反復(fù)提到), where mostly a single concept is tracked. Classical time-window or instance decay approaches cannot work, as they lose too many signals when discarding data instances.
A more sensitive approach is required, which can make better distinctions between transient effects and long-term patterns.

值得一提的是,作者用的是Netflix Prize數(shù)據(jù)集,在Rendle2020文章提及,這個數(shù)據(jù)集才是正真可以看出推薦系統(tǒng)高下的數(shù)據(jù)集。

研究動機

問題矛盾在于:不僅要實時地反映出數(shù)據(jù)的動態(tài),還要在暫時性的影響長期的內(nèi)在特征中找到平衡。這一問題我們叫做concept drift。

concept drift面臨的挑戰(zhàn):因為每個用戶自己的數(shù)據(jù)量顯然是很有限的,那么在探究時間影響因素的時候就要有簡單的忽略或?qū)?strong>過去行為加權(quán)更加精細(xì)的算法來挖掘數(shù)據(jù)中的特征。

已有工作面對挑戰(zhàn)的策略和存在的問題
1.instanceselection:拋棄那些對于系統(tǒng)當(dāng)前狀態(tài)無關(guān)的實例。加入時間窗,只考慮窗內(nèi)數(shù)據(jù)。這樣做的問題是所有窗內(nèi)數(shù)據(jù)被同樣重視,而所有窗外數(shù)據(jù)被同樣丟棄。對于時間漸變的情況這樣不好。
2.instanceweighting:依據(jù)實例間的相關(guān)性設(shè)定他們的權(quán)重。根據(jù)和當(dāng)前時間點的距離來對數(shù)據(jù)加權(quán)。
3.ensemblelearning:使用了不止一個分類器,通過它們和當(dāng)前時間的關(guān)聯(lián)情況對分類器加權(quán)。這個方法看起來make sense,但一方面它把用戶偏好分成很多小方面,這可能導(dǎo)致丟失一些全局特征;另一方面它需要把不同的用戶分開考慮,這嚴(yán)重違背了協(xié)同過濾的原則。

想改變過去策略中存在缺點的動機

注意,以下4個動機,非常重要,會反復(fù)提到!整篇文章的方法和目的,就是解決這4個優(yōu)化動機。

1.模型能解釋用戶在整個時間軸上行為變化的模型,而不僅僅是某個時間點上提取用戶行為特征。這是需要模型具備能夠在每個時間片上提取signal,并且刪除noise的基本條件。
2.需要考慮多個改變因素,一些是基于用戶的,一些是基于物品的,反映漸變,反映突變的情況。原文:user-dependent,item-dependent,gradual以及sudden。
3.需要建立一個單一框架,而不是僅僅針對單個用戶,物品或者concept drift。
4.并不需要預(yù)測未來較長瞬態(tài)變化的用戶行為(在稀疏數(shù)據(jù)下,這項工作很難),而是需要在歷史數(shù)據(jù)中把長久信號和瞬間噪音隔離,原文:isolate persistent signal from transient noise。

先看結(jié)果,很明顯,timeSVD++效果很好。


結(jié)論

研究方法

注意:如果感覺公式太長,看到公式11就可以結(jié)束。

根據(jù)協(xié)同過濾,每個用戶對應(yīng)一個向量p_u,每個物品對應(yīng)一個向量q_i,預(yù)測值為這兩個向量乘積,這問題不大。

矩陣分解

分解的原理

但是這種基本方法忽略了用戶之間,物品之間,用戶與物品之間的關(guān)系,主流改進(jìn)的方法是加入基準(zhǔn)評價值,\mu是所有評價的均值,b_u為用戶偏差,b_i為物品偏差,基準(zhǔn)Baseline評價如下:

偏差

結(jié)合上面公式1矩陣分解和公式2的偏差,模型可以這樣理解:


偏差+baseline

在把隱式數(shù)據(jù)帶上,基于SVD++的協(xié)同過濾的損失函數(shù)(SVD++ 就是在 SVD 模型中融入用戶對物品的隱式行為。我們可以認(rèn)為 評分=顯式興趣 + 隱式興趣 + 偏見)完整形式如下:


svd損失函數(shù)
svd++損失函數(shù)

SVD++的具體介紹以及源代碼可以看這里:SVD++推薦系統(tǒng)_欲與將軍會獵與吳-CSDN博客

到這里,大方向定了(把偏差考慮進(jìn)入了模型),解決了動機的第1條。但是核心來了,如何計算用戶和項目的偏差?

下面開始展開討論,首先預(yù)測值b_{ui}(t)表明第t天用戶u對于物品i的關(guān)聯(lián)時間模型:

時間模型

花開兩朵,各表一枝:
1.item的popularity會隨著時間改變;
2.user的平均評分會隨著時間改變。

首先處理b_{i}(t),由于我們不期望影片的bias會在短期內(nèi)有很大的改變(不像用戶一樣),因此我們將整個時間片進(jìn)行劃分(小的時間片可以有更好的性能,大的時間片每個片內(nèi)有更多的數(shù)據(jù)),以10周為一片,共劃分為30片,對每個時間t,賦予一個Bin(t)(即1到30之間的整數(shù)),這樣就可以把b_{i}(t)分為static以及time changing兩部分:

基于item的偏好

對于b_{u}(t),我們需要能夠檢測到短暫的temporal effect(用戶bias可以在短時間內(nèi)發(fā)生比較大的變化);另外,我們不期望將用戶也像物品一樣分片(因為沒有足夠的評分?jǐn)?shù)據(jù))。首先定義一個線性模型的時間偏移量函數(shù),表示當(dāng)前評分時間與平均評分時間之間的距離,如下(本文算法中β=0.4):
user的偏好比item的偏好要復(fù)雜一些,不能平均分配時間片,要考慮用戶的曲線變化

|t-tu|表示時間距離,給每個用戶分配一個αu,因此得到一個模型(簡單的線性模型,需要學(xué)習(xí)bu以及αu兩個參數(shù)):

基于user的偏好

另外提供一個曲線式模型,上面看懂了,可以不用管下面這個公式(達(dá)到的效果和上面7一樣,可能更擬合一些,只是做了非線性變化):
復(fù)雜一些

這個模型只能捕獲到gradual concept drift,而Netflix數(shù)據(jù)集中,有些用戶在特定日子的評分趨向同一個值,這可以被描述成用戶當(dāng)天的心情。因此,為了解決這種short lived effects,分配給每個用戶每天一個參數(shù)bu,t,用于吸收day-speci?c variability,這是解決上面動機的第2點。Netflix數(shù)據(jù)集中,每個用戶平均在40天有過評分,因此user bias平均需要40個參數(shù),加入到模型中:

加入了瞬間變化

同樣的,如果看懂上面這個9,可以忽略10。
在來個曲線模型

采用stochastic gradient descent-SGD學(xué)習(xí)參數(shù)(需要20-30個iterations,λ=0.01):
和公式5比,公式11是把瞬間的變化也考慮進(jìn)去了

公式4中基于SVD++的協(xié)同過濾的損失函數(shù),根據(jù)以上的更新合并,這是解決上面動機的第3點,到這已經(jīng)很完美了,看不下去的可以不用往下看了(由于Netflix的數(shù)據(jù)中沒有periodic effects,因此文章沒有做下面的嘗試了):
最后的損失函數(shù)


雖然主要問題都已經(jīng)是解決完了,但是是不是感覺動機的第4點,還沒有解決?
即很長時間的習(xí)慣(如周期性的行為)和臨時起意的噪點如何區(qū)別?
以前在我的論文中考慮過這個問題,在正則項中加了DBSCAN進(jìn)行周期律的統(tǒng)計。
我們看看作者是如何處理的?加了periodic effects,具體是:有些物品可能在特定季節(jié)或特定節(jié)日比較熱門;電視節(jié)目在一天的不同時段熱門度也不同(dayparting);用戶可能在周末更加表現(xiàn)出購物的欲望等等。解決方法是可以分配一個參數(shù)給物品或用戶,這樣原式6和9變成:

item+周期律

user+周期律

由于不同用戶給出的評分標(biāo)準(zhǔn)不同,因此在b_i(t)上添加一個參數(shù)(RMSE降至0.9555):
模型開始解決動機的第4點

cu是靜態(tài)部分,cu,t是day-speci?c variability。

在這個公式上,除了計算了用戶的gradual以及sudden外,還加上了長期時間改變因素Time changing factor,類似公式(9),得出用戶偏好轉(zhuǎn)移公式:


用戶的偏好會隨著時間改變

最后,把動機提出的1234,四點全部整合到損失函數(shù)里面,這就是timeSVD++模型了(其實,一般推薦模型做到前3點就很棒了):


最終模型

創(chuàng)新點

先從細(xì)節(jié)說

在SVD模型中,我們需要衡量兩個物品的相似度。
如果有一個問題:用戶一天之內(nèi)給兩個物品打了高分,和用戶隔了5年給兩個物品打了高分,是在timeSVD++模型不一樣的。
初始的SVD模型:


初始SVD模型

修改過的timeSVD++模型:


timeSVD++

會發(fā)現(xiàn)在上面提出的問題中,在初始的SVD損失函數(shù),和timeSVD++模型是不一樣的。這個優(yōu)化依然可以用隨機梯度下降法來解決。效果比很多復(fù)雜的算法都要好。這再次證明,關(guān)注時間信息可能帶來意想不到的好處。
最終優(yōu)化問題

再從整體說

為什么說深度學(xué)習(xí)的解釋性很差?
這篇文章給了答案。timeSVD++模型能夠清清楚楚地知道模型中每一部分的含義,就能真正反過來用模型解釋數(shù)據(jù)、認(rèn)識數(shù)據(jù),從而從發(fā)現(xiàn)那些從數(shù)據(jù)中挖掘出來的規(guī)律。從原理上解釋數(shù)據(jù)生成的機理,解決想要改變動機的初衷。

結(jié)論

1.在簡單的模型中加入時間factor可能有很好的效果。方法有時間窗、時間衰減因子、模型集成等(雖然這是舊方法,本文也說了存在的問題,但是實際中很有用)。
2.捕捉時間因子時,將特別個性的時間因子按日期或周期建模,可能有奇效(文章4.2的最后一部分非常詳細(xì)地解釋了這件事)。
3.學(xué)會利用有明確物理意義的模型,來解釋數(shù)據(jù)。

參考

論文筆記-collaborativefiltering with temporal dynamics_無知的我-CSDN博客
論文筆記:Collaborative Filtering with Temporal Dynamics_菲菲小姐的博客-CSDN博客
論文筆記:Performance of recommender algorithms on top-N recommendation tasks_菲菲小姐的博客-CSDN博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容