推薦系統(tǒng)的初體驗(關(guān)聯(lián)規(guī)則,協(xié)同過濾) - 波波頭一頭的日志 - 網(wǎng)易博客
http://chen.yi.bo.blog.163.com/blog/static/1506211092010118101129456/
最近接觸了一個推薦系統(tǒng)的建設(shè)項目伪很,于是我順便回顧了一下之前零星學(xué)到的推薦知識,把一些困惑很久的問題弄明白了漠烧,所以來總結(jié)一下梆掸。
一般意義下的推薦系統(tǒng)是指個性化推薦痴脾,類似簡單的排行榜推薦或者關(guān)聯(lián)規(guī)則推薦被認(rèn)為是不夠個性化的。不過我困惑的問題也正在于這里期贫,所以我來描述一下關(guān)聯(lián)規(guī)則和協(xié)同過濾這兩個典型的推薦方法跟匆。
關(guān)聯(lián)規(guī)則是數(shù)據(jù)挖掘中的典型問題之一,又被稱為購物籃分析通砍,這是因為傳統(tǒng)的關(guān)聯(lián)規(guī)則案例大多發(fā)生在超市中玛臂,例如所謂的啤酒與尿布傳說。事實上封孙,“購物籃”這個詞也揭示了關(guān)聯(lián)規(guī)則挖掘的一個重要特點:以交易記錄為研究對象迹冤,每一個購物籃(transaction)就是一條記錄。關(guān)聯(lián)規(guī)則希望挖掘的規(guī)則就是:哪些商品會經(jīng)常在同一個購物籃中出現(xiàn)虎忌,其中有沒有因果關(guān)系泡徙。為了描述這種“經(jīng)常性”及“因果關(guān)系”,分析者定義了幾個指標(biāo)膜蠢,基于這些指標(biāo)來篩選關(guān)聯(lián)規(guī)則堪藐,從而得到那些不平凡的規(guī)律。主要的指標(biāo)包括:支持度support挑围,置信度confidence庶橱,提升度lift。對于一個二項規(guī)則例如“A→B”贪惹,支持度是指A與B同時出現(xiàn)的概率,即P(A B)寂嘉;置信度是B關(guān)于A的條件概率奏瞬,即P(B | A)枫绅;提升度是B的概率的提升,即P(B | A) / P(B)硼端。比較常見的例子是:
這些指標(biāo)都很容易理解,他們在一定程度上保證了挖掘出來的規(guī)則的實用性珍昨。
盡管用來做關(guān)聯(lián)規(guī)則的Apriori算法被譽為數(shù)據(jù)挖掘十大算法之一县耽,我仍然曾經(jīng)因為覺得關(guān)聯(lián)規(guī)則如此簡單明白而忽視其實踐意義。尤其是在我知道協(xié)同過濾之后镣典。
協(xié)同過濾也是很典型的推薦技術(shù)兔毙,他構(gòu)造一個用戶與項目之間的關(guān)聯(lián)打分矩陣,像是這樣
打分矩陣很好地體現(xiàn)出協(xié)同的概念澎剥,其中的Ui代表了用戶,Ti代表了項目赶舆,相應(yīng)位置的數(shù)值表示了用戶對項目的打分哑姚,有些情況下沒有具體分值的,通常用0/1來表示未購買與已購買(豆瓣電臺估計得是-1/0/1這樣的編碼)芜茵。協(xié)同過濾的基本想法就是根據(jù)相似性來做推薦叙量,這可以分為兩類:基于用戶相似性的推薦和基于項目相似性的推薦。這兩種推薦的假設(shè)基礎(chǔ)分別是:相似的用戶對同一個項目會有相似的偏好九串,同一個用戶對相似的項目會有相似的偏好绞佩。因此從計算的角度就是對上述的打分矩陣分別按行和按列計算相似度。
基于用戶的協(xié)同過濾可以簡單地通過對用戶的聚類以及KNN等方法實現(xiàn)蒸辆,若U1與U2被歸為一類征炼,或者U2是距離U1最近的用戶,則向U1推薦U1沒購買過而U2已購買過的項目躬贡。當(dāng)然這里更標(biāo)準(zhǔn)的做法是計算用戶之間的相似度(用相關(guān)系數(shù)和歐氏距離等等的指標(biāo)來衡量)谆奥,然后根據(jù)相似度進(jìn)行加權(quán)求和,得到每個用戶對每個項目的推薦得分拂玻。類似地酸些,基于項目的協(xié)同過濾則是計算項目之間的相似度矩陣,像是這樣
然后可以根據(jù)原始的打分矩陣和這個相似度矩陣魄懂,來做一個類似加權(quán)求和的工作(其實就是矩陣相乘),得到每個用戶對每個項目的推薦得分闯第。例如市栗,U1對T2的推薦得分,就是(1,0,0,1)(2,1,1,1)=(12 + 01 + 01 + 1*1)=3。這個例子中沒有涉及具體打分(只有0/1編碼)填帽,項目之間相似度的計算也比較簡單(距離公式和相關(guān)系數(shù)的定義有多種多樣復(fù)雜無比蛛淋,并且還需要做一些標(biāo)準(zhǔn)化之類的處理),僅僅作為例子來說明一下基于項目相似性來計算偏好的一種方法篡腌。
由于我對這兩種技術(shù)的學(xué)習(xí)都比較淺褐荷,所以存在很多困惑的地方,前段時間也跟老段交流過嘹悼。主要的問題就在于:關(guān)聯(lián)規(guī)則跟協(xié)同過濾的相通點在什么地方叛甫。(貌似我很喜歡探索這種問題,例如做信用評分模型的變量轉(zhuǎn)換時杨伙,用dummy變量跟用WOE編碼有何相通之處其监,以及WOE跟零售推薦里的NRS的相似之處,這個等我弄明白了再總結(jié)吧缀台。)
由于我上面協(xié)同過濾的這個例子太特殊棠赛,所以把關(guān)聯(lián)規(guī)則給混淆進(jìn)來了。因為其中計算項目相似度的方法跟關(guān)聯(lián)規(guī)則里面的支持度support很類似膛腐,無非是數(shù)一下兩個項目同時出現(xiàn)的概率或次數(shù)睛约,于是我就認(rèn)為關(guān)聯(lián)規(guī)則的本質(zhì)也是在計算項目之間的相似度,于是我就把關(guān)聯(lián)規(guī)則理解為一種特殊的協(xié)同過濾了哲身。囧辩涝。
事實上今天我考慮了一下,這兩種方法確實還是有很大的不同勘天。從形式上講怔揩,當(dāng)然我忽略了關(guān)聯(lián)規(guī)則里面的其他一些指標(biāo)。從更接近本質(zhì)的觀點來看脯丝,這兩種方法的出發(fā)點和邏輯思路也是截然不同的商膊。一般地,關(guān)聯(lián)規(guī)則被劃分為動態(tài)推薦宠进,而協(xié)同過濾則更多地被視為靜態(tài)推薦晕拆。
所謂動態(tài)推薦,我的理解是:推薦的基礎(chǔ)是且只是當(dāng)前一次(最近一次)的購買或者點擊材蹬。譬如我在網(wǎng)站上看了一個趙麗蓉老師的小品实幕,系統(tǒng)就找到與這個小品相關(guān)的關(guān)聯(lián)規(guī)則,然后根據(jù)這個規(guī)則向我進(jìn)行推薦(例如趙麗蓉老師的另外一個小品="=)堤器。而靜態(tài)推薦則是在對用戶進(jìn)行了一定分析的基礎(chǔ)上昆庇,建立了這個用戶在一定時期內(nèi)的偏好排序,然后在這段時期內(nèi)持續(xù)地按照這個排序來進(jìn)行推薦闸溃。
由此可見整吆,關(guān)聯(lián)規(guī)則與協(xié)同過濾的策略思路是完全不同的類型拱撵。而造成這種差異的原因,則在于這兩種方法所面對的對象的性質(zhì)的不同——關(guān)聯(lián)規(guī)則面向的是transaction掂为,而協(xié)同過濾面向的是ID裕膀。關(guān)聯(lián)規(guī)則典型地是面向超市零售,在會員制度尚不完善的階段勇哗,沒辦法得到每個用戶的購買情況,而只能分析交易數(shù)據(jù)(小票)寸齐,因此也就沒有“用戶偏好”這個概念欲诺,而只能從小票中分析出一些頻繁的關(guān)聯(lián)項,也因此關(guān)聯(lián)規(guī)則做推薦時無法應(yīng)用用戶歷史數(shù)據(jù)渺鹦,而只能基于當(dāng)前的購買情況來做推薦扰法,也因此關(guān)聯(lián)規(guī)則原本就不是跟推薦系統(tǒng)掛在一起,而是更多地強調(diào)交叉銷售毅厚。
但是這并不影響關(guān)聯(lián)規(guī)則在很多場合都具有良好的實踐效果塞颁,例如老段做的那個彩鈴?fù)扑]。事實上吸耿,即便在當(dāng)下很多能夠拿到用戶ID的場景祠锣,使用動態(tài)的關(guān)聯(lián)規(guī)則推薦仍然是值得考慮的一種方法(尤其是我們經(jīng)常把很多推薦方法的結(jié)果綜合起來做一個混合的推薦),因為這種方法的邏輯思路跟協(xié)同過濾有著本質(zhì)的不同咽安,問題似乎僅僅在于:個人的偏好到底有多穩(wěn)定伴网,推薦到底是要迎合用戶的長期偏好還是用戶的當(dāng)下需求。
當(dāng)然啦妆棒,這兩種方法也有能夠結(jié)合在一起的機會(不是簡單地對推薦結(jié)果做并集)澡腾,有助于應(yīng)用關(guān)聯(lián)規(guī)則的一些良好性質(zhì)在一定程度上彌補協(xié)同過濾的不足滩字。IBM就介紹了這樣一種方法酱床,主要的策略是用關(guān)聯(lián)規(guī)則來計算項目相似度列吼,然后再應(yīng)用基于項目相似性的協(xié)同過濾技術(shù)拳亿。在這種情況下栗竖,項目距離矩陣就不再是對稱的了腰池,因為關(guān)聯(lián)規(guī)則具有方向性富拗。
這就是我的推薦系統(tǒng)初體驗了伏恐,可以算是基本了解了兩種方法的區(qū)別纠脾。
今天沒有代碼——(要么參考一下阿穩(wěn)《可能是史上代碼最少的協(xié)同過濾推薦引擎》)——所以從微博抄個笑話吧玛瘸。
“個人覺得現(xiàn)在的數(shù)據(jù)挖掘做的很爛,我在網(wǎng)上買了一個鍋苟蹈,結(jié)果下面推薦的都是鍋糊渊,同志,我已經(jīng)買了一個了還這么迫切的想買第二個么慧脱?”
打完收工渺绒。