段華杰
隨著電子商務(wù)規(guī)模的不斷擴大,產(chǎn)品個數(shù)和種類的快速增長,顧客需要花費大量的時間才能找到自己想要的產(chǎn)品。這種瀏覽大量無關(guān)的信息和產(chǎn)品過程,無疑會降低顧客的用戶體驗。為了解決這些問題,個性化推薦系統(tǒng)應(yīng)用而生。
個性化推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的一種高級商務(wù)智能平臺,以幫距電子商務(wù)網(wǎng)站為其顧客購物提供完全個性化的決策支持和信息服務(wù)。個性化推薦根據(jù)用戶的興趣特點和購買行為,向用戶推薦用戶感興趣的信息和產(chǎn)品。
從廣義上說,推薦系統(tǒng)基于以下兩種策略[1]:
(1)基于內(nèi)容的過濾(content-based filtering)策略。該方法為每個用戶或產(chǎn)品創(chuàng)建特征集來標記他們的特性。例如,一部電影的特征集可以包括電影的類型(愛情片、動作片、喜劇片、科幻片等)、導(dǎo)演、主演人員等。用戶的特征集包括性別、年齡、個人喜好、出生地點等。推薦系統(tǒng)根據(jù)這些特征集為每位用戶推薦匹配的產(chǎn)品?;趦?nèi)容的策略要求系統(tǒng)收集額外的產(chǎn)品信息和用戶信息,而用戶信息往往不易獲得,即使能夠獲得,也不一定真實,因此具有很大的局限性。
(2)協(xié)同過濾(collaborative filtering)策略。協(xié)同過濾(CF)策略不需要事先獲得產(chǎn)品或用戶的特征集,而僅依賴于用戶過去的行為(用戶對產(chǎn)品的歷史購買情況、對產(chǎn)品的顯式評分或隱式評分等)。協(xié)同過濾方法通過分析已經(jīng)收集到的用戶-產(chǎn)品對的評分情況猜測未知的用戶-產(chǎn)品對的關(guān)聯(lián)性,從而給出個性化推薦。
協(xié)同過濾策略存在多種實現(xiàn)方式,其中鄰居模型(kNN)和潛在因子模型是兩大主要實現(xiàn)方法。鄰居模型又可以分為基于用戶的(user-based)鄰居模型和基于產(chǎn)品的(item-based)鄰居模型。在基于用戶的kNN模型中,用戶對產(chǎn)品的評價預(yù)測是基于與此用戶相似的用戶所給予的評分實現(xiàn)的。而兩個用戶的相似度可以通過他們對共同的產(chǎn)品的評價相似度獲得。
潛在因子模型(latent factor model)基于如下的假設(shè):每個用戶與每件產(chǎn)品都可以由若干個特征因子描述,用戶與產(chǎn)品之間的聯(lián)系能夠通過兩組特征因子之間的相互作用產(chǎn)生。當一個用戶的特征剛好符合某件產(chǎn)品的特征時,我們認為該用戶會對產(chǎn)品給予很高的評分,反之亦然。
最近幾年,一些很成功的潛在因子模型的實現(xiàn)方式,都是基于矩陣分解(Matrix Factorization)模型的。矩陣分解模型中,每一件產(chǎn)品對應(yīng)一個K維的向量,每一個用戶同樣對應(yīng)一個K維向量。產(chǎn)品與用戶之間的關(guān)系能夠通過兩組向量的相關(guān)程度獲得。矩陣分解模型具有很好的可擴展性和預(yù)測精度,因此能夠很好的應(yīng)用于現(xiàn)實產(chǎn)品推薦中。
產(chǎn)品推薦系統(tǒng)的運作是依賴于用戶提供的反饋信息的。反饋信息一般分為兩種:隱式反饋信息(如用戶的購買記錄、瀏覽記錄、鼠標點擊情況等)和顯式反饋信息(如用戶對產(chǎn)品的評分情況)。矩陣分解模型則能夠很好地結(jié)合隱式和顯式反饋信息。本文中僅考慮顯式反饋信息。
在基本矩陣分解模型中,每個用戶對應(yīng)一個向量,每件產(chǎn)品也對應(yīng)一個向量,假定K為向量的維數(shù),同時也是潛在因子的個數(shù)。那么第u個用戶對第i件產(chǎn)品的評分預(yù)測可以表示為公式(1)
為了學(xué)習(xí)這些參數(shù)(和),我們可以通過最小化預(yù)測評分在驗證集上的均方誤差公式(2)
其中λ為懲罰因子。給定懲罰參數(shù)的目的是為了防止模型產(chǎn)生過度擬合。
最小化公式(2)有兩種方法:梯度下降法[2]和交替最小二乘法。一般情況下,梯度下降法能夠在短時間內(nèi)獲得不錯的預(yù)測精度。交替最小二乘法某些場合能夠獲得更好的預(yù)測精度,但需要花費更長的計算時間。本文實驗中采用的是梯度下降法。
梯度下降法的實現(xiàn)方法大致如下:
首先,對每一個給定的訓(xùn)練實例,算法預(yù)先給定rui的值(實驗發(fā)現(xiàn)預(yù)先給定的預(yù)測值并不影響最終結(jié)果)并計算預(yù)測值與實際值之差為公式(3)
然后,算法根據(jù)預(yù)測值與實際值之間的偏差調(diào)整iq與pu的參數(shù),調(diào)整公式為公式(4)、(5)
其中γ為學(xué)習(xí)率,λ為懲罰因子。往往更小的學(xué)習(xí)率能夠獲得更好的預(yù)測精度,但同時需要更多的學(xué)習(xí)時間。加入懲罰因子的目的是為了防止模型產(chǎn)生過度擬合的情況。
基本矩陣分解模型主要捕捉到的是產(chǎn)品與用戶之間的作用關(guān)系,而并沒有考慮每個用戶與每件產(chǎn)品本身之間的差異性。例如,某些用戶對產(chǎn)品的評價普遍偏高,而某些用戶對產(chǎn)品的評價則普遍偏低。有些產(chǎn)品性價比很高,從而獲得更高的評價;而有些產(chǎn)品可能本身質(zhì)量問題,從而獲得較差評價。
因此,很難僅僅通過qi、pu解釋所有的評分。我們可以在捕捉產(chǎn)品與用戶的相互關(guān)系之前消除上面提到的偏差,從而獲得基準預(yù)測,如公式(6)
其中μ為所有訓(xùn)練集上的均值,bu和bi分別為用戶u和產(chǎn)品i在訓(xùn)練集上相對于均值μ的偏差。
那么考慮偏差后的預(yù)測評分公式(7)
類似于基本矩陣分解模型,我們可以最小化訓(xùn)練集上的均方誤差學(xué)習(xí)這些參數(shù)如公式(8)
同樣地,我們可以使用梯度下降法最小化公式(8)。
在上一節(jié)中,產(chǎn)品偏差bi和用戶偏差bu并沒有考慮時間效應(yīng),但在實際生活中,我們會發(fā)現(xiàn)用戶的喜好和產(chǎn)品的歡迎度均受時間的影響,如圖1所示:
描述的是Netflix電影評分系統(tǒng)隨著時間的推移,評分均值的變化情況。從該圖中可以看出,時間因子確實影響著系統(tǒng)評分。接下來,我們將在改進模型中加入時間因子,捕捉這些時間效應(yīng),從而獲得更好的預(yù)測結(jié)果。
考慮時間效應(yīng)后,我們改寫公式(6),用戶u在時間tui對產(chǎn)品i的基準評分預(yù)測計算公式(9)
在該公式中,bi和bu的值在不同的時間點,所獲得的值是不同的。
Koren[3]認為,一件產(chǎn)品的歡迎程度一般不會在很短的時間內(nèi)發(fā)生變化(在某些特殊情況下不適用,例如2003年非典時期食用醋的價格飆升)。因此,我們在捕捉產(chǎn)品的歡迎程度變化情況時,沒有必要捕捉每天的變化值。如果捕捉每天的變化值,不僅需要大量的存儲空間和計算量,而且會降低執(zhí)行效率。我們可以選擇一個固定周期(bin),周期的長短視具體產(chǎn)品類型而定。例如在Netflix電影評分系統(tǒng)中,用戶一般在周末對電影的評分較多,那么我們可以選擇周期為星期的倍數(shù)。實驗證明,按星期的倍數(shù)為周期劃分的效果比其他的劃分方式好。我們假設(shè)劃分的周期數(shù)為K,產(chǎn)品i在第k個周期獲得的評價得分均值為,那么我們可以給出bi(t)的計算公式(10)
wik的計算方法為公式(11)
為了防止過度擬合,需要修正的值公式(12)
α的值能夠通過交叉驗證(cross validation)獲得。那么最終bi(t)的計算公式為公式(13)
在計算考慮時間因素的ub時,我們不能夠簡單的套用計算ib的方法。其主要原因是:用戶對產(chǎn)品的評分除了相對穩(wěn)定的喜好外,受當天的情緒波動影響較大,如果簡單地將用戶對產(chǎn)品的評分劃分為一段一段的形式,將喪失用戶每天的情緒波動信息。
為了捕捉用戶喜好的變化,Koren提出了時間偏差(time deviation)的計算公式(14)
其中為用戶u的平均評分時間,表示時間t與之間間隔的天數(shù),β的值能夠通過在驗證集上交叉驗證獲得。那么我們可以給出bu的計算公式(15)
公式(15)中并沒有考慮用戶每天的情緒波動信息,我們可以在公式(15)的基礎(chǔ)上加入評分日當天的偏差信息為公式(16)
我們可以給出一種簡單的計算utb的方法,如公式(17)
為了防止過度擬合,我們需要在公式(17)中加入懲罰因子,如公式(18)
α的值同樣可以通過交叉驗證的方式求得。
那么綜合前面的公式,我們給出計算uib的完整公式(19)
相應(yīng)的,考慮時間效應(yīng)后的的預(yù)測評分公式為:
類似于基本矩陣分解模型,我們可以最小化訓(xùn)練集上的均方誤差學(xué)習(xí)這些參數(shù):
同樣,我們可以選擇梯度下降法最小化公式(21)。
本文中實驗所用數(shù)據(jù)集為Netflix公司于2006年10月份對外發(fā)布的電影評分數(shù)據(jù)集。該數(shù)據(jù)集包括了從1999年12月31日到2005年12月31日的超過一億條評分。這些評分來自于480,000多位匿名用戶對17,770部電影的評分,每條評分包含了評分日期。在該數(shù)據(jù)集中,平均每部電影有5,600個評分,平均每個用戶評價了208部電影。本文中實驗結(jié)果的驗證均在Netflix公司發(fā)布的Probe set上進行,對預(yù)測結(jié)果的好壞評價采用的是均方根誤差(root mean squared error)方法。RMSE的計算公式(22)
Netflix數(shù)據(jù)集是在Netflix Prize競賽中發(fā)布的。Netflix Prize競賽的的目標是提升該公司的推薦系統(tǒng),其推薦效果須在Netflix公司使用的推薦系統(tǒng)Cinematch的基礎(chǔ)上改進10%(使用均方根預(yù)測誤差衡量)。Cinematch系統(tǒng)作為Netflix公司所使用的推薦系統(tǒng),在測試集(Probe set)上的RMSE值為0.9514。
本文實驗所用測試集與驗證集均使用Netflix于2006年發(fā)布的電影評分數(shù)據(jù)集,該數(shù)據(jù)集不僅數(shù)據(jù)量龐大,而且經(jīng)過Netflix公司利用科學(xué)方法從真實的電影推薦數(shù)據(jù)庫中提出出來,從而能夠很好地模擬現(xiàn)實中的推薦系統(tǒng)。
本文分別實現(xiàn)了未考慮時間效應(yīng)、加入電影的時間效應(yīng)、加入用戶的時間效應(yīng)后的基準評分預(yù)測結(jié)果,使用的公式如下:
不考慮時間效應(yīng):bui=μ+bi+bu,
加入電影的時間效應(yīng):bui=μ+bi(t)+bu,
加入用戶的時間效應(yīng):bui=μ+bi(t)+bu+αu.devu(t)+but。
表(1)給出了利用上面3個公式計算出來的預(yù)測偏差RMSE的值,如表1所示:
表1 加入時間效應(yīng)前后的基準評分預(yù)測結(jié)果
從實驗結(jié)果給出的數(shù)據(jù)來看,考慮電影的時間效應(yīng)后,預(yù)測誤差確實有所減少。而相對于電影的時間效應(yīng),用戶的時間效應(yīng)對預(yù)測精度的影響則更大??紤]用戶的時間效應(yīng)后,預(yù)測精度得到顯著提高。這也說明了用戶的偏好變化尤其是每天的情緒波動對電影的評分影響顯著。
如圖2所示:
圖2 MF、BMF、TBMF模型在netflix數(shù)據(jù)集上的RMSE變化圖
給出的是基本矩陣分解模型、未考慮時間效應(yīng)的BMF模型和考慮了時間效應(yīng)的TBMF模型應(yīng)用梯度下降法給出的RMSE變化情況。圖中還給出了Netflix公司在該數(shù)據(jù)集上的RMSE值。
從圖2可以明顯看出,加入時間效應(yīng)后的矩陣分解模型在Netflix電影數(shù)據(jù)集上獲得了更好地預(yù)測精度。
矩陣分解技術(shù)作為潛在因子模型的重要實現(xiàn)方式,在推薦系統(tǒng)中得到了很好的應(yīng)用。由于基于該技術(shù)的矩陣分解模型具有很好的可擴展性,我們在基本矩陣分解模型中加入了具有時間效應(yīng)的產(chǎn)品偏差和用戶偏差,成功地捕捉到了產(chǎn)品的評價偏移、用戶的喜好偏移和用戶每天的情緒波動對評分的影響。考慮了時間效應(yīng)后,預(yù)測偏差明顯減小,預(yù)測精度顯著提高,從而獲得更好的推薦結(jié)果。
[1]Y.Koren,R.M.Bell,C.Volinsky.Matrix factorization techniques for recommender systems[J],IEEE Computer 42(8)(2009)30-37.
[2]B.Webb.Netflix update:Try this at home[EB/OL].http://sifter.org/-simon/journal/20061211.html,2006-12-11.
[3]Y.Koren.Collaborative Filtering with Temporal Dynamics[J].ACM Press,2009,pp.447-456.