閒魚搜尋-成交寬度優化實踐

語言: CN / TW / HK

業務背景

閒魚是閒置物品交易平臺,核心目標是提升DAU,其一是“拉新”,其二是“促留存”。閒魚搜尋作為成交的主場,自然是承擔著“促留存”的重任,滿足使用者之間的交易需求,既包括買家使用者又包括賣家使用者,所以閒魚搜尋的核心目標是“成交的買家數和賣家數”,也就是成交寬度。

賣家規模大 :閒魚DAU和MAU中有超過1/3的使用者為賣家身份,賣家回訪對於閒魚DAU來說是重要的一環,因此我們要關注賣家生態。

成交有助於賣家留存率 :一方面,賣家成功售出一單,賣家30日賣家人均來訪天數和賣家的次月留存率顯著提升;另一方面,成功售出多單,賣家30日賣家人均來訪天數和賣家的次月留存率相對於售出一單,變化不明顯。因此促成賣家進行首單成交成為了問題的關鍵。

成交有助於商品供給 :“賣家成交”對於後續賣家釋出商品也有著正向的作用,成交後賣家的人均釋出量相較於未成交的賣家增長了20%,對於閒魚供給來說也是非常有價值的。

挑戰

為了完成“成交的買家數和賣家數”這個核心目標,一方面,儘可能提升成交效率,進而提升成交買家數,主要是常規的召回、精排和重排優化,但這些優化有可能導致賣家交易集中,例如過去成交量多的賣家,具有更高的轉化效率,自然會得到更多的流量,導致賣家交易集中;另一方面,在成交效率不變的前提下,儘可能提升成交寬度,可以分為賣家和買家的成交寬度。從賣家角色來看,在C2C業務裡,賣家其實也是一個普通使用者,平臺要儘可能避免少數賣家佔據了大部分流量,影響其他賣家的積極性。從買家角色來看,存在一些黃牛買家,比普通買家更活躍,更容易搶到優質的孤品,導致買家交易集中,影響普通買家的積極性。

本文著重於提升成交寬度,普惠更多賣家,最大限度的避免少數賣家佔據過多流量,進而達到雨露均沾的目的,讓更多賣家從“售出 0 單”的狀態轉變為“售出 1 單”。過去幾個月的演算法優化中,我們在重排階段進行賣家流量調控,設計了一套兼顧實際業務效果和理論基礎的流量調控方案,在精排階段進行LTR建模提升成交寬度,本文進行詳細介紹。

整體框架

閒魚搜尋框架如下圖所示,分為搜尋系統和實時系統兩部分,賣家流量調控位於重排層,LTR建模位於精排層。

賣家流量調控

在重排階段進行了賣家流控優化,第一階段,利用策略方法取得成功,第二階段,提出了基於動態閾值的貪心演算法。

第一版:策略方法

  • 分析

當前機制是按照CTCVR排序,很明顯是最大化“成交的訂單數”,沒有考慮到訂單數和買賣家數這兩個目標之間的GAP,因為一個賣家可以成交多單,但對於“成交的買家數和賣家數”的貢獻只有一次,如下圖所示,進行了兩個策略對比,可以發現同樣的訂單數情況下,策略二的“買家數和賣家數”明顯大於策略一。

由於閒魚是C2C業務,考慮到黃牛買家和專業賣家存在跨天多次成交的情況,“成交的買家數和賣家數”這個業務目標,可以被定義為“七日成交的買賣家數”。

  • 方案

按照買賣家的成交狀態(最近七天是否已成交)分為四類情況,如下表格所示。以第一種情況為例,買家和賣家近7天都未成交過,“訂單數”的期望是 CTCVR,“買家數和賣家數”的期望是 CTCVR * 2,可以理解為,一旦成交了對於“買家數和賣家數”指標貢獻是 2;以第三種情況為例,買家近7天已成交,賣家近7天未成交,“訂單數”的期望是 CTCVR,“買家數和賣家數”的期望是 CTCVR * 1,其他情況以此類推。

我們將優化目標從“成交的訂單數”調整為“成交的買家數和賣家數”,實驗發現,訂單數損失較大,主要是因為表格裡的第四種情況,“買家數和賣家數”的期望是 0,相當於直接沉底。這對於成交訂單數的影響太大,所以最終將排序機制調整為兼顧“成交的買家數和賣家數”+“成交的訂單數”,既要考慮交易寬度,又要考慮訂單量,也就是表格最後一列。

  • 業務結果

在閒魚搜尋場景,建立實時鏈路,更新買賣家的近七天成交數情況,進行了上述方案的大流量實驗,AB多天,周人均賣家數 +6.4%,周人均買賣家數 +2.9%,周人均買家數 -0.55%。

第二版:基於動態閾值的貪心演算法

  • 分析

第一版本的流控雖然帶來了業務上指標的提升,但是有一個明顯的不足,就是無法靈活的控制對於成交的損失,以至於所有實驗只能靠線上多天ab資料的積累,方法比較原始。成交的損失對搜尋場景是非常敏感的指標因此需要一種能夠控制損失的流控方法。

搜推場景本質上就是對流量的分發,而在這個分發的過程中需要滿足業務對不同目標的需求,例如常見的在搜尋場景中需要按照成交效率進行分發,在推薦場景中需要按照互動率進行分發。某些指標之間可能存在互斥的情況即優化指標A對於指標B來說是有害的,因此往往需要在滿足一定約束的條件下對目標進行優化。一般而言這類問題都可以歸結為Online Matching。

具體就閒魚搜尋業務場景而言,在閒魚搜尋中存在著個人賣家與專業買家,專業買家在成交效率上遠高於個人賣家(專業買家售賣效率高於個人賣家3倍左右),但閒魚的定位是人人都可以參與交易的二手平臺,因此僅考慮效率是不足夠的,還需要將成交的買賣家寬度也納入考量。

  • 方案

先定義記號

    • 一次請求

    • 一個商品

    • 原始結果結合為

    • 調整後結果集合為

    • 一次請求下單個商品的pv決策,是否展示

    • 一次請求下單個商品的效率分

    • 商品對應賣家在視窗期內的售出狀態

    • 業務能接受的訂單損失

  1. 一個簡單的無約束的最優化情況

    • 假設每次和候選集為,需要選出結果商品集合,

    • 此時的解為

    • 從模型上容易看出這種情況就是儘可能的曝光在時間視窗期內未成交的賣家對應的商品,其約束條件也表示在最終結果中,未售出賣家佔比需要需要與結果集合數量一直。這裡需要解釋的是,這個條件在具體閒魚業務搜尋場景中比較容易滿足,首先閒魚業務C2C的形式,因此一次召回集合中賣家數量非常豐富,其次一般情況下

  1. 訂單約束下的優化

    • 該模型增加了對成單損失的約束,成單損失等於調整後結果和原始結果的改變數,其次在約束條件中放寬了對未成交賣家數量的限制。

  1. 模型求解

我們可以通過帶KKT條件的拉格朗日乘子法對模型進行求解:

經過化簡,我們記 其最終 解的形式可以表現為最優商品集合 ,且 解的物理意 義是比較清晰的,在假設中我們提到,在進行調整前, 為有序集合,其序是按照精排模型給定的預估效率分進行排序的,即在有序集 中取順序選取 集合一定可以獲得最優效率解,因此在調整時,為滿足優化賣家寬度目標必然將候選集 中商品和 中商品發生替換,造成效率損失,但效率損失的範圍需要控制在一個閾值 內。 參考內網中比較成熟的工作,和閒魚搜尋的業務特點,對於 ,我們採用PID的方式進行線上計算進行更新,線上更新流程如下:

在每次使用者請求到來時,TPP請求iGraph獲取最新的調控因子,在重排側實現了一種基於Greedy的演算法來確定最後的商品展示順序,其虛擬碼如下:

         

TPP輸出的結果經過使用者實際曝光後的UT日誌通過TT Tunnel迴流到odps,在odps中通過分鐘級別排程計算最新的調控因子通過Swift傳送到iGraph。

為方便計算,我們對 初始值賦值為 0,即線上不開啟調控策略,通過PID演算法更新

  1. 為實驗桶與基準桶ctcvr的的 差值

  2. 為比例係數,對偏差瞬間做出反應

  3. 為微分系數,根據偏差的變化趨勢進行控制主要作用為減少震盪

  4. 為積分系數,增大積分系數,可以消除靜態誤差,減少超調量,提高系統穩定性,但是會延長消除偏差的過程。 經驗來看,I的調控效果比較穩定,是閒魚投放系統主要依賴的調節器

  5. 可以理解為update後的對偶變數

  • 業務結果

在第一版策略方法的基礎上,第二版本的實驗進一步取得收益,周人均賣家+1.87%,周人均買賣家+0.48%

LTR建模

背景

業務目標和模型目標之間不一致問題:業務目標是人均成交買賣家數,追求寬度最大化,但模型目標是人均訂單數,追求訂單數最大化,兩者不太一致。

方案

首先,我們在CTR/CVR模型之後,增加了一個LTR模型層,直接建模曝光到成交的概率,同時對LOSS和樣本也做了相應的優化;然後,對CTR/CVR模型的預測分進行校準,將校準後的預測分作為特徵輸入到LTR模型。該方案的優勢有如下幾點:1)CVR模型繼續專注於提升pcvr的準確性;2)LTR模型負責解決樣本選擇偏差問題和目標不一致問題。

  • LTR模型

樣本:以成交作為正樣本,以曝光作為負樣本,直接學習曝光到成交的概率,緩解樣本選擇偏差問題,由於成交行為較為稀疏,我們進行了負取樣,取樣率是10%。

LOSS:在交叉熵的基礎上,對部分正樣本做加權,如下公式最右邊部分,這裡參考了“賣家流量調控”章節的成功經驗,業務目標是最大化買賣家數,所以當買家和賣家均成交一單時,加權係數w是 2,當買家和賣家有一人成交多單時,加權係數w是 1,當買賣家雙方均成交多單時,加權係數w是 0。

  • 校準

CTR/CVR模型的預測分,和真實分存在一定偏差,直接使用預測分的話,會讓LTR模型和CTR/CVR模型耦合度太高,不利於各自的迭代,因此需要校準CTR/CVR模型的預測分。

調研當前成熟的模型校準方案,我們從穩定性和快速迭代角度出發,選擇了經典的保序迴歸( Isotonic Regression) 進行模型的校準。如下圖所示可以發現,保序迴歸可以有效的減緩預估分和真實分的偏差,最後將校準分作為feature輸入到LTR模型。

業務結果

離線評估LTR模型,ctcvr_auc +0.7%

線上實驗,人均買賣家數 +1.32%,人均賣家數 +1.48%

展望與規劃

閒魚業務的特殊性給演算法優化帶了許多全新的挑戰,很多通用的方法在閒魚場景會失去其效果,比如閒魚場景的大量C端釋出的非標品,這導致閒魚商品id更新的非常快,在模型側,id類特徵並不是很好用,因此在優化過程中需要更多的對業務的需求進行量身定製,這促使我們必須去對反常的現象追本溯源,瞭解現象深層次的原因。

ctcvr效率分預估

在這次流控實驗中的兩個版本中,其實對於最終的調控結果,ctcvr分都有著舉足輕重的作用,且閒魚主搜模型中對相關性的分檔排序也會對調控結果造成非常大的影響,因此將相關性分檔分納入精排模型中統一考量,和不斷提升模型對於效率預估的準確性是未來一個優化方向,其中參考集團其他團隊的工作,將AUC loss和rank loss想結合的方案目前看來是能夠收穫穩定收益的。

買賣家匹配

閒魚搜尋的核心指標與其他搜尋場景不同,他更看重買賣家的參與程度,因此常見的賣家側調控外,買家側也可以做相應的事情,或者說怎樣進行更好的買賣家匹配,來達到保障效率的同時可以同時從賣家、買家兩個維度提升交易寬度,最近在調研圖網路,考慮利用圖網路的特性捕獲買賣家之間匹配關係。

致謝

在此整個流控專案的實現過程中得到了許多人的幫助,在此感謝技術線老闆們的全力支援,感謝業務線小夥伴的幫助與合作!