天天看點

巧用Python搭建你的使用者價值模型

前言

最近在做一個使用者評分模型的項目,這個模型的目的就是用來判斷使用者的價值。希望通過各種名額來給使用者綜合打分,每個使用者最後會得到一個分值,分值越高,說明使用者的價值越高。這是一個總的目标,一個使用者可以創造的價值由兩部分決定:創造價值的能力和創造價值的意願,前者是能不能的問題、後者是願不願意的問題。定了兩個主線以後再次進行目标拆解,根據業務經驗分别找到那些能夠判斷使用者創造價值的能力和意願的名額,然後給不同的名額賦予不同的權重/分值,最後将各名額的權重/分值相加就是使用者最後的總得分。

上面的這個過程有兩個關鍵步驟,一個是選擇合适的名額,另一個是給不同的名額賦予不同的權重,關于名額的選取,這個根據業務經驗直接拍腦袋就可以,但是這個不同名額的權重問題,可能直接拍腦袋就不是太好了,當然了,也不是不可以。不過,做資料是一個嚴謹的工作(咳咳咳),還是希望能夠找到一套理論來代替拍腦袋,是以就在網上找啊找,終于找到了今天的主角,就是AHP。

AHP介紹

先來看看比較官方的解釋:

AHP(Analytic Hierarchy Process-解析階層的過程)又叫層次分析法,是一種定性與定量相結合的分析方法,是一種将決策者對複雜系統的決策思維過程模型化、數量化的過程。

是不是有點看不太明白,我來說幾句大白話讓你了解了解。讓我們與前言裡面的内容對應一下,AHP其實就是一種把複雜問題通過定性(人為去判斷各名額之間的重要性)與定量(再通過計算判斷矩陣求出各名額權重)的方法進行拆解成若幹個小問題以及小名額的問題,并能夠計算出各個小問題以及小名額對整個大目标的影響程度。

巧用Python搭建你的使用者價值模型

來看張圖,你就更清楚了,這張圖正好可以表達我在前言裡面說到的東西。我們的最終目标就是要确定每個使用者的一個使用者價值,那麼我們可以把這個目标進行拆解,首次拆解成購買忠誠度和消費能力這兩個小問題,進而再對這兩個小問題進行拆解,分别得到下面的各個名額,這其實就是一個定性的過程(問題拆解,名額拆解都是需要我們依據業務經驗,人為去指定),至于各問題和各名額的權重計算就是一個定量過程,其實AHP主要是做定量這一部分。

AHP流程

知道了AHP是什麼以後,我們來具體看看AHP的一個具體流程。

  • 明确問題
  • 問題及名額拆解
  • 建立名額兩兩判斷矩陣
  • 層次單排序
  • 層次總排序

1.明确問題

就是首先你要确定你要解決什麼問題,我們這裡就是要建構使用者價值模型,希望通過這個模型看出每個使用者的一個價值,然後依據價值不同給與不同的營運政策。

2.問題及名額拆解

将搭建使用者價值模型這個總目标拆解成使用者購買忠誠度以及使用者消費能力兩部分,然後再對這兩部分進行名額拆解,就是上面圖表中看到的各名額。

3.構造判斷矩陣

所謂的判斷矩陣就是将任意兩名額進行對比得出一個重要性結果,然後将這個結果以矩陣的形式進行呈現,其中重要程度差别等級如下:

标度 含義
1 表示兩個名額相比,具有同樣的重要性
3 表示兩個名額相比,前者比後者稍重要
5 表示兩個名額相比,前者比後者明顯重要
7 表示兩個名額相比,前者比後者極其重要
9 表示兩個名額相比,前者比後者強烈重要
2,4,6,8 表示上述兩名額判斷結果的中間值,比如2是介于1和3之間的

數值越大,表示前者比後者越重要;名額A和名額B判斷結果與名額B與名額A和名額B判斷結果互為倒數,即當名額A比名額B的重要程度是3的時候,那麼名額B比名額A的重要程度就是3的倒數,即1/3。

不知道你有沒有注意到,其實上面的這種方法也有一定的主觀判斷(拍腦袋),比如兩名額之間的稍微重要,明顯重要,極其重要也是需要你人為去指定的,你可能會疑問,既然都是拍腦袋,那還要這個幹啥,直接拍腦袋不久得了,還搞這麼複雜幹嘛,哈哈哈,關于好處接下來會講到。

判斷矩陣A構造出來了,我們就可以開始計算各名額對目标問題的影響程度(即各名額的權重值)。

3.1各名額權重計算步驟:

  • 将矩陣A的每一列向量歸一化
  • 對歸一化後的矩陣按行求和,得到一列值
  • 對上述求和的一列值再次進行歸一化得到矩陣w
  • 計算最大特征根

注意:這裡的歸一化隻是把每一列的值的和當作1,然後計算每一個值在1中的占比。

巧用Python搭建你的使用者價值模型

(因為公衆号對公式支援太差了,是以隻能使用截圖了)

上述步驟中歸一化後得到的矩陣w就是各個名額的權重情況,這個權重是根據我們主觀上構造的判斷矩陣的出來的,但是這個權重是否準确,還是有待确定的,為什麼要去确定呢,因為判斷矩陣很有可能得出的互相沖突的結論,比如說A名額重要性大于B名額,B名額重要性大于C名額,但是A名額重要性又小于C名額重要性,這種互相沖突的結論。AHP就可以避免這種沖突的發生。這裡需要引入AHP中的另一個概念一緻性檢驗,用來判斷矩陣是否一緻。

3.2一緻性檢驗的步驟如下:

  • 根據判斷矩陣計算最大特征根
  • 計算一緻性名額CI
  • 根據n的值(名額的數量)找出随機一緻性名額RI
  • 計算一緻性比率CR=CI/RI,當CR<0.1時,不一緻性程度在容許範圍内,即各名額的重要性程度不存在上述互相沖突的情況,可以使用。
巧用Python搭建你的使用者價值模型

如果一緻性比率符合使用條件,則可以直接使用計算出的各名額的權重值,如果不符合,則需要重新構造判斷矩陣。

4.層次單排序

就是對單一層次計算權重情況,比如使用者價值模型總目标的下一層就是使用者忠誠程度和使用者消費能力的權重情況。使用者忠誠程度:使用者消費能力=0.67:0.33。而使用者忠誠程度和使用者消費能力的下一層就是各個更加細緻的名額。

5.層次總排序

層次總排序就是将各個層次的權重值相乘,最後就得到了各個名額的權重情況,就是層次總排序。

AHP執行個體

還是以前面說到使用者價值模型為例,走一遍完整的流程。這裡我們計算使用者忠誠度的AHP,因為隻有三個名額及以上才會出現那種互相沖突的情況,兩個名額是不會出現的,兩個名額的話直接人為指定權重占比就可以。具體計算過程,大家可以參考上面的截圖。

1.構造判斷矩陣

1.1構造第一層次的判斷矩陣

最近購買間隔 購買頻率 購買商品種類
最近購買間隔 1 1/6 1/2
購買頻率 6 1 3
購買商品種類 2 1/3 1

1.2計算各名額權重

将判斷矩陣的每一列進行歸一化得出下方的矩陣:

1/9 1/9 1/9
6/9 6/9 6/9
2/9 2/9 2/9

對歸一化後的矩陣的每一行進行求和運算:

3/9
18/9
6/9

将上述求和的得到的矩陣再次進行歸一化得到矩陣w:

0.11
0.67
0.22

該矩陣就表示了各名額的權重情況,最近購買間隔占比占比為0.11,購買頻率占比0.64,購買商品種類占比0.24。

計算最大特征根:

在計算最大特征根我們需要先計算Aw值,Aw計算是将判斷矩陣A與歸一化得到的矩陣w相乘(公衆号不支援公式,很煩),最後得到Aw值:

0.33
1.98
0.66

再進行計算最大特征根:1/3*(0.33/0.11+1.98/0.67+0.66/0.22)=3

1.3一緻性檢驗

計算一緻性名額CI:(3-3)/(3-1)=0

根據名額數量n選擇名額RI:這裡n=3,是以RI=0.58

計算一緻性比率CR=CI/RI=0<0.1符合,是以使用者忠誠度的各名額權重值w矩陣可用。

1.4層次單排序

因為總目标隻拆解成了兩個小問題,是以這裡直接人為指定權重即可(使用者忠誠度:使用者消費能力=0.67:0.33),不需要進行一緻性檢驗。

使用者忠誠度拆解的名額有三個,需要進行一緻性檢驗,且經過檢驗後符合CR<0.1的條件,是以使用者忠誠度名額中各名額權重為:最近購買間隔占比占比為0.11,購買頻率占比0.64,購買商品種類占比0.24。

使用者消費能力拆解的名額也隻有兩個,直接人為指定權重即可。

1.5層次總排序

最後将各層次的權重相乘就是每個名額的權重占比。

名額 計算 最後權值
最近購買間隔 0.67*0.11 0.07
購買頻率 0.67*0.67 0.45
購買商品種類 0.67*0.22 0.15
平均每次消費額 0.33*0.67 0.22
單次最高消費額 0.33*0.33 0.11

最後的層次以及權值分層圖:

巧用Python搭建你的使用者價值模型

1.6進行評分

最後将每個名額縮小到0-10的範圍(不一定縮小到0-10,但是必須把每個名額縮小到相同大小範圍内),然後乘各名額所占權重,最後相加,就是每個使用者的總價值得分。

使用者 最近購買間隔 購買頻率 商品種類 平均每次消費額 單詞最高消費額 價值得分
使用者A 3 5 2 5 9 4.85
使用者B 2 1 2 3 5 3.50