数据处理:非搜索场景下的列表应该如何排序呢?
了解综合排序的使用场景以及与个性化推荐的区别;了解综合排序的影响因子以及常见的排序方法;基于业务需求对列表中的字段进行排列,辅助决策。
《数据处理之搜索如何命中》中说到了搜索结果的排序其实是对文本数据和业务数据得分的计算,那么对于非搜索场景下的列表应该如何排序呢?
有两种排序方式:单一维度排序;综合排序。单一维度排序就是将所有的内容按照某一维度进行排序,比较简单不再赘述,主要说一下综合排序。
一、定义
综合排序就是综合数据的多个维度进行排序,以搜索数据表为例,综合排序涉及数据表的上传时间、查看次数、更新周期、被搜索次数、热度等维度,每个维度都有相应的权重值,通过一定的公式计算出每个物品的“得分”进行降序排列。
二、使用场景
用于展示具有一定量级的数据且数据有多个指标维度,需要将某些高质量的数据突出展示,可使用综合排序,为每个维度值赋予一定权重。
用于展示搜索结果,需要根据命中字段、时间、搜索次数等维度进行综合排序。
可搭配多个单个维度排序规则使用。
Q:综合排序与个性化推荐的区别,可否用个性化排序代替综合排序?
A:个性化推荐需要大量的数据,需要对用户、数据进行建模并不断训练优化,因此对于有限数量(几百至几千)的结果展示,可采用综合排序的方法,将优质内容推荐给用户,同时也大大降低了开发成本。
关于个性化推荐:
个性化推荐是根据用户的兴趣、特点和行为,向用户推荐用户感兴趣的信息和内容。在个性化推荐系统中,需要基于用户的基本信息和行为对用户进行建模,同时基于物品的特征和信息对物品进行建模,将两者进行匹配筛选,找到用户可能感兴趣的推荐物品,最后推荐给用户。
常用的个性化推荐方法有:
① 基于内容推荐:分析用户看过的内容(历史内容等 )再进行推荐;
② 基于用户的协同过滤(UserCF):给用户推荐和他兴趣相似的其它用户喜欢的内容;
③ 基于物品的协同过滤(ItemCF):给用户推荐和他之前喜欢的物品相似的物品;
④ 基于标签的推荐:内容有标签,用户也会因为用户行为被打上标签,通过给用户打标签或是用户给产品打标签为其推荐物品。
除此之外,还有隐语义模型推荐(LFM)、社会化推荐、根据时间上下文推荐、基于地理位置的推荐(LARS)等方法,各种推荐算法是可以叠加在一起的,根据不同算法的权重调整,给用户最为精准智能的推荐。
三、排序方法
提供两种排序方法:多维度分别单一排序;按总分值进行排序。
1. 多维度分别单一排序
定义:为每个维度定义排序方式(升序or降序),当A维度相同的情况下,按照B维度排序,若此时B维度相同,再按照C维度排序….直到最后一个维度,如果还相同,这时候就要看是随机排序,还是按照唯一不重复的值进行排序。
使用场景:
- 适合维度较少,或者场景不复杂的情况;
- 适用于维度对结果影响非常明显的情况;
- 需要排序的维度之间重要程度有明显的不同。(若不同维度之间并没有绝对的谁比谁重要的关系,不适合用此排序方式)
2. 按总分值进行排序
将多个不同维度(不同单位)的因素综合到一起的方式有很多,比较常用和简单的就是普通线性加权。(一般需要和pm一起确定因子和权重)
(1)普通线性加权
普通线性加权是将维度赋予一定的权重,然后将不同的维度乘以各自的权重再进行累加,如下样式:
总分=维度A*维度A权重 +维度B*维度B权重 + 维度C*维度C权重 +……+维度N*维度N权重
举例:当我们在某平台购买东西时,物品排序受到浏览量、成交量和价格的影响,赋予一个权重值,浏览量:1分、成交量4分、价格5分。
那么 各个物品的得分=浏览量*1+成交量*4+价格*5;排序为:A>B>C
如果按照这个公式进行计算的话,会出现问题。首先我们期望价格越低越好,而通过这个公式计算价格越高,得分越高排名越靠前,显然这是不对的。
问题出在哪呢?没有归一化
(2)归一化加权
归一化加权是将维度值进行细分,从产品业务角度出发赋予不同的系数,也是最通用的一种方法,样式如下:
总分=(维度A权重*归一化的系数值a) + (维度B权重*归一化的系数值b)+ …… + (维度N权重*归一化的系数值n)
关于如何定义各维度的归一化系数值,提供以下几种方法供使用:
方法一:按照阶梯分段进行处理
以浏览量为例:
- 当浏览量小于100时定义系数为0.1,
- 浏览量100~500时定义系数为0.2,
- 浏览量500~1000时定义系数为0.3,
- ……浏览量越高,系数越高(小于等于1)。
当浏览量特别多的时候,如10万,此时数量已经不那么重要了,可以将超过10万的浏览量的系数定义为0.9。有时候为避免马太效应,甚至可以将系数降低,给予一定的惩罚(涉及到降权)。
方法二:按照百分比进行处理
仍以浏览量为例:
- 将浏览量由小到大进行排序,前5%的系数为0.1
- 5%-10%的系数是0.2;
- 10%-20%的系数是0.3;
- 20%-30%的系数是0.4
- ……
方法三:按照线性函数转化处理(线性归一化)
系数=(A-min)/(max-min),将数据值映射到[0, 1]之间。
这种处理方法的缺点是若数值集中且某个数值很大,归一化后各值接近于0,并且将会相差不大,(如 1, 1.2, 1.3, 1.4, 1.5, 1.6,50)这组数据。当有新数据加入时,会导致max和min的变化,需要重新定义。
方法四:按照对数进行处理
这个方法很适合处理极值,经常用在数据分化比较大的场景,有些数值很大,有些很小。这里一般使用Y=a*log10(X)+b的形式,通过调整a与b来根据数据调整曲线。
四、优化调整
给定初步的权值之后可以进行灰度(甚至直接上线),根据实际结果不断调整系数和权重值,在产品的发展过程中,也需要根据各阶段的侧重点的不同来调节权重和系数。
作者:墨白,公众号:UED_family
本文由 @墨白 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
赞👍归一化我记得数值分析代数等等用得太多了