02.27 數據處理:非搜索場景下的列表應該如何排序呢?

瞭解綜合排序的使用場景以及與個性化推薦的區別;瞭解綜合排序的影響因子以及常見的排序方法;基於業務需求對列表中的字段進行排列,輔助決策。

数据处理:非搜索场景下的列表应该如何排序呢?

《數據處理之搜索如何命中》中說到了搜索結果的排序其實是對文本數據和業務數據得分的計算,那麼對於非搜索場景下的列表應該如何排序呢?

有兩種排序方式:單一維度排序;綜合排序。單一維度排序就是將所有的內容按照某一維度進行排序,比較簡單不再贅述,主要說一下綜合排序。

一、定義

綜合排序就是綜合數據的多個維度進行排序,以搜索數據表為例,綜合排序涉及數據表的上傳時間、查看次數、更新週期、被搜索次數、熱度等維度,每個維度都有相應的權重值,通過一定的公式計算出每個物品的“得分”進行降序排列。

二、使用場景

用於展示具有一定量級的數據且數據有多個指標維度,需要將某些高質量的數據突出展示,可使用綜合排序,為每個維度值賦予一定權重。

用於展示搜索結果,需要根據命中字段、時間、搜索次數等維度進行綜合排序。

可搭配多個單個維度排序規則使用。

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來根據數據調整曲線。

数据处理:非搜索场景下的列表应该如何排序呢?

四、優化調整

給定初步的權值之後可以進行灰度(甚至直接上線),根據實際結果不斷調整係數和權重值,在產品的發展過程中,也需要根據各階段的側重點的不同來調節權重和係數。

題圖來自Unsplash,基於CC0協議


分享到:


相關文章: