基于朴素贝叶斯分类器的商品排序
问题背景
在某电商APP的首页滚动 Banner 下面有个9块9模块,进入后就是小编每天精挑细选出来的约 200 多个商品,价格在9.9至49.9之间。
如何对 200 多个商品排序,使得用户感兴趣的商品排在前面,提高99模块的点击率?
分析问题
需要将用户感兴趣的商品排在前面,需要解决以下问题:
- 如何定义用户对商品感兴趣?
- 如何量化用户对商品的感兴趣程度,即如何对商品进行排序?
- 如何解决用户冷启动?
- 如何处理用户对9块9模块出现的新商品兴趣?
定义感兴趣
用户在逛9块9模块时,对列表中的商品会有以下5种行为:
- 浏览(PV)
- 点击(CLICK)
- 收藏(FAV)
- 加购(CART)
- 下单(ORDER)
这里,我们认为用户PV过商品,如果对商品有过CLICK、FAV、CART或ORDER,则认为用户对商品感兴趣。并且,从 CLICK 到 ORDER,用户对商品的感兴趣的程度越来越强。
量化感兴趣程度
用户对商品的态度,可以表示为2类,即感兴趣和不感兴趣:
$$态度 \in \{ 感兴趣,不感兴趣 \}$$
如果用 $C$ 表示用户的态度,用 $C_{0}$ 表示 感兴趣,用 $C_{1}$ 表示 不感兴趣,则形式化表达
$$C \in \{C_{0}, C_{1}\}$$
如果用 $U$ 表示用户,用 $I$ 表示商品,则基于 贝叶斯分类器 ,商品排序问题可以表示为
$$
\begin{eqnarray}
P(C_{0}|U, I)
\end{eqnarray}
$$
即对于用户 $U$ 和 商品 $I$,用户 $U$ 对商品 $I$ 感兴趣 $C_{0}$ 的概率是多少。
对 如何解决用户冷启动 和 如何处理用户对9块9模块出现的新商品兴趣 2个问题后续讨论。
商品排序
朴素贝叶斯分离器
我们对用户建立 User Profile
,可以获取的用户特征有 性别、手机操作系统、手机品牌、地域等。而在 9块9 模块的商品,属性信息一般有 品牌、价格、类目 等。形式化用户和商品的特征可表示为:
$U: (U_{0}, U_{1}, \dots, U_{m}).$
$I: (I_{1}, I_{1}, \dots, I_{n}).$
这里假设用户的各个特征相互独立,商品的各个特征相互独立,以及用户的特征和商品的特征相互独立,则基于朴素贝叶斯分离器,商品排序问题可以表示为
$$\begin{eqnarray}
P(C_{0}|U_{0}, U_{1}, \dots, U_{m}, I_{1}, I_{1}, \dots, I_{n})
\end{eqnarray}$$
对公式 (1) 和 (2) 进行计算
$$
\begin{eqnarray}
P(C_{0}|U, I) & = & P(C_{0}|U_{0}, U_{1}, \dots, U_{m}, I_{1}, I_{1}, \dots, I_{n}) \\
{} & = & \frac{P(C_{0}) \cdot P(U_{0}, U_{1}, \dots, U_{m}, I_{1}, I_{1}, \dots, I_{n}|C_{0})}{P(U_{0}, U_{1}, \dots, U_{m}, I_{1}, I_{1}, \dots, I_{n})} \\
{} & \approx & P(C_{0}) \cdot P(U_{0}, U_{1}, \dots, U_{m}, I_{1}, I_{1}, \dots, I_{n}|C_{0}) \\
{} & = & P(C_{0}) \cdot \prod_{i=1}^{m}P(U_{i}|C_{0}) \cdot \prod_{j=1}^{n}P(I_{j}|C_{0})
\end{eqnarray}
$$
在公式 (6) 中,$P(C_{0})$ 表示用户对 9块9 模块商品的感兴趣概率,$P(U_{i}|C_{0})$ 而表示具有特征 $U_{i}$ 的用户对 9块9 模块商品感兴趣概率,$P(I_{j}|C_{0})$ 表示具有特征 $I_{j}$ 的商品被用户感兴趣的概率是多少。
统计特征概率计算
如果公式 (6) 中各项能够计算出来,那么就能够计算出用户对商品的感兴趣程度,就可以进行排序了。
计算 $P(C_{0})$
$P(C_{0})$ 表示用户对 9块9 模块商品的感兴趣概率。用户在逛9块9模块时,对列表中的商品会有5种行为:PV、CLICK、FAV、CART或ORDER。
如果只考虑PV和CLICK两种行为,假如用户PV过商品 $I_{1}$ ,并且 CLICK 过商品 $I_{1}$,则认为用户对商品 $I_{1}$ 感兴趣,如果用户PV过商品 $I_{2}$ ,没有 CLICK 过商品 $I_{2}$,则认为用户对商品 $I_{2}$ 不感兴趣。假设用户PV过 $t_{1}$个商品,CLICK过 $t_{2}$ 个商品,则
$$P(C_{0}^{click}) = \frac{t_{2}}{t_{1}}$$
同样,如果只考虑PV和FAV两种行为,或者PV和CART两种行为,或者PV和ORDER两种行为,均分别可以计算出用户对 9块9 模块商品的感兴趣概率。但是,从CLICK到ORDER,用户对商品的兴趣程度越来越强烈。因此,可以用不同的权重表示不同行为计算出来的概率。
$$W = (w_{click}, w_{fav}, w_{cart}, w_{order}).$$
计算 $P(U_{i}|C_{0})$
$P(U_{i}|C_{0})$ 表示具有特征 $U_{i}$ 的用户对 9块9 模块商品感兴趣概率。如果只考虑CLICK行为,并认为用户CLICK过商品,则表示用户对该商品感兴趣,假设9块9模块商品被点击的次数为 $t_{1}$,而具有特征 $U_{i}$ 的用户点击次数为 $t_{2}$,则
$$P(U_{i}|C_{0}^{click}) = \frac{t_{2}}{t_{1}}.$$
同样,考虑FAV行为,或者CART行为,或者ORDER行为,也可以计算出不同的概率值。
计算 $P(I_{j}|C_{0})$
$P(I_{j}|C_{0})$ 表示具有特征 $I_{j}$ 的商品被用户感兴趣的概率。如果只考虑CLICK行为,并认为用户CLICK过商品,则表示用户对该商品感兴趣,假设9块9模块商品被点击的次数为 $t_{1}$,而具有特征 $I_{j}$ 的商品点击次数为 $t_{2}$,则
$$P(I_{j}|C_{0}^{click}) = \frac{t_{2}}{t_{1}}.$$
同样,考虑FAV行为,或者CART行为,或者ORDER行为,也可以计算出不同的概率值。
用户对商品的感兴趣概率
在计算完以上统计特征概率后,就可以计算出用户对商品的感兴趣概率,就可以对商品排序。用户对商品的感兴趣概率为
$$\begin{eqnarray}
P(C_{0}|U, I) & = & \sum_{b \in \{click, fav, cart, order\}}w_{b} \cdot P(C_{0}^{b}|U, I) \\
{} & \approx & \sum_{b \in \{click, fav, cart, order\}}w_{b} \cdot P(C_{0}^{b}) \cdot \prod_{i=1}^{m}P(U_{i}|C_{0}^{b}) \cdot \prod_{j=1}^{n}P(I_{j}|C_{0}^{b})
\end{eqnarray}$$
用户冷启动和新品问题
在公式 (8) 中,根据历史行为数据,可统计得到各个特征值的概率。新用户的特征概率,使用的是特征用户群的特征值概率,可以解决用户冷启动问题。
类似的,对于新品,在公式 (8) 中使用的是特征商品群的特征值概率,作为指定商品的特征值概率,可以解决新品问题。
商品排序模型问题
特征独立
在基于朴素贝叶斯分离器的模型中,假设用户的各个特征相互独立,商品的各个特征相互独立,以及用户的特征和商品的特征相互独立。因此,在公式 (8) 中,并没有考虑特征之间的关系。
特征权重
在基于朴素贝叶斯分离器的模型中,假设了用户的每个特征和商品的每个特征,对最终的感兴趣程度影响力相同,没有考虑不同特征的重要程度差异。
概率相乘
在公式 (8) 中,计算用户对商品的感兴趣概率,公式中用户和商品的各个统计特征概率相乘,因为概率值范围在 $[0, 1]$,因此,当特征选取较多时,相乘的结果将非常小。
总结
本文讲述了基于朴素贝叶斯分离器的商品排序模型,定义了用户对商品的感兴趣模型,并进行量化,计算得到用户对商品的感兴趣概率,然后基于概率值进行排序。基于朴素贝叶斯分离器的商品排序模型,考虑了用户不同行为对商品的感兴趣强弱,对用户冷启动和新品问题,通过拔高到特征群组,使用了特征群组的概率值进行计算。
基于朴素贝叶斯分离器的商品排序模型没有考虑用户特征和商品特征的相互关系,特征权重。