临摹产品产品经理@产品

个性化推荐太遥远,那列表综合排序该怎么做?

2017-09-05  本文已影响1356人  c67a5dea0ca4

移动互联网的app,老板们都不知道信了哪里的邪魔歪道,总觉的自家的app不做点社区,不做个积分体系,不来个个性化推荐就真不是在做产品了…

但是数据量没有千万,谈个性化推荐真的是痴心妄想,推荐是需要训练的,没有数据何来推荐??

有时想想,也怪不得每个老板心里都有一个个性化推荐的梦,毕竟今日头条仅凭算法,feed流中的广告做到个性化推荐,去年的年收入超过60亿,不眼红都不行!!

列表综合排序

吐槽完毕,说正事,个性化推荐或许还太遥远,但一个列表通过综合排序将优质的内容推荐给用户,还可以做到的。

下面来讲讲综合排序。

什么是综合排序?

举个栗子,我们逛淘宝输入“栗子”,会出来一堆的东西,我们看到的是一个列表页面

淘宝“栗子”

如果我们点击“按价格排序”,那么我们就选中了一个维度,按照这个维度,将所有的结果进行了降序排序。

按价格倒序排序

而综合排序就是综合的多个维度,例如

· 广告维度(卖家买了广告位,买了直通车,当然放前面了)

· 活动维度(参加了双11的卖家,排名自然靠前)

· 宝贝价格

· 宝贝销量

· 店铺信誉

· 上架时间

· 热度(可能和页面PV,或收藏等有关,这里脑洞举例下,没有考察过)

等等

综合排序是如何做到将多个维度综合最终得出排序的呢?

排序的可以简单的分为两种

1. 多维度分别单一排序

2. 按总分值进行排序

1.多维度分别单一排序

即按照A维度降序或升序排序(以下均假设为降序);

当A维度相同的情况下,再按照B维度降序排序;

当B维度相同的情况下,再按照C维度降序排序;

……

依次直到最后一个维度,如果还相同,这时候就要看是随机排序,还是按照唯一不重复的值进行排序。

这样下来,我们就得到的一个排序的结果了。

这种排序适合维度对结果影响非常明显的情况,或者维度较少的情况。

例如淘宝中按照价格进行降序排序,这时候维度仅仅是价格吗?

价格相同的拍排序

肯定不是,当价格相同的时候,如何排序?

假设取的是上架时间排序,上架时间越晚,排的越前(仅脑洞下);

当上架时间又一样怎么办?

再脑洞下,上架时间也相同时,按产品的ID倒序排序,因为产品的ID一定是不同的。

这样就完成了按价格排序。

上述的多维度分别单一排序仅适合维度较少,或者场景不复杂的情况。

但维度一多的时候,特别是不同维度之间并没有绝对的我比你重要,你比他重要的关系,用多维度单一排序就非常不合适了。

2.按总分值排序

为了解决上述的问题,一般都采用按总分值进行排序。

即将维度赋予一定的权重,然后将不同的维度乘以权重再进行乘积或者累加。

总分=维度1*权重1 +或* 维度2*权重2 +或* 维度3*权重3 +或*……+或*维度N*权重N

不太好理解?别急,我们再举一个栗子

我们假设我们现在在使用在行的产品,我们要对在行上的专家进行排序。

(以下都是仅为了方便说明的脑洞,实际并非这种排序)

在行的综合排序

脑洞维度如下:

· 最近两周的预约该专家的人数

· 行家提供的服务历史购买人数

· 行家提供的服务的价格

· 服务的收藏人数

我们假设总分是60分

· 最近两周预约该专家的人数占权重20分

· 历史购买人数占权重20分

· 专家提供的服务的价格占权重5分

· 转发服务的收藏数占权重15分

那么一个行家的某个服务的分数=(最近两周预约该专家的人数)*15+(历史购买人数)*20+(专家提供的服务的价格)*5+(转发服务的收藏数)*15

桥到吗太…

如果按照上面的公式,直接进行计算的话,会出现问题。例如不同专家的价格不同,我们实际想要的是价格越便宜,那么排名越前。但是如果直接乘以价格,价格设的越高,分值越大,显然有问题。

这是为什么?

因为没有归一化处理啊,没有对比就没有伤害,为了排序,我们需要对比下。

对维度进行细分,给予不同的系数

拿两周预约该专家的人数这个维度来说,我们常用的处理的方式可以是


1)按照阶梯分段进行处理

例如

我们将0-300元划分为一个阶段,系数是1.0

300-500元,系数是0.8;

500以上,系数是0.6。

这样,我们对价格就能进行划分

2)按照百分比进行处理

例如将价格进行正序排序,前15%的系数是1.0

15%-50%的系数是0.8;

50%-100%的系数是0.6。

3)按照线性函数转化处理

公式=(A-min)/(max-min)

这样处理后,每个价格A都能得到一个百分比的值,价格越便宜,系数就越低,但这和我们的期望不符,需要再对公式根据业务需求进行调整。

4) 按照对数进行处理

取log(A),也是一种将数值进行归一化处理的方式

5)按照公式进行处理

上述的线性函数转化和对数的处理,一般并不能直接得出结果,所以需要在基础上对公式进行处理;或者业务需要的曲线是对数函数,幂函数等,这时候就需要取相应的公式将值进行转化。

这里补充下,如果你是像我一样数学一般的话,那么多列出几组数据,再利用excel画出图表,通过图表自动生成趋势线和公式,这样就能快速的找到自己想要的公式了。

所以,最终公式

一个行家的某个服务的分数=(最近两周预约人数的系数)*15+(历史购买人数的系数)*20+(专家提供的服务的价格的系数)*5+(转发服务的收藏数的系数)*15

如果我们换一个角度去思考,我们会发现,我们的所谓系数实际可能看成是另一个小的总分,总分内的不同情况下对应的系数,实际也就是不同的小维度,系数值就是权重

这样一想的话,系数下面可以再内嵌系数,内嵌的系数再内嵌下一个系数。公式就能按照业务的需要进行非常灵活的处理了。

例如还是刚刚行家的价格,我们可以取得前15%的行家价格,按照某个公式进行取分得出系数,15%-50%还是直接赋值0.8,50%-100%的再按照另外一个公式计算取得系数值。

综上,按总分值进行排序的,可以简单的理解为

总分=(维度A权重*归一化的系数值a) + or *  (维度B权重*归一化的系数值b)+ or * …… + or *(维度N权重*归一化的系数值n)

以上就是综合排序的两种方式

1. 多维度分别单一排序

2. 按总分值排序

另外,值得一提的是,威尔逊算法(听起来很高大上)是一种常用来对用户投票的内容进行排序的方法,也属于总分值排序;

知乎目前采用的正是这种算法。

但初期知乎采用的却是非常简单的赞同比排序,这种排序会导致一个很明显的问题

例如

A回答的点赞是50个,反对是2个,赞同比例96%;

B回答的点赞是2个,反对0个,赞同比例100%;

如果纯粹按照赞同比例进行排序的话,那么B回答就会在A前面,这显然不是我们希望的结果。

而威尔逊算法解决了这个问题。

威尔逊算法下的分值

由于目前我自己也没研究透,和这个主题相关且很实用,顺带分享下,点这里查看威尔逊算法

就先不装逼了,等我研究透了再写个文章细说下,逃了逃了…

#推荐阅读#

《微信、QQ、新浪微博等第三方登录,你想知道的都在这了》

《5千字干货——解决手机号二次使用导致的帐号问题》

上一篇下一篇

猜你喜欢

热点阅读