Py学习  »  Python

巧用Python搭建你的用户价值模型

数据分析1480 • 5 年前 • 314 次点击  

还没关注?

快动动手指!

前言


最近在做一个用户评分模型的项目,这个模型的目的就是用来判断用户的价值。希望通过各种指标来给用户综合打分,每个用户最后会得到一个分值,分值越高,说明用户的价值越高。这是一个总的目标,一个用户可以创造的价值由两部分决定:创造价值的能力和创造价值的意愿,前者是能不能的问题、后者是愿不愿意的问题。定了两个主线以后再次进行目标拆解,根据业务经验分别找到那些能够判断用户创造价值的能力和意愿的指标,然后给不同的指标赋予不同的权重/分值,最后将各指标的权重/分值相加就是用户最后的总得分。


上面的这个过程有两个关键步骤,一个是选择合适的指标,另一个是给不同的指标赋予不同的权重,关于指标的选取,这个根据业务经验直接拍脑袋就可以,但是这个不同指标的权重问题,可能直接拍脑袋就不是太好了,当然了,也不是不可以。不过,做数据是一个严谨的工作(咳咳咳),还是希望能够找到一套理论来代替拍脑袋,所以就在网上找啊找,终于找到了今天的主角,就是AHP。


AHP介绍


先来看看比较官方的解释:


AHP(Analytic Hierarchy Process-解析阶层的过程)又叫层次分析法,是一种定性与定量相结合的分析方法,是一种将决策者对复杂系统的决策思维过程模型化、数量化的过程。


是不是有点看不太明白,我来说几句大白话让你理解理解。让我们与前言里面的内容对应一下,AHP其实就是一种把复杂问题通过定性(人为去判断各指标之间的重要性)与定量(再通过计算判断矩阵求出各指标权重)的方法进行拆解成若干个小问题以及小指标的问题,并能够计算出各个小问题以及小指标对整个大目标的影响程度。



来看张图,你就更清楚了,这张图正好可以表达我在前言里面说到的东西。我们的最终目标就是要确定每个用户的一个用户价值,那么我们可以把这个目标进行拆解,首次拆解成购买忠诚度和消费能力这两个小问题,进而再对这两个小问题进行拆解,分别得到下面的各个指标,这其实就是一个定性的过程(问题拆解,指标拆解都是需要我们依据业务经验,人为去指定),至于各问题和各指标的权重计算就是一个定量过程,其实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中的占比。


(因为公众号对公式支持太差了,所以只能使用截图了)


上述步骤中归一化后得到的矩阵w就是各个指标的权重情况,这个权重是根据我们主观上构造的判断矩阵的出来的,但是这个权重是否准确,还是有待确定的,为什么要去确定呢,因为判断矩阵很有可能得出的相互矛盾的结论,比如说A指标重要性大于B指标,B指标重要性大于C指标,但是A指标重要性又小于C指标重要性,这种互相矛盾的结论。AHP就可以避免这种矛盾的发生。这里需要引入AHP中的另一个概念一致性检验,用来判断矩阵是否一致。


3.2一致性检验的步骤如下:

  • 根据判断矩阵计算最大特征根

  • 计算一致性指标CI

  • 根据n的值(指标的数量)找出随机一致性指标RI

  • 计算一致性比率CR=CI/RI,当CR<0.1时,不一致性程度在容许范围内,即各指标的重要性程度不存在上述互相矛盾的情况,可以使用。



如果一致性比率符合使用条件,则可以直接使用计算出的各指标的权重值,如果不符合,则需要重新构造判断矩阵。


4.层次单排序

就是对单一层次计算权重情况,比如用户价值模型总目标的下一层就是用户忠诚程度和用户消费能力的权重情况。用户忠诚程度:用户消费能力=0.67:0.33。而用户忠诚程度和用户消费能力的下一层就是各个更加细致的指标。


5.层次总排序

层次总排序就是将各个层次的权重值相乘,最后就得到了各个指标的权重情况,就是层次总排序。


AHP实例


还是以前面说到用户价值模型为例,走一遍完整的流程。这里我们计算用户忠诚度的AHP,因为只有三个指标及以上才会出现那种互相矛盾的情况,两个指标是不会出现的,两个指标的话直接人为指定权重占比就可以。具体计算过程,大家可以参考上面的截图。


1.构造判断矩阵

1.1构造第一层次的判断矩阵



最近购买间隔购买频率购买商品种类
最近购买间隔11/61/2
购买频率61 3
购买商品种类21/31

1.2计算各指标权重

将判断矩阵的每一列进行归一化得出下方的矩阵:


1/91/91/9
6/96/96/9
2/92/92/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.110.07
购买频率0.67*0.670.45
购买商品种类0.67*0.220.15
平均每次消费额 0.33*0.670.22
单次最高消费额0.33*0.330.11
最后的层次以及权值分层图:

1.6进行评分

最后将每个指标缩小到0-10的范围(不一定缩小到0-10,但是必须把每个指标缩小到相同大小范围内),然后乘各指标所占权重,最后相加,就是每个用户的总价值得分。


用户最近购买间隔购买频率商品种类平均每次消费额单词最高消费额价值得分
用户A35 2594.85
用户B212353.50


每天进步一点点:数据分析1480

长按扫码关注我

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29342
 
314 次点击