iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
2

Recommender systems overview

在這個章節中我們將學習推薦系統,典型的應用場景為推薦商品,當你有大量的商品和一些會員,此時你該如何推薦商品給它們呢?

所以接下來會討論如何使用機器學習技術來結合你與別人的歷史購物紀錄,來做出合適的推薦

在美國,亞馬遜很早就開始做商品推薦系統,而另一個主流的應用商則是Netflix(他們為這個系統推出一個獎金一百萬美金的比賽)

這些同時催生了許多相關的研究

Where we see recommender systems in action

當我們討論推薦系統之前,必須先談談所謂的 personalization

personalization 需要結合自身的經驗,在YouTube上每分鐘有將近100小時的影音資料更新,我們最關心的是那些才是讓我感興趣的

這是一個很好的 information overload 的例子,網站上有太多我可以看的內容,很難在沒人幫助的情況下找出我最感興趣的影片

所以傳統的瀏覽模式成為了歷史

我們需要更好的方法,來自動調配我們感興趣的內容,這個就是 personalization

在這個例子中,我們想將 YouTube 使用者與影片關聯起來

我們再舉幾個例子來說明推薦系統的重要性

在 Netflix 中他們想要推薦給使用者感興趣的影片與電視節目,那要如何推薦呢?

而在 Amazon 買東西時,它會推薦你可能感興趣的商品,值得我們關注的是在這個推薦的過程,不僅僅需要考慮到此次購物過程使用者所感興趣的商品

比如說,當一個你買了一本網站相關的書籍,你可能也對其他網路應用程式的書感興趣

但是當你在網站上買一雙鞋子送給別人家的小孩,這些商品可能不是你感興趣的項目

當系統查看你購物紀錄時,將會做出比之前更好的推薦,而不是一次性的建議

同樣的建議其實是隨著時間改變的,當你發現我這一年來買了許多新生兒的商品,但是我可能之後就不會買這些商品了

接下來我們不考慮影片的推薦,我們考慮歌曲

我們想要一個連續撥放的歌曲,它應該要是曲風相近的,我不想要聽完火燒島的正義的花後接著便老鼠愛大米

不過我又不想曲風只有重金屬,我希望歌曲要有多樣性但不要太突兀

最後一個是社交網路,在臉書上有非常非常多的使用者,我們想知道使用者之間的關聯,假設我是這個關聯網路的粉紅點

https://ithelp.ithome.com.tw/upload/images/20180102/20107448J19tRR4sfp.jpg

在這邊值得注意的是,使用者推薦與被推薦商品兩者的類型是一樣的

最後我想談一下,推薦系統其實也應用在藥物-標靶交互作用(drug-target interactions)

假設我們已經有一些已經被研究的藥物,比如阿斯匹靈,它被研究用作頭痛治療藥,但如果發現其有其他用途呢?像是心臟病或血液稀釋劑...

如果我們發現這些作用,我們將可增加這些藥物的用途,這樣將帶來便利

因為新藥要得到FDA的批準是一個代價很高且耗時的過程,服用一個已經確定副作用的藥物是一件讓人相對放心的事情

因此阿斯匹靈不只能治療頭痛,也能用於心臟病

Building a recommender system via classification

前面已經提到了很多的實際應用的場景,那該如何搭建推薦系統呢?實際上推薦系統非常多,這邊只能講到一部份

  • Popularity:這是最基本的方法,根據商品流行度做推薦,這方法在新興網站中非常流行,比如"上報"網站上就有這樣的"熱門新聞"

https://ithelp.ithome.com.tw/upload/images/20180102/20107448wQv8KI7NTM.jpg

但是這種方法最大的缺點就是缺乏personalization,所有的推薦都依賴著上報所有讀者閱讀的情況,我想要的是依據我個人訊息與興趣的

  • Classification model:為了實現 personalization 我們需要一種分類模型,依照商品及使用者特徵來做出推薦,這跟之前情感分析很類似,但現在用這種方法來對某個使用者是否喜歡這項商品進行分類
    • 使用者特徵集、購物紀錄的特徵集、這件正在考慮是否做推薦商品的特徵集、和其他一些特徵集
    • 將這些特徵輸入分類模型
    • 分類為Yes/NO:表示喜歡/不喜歡

這樣方法的優點有

  • 第一它非常personalization,因為它是根據我們個人資料及購物紀錄作為特徵
  • 第二個優點是可以考量到具體的情境,比方說購物的時間做特徵,白天會買課本、晚上買居家商品
  • 最後它使用者購買記錄很少的情況下也能運作良好,比方說雖然我在網站上購物的次數不多,但是以我的個人資料,即使只有年紀也可以做出不錯的預測

至於缺點

  • 它需要那些特徵集資料可能很大,而且可能不齊全,例如:你不知道我的年紀、性別;甚至是商品本身訊息沒填寫完整

事實上我們經常看到的方法是協同過濾

Collaborative filtering: People who bought this also bought...

協同過濾對使用者推薦的依據有其他所有人的購物紀錄和產品推薦的實際例子及使用者與商品的一般化關聯

當系統為我們推薦某件商品時,如果有人買過這件商品,而這個人也買過其他商品,此時就有必要將這些過去買過的商品推薦給你

因此我們有了 co-occurring of purchases 的概念

舉個例子,很多人買了嬰兒尿布也會跟著買嬰兒濕紙巾,我們要如何利用這個方法呢?

接下來將會提到所謂的 co-occurrence matrix 這個矩陣將記錄那些商品被相同使用者所購買,這邊再次提醒一下,使用者不一定是同時購買這些商品

https://ithelp.ithome.com.tw/upload/images/20180103/201074481xOyw7psSk.png

假設我們有一個矩陣C,所有的行列對應著所有的商品,假設第三行與第三列都是表示嬰兒尿布

那麼要怎麼描述同時購買尿布與濕紙巾呢?

首先要先找到尿布對應的row,濕紙巾對應的column(假設為6),這樣我們就可以找到某一個交叉的元素,其值代表著兩者同時購買的人數

那同時購買尿布與濕紙巾的人會跟同時購買濕紙巾及尿布的人一樣嗎?答案是肯定的,

所以其實這是一個對稱矩陣,只要將對角線對摺會發現,對應的數值是一樣的

我們可從中得到所有使用者的購買紀錄並做計算

每當有一筆含有尿布的購買紀錄,我們就會將它跟同時購買商品對應的列值加一

因此將矩陣對應的值都填完之後,就可以得到 co-occurrence matrix

接下來我們談一下這個矩陣該如何使用?事實上非常簡單粗暴

https://ithelp.ithome.com.tw/upload/images/20180103/20107448vYxhDtpViH.png

一樣以尿布為例,假設我們找到它對應的那一列,這一列裡面有許多商品對應值,每一個值代表著購買了尿布又同時購買該項商品的人數

我們只要對向量做排序,接著按照值得大小來推薦,以此例來說會先推薦紙巾再來是奶嘴...

Reference:


上一篇
[day 15] 分群與相似度-實作
下一篇
[day 17] 推薦系統 -2
系列文
到底是在learning什麼拉30

尚未有邦友留言

立即登入留言