歡迎光臨
每天分享高質量文章

我是怎麼走上推薦系統這條(不歸)路的……

 (點選上方快速關註並設定為星標,一起學Python)

來源:機器之心  作者:Dimitris Apostolopoulos 

參與:shooting、杜偉    連結:

https://mp.weixin.qq.com/s/C5cokipqnSsgg53chbi3oA

 

什麼是推薦系統?有哪些型別的推薦系統?怎麼做推薦系統?想知道?可以看看這篇小白文~

在這個系列文章中,我將分享掌握推薦系統的經驗,以及圍繞推薦系統從低階模型到高階模型的實現。

我還會簡要提及你構建推薦系統時將會遇到的挑戰以及我所用的解決辦法。

最後,我會帶你們瀏覽我追蹤模型表現和構建其它機器學習模型時的想法、不成功的嘗試和驗證框架,以得出成功的方法。

但首先……

什麼是推薦系統?

推薦系統可以說是大資料中最常見的應用了,它透過為你的網站推薦內容來改善個人使用者體驗。

推薦系統是資訊過濾系統和人工智慧的一部分,旨在預測使用者偏好。

我們在哪些地方使用推薦系統?

最常見的領域是產品推薦欄位過濾和透過使用者的偏好來學習,以便將這些知識應用於他人。

我學習推薦系統的初衷

雖然我很享受生活,但我覺得…嗯,太安逸了。所以我決定改變一下這種狀態。

然後我決定挑戰點什麼,你懂的。

比如漫遊資料科學世界和征服人工智慧什麼的。

呵呵,挑戰。

就是那種你後悔也為時晚矣的東西。

不過你看,我這不是冒險跳進來,和「海怪」鬥爭,最後存活下來了嗎?也許,你可以聽聽我——「水手辛巴達」講講這個跌宕起伏的故事。

大概是一年前吧,我工作的電子郵件營銷和自動化公司(Moosend)給我分配了一個全新的專案。

其理念是建立一個適合且適用於每個電子商務平臺的資料驅動推薦引擎。這個通用系統要根據使用者和產品的互動產生個性化的產品推薦。

這個專案的挑戰之處在於它必須是完全動態的,能夠適應各種樣式,即季節性購買樣式(如聖誕節、光明節、複活節等送禮期間),同時還要實現收益最大化。

如何理解推薦引擎?

每次接到新專案後,我做的第一件事就是瞭解它的基本資訊;它是用來做什麼的?什麼時候用?系統的結構是什麼?它可能具有的多樣性和可擴充套件性?

總共有不同型別的推薦系統,而你選擇哪種要取決於你接近客戶的策略。

現在是資料的最好時代。過去從來沒有像現在這樣,這個世界為資料所驅動。大部分最大的電子商務網站依靠資料驅動決策系統來擴大銷售。

而個性化的產品推薦是人工智慧送給電子商務的禮物,因為它們可以幫你提高點選率和銷售率。

就像我說的,AI 推薦系統有五種不同的型別:

基於內容的引擎:根據相似產品的屬性(即每種產品的特性)來識別相似產品。

每個產品都有其屬性(例如,手機的屬性是螢幕大小、價格、相機、軟體等),我們試圖找出最相似的屬性。

透過這種方式,我們給偏好具有特定屬性的手機客戶推薦相似的手機。

協同過濾引擎:識別相似客戶的偏好,它基於這樣一種概念:行為相似的人有相似的興趣。

在這類系統中,我們用客戶的互動來代表他們,預測他們對每個產品產生興趣的機率,即客戶真正欣賞推薦給他們的產品的可能性。

因此,我們可以透過給最相似的客戶推薦產品來接近新客戶。

混合系統:結合了基於內容的系統和協同過濾系統。

對兩個模型中每個給定的產品進行評分,並對每個結果進行加權;最終的推薦結果來自兩個分數的線性組合。

關聯規則購物籃分析引擎與先前幾種系統略有不同。

有了大量的互動資料集,我們可以找到經常作為序列一起購買的物品的樣式;例如,有人在購物車裡加了咖啡,但沒加糖,我們就會給他推薦糖。

重覆購買引擎:預測客戶購買特定產品的具體時間或大概時間。

這種演演算法使用產品週期、購買歷史和日期統計來預測未來購買日期。

例如,如果有人買月拋的隱形眼鏡,我們可以每隔 30 天為他推薦同樣的產品,如果他忘記購買的話。這樣,就鼓勵客戶一直在我們店裡買眼鏡了。

協同過濾

為了更新你的記憶,這種推薦引擎會透過客戶的產品互動(購買、產品檢視和新增到購物車產品)來嘗試識別具有相似興趣的客戶。

你可以用一兩種方法實現協同過濾:基於記憶或基於模型的方法。在兩種方法中,我們都用客戶的互動行為來代表他們,就像向量格式化矩陣一樣。

在基於記憶的方法中,你要測量所有向量(客戶)彼此之間的距離,然後根據他們最相似的地方推薦產品。

而在基於模型的方法,即廣為人知的矩陣分解模型中,我們要識別資料中的潛在因子。

在統計世界中,潛在因子不是我們直接觀察或測量的變數,而是一組在較低維空間中解釋(描述)其它變數及其關係而不丟失資訊的變數。

而在推薦系統中,潛在因子發現和解碼每個客戶的樣式,以識別他們之間的相似性。

推薦系統模型 #1(我的第一次嘗試)

我想出來的第一個模型是標準的矩陣分解模型。

在這個案例裡,我們在二維稀疏矩陣 R 中用客戶的產品互動來代表他們;稀疏矩陣是一種高效計算和高效儲存的方式,可以將大量資料儲存在一起並準備處理。

矩陣中的行代表客戶,列代表像向量一樣的產品,然後我們在客戶-產品互動單元中填上 1。

而在有產品但沒有客戶互動的單元格則是空的,如下所示:

下一步是將 R 矩陣分為兩部分,一部分針對客戶(P),一部分針對具有潛在因子的產品(Q)。然後,我們用 lambda 函式微調這兩個矩陣並根據原始 R 矩陣的值測量誤差率。當誤差率從給定閾值開始下降時,我們中斷這個過程。

為了格式化 R-hat 矩陣,我們計算了 P 和 Q 的點積。線上性代數中,點積是矩陣乘法的結果。

最後一步是推薦一組根據特定客戶的最高購買機率排序的產品。

效能指標

為了監測模型的效能,我們要測量模型生成的推薦系統的質量。

在推薦系統中,我們用 Precision@k 和 Recall@k 測量了系統的效能,這兩個指標廣泛應用於資訊檢索場景。

精度被定義為客戶已經與之互動(瀏覽、新增到購物車等)的推薦專案的數量,除以推薦集 k 中的專案數量。

召回是客戶已經與之互動的 @k 推薦專案數量,除以客戶已經與之互動的專案的總數量(即使在推薦集之外)。

我們還使用了另一個指標:準確率分數,以測量模型的整體效能。我們把準確率分數定義為客戶已經與之互動(至少一次互動/集)的推薦集總和,除以客戶推薦總數。

在所有模型中,我們在前 5 個(k=5)推薦產品中測量了模型的效能。

模型的優缺點

前方預警:

模型的缺點大於優點。

實現較好的方面是模型和行程非常直接,對那些瞭解基礎知識且具有領域經驗的人而言很簡單。此外,該模型的實現可以使我們將所有資訊放入單個「訓練好的」矩陣,為用於生產的推薦做好準備。

那麼不好的方面是什麼呢?考慮到矩陣稀疏性,當新商店加入推薦引擎時,計算和耗時會呈指數增長。

因此,經過數十個網站後,該系統將消耗大量記憶體,並且需要花費幾天時間進行調整和正常運作。

資料在產生個性化產品推薦時最為重要;舉例而言,大量的中小商店沒有足夠的互動資料來產生自己的個性化推薦。

在觀察到令人失望的結果以及想通了研究系統目的之後,我決定改變方向,*專註於如何處理和釋出資訊*。

如此一來,我可以幫助到資料薄弱的較小商店,同時減小互動矩陣的規模。

在下一篇文章中,我將向大家介紹如何自動融合產品資訊以及不同店鋪之間的互動。

原文連結:https://medium.com/moosend-engineering-data-science/the-road-to-recommender-systems-d6bb79bd169d

    已同步到看一看
    贊(0)

    分享創造快樂