得物App相關推薦價格體驗優(yōu)化
一、背景和問題
相關推薦模塊是商詳頁的推薦核心模塊,以幫助用戶高效選擇商品為目標進行算法迭代。但是在優(yōu)化過程中,我們發(fā)現(xiàn)性價比高的商品往往會在算法推薦的排序中更有優(yōu)勢,更容易曝光給用戶。然而這并非所有用戶的需求,例如在親友送禮有價格檔位需求等場景下,過度考慮性價比會引起適得其反的效果,導致不符合用戶需求、價格突兀等體驗問題。
存在的問題如下圖所示,主商品是兩千左右的吸塵器,但是推薦商品中混入價格一百多的商品。雖然都是家用吸塵器而且推薦商品的銷量都不錯,但是以這次進商詳頁的用戶行為意圖推斷,這款一百多的吸塵器不是目標商品。從用戶的角度看,推薦商品和主商品的相關性偏弱了,影響到用戶體驗。對平臺而言,這次商品曝光沒有達到幫助用戶更高效瀏覽的期望,沒能滿足用戶需求。
我們希望通過相關推薦的價格優(yōu)化,以商品相關性為核心,以用戶當前時刻需求為導向,統(tǒng)籌考慮主商品調(diào)性、推薦商品性價比之間的關系,同時滿足用戶對商品價格體驗和平臺對uv價值的需求。
二、方案
思路拆解
如果貿(mào)然以權重打壓價格不符的商品,持平推薦商品與主商品價格,會導致商品相關性減弱,最終用戶不感興趣并且平臺訂單減少,這也是問題的難點所在。我們自上而下拆分推薦的鏈路環(huán)節(jié),調(diào)整了召回、CTR與CVR精排模型、重排等算法模塊,以及嘗試了cspu的價格選擇和高價折扣商品補充等算法策略,去實現(xiàn)價格體驗提升、商品相關性保持的目標。
1.召回算法優(yōu)化
召回模塊存在召回結果的價格傾向于低價高性價比的問題。當主商品價格較低時,暴露的問題不明顯,因為候選池中有足夠的低價商品可供算法選擇;但是當主商品價格較高時,候選池中可供選擇而且價格同樣也高的商品占比偏低。巧婦難為無米之炊,這樣的情況下,即使后續(xù)模塊再精準,也很難在召回候選池商品的約束下獲得高質(zhì)量的推薦結果。
究其原因,人性使然,大家傾向于購買價廉物美的商品。這導致在高價品上的用戶行為交互少,那么召回算法會傾向于把價格更低而行為豐富的商品作為更優(yōu)質(zhì)的召回結果,最終使得高價品在召回構建中占比偏低。
為了解決上述問題,我們針對性地設計了價格分桶召回算法和建模價格的分類圖召回算法。
價格分桶召回算法在SWING方法的基礎上進行了升級。原版SWING以全局商品作為訓練數(shù)據(jù),構建user-item-user的行為關系。SWING的公式如下:
如公式中所示,在尋找商品i的相似商品時,如果召回商品j的行為越多,那么公式中的求和項就越多,最后計算相似度結果也就更有優(yōu)勢。因此,吸人眼球、容易產(chǎn)生更多交互的便宜商品更容易被召回。這過程中,卻自始至終未涉及到價格相關性的約束。
缺乏與主商品近似價格的商品來做候選,不但限制了精排模型的發(fā)揮,也削減了成交AOV,最終影響UV價值。因此,我們對召回算法進行細耕。首先把商品和用戶的行為基于價格帶做切分。然后對劃分出的多個價格區(qū)間,分而治之。用價格區(qū)間內(nèi)的user-item-user關系,計算局部SWING求召回倒排鏈。這樣的做法減少了許多價格差異大用戶體驗差的CASE,保證召回階段商品價格的高相關度。
另外,也搭建了分類圖召回算法,在基礎的GraphSAGE模型上進行了升級。常規(guī)GraphSAGE做法是是等權重的相鄰節(jié)點聚合。而我們在切分用戶行為session后,把價格用到了圖召回的連邊構建中,以商品的價格差影響聚合權重。最終,價格相近的鄰居節(jié)點在聚合中獲得了更高的聚合權重,更容易出現(xiàn)在圖召回的結果中。
召回的優(yōu)化改進,彌補了候選池中高價商品的不足,為后續(xù)算法進一步選品奠定扎實的基礎。
2.CTR模型優(yōu)化
CTR的準確預估是排序的核心。相關推薦模塊區(qū)別于feed流場景,它存在主商品,所以構建出的是一個<用戶,主商品,推薦商品>的三元組關系。當前的CTR模型對價格感知不足,使得推薦商品對人或主商品的價格相關性都不夠。
為了解決這個問題,我們從對模型影響最大的價格特征上著手進行優(yōu)化,并以用戶和推薦商品的價格相關性作為難點重點突破。
a)用戶的消費水平刻畫。
用戶消費水平特征的常見做法是拿用戶歷史瀏覽或購買的商品按價格進行整體刻畫。但是不同類目的價格分布差異懸殊,得物的商品價差大,類目差異也更劇烈。例如買500元的口紅比買500元的包表現(xiàn)了更高的消費力,所以消費水平的刻畫必須與類目相結合。我們的做法是分別刻畫在每一個類目下的消費水平。細節(jié)上,增加了主商品-推薦商品價格分檔下的交叉特征,用戶-推薦價格分檔下的交叉特征以及用戶點擊的價格分檔序列。
此外,為了精確刻畫用戶的長期興趣,我們將用戶行為序列擴展,采用自研Feature-Store提供的用戶長序列服務,把更多、更久的特征喂入模型。大量的行為數(shù)據(jù),幫助模型更好的學習用戶興趣,匹配與用戶價格興趣更相關的商品。
b)衍生特征的刻畫。
除了價格本身,我們在做數(shù)據(jù)分析中發(fā)現(xiàn),用戶的活躍度、成交AOV、商品點擊率三者之間有密切的聯(lián)系。
我們以1/7/30天為窗口統(tǒng)計用戶的場景內(nèi)表現(xiàn)以及app內(nèi)表現(xiàn)。按用戶活躍度進行等頻分桶刻畫,1代表最不活躍,10代表最活躍。不同活躍度的用戶在點擊率和成交AOV上都展現(xiàn)出了不同的表現(xiàn)。活躍度高的用戶,在模塊的內(nèi)的點擊率越高,成交AOV也更高;隨著用戶活躍度下降,點擊率也下降,但是成交AOV卻出現(xiàn)了先減后增的情況。借助這樣的差異表現(xiàn),我們可以通過模型去學習出活躍度與客單價的潛在聯(lián)系,輔助判斷用戶的消費傾向。
CTR特征的優(yōu)化,獲得了預期的正向收益,AOV+2.35%,場景uv價值+2.28%。
3.CVR模型優(yōu)化
CTR建模中,點擊行為大多在曝光后立馬發(fā)生,但是轉化行為通常出現(xiàn)在點擊后比較久的時間。價格高的商品,決策成本也更大,用戶往往需要更久的種草和下單時間。得物客單價高,這個效應也更強。由于高價商品往往不能當天完成購買,因此在樣本的構建中,如果以點擊后當天是否轉化作為正負樣本的標簽判定,那么便宜商品會更容易打上正樣本的標簽,而價高商品的正樣本標簽數(shù)量遠少于商品最終轉化的實際值。價格差異造成的樣本失衡,造成最后模型訓練結果的有偏。
從樣本構建的角度,除非等待無窮久的時間,直至最后點擊樣本發(fā)生轉化,否則樣本失衡的問題會一直存在。為了緩解這個問題,可以延長樣本觀察時間,在點擊后等待一段時間,以最終購買情況判定正負樣本。這里就會涉及到歸因窗口長短的問題。如果歸因窗口過短,落在這之中的已轉換樣本過于少,難以準確建模所有的轉換;如果歸因窗口過長,意味著需要等足夠長的時間才可能用到新樣本,這就會引起時效性問題。
因此,面對這個CVR建模的難題,在定義完以是否7天內(nèi)轉換為CVR模型的最終預估目標后,我們摸索了CVR延遲轉化建模的解決方法。
首先解決歸因窗口的問題,我們把歸因窗口分拆成當天轉化和2-7內(nèi)轉換,用兩個窗口的方式去解決單一歸因窗口過短或者過長的問題。具體的,對于當日產(chǎn)生的新鮮樣本,我們通過mask=1控制樣本進入左側網(wǎng)絡,預估當天內(nèi)是否轉化。以當天的轉化label,作梯度反向傳播更新底層網(wǎng)絡參數(shù),保證網(wǎng)絡能感知到最新的線上樣本數(shù)據(jù)的變化。接下來,這個樣本會等待足夠久的時間,直至7天的完整轉化周期,并以點擊后2-7天是否發(fā)生轉化作為第二個label,用mask=0控制樣本進入右側網(wǎng)絡。
兩個網(wǎng)絡的輸出以概率公式相組合,計算出用戶在點擊后7日內(nèi)發(fā)生轉化的概率。
其中為7日內(nèi)發(fā)生轉化的概率,為當天發(fā)生轉化的概率,為第2-7天發(fā)生轉化的概率。
模型在評估中獲得auc+0.6%,gauc+0.89%的收益,驗證了我們的想法。
4.重排優(yōu)化
舊排序公式是以CTR模型與CVR模型相乘作為排序依據(jù)。為了避免體驗case,加上價格調(diào)整參數(shù)。舊排序公式的數(shù)學表示如下:
但是上述的排序主體物理意義是曝光轉化率。為了使得與最終建模目標uv價值呼應,我們將排序公式重新設計為如下形式:
但是這樣的公式形式也引發(fā)了一個新的問題,異常高價的商品會容易曝光展現(xiàn)。如果100元的主商品推薦出的是一個10000元的相關商品,那很顯然是一個相關性比較差、違背用戶購買力的badcase。為了解決這個,我們在公式修改的基礎上,增加了門型價格控制函數(shù)去做約束,如下所示。
橫坐標為推薦商品與主商品的相關性,大于1表示推薦商品價格大于主商品價格,小于1表示推薦商品價格小于主商品價格??v坐標為打分權重控制。門型函數(shù)代表了我們對價格的想法,即在推薦商品價格與主商品價格偏差可容忍的范圍內(nèi),打分才有效,否則打分會急劇降權。
這部分的優(yōu)化,使得場景uv價值提升2+%。
5.選擇商品價格
一個商品由于屬性不同,會有多個價格。比如一雙鞋,不同尺碼的價格大相徑庭,熱門尺碼比如42碼往往是價格最高的那個。因此,在商品推薦的時候,在具體計算中使用哪個口徑的價格是一個值得推敲的事。目前,各個場景大家都取cspu下最低的那個sku尺寸價格作為對外曝光展現(xiàn)、對內(nèi)邏輯運算使用的價格值,我們期望做不同價格的嘗試,看看是否有可挖掘的空間。
為了加強實驗效果,對排序結果有較大的影響力,我們選擇替換最終排序公式中的價格作為實驗手段。經(jīng)過與cspu下熱門sku價格、平均sku價格、最高sku價格的對比,實驗效果都不如現(xiàn)用的cspu下最低sku價格表現(xiàn)好。原因在于用戶對價格十分敏感度,偏高的價格會帶來大幅的訂單下降,最終導致uv價值負向。當前未拿到收益,并非表示價格的選擇上沒有空間,現(xiàn)在使用的cspu下最低sku價格的方式必然不是最優(yōu)的,值得進一步探索。
6.高價折扣品補充
在外投承接頁中,我們嘗試下發(fā)了高價高折扣商品,在美妝、鞋、手表等類目的下發(fā)量占到10%,獲得了正向收益。因此,在相關推薦中,也希望把這個思路加以利用。我們以價格高于500元、相比外網(wǎng)的折扣低于7折作為召回商品準入門檻,為了保證效果,不以同類目或者同品牌的粗粒度方式下發(fā),而以i2i的方式保證高相關性的方式進行召回補充。
但是效果沒有達到預期。分析原因有兩點,一是加上相關性的約束后,觸發(fā)的商品較少,對比線上其他召回方式如swing、wbcos、multiTrigger等,高折扣品在請求中的召回數(shù)量少了一個數(shù)量級,而實際曝光量更是僅占1%,難以對場景有撬動作用;二是這部分商品相對冷門,精排模型預估出來的分較低,不能在結果中往前排。
三、實驗效果
對上述有效實驗合并后,實驗指標如下:場景pvctr+4.41%,場景aov+5.93%,場景人均訂單+2.27%,場景uv價值+8.17%,商詳大盤aov+0.86%,商詳大盤uv價值+0.78%。
至此,優(yōu)化后相關推薦的aov穩(wěn)定高于商詳aov,并且促進了場景和商詳?shù)膗v價值提升。
四、未來展望
經(jīng)過全鏈路多維度的優(yōu)化,在相關推薦以價格優(yōu)化,去提升用戶體驗并且?guī)悠脚_UV價值的思路得到了驗證。算法的迭代升級中,有創(chuàng)新有突破,沉淀了新技術點,同時獲得了預期的業(yè)務效果。商品價格與用戶和平臺都有緊密關聯(lián),這一方向會長期跟進。
此外,在項目進行中,我們也發(fā)現(xiàn)了一些存在的問題,比如用戶行為集中在頭部商品、CVR轉化樣本稀疏影響訓練等等,未來會針對這些難點,進一步開展工作,提升相關推薦模塊的效率,更好滿足用戶的瀏覽需求。