我是怎麼走上推薦系統這條路的……
選自Medium
作者:Dimitris Apostolopoulos
機器之心編譯
參與:shooting、杜偉
什麼是推薦系統?有哪些類型的推薦系統?怎麼做推薦系統?想知道?可以看看這篇小白文~
在這個系列文章中,我將分享掌握推薦系統的經驗,以及圍繞推薦系統從低級模型到高級模型的實現。
我還會簡要提及你構建推薦系統時將會遇到的挑戰以及我所用的解決辦法。
最後,我會帶你們瀏覽我追蹤模型表現和構建其它機器學習模型時的想法、不成功的嘗試和驗證框架,以得出成功的方法。
但首先……
什麼是推薦系統?
推薦系統可以說是大數據中最常見的應用了,它通過為你的網站推薦內容來改善個人用戶體驗。
推薦系統是信息過濾系統和人工智慧的一部分,旨在預測用戶偏好。
我們在哪些地方使用推薦系統?
最常見的領域是產品推薦欄位過濾和通過用戶的偏好來學習,以便將這些知識應用於他人。
我學習推薦系統的初衷
雖然我很享受生活,但我覺得…嗯,太安逸了。所以我決定改變一下這種狀態。
然後我決定挑戰點什麼,你懂的。
比如漫遊數據科學世界和征服人工智慧什麼的。
呵呵,挑戰。
就是那種你後悔也為時晚矣的東西。
不過你看,我這不是冒險跳進來,和「海怪」鬥爭,最後存活下來了嗎?也許,你可以聽聽我——「水手辛巴達」講講這個跌宕起伏的故事。
大概是一年前吧,我工作的電子郵件營銷和自動化公司(Moosend)給我分配了一個全新的項目。
其理念是創建一個適合且適用於每個電子商務平台的數據驅動推薦引擎。這個通用系統要根據用戶和產品的交互產生個性化的產品推薦。
這個項目的挑戰之處在於它必須是完全動態的,能夠適應各種模式,即季節性購買模式(如聖誕節、光明節、復活節等送禮期間),同時還要實現收益最大化。
如何理解推薦引擎?
每次接到新項目後,我做的第一件事就是了解它的基本信息;它是用來做什麼的?什麼時候用?系統的結構是什麼?它可能具有的多樣性和可擴展性?
總共有不同類型的推薦系統,而你選擇哪種要取決於你接近客戶的策略。
現在是數據的最好時代。過去從來沒有像現在這樣,這個世界為數據所驅動。大部分最大的電子商務網站依靠數據驅動決策系統來擴大銷售。
而個性化的產品推薦是人工智慧送給電子商務的禮物,因為它們可以幫你提高點擊率和銷售率。
就像我說的,AI 推薦系統有五種不同的類型:
基於內容的引擎:根據相似產品的屬性(即每種產品的特性)來識別相似產品。
每個產品都有其屬性(例如,手機的屬性是屏幕大小、價格、相機、軟體等),我們試圖找出最相似的屬性。
通過這種方式,我們給偏好具有特定屬性的手機客戶推薦相似的手機。
協同過濾引擎:識別相似客戶的偏好,它基於這樣一種概念:行為相似的人有相似的興趣。
在這類系統中,我們用客戶的交互來代表他們,預測他們對每個產品產生興趣的概率,即客戶真正欣賞推薦給他們的產品的可能性。
因此,我們可以通過給最相似的客戶推薦產品來接近新客戶。
混合系統:結合了基於內容的系統和協同過濾系統。
對兩個模型中每個給定的產品進行評分,並對每個結果進行加權;最終的推薦結果來自兩個分數的線性組合。
關聯規則或購物籃分析引擎與先前幾種系統略有不同。
有了大量的交互數據集,我們可以找到經常作為序列一起購買的物品的模式;例如,有人在購物車裡加了咖啡,但沒加糖,我們就會給他推薦糖。
重複購買引擎:預測客戶購買特定產品的具體時間或大概時間。
這種演算法使用產品周期、購買歷史和日期統計來預測未來購買日期。
例如,如果有人買月拋的隱形眼鏡,我們可以每隔 30 天為他推薦同樣的產品,如果他忘記購買的話。這樣,就鼓勵客戶一直在我們店裡買眼鏡了。
協同過濾
為了更新你的記憶,這種推薦引擎會通過客戶的產品交互(購買、產品視圖和添加到購物車產品)來嘗試識別具有相似興趣的客戶。
你可以用一兩種方法實現協同過濾:基於記憶或基於模型的方法。在兩種方法中,我們都用客戶的交互行為來代表他們,就像向量格式化矩陣一樣。
在基於記憶的方法中,你要測量所有向量(客戶)彼此之間的距離,然後根據他們最相似的地方推薦產品。
而在基於模型的方法,即廣為人知的矩陣分解模型中,我們要識別數據中的潛在因子。
在統計世界中,潛在因子不是我們直接觀察或測量的變數,而是一組在較低維空間中解釋(描述)其它變數及其關係而不丟失信息的變數。
而在推薦系統中,潛在因子發現和解碼每個客戶的模式,以識別他們之間的相似性。
推薦系統模型 #1(我的第一次嘗試)
我想出來的第一個模型是標準的矩陣分解模型。
在這個案例里,我們在二維稀疏矩陣 R 中用客戶的產品交互來代表他們;稀疏矩陣是一種高效計算和高效存儲的方式,可以將大量數據存儲在一起並準備處理。
矩陣中的行代表客戶,列代表像向量一樣的產品,然後我們在客戶-產品交互單元中填上 1。
而在有產品但沒有客戶交互的單元格則是空的,如下所示:
下一步是將 R 矩陣分為兩部分,一部分針對客戶(P),一部分針對具有潛在因子的產品(Q)。然後,我們用 lambda 函數微調這兩個矩陣並根據原始 R 矩陣的值測量誤差率。當誤差率從給定閾值開始下降時,我們中斷這個過程。
為了格式化 R-hat 矩陣,我們計算了 P 和 Q 的點積。在線性代數中,點積是矩陣乘法的結果。
最後一步是推薦一組根據特定客戶的最高購買概率排序的產品。
性能指標
為了監測模型的性能,我們要測量模型生成的推薦系統的質量。
在推薦系統中,我們用 Precision@k 和 Recall@k 測量了系統的性能,這兩個指標廣泛應用於信息檢索場景。
精度被定義為客戶已經與之交互(瀏覽、添加到購物車等)的推薦項目的數量,除以推薦集 k 中的項目數量。
召回是客戶已經與之交互的 @k 推薦項目數量,除以客戶已經與之交互的項目的總數量(即使在推薦集之外)。
我們還使用了另一個指標:準確率分數,以測量模型的整體性能。我們把準確率分數定義為客戶已經與之交互(至少一次交互/集)的推薦集總和,除以客戶推薦總數。
在所有模型中,我們在前 5 個(k=5)推薦產品中測量了模型的性能。
模型的優缺點
前方預警:
模型的缺點大於優點。
實現較好的方面是模型和進程非常直接,對那些了解基礎知識且具有領域經驗的人而言很簡單。此外,該模型的實現可以使我們將所有信息放入單個「訓練好的」矩陣,為用於生產的推薦做好準備。
那麼不好的方面是什麼呢?考慮到矩陣稀疏性,當新商店加入推薦引擎時,計算和耗時會呈指數增長。
因此,經過數十個網站後,該系統將消耗大量內存,並且需要花費幾天時間進行調整和正常運作。
數據在產生個性化產品推薦時最為重要;舉例而言,大量的中小商店沒有足夠的交互數據來產生自己的個性化推薦。
在觀察到令人失望的結果以及想通了研究系統目的之後,我決定改變方向,*專註於如何處理和發布信息*。
如此一來,我可以幫助到數據薄弱的較小商店,同時減小交互矩陣的規模。
在下一篇文章中,我將向大家介紹如何自動融合產品信息以及不同店鋪之間的交互。
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
------------------------------------------------
※開放下載!復旦大學邱錫鵬教授發布教科書《神經網路與深度學習》
TAG:機器之心 |