數據處理:非搜索場景下的列表應該如何排序呢?
了解綜合排序的使用場景以及與個性化推薦的區別;了解綜合排序的影響因子以及常見的排序方法;基于業務需求對列表中的字段進行排列,輔助決策。
《數據處理之搜索如何命中》中說到了搜索結果的排序其實是對文本數據和業務數據得分的計算,那么對于非搜索場景下的列表應該如何排序呢?
有兩種排序方式:單一維度排序;綜合排序。單一維度排序就是將所有的內容按照某一維度進行排序,比較簡單不再贅述,主要說一下綜合排序。
一、定義
綜合排序就是綜合數據的多個維度進行排序,以搜索數據表為例,綜合排序涉及數據表的上傳時間、查看次數、更新周期、被搜索次數、熱度等維度,每個維度都有相應的權重值,通過一定的公式計算出每個物品的“得分”進行降序排列。
二、使用場景
用于展示具有一定量級的數據且數據有多個指標維度,需要將某些高質量的數據突出展示,可使用綜合排序,為每個維度值賦予一定權重。
用于展示搜索結果,需要根據命中字段、時間、搜索次數等維度進行綜合排序。
可搭配多個單個維度排序規則使用。
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協議
贊??歸一化我記得數值分析代數等等用得太多了