3

我正在嘗試計算亞馬遜的「查看/購買X的客戶也查看/購買了Y和Z」的項目到項目的相似度。我所見過的所有示例和參考資料都是針對排名項目的計算項目相似度,用於查找用戶 - 用戶相似度或根據當前用戶的歷史記錄查找推薦項目。在考慮當前用戶的偏好之前,我想先採用非目標方法。協作過濾:非個性化的項目到項目的相似性

望着Amazon.com recommendations white paper,他們使用離線項目,項目相似以下邏輯:

For each item in product catalog, I1 
    For each customer C who purchased I1 
    For each item I2 purchased by customer C 
     Record that a customer purchased I1 and I2 
    For each item I2 
    Compute the similarity between I1 and I2 

如果我理解正確的話,通過我們在「I1和I2之間計算similiarty」的時候,我具有與單個值I1(外部循環)一起購買的項目列表(I2)。

這個計算是如何進行的?

另一個想法是,我超越了這一點,使它比我所需要的更加困難 - 是否足以對與I1一起購買的I2的計數做一個前n查詢?

我也很感謝關於這種方法是否正確的建議。我的產品數據庫隨時都有大約15萬件產品。由於我所看到的大部分閱讀材料都顯示了用戶項目的相似性,甚至用戶用戶的相似性,我應該尋找這種方式。

我在過去使用過類似算法,但他們總是涉及排名或得分。我認爲唯一可行的方法是建立一個0/1的客戶產品矩陣,而不是購買/購買。鑑於購買歷史和項目大小,這可能會變得非常大。

編輯:雖然我列出了python作爲標記,但我更願意將邏輯保留在數據庫中,最好使用Oracle PL/SQL。

回答

4

關於此主題有很好的O'Reilly book。雖然白皮書可能會用這樣的僞代碼來表示邏輯,但我認爲這種方法不會很好地擴展。計算都是概率計算,所以像Bayes' Theorem這樣的東西習慣於說:「給定人A購買了X,他們購買Z的可能性是多少?」直接循環數據工作太困難了。你必須爲每個人完成這一切。

+0

我有這本書,但它的例子都認爲東西是額定在書的情況下,電影和評論家(至少在關於相似性的章節)。例如,「給我的評級,給我看我想要的其他[電影|評論家]。」我的數據是剛剛購買的,如果必須的話,我可以派生出不購買的產品。 我不介意使用貝葉斯,但我不尋找用戶A購買X的可能性。我更感興趣的是顯示A的購買者也購買了Z.免責聲明 - 我可能不理解這一點以及我認爲我尊重想要項目項目與用戶項目。 –

+2

@Neil,使用購買/不購買作爲0和1的評級 - 不是最大的計算效率,但概念上顯示如何,如果你知道如何處理瓦特/評級,然後**當然**你知道如何處理W /只是購買以及!而且,它必須使用貝葉斯(或其中的大約)纔有意義,否則你不能切斷要顯示在「同樣購買」列表中的項目數量,並且最終會有數百萬項目(= =完全無用),而且目錄龐大,用戶衆多,而且即使是非常適中的電子商務網站也是如此。 –

2

@Neil或任何人談到這個問題以後:

相似性度量的選擇是你的,你可能要離開它可延展的未來。查看維基百科有關Frobenius標準的文章。或者如您在提交的鏈接中那樣,Jaccard係數cos(I1,I2)

用戶項目– VS –用戶 - 用戶– VS –項項,或任何組合,不能客觀地回答。這取決於用戶可以從用戶獲得什麼樣的數據,用戶界面如何從他們那裏獲取信息,您認爲哪些數據部分可靠,以及您自己的時間限制(就混合動力而言)。

由於很多人都對上述問題做過大師論文,所以您可能希望從最簡單的可實施解決方案入手,同時爲算法的複雜性留出增長空間。

4

讓我們瞭解項目到項目的協作過濾。 假設我們有購買矩陣

 Item1 Item2 ... ItemN 
User1 0  1 ... 0 
User2 1  1 ... 0 
    . 
    . 
    . 
UserM 1  0 ... 0 

然後,我們可以使用的列向量,e.g利用餘弦計算項目相似。我們有一個項目相似對稱矩陣如下

 Item1 Item2 ... ItemN 
Item1 1  1/M ... 0 
Item2 1/M  1 ... 0 
    . 
    . 
    . 
ItemN 0  0 ... 1 

它可以爲「誰觀看/購買X的客戶也查看/購買Y,Z,......」(協同過濾)來解釋。因爲商品的矢量化是基於用戶購買的。

Amazon的邏輯與上述完全相同的,而它的目標是提高效率。正如他們所說

我們可以通過 建立一個產品到產品矩陣,通過所有項目對迭代和的COM puting一個相似性度量 的一對。然而,許多產品對沒有共同的客戶,因此該方法在處理時間和內存使用方面效率不高。該迭代算法通過 提供了一個更好的方法來計算一個督促,UCT以及所有相關 產品之間的相似性

+0

你爲什麼除以用戶數M? – Bobo

相關問題