搭建电商平台的标签系统?看这就够了
咖友提問:如何建立電商平臺的標簽系統?
期待該問題的優質回答,給所有需要設計標簽系統的童鞋一個很好的指引,簡要說明一下要做的事情:
1.電商系統的標簽,可以支持前臺分類的搜索(或者叫查詢?)
2.電商系統的標簽,可以支持某個關鍵詞搜索出的產品的篩選
3.電商系統的標簽,可以支持給商品、用戶、供應商、產品、評價等多個維度大標簽。
●?●?●
▍陸志亞?上海商米科技 產品經理
這個題目確實有點大,標簽系統應該是推薦系統是一個核心模塊,在數據挖掘領域還有一個別稱:元數據
如果從整個推薦系統上來看標簽系統或許更容易理解
一個電子商務網站推薦機制的好壞,對其用戶的聯合銷售以及轉化率的提高有著極其重要的作用,對比線下零售來說,推薦系統就相當于實體店里的“導購員”,對于零售店中,“導購員”起到提高顧客的購買愿意、購買金額。同樣的的,一個好的推薦系統,?對于電子商務網站來說:
1、提高搜索準確率,許多個性化的搜索結果;更好的向顧客展示商品,提高轉換率。
2、提高推薦成功率發現顧客的潛在需求,提高客單價
一、標簽系統是鏈接客戶與商品的關聯因子,標簽系統是推薦系統前提條件,只有了標簽模塊才能向客戶個性化展示商品信息,才能提高客戶購物體驗,提高銷售額的目的。
目前主流標簽有以下兩個維度
1、一般都是基于物品自身相似性標簽
商品相關標簽,一般與商品本身的商品類目,商品屬性及特征有關,在商品上架時異步向發送推薦系統生成標簽任務,這時推薦系統會建立與產品相關的M*N的一個動態矩陣。
2、基于客戶瀏覽、喜歡、購買等數據的標簽
客戶標簽,是根據客戶的瀏覽特征、搜索關鍵詞、購買商品記錄來實現的用戶畫像,每次客戶行為都能為精準描述客戶提供數據支持。假設我一個月買一次杜蕾斯,以后應該推薦時不應該是每天推薦,而是在購買第25天開始推薦。
二、關聯推薦算法 ??
協同過濾 —— Collaborative Filtering
協同過濾簡單來說就是根據目標用戶的行為特征,為他發現一個興趣相投、擁有共同經驗的群體,然后根據群體的喜好來為目標用戶過濾可能感興趣的內容。
協同過濾推薦 ——?Collaborative Filtering Recommend
協同過濾推薦是基于一組喜好相同的用戶進行推薦。它是基于這樣的一種假設:為一用戶找到他真正感興趣的內容的最好方法是首先找到與此用戶有相似喜好的其他用戶,然后將他們所喜好的內容推薦給用戶。這與現實生活中的“口碑傳播(word-of-mouth)”頗為類似。
協同過濾推薦分為三類:
基于用戶的推薦(User-based Recommendation)
基于項目的推薦(Item-based Recommendation)
基于模型的推薦(Model-based Recommendation)
基于用戶的協同過濾推薦 —— User CF
原理:基于用戶對物品的喜好找到相似鄰居用戶,然后將鄰居用戶喜歡的物品推薦給目標用戶
上圖示意出User CF的基本原理,假設用戶A喜歡物品A和物品C,用戶B喜歡物品B,用戶C喜歡物品A、物品C和物品D;從這些用戶的歷史喜好信息中,我們可以發現用戶A和用戶C的口味和偏好是比較類似的,同時用戶C還喜歡物品D,那么我們可以推斷用戶A可能也喜歡物品D,因此可以將物品D推薦給用戶A。
實現:將一個用戶對所有物品的偏好作為一個向量(Vector)來計算用戶之間的相似度,找到K-鄰居后,根據鄰居的相似度權重以及他們對物品的喜好,為目標用戶生成一個排序的物品列表作為推薦,列表里面都是目標用戶為涉及的物品。
基于物品的協同過濾推薦 —— Item CF
原理:基于用戶對物品的喜好找到相似的物品,然后根據用戶的歷史喜好,推薦相似的物品給目標用戶。與User CF類似,只是關注的視角變成了Item。
?
假設用戶A喜歡物品A和物品C,用戶B喜歡物品A、物品B和物品C,用戶C喜歡物品A,從這些用戶的歷史喜好可以分析出物品A和物品C是比較類似的,喜歡物品A的人都喜歡物品C,基于這個數據可以推斷用戶C 很有可能也喜歡物品C,所以系統會將物品C推薦給用戶C。
實現:將所有用戶對某一個物品的喜好作為一個向量來計算物品之間的相似度,得到物品的相似物品后,根據用戶歷史的喜好預測目標用戶還沒有涉及的物品,計算得到一個排序的物品列表作為推薦。
相似度的計算 —— Similarity Metrics Computing
關于相似度的計算,現有的幾種基本方法都是基于向量(Vector)的,其實也就是計算兩個向量的距離,距離越近相似度越大。在推薦的場景中,在用戶 - 物品偏好的二維矩陣中,我們可以將一個用戶對所有物品的偏好作為一個向量來計算用戶之間的相似度,或者將所有用戶對某個物品的偏好作為一個向量來計算物品之間的相似度。下面我們詳細介紹幾種常用的相似度計算方法:? ?
歐幾里德距離(Euclidean Distance)
? 最初用于計算歐幾里德空間中兩個點的距離,假設 x,y 是 n 維空間的兩個點,它們之間的歐幾里德距離是:
?
可以看出,當 n=2 時,歐幾里德距離就是平面上兩個點的距離。
當用歐幾里德距離表示相似度,一般采用以下公式進行轉換:距離越小,相似度越大?
皮爾森相關系數(Pearson Correlation Coefficient)
皮爾森相關系數一般用于計算兩個定距變量間聯系的緊密程度,它的取值在 [-1,+1] 之間。
?
Cosine 相似度(Cosine Similarity)
Cosine 相似度被廣泛應用于計算文檔數據的相似度:?
?
相似鄰居的計算
鄰居就是上文說到的“興趣相投、擁有共同經驗的群體”,在協同過濾中,鄰居的計算對于推薦數據的生成是至關重要的,常用的劃分鄰居的方法有兩類:
固定數量的鄰居:K-neighborhoods 或者 Fix-size neighborhoods
用“最近”的K個用戶或物品最為鄰居。?如下圖中的 A,假設要計算點 1 的 5- 鄰居,那么根據點之間的距離,我們取最近的 5 個點,分別是點 2,點 3,點 4,點 7 和點 5。但很明顯我們可以看出,這種方法對于孤立點的計算效果不好,因為要取固定個數的鄰居,當它附近沒有足夠多比較相似的點,就被迫取一些不太相似的點作為鄰居,這樣就影響了鄰居相似的程度,比如圖 1 中,點 1 和點 5 其實并不是很相似。?
基于相似度門檻的鄰居:Threshold-based neighborhoods
與計算固定數量的鄰居的原則不同,基于相似度門檻的鄰居計算是對鄰居的遠近進行最大值的限制,落在以當前點為中心,距離為 K 的區域中的所有點都作為當前點的鄰居,這種方法計算得到的鄰居個數不確定,但相似度不會出現較大的誤差。如下圖中的 B,從點 1 出發,計算相似度在 K 內的鄰居,得到點 2,點 3,點 4 和點 7,這種方法計算出的鄰居的相似度程度比前一種優,尤其是對孤立點的處理。?
Threshold-based neighborhoods要表現的就是“寧缺勿濫”,在數據稀疏的情況下效果是非常明顯的。
User CF 和 Item CF 都依賴于相似度的計算,因為只有通過衡量用戶之間或物品之間的相似度,才能找到用戶的“鄰居”,才能完成推薦。上文簡單的介紹了相似性的計算,但不完全,下面就對常用的相似度計算方法進行詳細的介紹:
1. 基于皮爾森相關性的相似度 —— Pearson correlation-based similarity
皮爾森相關系數反應了兩個變量之間的線性相關程度,它的取值在[-1, 1]之間。當兩個變量的線性關系增強時,相關系數趨于1或-1;當一個變量增大,另一個變量也增大時,表明它們之間是正相關的,相關系數大于0;如果一個變量增大,另一個變量卻減小,表明它們之間是負相關的,相關系數小于0;如果相關系數等于0,表明它們之間不存在線性相關關系。
用數學公式表示,皮爾森相關系數等于兩個變量的協方差除于兩個變量的標準差。
協方差(Covariance):在概率論和統計學中用于衡量兩個變量的總體誤差。如果兩個變量的變化趨于一致,也就是說如果其中一個大于自身的期望值,另一個也大于自身的期望值,那么兩個變量之間的協方差就是正值;如果兩個變量的變化趨勢相反,則協方差為負值。
其中u表示X的期望E(X),?v表示Y的期望E(Y)
標準差(Standard Deviation):標準差是方差的平方根
方差(Variance):在概率論和統計學中,一個隨機變量的方差表述的是它的離散程度,也就是該變量與期望值的距離
即方差等于誤差的平方和的期望
基于皮爾森相關系數的相似度有兩個缺點:
(1) 沒有考慮(take into account)用戶間重疊的評分項數量對相似度的影響;
(2) 如果兩個用戶之間只有一個共同的評分項,相似度也不能被計算
上表中,行表示用戶(1~5)對項目(101~103)的一些評分值。直觀來看,User1和User5用3個共同的評分項,并且給出的評分走差也不大,按理他們之間的相似度應該比User1和User4之間的相似度要高,可是User1和User4有一個更高的相似度1。
同樣的場景在現實生活中也經常發生,比如兩個用戶共同觀看了200部電影,雖然不一定給出相同或完全相近的評分,他們之間的相似度也應該比另一位只觀看了2部相同電影的相似度高吧!但事實并不如此,如果對這兩部電影,兩個用戶給出的相似度相同或很相近,通過皮爾森相關性計算出的相似度會明顯大于觀看了相同的200部電影的用戶之間的相似度。
2. 基于歐幾里德距離的相似度 —— Euclidean Distance-based Similarity
歐幾里德距離計算相似度是所有相似度計算里面最簡單、最易理解的方法。它以經過人們一致評價的物品為坐標軸,然后將參與評價的人繪制到坐標系上,并計算他們彼此之間的直線距離。
?
圖中用戶A和用戶B分別對項目X、Y進行了評分。用戶A對項目X的評分為1.8,對項目Y的評分為4,表示到坐標系中為坐標點A(1.8, 4);同樣用戶B對項目X、Y的評分表示為坐標點B(4.5, 2.5),因此他們之間的歐幾里德距離(直線距離)為:sqrt((B.x - A.x)^2 + (A.y - B.y)^2)?
計算出來的歐幾里德距離是一個大于0的數,為了使其更能體現用戶之間的相似度,可以把它規約到(0, 1]之間,具體做法為:1 / (1 + d)。參見上表
只要至少有一個共同評分項,就能用歐幾里德距離計算相似度;如果沒有共同評分項,那么歐幾里德距離也就失去了作用。其實照常理理解,如果沒有共同評分項,那么意味著這兩個用戶或物品根本不相似。
3. 余弦相似度 —— Cosine Similarity
余弦相似度用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。
?
與歐幾里德距離類似,基于余弦相似度的計算方法也是把用戶的喜好作為n-維坐標系中的一個點,通過連接這個點與坐標系的原點構成一條直線(向量),兩個用戶之間的相似度值就是兩條直線(向量)間夾角的余弦值。因為連接代表用戶評分的點與原點的直線都會相交于原點,夾角越小代表兩個用戶越相似,夾角越大代表兩個用戶的相似度越小。同時在三角系數中,角的余弦值是在[-1, 1]之間的,0度角的余弦值是1,180角的余弦值是-1。
借助三維坐標系來看下歐氏距離和余弦相似度的區別:
從圖上可以看出距離度量衡量的是空間各點間的絕對距離,跟各個點所在的位置坐標(即個體特征維度的數值)直接相關;而余弦相似度衡量的是空間向量的夾角,更加的是體現在方向上的差異,而不是位置。如果保持A點的位置不變,B點朝原方向遠離坐標軸原點,那么這個時候余弦相似度cosθ是保持不變的,因為夾角不變,而A、B兩點的距離顯然在發生改變,這就是歐氏距離和余弦相似度的不同之處。
根據歐氏距離和余弦相似度各自的計算方式和衡量特征,分別適用于不同的數據分析模型:歐氏距離能夠體現個體數值特征的絕對差異,所以更多的用于需要從維度的數值大小中體現差異的分析,如使用用戶行為指標分析用戶價值的相似度或差異;而余弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用于使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因為余弦相似度對絕對數值不敏感)。
4. 調整余弦相似度?——?Adjusted Cosine Similarity
在余弦相似度的介紹中說到:余弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感。因此沒法衡量每個維數值的差異,會導致這樣一個情況:比如用戶對內容評分,5分制,X和Y兩個用戶對兩個內容的評分分別為(1,2)和(4,5),使用余弦相似度得出的結果是0.98,兩者極為相似,但從評分上看X似乎不喜歡這2個內容,而Y比較喜歡,余弦相似度對數值的不敏感導致了結果的誤差,需要修正這種不合理性,就出現了調整余弦相似度,即所有維度上的數值都減去一個均值,比如X和Y的評分均值都是3,那么調整后為(-2,-1)和(1,2),再用余弦相似度計算,得到-0.8,相似度為負值并且差異不小,但顯然更加符合現實。
5. 斯皮爾曼相關 —— Spearman Correlation
斯皮爾曼相關性可以理解為是排列后(Rank)用戶喜好值之間的Pearson相關度。《Mahout in Action》中有這樣的解釋:假設對于每個用戶,我們找到他最不喜歡的物品,重寫他的評分值為“1”;然后找到下一個最不喜歡的物品,重寫評分值為“2”,依此類推。然后我們對這些轉換后的值求Pearson相關系數,這就是Spearman相關系數。
斯皮爾曼相關度的計算舍棄了一些重要信息,即真實的評分值。但它保留了用戶喜好值的本質特性——排序(ordering),它是建立在排序(或等級,Rank)的基礎上計算的。
回顧前面表中User1~5對Item101~103的喜好(評分)值,通過斯皮爾曼相關系數計算出的相似度為:
我們發現,計算出來的相似度值要么是1,要么是-1,因為這依賴于用戶的喜好值和User1的喜好值是否趨于“一致變化”還是呈“相反趨勢變化"。
因為斯皮爾曼相關性的計算需要花時間計算并存儲喜好值的一個排序(Ranks),具體時間取決于數據的數量級大小。正因為這樣,斯皮爾曼相關系數一般用于學術研究或者是小規模的計算。
6. 基于谷本系數的相似性度量 —— Tanimoto Coefficient-based Similarity
Tanimoto Coefficient和前面的5中相關度計算方式有很大的不同,它不關心用戶對物品的具體評分值是多少,它在關心用戶與物品之間是否存在關聯關系。還記得上一篇文章《Mahout學習筆記——數據承載》里面提到的布爾喜好值(Boolean Preference)吧!Tanimoto Coefficient依賴于用戶和物品之間的這種Boolean關系作為輸入。
更準確的說法為:Tanimoto Coefficient主要用于計算符號度量或布爾值度量的個體間的相似度,因為個體的特征屬性都是由符號度量或者布爾值標識,因此無法衡量差異具體值的大小,只能獲得“是否相同”這個結果,所以Tanimoto Coefficient只關心個體間共同具有的特征是否一致這個問題。Tanimoto Coefficient又被叫做Jaccard?Coefficient,其值等于兩個用戶共同關聯(不管喜歡還是不喜歡)的物品數量除于兩個用戶分別關聯的所有物品數量。
也就是關聯的交集除于關聯的并集,用公式表示為:
其值介于[0, 1]之間,如果兩個用戶關聯的物品完全相同,交集等于并集,值為1;如果沒有任何關聯,交集為空,值為0。
注:本塊中說到的關聯指用戶對物品有評分值
推薦中的協同過濾算法簡單說明下(來自http://my.oschina.net/BreathL/blog/62519):
首先,通過分析用戶的偏好行為,來挖掘出里面物品與物品、或人與人之間的關聯。
其次,通過對這些關聯的關系做一定的運算,得出人與物品間喜歡程度的猜測,即推薦值。
最后,將推薦值高的物品推送給特定的人,以完成一次推薦。
這里只是籠統的介紹下,方便下邊的理解,IBM的一篇博客對其原理講解得淺顯易懂,同時也很詳細《深入推薦引擎相關算法 - 協同過濾》,我這里就不細講了。
協同過濾算法大致可分為兩類,基于物品的與基于用戶的;區分很簡單,根據上面的邏輯,若你挖掘的關系是物品與物品間的,就是基于物品的協同過濾算法,若你挖掘的關系是用戶與用戶間的,就是基于用戶的協同過濾算法;由于它們實現是有所不同,所以我分開整理,先來看看基于物品的協同過濾實現,我自己畫了一幅圖:
我通過數字的順序,來標示數據變化的方向(由小到大);下面分析下每一個步驟的功能以及實現。
首先,說明下兩個大的數據源,用戶偏好數據:UserID、ItemID、Preference:表示一個對一個物品的喜好程度;關系數據:ItemIDA(UserIDA)、ItemIDB(UserIDB)、Similarity:表示兩個人或物品間的相似程度;接著一個用戶來了,我們需要為其推薦,得拿到他的身份標示,一般是UserID,于是:
① 查找這個用戶喜歡過的物品(即偏好的產品,并查出偏好值后面會用),以及還沒有喜歡過的商品,前者是推薦運算的根據,后者作為一個產生推薦的一個集合;如②?畫的那樣。
② 這里是一個可擴展的地方(我自己理解);因為這兩部分的數據的作用非常明顯,修改這兩個集合對后面產生的推薦結果可產生非常直觀的影響,比如清洗過濾,或根據用戶屬性縮小集合;不僅使后面推薦效果更優,運算性能也可以大幅度提高。
③ 查找這兩個集合之間的關系,這是一對多的關系:一個沒有偏好過的物品與該用戶所有偏好過的物品間的關系,有一個值來衡量這個關系叫相似度Similarity;這個關系怎么來的,看藍色箭頭的指向。步驟⑥
④ 得到這個一對多的關系后,就可以計算這個物品對于這個用戶的推薦值了,圖中similarity_i-x表示Item_i 與 Item_x 之間的相似度,Item_x是該用戶偏好過得,該用戶對其偏好值記為 value_x ,相乘;Item_i 與 該用戶偏好過的所有物品以此做以上運算后,得到的值取平均值 便是 Item_i的推薦值了。注:有可能Item_i 不是與所有 該用戶偏好過的物品都都存在相似性,不存在的,不計算即可;另外這里方便理解介紹的都是最簡單的實現;你也可以考一些復雜的數學元素,比如方差來判斷離散性等。
⑤ ?這步就簡單多了,剛才對該用戶沒有偏好過的集合中的所有Item都計算了推薦值,這里就會得到一個list,按推薦值由大到小排序,返回前面的一個子集即可。
⑥ ?前面已經提到,關系數據時怎么來的,也是根據用戶的偏好數據;你把其看成一個矩陣,橫著看過來,參考兩個Item間的共同用戶,以及共同用戶的偏好的值的接近度;這里的可選擇的相似度算法很多,不一一介紹了,前面提到的IBM博客也詳細講解了。
基于物品的協同過濾算法分析完了,下面是基于用戶的協同過濾算法,還是自己畫了一幅圖:
① 同樣也是查詢,只是查詢的對象不一樣了,查詢的是與該用戶相似的用戶,所以一來直接查了關系數據源。以及相似用戶與該用戶的相似度。
② 與剛才類似,也是對數據集的一個優化,不過作用可能沒那么大。(個人感覺)
③ 查詢關系數據源,得到相似用戶即鄰居偏好過的物品;如步驟④;圖中由于空間小,沒有把所有鄰居的偏好關系都列出來,用……表示。其次還要得到該用戶偏好過的物品集合。
④ 被推薦的Item集合是由該用戶的所有鄰居的偏好過的物品的并集,同時再去掉該用戶自己偏好過的物品。作用就是得到你的相似用戶喜歡的物品,而你還沒喜歡過的。
⑤ 集合優化同基于物品的協同過濾算法的步驟②。
⑥ 也是對應類似的,依次計算被推薦集合中Item_i 的推薦值,計算的方式略有不同,Value_1_i表示鄰居1對,Item_i的偏好值,乘以該用戶與鄰居1的相似度 Similarity1;若某個鄰居對Item_i偏好過,就重復上述運算,然后取平均值;得到Item_i的推薦值。
⑦、⑧與上一個算法的最后兩部完全類似,只是步驟??⑧你豎著看,判斷兩個用戶相似的法子和判斷兩個物品相似的法子一樣。
點擊?閱讀原文?與產品經理們探討問題
總結
以上是生活随笔為你收集整理的搭建电商平台的标签系统?看这就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何理解社交效应「蒸发式降温」?
- 下一篇: 如何梳理复杂系统的用户需求?