【原】淺談KL散度(相對熵)在用戶畫像中的應用


  最近做用戶畫像,用到了KL散度,發現效果還是不錯的,現跟大家分享一下,為了文章的易讀性,不具體講公式的計算,主要講應用,不過公式也不復雜,具體可以看鏈接

  首先先介紹一下KL散度是啥。KL散度全稱Kullback–Leibler divergence,也稱為相對熵,信息增益,它是度量兩個概率分布P與Q之間差異的一種不對稱度量,可以看做是概率分布P到目標概率Q之間距離。一般情況下,P表示數據的真是分布,Q表示數據的理論分布,也可以理解為影響P分布的一種因素。計算公式為:

                      DKL(P||Q) =ΣP(i)log(P(i)/Q(i))                         (1)

   從字面意思來看呢,是一種距離,但是實際上和我們理解的“距離”並不一樣。我們常規理解的距離一般來說有幾點性質:

  1.非負:距離是絕對值,非負好理解。

  2.對稱:從A到B的距離 = 從B到A的距離

  3.勾股定理:兩邊之和大於第三邊

  而KL的性質只滿足第一點非負性,不滿足對稱性和勾股定理。

  1.非負:當P(x) = Q(x)幾乎處處成立時,才有DKL(P||Q) = 0. 證明可利用詹森不等式

  2.非對稱性:根據定義可知,如果要弄成對稱的,可以定義

                      DSKL(P||Q) = (DKL(P||Q)+DKL(Q||P))/2                    (2)

  為什么是非對稱的呢,其實很簡單,如果P(i)大,Q(i)小,那么log是一個增函數,P(i)/Q(i) > Q(i)/P(i),則log(P(i)/Q(i)) > log(Q(i)/P(i)),因此DKL(P||Q) > DKL(Q||P),如果想要DKL(P||Q) = DKL(Q||P),那么P(i)大,Q的分布應該盡量和P接近一致,P(i)小,P和Q的差別對KL影響較小。

 

 

舉例:

1.假設現在有兩個用戶群體A和B,在“女裝”這個商品類別下面,A和B的消費總金額分別是11W和2W,是不是就能說明A群體相對於B群體就一定更偏好女裝呢?不一定。因為A的人數可能比B的多,如果A和B的人數比例是10:1,那么可能A和B群體對於“女裝的”偏好是一樣的,簡單來算的話,你可以只算人均價格,如果A和B在“女裝”下的人均消費相似,可以說明偏好相同,但是這一點沒有什么理論支撐,我們可以把A和B群體在“女裝”下的消費情況分布作為P(真實分布),A群體和B群體的人數比例作為Q(擬合分布),那么

                          P= [11/13,2/13]     Q =[10/11,1/11] 

                          DKL(P||Q) =Σi=1,2P(i)log(P(i)/Q(i))  = 0.02023101833433108

計算得出KL散度約為0.02,接近0,說明A和B在女裝下的消費情況分布基本相同,即,兩者對“女裝”的偏好並沒有明顯差異,喜歡“女裝”的程度為1:1

  貼上KL散度的代碼:

  

1 #P和Q是兩個概率分布,np.array格式
2 P = np.array()
3 Q = np.array()
4 def KL(P,Q):
5     sum = P*(log(P/Q))#計算KL散度
6     all_value= [x for x in sum if str(x) != 'nan' and str(x)!= 'inf']#除去inf值
7     return np.sum(all_value)#計算總和,要用np.sum,不能直接用sum
8 
9 KL(P,Q)#得出KL散度值

 

  具體在用戶畫像里有什么用呢?舉個例子,我在做用戶畫像的時候,根據消費金額,分出了8個用戶群體,這八個群體的人均消費Top10的重疊性很大,很多人都集中在“女裝”,“淑女裝”,“商務休閑”,“運動戶外”等這幾類,看起來沒有什么區分度,只能根據金額的高低來區分這些群體的消費能力,但並不能區分這些群體對某類商品的偏好。在計算了各商品類型下不同群體的消費金額的KL散度后,可以發現,這寫消費比較集中的幾類商品(“女裝”,“淑女裝”,“商務休閑”,“運動戶外”等)的KL散度幾乎等於0,或者0.1等,我取閾值為0.5的話,進行過濾一下,可以提取出對用戶有偏好區分的商品,我做的實際情況中過濾掉了1/3的商品,再根據不同商品類型下的8個用戶群體的消費金額百分比來進行排名,就可以看出各用戶群對商品類型的真是偏好了。

 

  簡單來說,從表格上看,可以看到明顯效果:

  圖1是沒有計算KL散度之前的用戶偏好,圖2是計算KL散度之后的用戶偏好。行:用戶群體消費偏好的商品類型   列:8個用戶群體

 

  1 2 3 4 5 6 7 8
1 少女裝 少女裝 少女 淑女裝 淑女裝 黃金飾品 淑女裝 少女裝
2 時尚 時尚 時尚 少女裝 少女裝 少女裝 商務休閑 時尚
3 黃金飾品 淑女裝 黃金飾品 黃金飾品 黃金飾品 淑女裝 黃金飾品 黃金飾品
4 淑女裝 黃金飾品 淑女裝 鑲嵌 鑲嵌 時尚 少女裝 商務休閑
5 商務休閑 商務休閑 商務休閑 時尚 商務休閑 商務休閑 鑲嵌 淑女裝

 

圖1 原始用戶偏好

 

 

1

2

3

4

5

6

7

8

1

護膚

玻璃飾品

玻璃飾品

玉石

飾品

經典

女裝

玻璃飾品

2

經典

廚具

鉑金飾品

黃金擺件

皮包

綜合

保健品

布藝

3

玩具

滋補保健

工藝金條

文教

國際名品

雜飾品

美健

滋補保健

4

彩妝

禮品

國際流行

運動配品

禮品

女士手袋

家居生活

香水

5

家居生活

嬰童、用品

投資金條

旅行箱包

羽絨

女飾品

銀飾品

陶瓷

 

圖2 計算KL散度后的用戶偏好

 

  從圖2可以很明顯看出,各用戶群體已經有了明顯的偏好了,第一類的用戶群體可能偏好女性護膚,對象可能是18-30歲的時尚愛美女性;第二類用戶群體可能是25-40的居家帶娃女性;第三類用戶群體可能是偏好貴金屬投資的土豪群體;第四類可能是愛好旅游的文藝青年;第五類可能是偏好大牌的富人群體;第六類可能是鍾愛寶寶的白富美;第七類可能是熱愛運動的女青年;第八類可能是熱衷手工和養身的動手達人。(媽呀,編不下去了 = =)

 

  這個粒度還是比較粗的,因為同一個商品類別里面的商品的價格和風格也不一樣,經常買LV的和買coach的人明顯不是一個消費水平的,買coach的和買達芙妮的也不是一個消費水平。如果是以品牌為維度的話,再加上年齡、性別、其他的消費幾率等等,因該就可以很容易看出各類用戶群體的偏好了,這里寫KL散度在用戶畫像中的應用只是一個引子,其實KL散度還有很多其他的應用,例如文檔之間的相似度計算,推薦系統之間的應用等等,具體的怎么應用可以結合實際業務可以把KL散度的價值發揮的更好。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM