推薦系統(tǒng)的初體驗(yàn)(關(guān)聯(lián)規(guī)則,協(xié)同過濾) - 波波頭一頭的日志 - 網(wǎng)易博客
http://chen.yi.bo.blog.163.com/blog/static/1506211092010118101129456/
最近接觸了一個(gè)推薦系統(tǒng)的建設(shè)項(xiàng)目,于是我順便回顧了一下之前零星學(xué)到的推薦知識(shí),把一些困惑很久的問題弄明白了,所以來總結(jié)一下。
一般意義下的推薦系統(tǒng)是指?jìng)€(gè)性化推薦,類似簡(jiǎn)單的排行榜推薦或者關(guān)聯(lián)規(guī)則推薦被認(rèn)為是不夠個(gè)性化的。不過我困惑的問題也正在于這里,所以我來描述一下關(guān)聯(lián)規(guī)則和協(xié)同過濾這兩個(gè)典型的推薦方法。
關(guān)聯(lián)規(guī)則是數(shù)據(jù)挖掘中的典型問題之一,又被稱為購(gòu)物籃分析,這是因?yàn)閭鹘y(tǒng)的關(guān)聯(lián)規(guī)則案例大多發(fā)生在超市中,例如所謂的啤酒與尿布傳說。事實(shí)上,“購(gòu)物籃”這個(gè)詞也揭示了關(guān)聯(lián)規(guī)則挖掘的一個(gè)重要特點(diǎn):以交易記錄為研究對(duì)象,每一個(gè)購(gòu)物籃(transaction)就是一條記錄。關(guān)聯(lián)規(guī)則希望挖掘的規(guī)則就是:哪些商品會(huì)經(jīng)常在同一個(gè)購(gòu)物籃中出現(xiàn),其中有沒有因果關(guān)系。為了描述這種“經(jīng)常性”及“因果關(guān)系”,分析者定義了幾個(gè)指標(biāo),基于這些指標(biāo)來篩選關(guān)聯(lián)規(guī)則,從而得到那些不平凡的規(guī)律。主要的指標(biāo)包括:支持度support,置信度confidence,提升度lift。對(duì)于一個(gè)二項(xiàng)規(guī)則例如“A→B”,支持度是指A與B同時(shí)出現(xiàn)的概率,即P(A B);置信度是B關(guān)于A的條件概率,即P(B | A);提升度是B的概率的提升,即P(B | A) / P(B)。比較常見的例子是:

這些指標(biāo)都很容易理解,他們?cè)谝欢ǔ潭壬媳WC了挖掘出來的規(guī)則的實(shí)用性。
盡管用來做關(guān)聯(lián)規(guī)則的Apriori算法被譽(yù)為數(shù)據(jù)挖掘十大算法之一,我仍然曾經(jīng)因?yàn)橛X得關(guān)聯(lián)規(guī)則如此簡(jiǎn)單明白而忽視其實(shí)踐意義。尤其是在我知道協(xié)同過濾之后。
協(xié)同過濾也是很典型的推薦技術(shù),他構(gòu)造一個(gè)用戶與項(xiàng)目之間的關(guān)聯(lián)打分矩陣,像是這樣

打分矩陣很好地體現(xiàn)出協(xié)同的概念,其中的Ui代表了用戶,Ti代表了項(xiàng)目,相應(yīng)位置的數(shù)值表示了用戶對(duì)項(xiàng)目的打分,有些情況下沒有具體分值的,通常用0/1來表示未購(gòu)買與已購(gòu)買(豆瓣電臺(tái)估計(jì)得是-1/0/1這樣的編碼)。協(xié)同過濾的基本想法就是根據(jù)相似性來做推薦,這可以分為兩類:基于用戶相似性的推薦和基于項(xiàng)目相似性的推薦。這兩種推薦的假設(shè)基礎(chǔ)分別是:相似的用戶對(duì)同一個(gè)項(xiàng)目會(huì)有相似的偏好,同一個(gè)用戶對(duì)相似的項(xiàng)目會(huì)有相似的偏好。因此從計(jì)算的角度就是對(duì)上述的打分矩陣分別按行和按列計(jì)算相似度。
基于用戶的協(xié)同過濾可以簡(jiǎn)單地通過對(duì)用戶的聚類以及KNN等方法實(shí)現(xiàn),若U1與U2被歸為一類,或者U2是距離U1最近的用戶,則向U1推薦U1沒購(gòu)買過而U2已購(gòu)買過的項(xiàng)目。當(dāng)然這里更標(biāo)準(zhǔn)的做法是計(jì)算用戶之間的相似度(用相關(guān)系數(shù)和歐氏距離等等的指標(biāo)來衡量),然后根據(jù)相似度進(jìn)行加權(quán)求和,得到每個(gè)用戶對(duì)每個(gè)項(xiàng)目的推薦得分。類似地,基于項(xiàng)目的協(xié)同過濾則是計(jì)算項(xiàng)目之間的相似度矩陣,像是這樣

然后可以根據(jù)原始的打分矩陣和這個(gè)相似度矩陣,來做一個(gè)類似加權(quán)求和的工作(其實(shí)就是矩陣相乘),得到每個(gè)用戶對(duì)每個(gè)項(xiàng)目的推薦得分。例如,U1對(duì)T2的推薦得分,就是(1,0,0,1)(2,1,1,1)=(12 + 01 + 01 + 1*1)=3。這個(gè)例子中沒有涉及具體打分(只有0/1編碼),項(xiàng)目之間相似度的計(jì)算也比較簡(jiǎn)單(距離公式和相關(guān)系數(shù)的定義有多種多樣復(fù)雜無比,并且還需要做一些標(biāo)準(zhǔn)化之類的處理),僅僅作為例子來說明一下基于項(xiàng)目相似性來計(jì)算偏好的一種方法。
由于我對(duì)這兩種技術(shù)的學(xué)習(xí)都比較淺,所以存在很多困惑的地方,前段時(shí)間也跟老段交流過。主要的問題就在于:關(guān)聯(lián)規(guī)則跟協(xié)同過濾的相通點(diǎn)在什么地方。(貌似我很喜歡探索這種問題,例如做信用評(píng)分模型的變量轉(zhuǎn)換時(shí),用dummy變量跟用WOE編碼有何相通之處,以及WOE跟零售推薦里的NRS的相似之處,這個(gè)等我弄明白了再總結(jié)吧。)
由于我上面協(xié)同過濾的這個(gè)例子太特殊,所以把關(guān)聯(lián)規(guī)則給混淆進(jìn)來了。因?yàn)槠渲杏?jì)算項(xiàng)目相似度的方法跟關(guān)聯(lián)規(guī)則里面的支持度support很類似,無非是數(shù)一下兩個(gè)項(xiàng)目同時(shí)出現(xiàn)的概率或次數(shù),于是我就認(rèn)為關(guān)聯(lián)規(guī)則的本質(zhì)也是在計(jì)算項(xiàng)目之間的相似度,于是我就把關(guān)聯(lián)規(guī)則理解為一種特殊的協(xié)同過濾了。囧。
事實(shí)上今天我考慮了一下,這兩種方法確實(shí)還是有很大的不同。從形式上講,當(dāng)然我忽略了關(guān)聯(lián)規(guī)則里面的其他一些指標(biāo)。從更接近本質(zhì)的觀點(diǎn)來看,這兩種方法的出發(fā)點(diǎn)和邏輯思路也是截然不同的。一般地,關(guān)聯(lián)規(guī)則被劃分為動(dòng)態(tài)推薦,而協(xié)同過濾則更多地被視為靜態(tài)推薦。
所謂動(dòng)態(tài)推薦,我的理解是:推薦的基礎(chǔ)是且只是當(dāng)前一次(最近一次)的購(gòu)買或者點(diǎn)擊。譬如我在網(wǎng)站上看了一個(gè)趙麗蓉老師的小品,系統(tǒng)就找到與這個(gè)小品相關(guān)的關(guān)聯(lián)規(guī)則,然后根據(jù)這個(gè)規(guī)則向我進(jìn)行推薦(例如趙麗蓉老師的另外一個(gè)小品="=)。而靜態(tài)推薦則是在對(duì)用戶進(jìn)行了一定分析的基礎(chǔ)上,建立了這個(gè)用戶在一定時(shí)期內(nèi)的偏好排序,然后在這段時(shí)期內(nèi)持續(xù)地按照這個(gè)排序來進(jìn)行推薦。
由此可見,關(guān)聯(lián)規(guī)則與協(xié)同過濾的策略思路是完全不同的類型。而造成這種差異的原因,則在于這兩種方法所面對(duì)的對(duì)象的性質(zhì)的不同——關(guān)聯(lián)規(guī)則面向的是transaction,而協(xié)同過濾面向的是ID。關(guān)聯(lián)規(guī)則典型地是面向超市零售,在會(huì)員制度尚不完善的階段,沒辦法得到每個(gè)用戶的購(gòu)買情況,而只能分析交易數(shù)據(jù)(小票),因此也就沒有“用戶偏好”這個(gè)概念,而只能從小票中分析出一些頻繁的關(guān)聯(lián)項(xiàng),也因此關(guān)聯(lián)規(guī)則做推薦時(shí)無法應(yīng)用用戶歷史數(shù)據(jù),而只能基于當(dāng)前的購(gòu)買情況來做推薦,也因此關(guān)聯(lián)規(guī)則原本就不是跟推薦系統(tǒng)掛在一起,而是更多地強(qiáng)調(diào)交叉銷售。
但是這并不影響關(guān)聯(lián)規(guī)則在很多場(chǎng)合都具有良好的實(shí)踐效果,例如老段做的那個(gè)彩鈴?fù)扑]。事實(shí)上,即便在當(dāng)下很多能夠拿到用戶ID的場(chǎng)景,使用動(dòng)態(tài)的關(guān)聯(lián)規(guī)則推薦仍然是值得考慮的一種方法(尤其是我們經(jīng)常把很多推薦方法的結(jié)果綜合起來做一個(gè)混合的推薦),因?yàn)檫@種方法的邏輯思路跟協(xié)同過濾有著本質(zhì)的不同,問題似乎僅僅在于:個(gè)人的偏好到底有多穩(wěn)定,推薦到底是要迎合用戶的長(zhǎng)期偏好還是用戶的當(dāng)下需求。
當(dāng)然啦,這兩種方法也有能夠結(jié)合在一起的機(jī)會(huì)(不是簡(jiǎn)單地對(duì)推薦結(jié)果做并集),有助于應(yīng)用關(guān)聯(lián)規(guī)則的一些良好性質(zhì)在一定程度上彌補(bǔ)協(xié)同過濾的不足。IBM就介紹了這樣一種方法,主要的策略是用關(guān)聯(lián)規(guī)則來計(jì)算項(xiàng)目相似度,然后再應(yīng)用基于項(xiàng)目相似性的協(xié)同過濾技術(shù)。在這種情況下,項(xiàng)目距離矩陣就不再是對(duì)稱的了,因?yàn)殛P(guān)聯(lián)規(guī)則具有方向性。
這就是我的推薦系統(tǒng)初體驗(yàn)了,可以算是基本了解了兩種方法的區(qū)別。
今天沒有代碼——(要么參考一下阿穩(wěn)《可能是史上代碼最少的協(xié)同過濾推薦引擎》)——所以從微博抄個(gè)笑話吧。
“個(gè)人覺得現(xiàn)在的數(shù)據(jù)挖掘做的很爛,我在網(wǎng)上買了一個(gè)鍋,結(jié)果下面推薦的都是鍋,同志,我已經(jīng)買了一個(gè)了還這么迫切的想買第二個(gè)么?”
打完收工。