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