美文网首页临摹产品产品经理@产品
个性化推荐太遥远,那列表综合排序该怎么做?

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

作者: c67a5dea0ca4 | 来源:发表于2017-09-05 01:05 被阅读1356次

    移动互联网的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千字干货——解决手机号二次使用导致的帐号问题》

    相关文章

      网友评论

      • 清风抚书扉:目前正在设计中,就是这个归一化处理,卡住了好久。感谢分享!
      • IronMan_40db:很实在!什么推荐系统再加上各种算法,简直不是一般产品能搞懂的。
        c67a5dea0ca4:@IronMan_40db 先从简单的做起😚

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

      本文链接:https://www.haomeiwen.com/subject/sfdyjxtx.html