hello洲赵,大家好鸳惯,我是蛋蛋。最近一直在做一款海外直播產(chǎn)品的列表排序叠萍,期間遇到一些問題芝发,也找到了一些解決方法,簡單總結(jié)一下苛谷,方便自己review也跟大家分享下辅鲸。
為什么要做排序?
目前移動端直播對于直播內(nèi)容的展示大都采用大圖列表的形式腹殿,如下圖所示映客的首頁熱門列表独悴,
個人認為這種展現(xiàn)形式在移動端不是最合適的,但是在對用戶口味很難把握的情況下锣尉,采用傳統(tǒng)的列表展示刻炒,讓用戶自己去挑選還是可取的。因此當用戶打開app看到的直播列表就顯得格外重要自沧,這直接關(guān)系到用戶是否會繼續(xù)下面的操作坟奥。因此,在列表做直播內(nèi)容的排序就十分必要了拇厢。
排序中遇到的問題和解決思路
在我們的直播app上線前期爱谁,列表的直播內(nèi)容是很有限的,這個時候孝偎,列表排序所要解決的核心問題是:
把最好的直播間優(yōu)先讓用戶看到
如何定義直播間好壞
因此访敌,在這個階段要想的反而簡單,其實就是如何辨別一個直播間好壞的問題邪媳,我們在排序時把好的直播間放在較前的位置就好了捐顷,這就是我們經(jīng)常看到的熱門列表雨效,對于熱門的定義就是平臺對于好直播間的定義迅涮。
那問題就回到如何判斷一個直播間的好壞,對于直播間的好壞判斷有很多維度徽龟,很自然的想到叮姑,直播間人氣,直播間營收等等。這個要與產(chǎn)品的本身定位和所處的階段聯(lián)系起來制定传透。因為我們的產(chǎn)品剛剛處于起步階段耘沼,希望用戶能夠更多留在直播間里,同時我們對產(chǎn)品的定位是促進用戶和主播之間的互動(公屏文字消息)朱盐,因此當時我們制定的房間好壞的標準就兩條
- 能不能留住用戶(用戶是否愿意一直觀看)
- 能不能讓用戶聊起來(用戶是否愿意發(fā)送公屏消息)
決定直播間好壞的因素選擇
有了這個標準之后群嗤,我們看重的主要房間因素是:人數(shù)、x分鐘留存兵琳、人均公屏消息數(shù)狂秘、公屏消息率。下面簡單介紹下這幾個因素計算(每隔時間t進行計算)
- 人數(shù)躯肌,實時計算房間的人數(shù)者春。
-
x分鐘留存,x可以選擇3分鐘清女,或者5分鐘钱烟,其實和跳出率類似,以5分鐘留存為例嫡丙,定義為拴袭,在一個5分鐘的時間段內(nèi),前面兩分鐘進來的用戶記為m曙博,在5分鐘時間段過后(3分鐘后)稻扬,依然在直播間的用戶記為n,則5分鐘留存r為
- 人均公屏消息數(shù)羊瘩,考察用戶在直播間內(nèi)是否愿意和主播互動泰佳,禮物的門檻比較高,因此用公屏來判斷較為合適尘吗,人均公屏數(shù)的定義為逝她,發(fā)言的總條數(shù)/發(fā)言的總?cè)藬?shù)。
- 公屏消息率睬捶, 如果只考察人均公屏消息數(shù)黔宛,只能反映發(fā)言的人和主播互動的強度,同時還有就是互動的廣度擒贸,即公屏消息率臀晃,定義為,發(fā)言的人數(shù)/房間的總?cè)藬?shù)介劫。
綜合房間因素得到排序值
有了上述因素定義之后徽惋,問題就變成了如何將這些因素綜合在一起變?yōu)橐粋€值來反應(yīng)直播間的好壞,這個值也就是排序所要用到的排序值座韵。將多個不同維度(不同單位)的因素綜合到一起的方式有很多险绘,比較常用和簡單的就是普通線性加權(quán)踢京。將多個因素歸一化之后,每個因素配一個權(quán)值然后線性加到一起宦棺,如下樣式
值得一說的是瓣距,不同因素的歸一化方法,也有很多種代咸,本人比較推崇的是從產(chǎn)品業(yè)務(wù)角度出發(fā)去進行非線性的歸一化蹈丸,我們可以將不同因素都劃分到0到1分之間,譬如人數(shù)呐芥,那么從業(yè)務(wù)角度去定義的話白华,當人較少時,譬如少于10人贩耐,定義為0.1分,當人數(shù)上漲較快時厦取,這個時候給的分數(shù)也較高潮太,比如11到20人,0.3分虾攻,當人數(shù)特別多的時候铡买,這個時候房間的人數(shù)已經(jīng)不那么重要了,可以將過高的定義為0.9分霎箍,當再多時奇钞,甚至可以將分數(shù)降低,給予一定的懲罰漂坏,從而一定程度避免馬太效應(yīng)景埃。因此因素的歸一化如果純按照數(shù)學上提供的方法可能不太符合業(yè)務(wù)的實際情況。
同時在計算參數(shù)的過程中顶别,還得注意的問題是谷徙,在計算一些比例項時,譬如留存項驯绎,就會出現(xiàn)一個問題完慧,當分母過小時,可能就1個人在直播間剩失,然后幾分鐘后還沒走屈尼,那么此時留存就是100%。對于這種問題的處理有很多種拴孤,有的是直接在分母中加一個常量脾歧,或者定義一個統(tǒng)計比例數(shù)據(jù)分母的最小閾值。
上線后如何衡量排序算法及權(quán)值參數(shù)調(diào)節(jié)
按照上述的排序算法演熟,我們給定一個初步的權(quán)值之后基本就可以灰度(甚至直接上線)了涨椒。好像貌似可以解決列表排序的需求了。這時候需要想起的是
沒有數(shù)據(jù)優(yōu)化目標的產(chǎn)品需求都是耍流氓
其實就是如何衡量我們做的這些有沒有用,不然調(diào)節(jié)參數(shù)蚕冬,增加排序因素維度都是沒有任何意義的免猾。其實列表和現(xiàn)實生活中的商店的商品櫥窗基本起著同樣的作用,展示給用戶囤热,吸引用戶購買(進入觀看)猎提。一個好的櫥窗展示應(yīng)該是,當用戶看到商品就會去買旁蔼,所以一個好的列表就是讓用戶看到就去點锨苏,然后還一直觀看,不停在里面和主播勾搭聊騷棺聊。從成本和收益的角度來看伞租,列表上的任何主播直播間的曝光,都是我們的成本限佩,因為用戶(流量)是有成本的葵诈,我們的收益應(yīng)該就是我們所看重的點擊,觀看時長祟同,公屏消息數(shù)等作喘。因此我們對于衡量指標的定義就是
- 直播間點擊量/列表曝光量
- 直播間人均觀看時長/列表曝光量
- 直播間消息總數(shù)/列表曝光量
- ...
在不同階段產(chǎn)品的側(cè)重點也有可能不同,在不同的側(cè)重點晕城,就應(yīng)該著重關(guān)注某一個指標泞坦,當然也可以將上述衡量指標綜合成一個總的kpi。有了這個之后砖顷,我們調(diào)節(jié)參數(shù)贰锁,就可以通過這些指標來判斷調(diào)整的好壞,從而決定某一組參數(shù)要不要上線滤蝠。
總結(jié)
上述的整個列表的排序思路比較基礎(chǔ)和簡單李根,但基本搭建了一個排序系統(tǒng)的基本框架,后續(xù)的優(yōu)化基本都可在這個框架上進行几睛,比如增加排序歷史因素的考慮房轿,運營因素的考慮等∷或者將線性加權(quán)模型改成非線性的囱持,增加時間因素等等各種約束條件等。但是本質(zhì)上都是在做一件事焕济,也是文章最前面提到的“把最好的直播間優(yōu)先讓用戶看到”纷妆。
當然列表除了承載內(nèi)容的展示外,還擔負著用戶流量的引導晴弃,當產(chǎn)品用戶量成長到一定規(guī)模后掩幢,本文所提的算法就會遇到一個很大的麻煩逊拍,頭部集中,就會遇到一些問題际邻,比如芯丧,把什么用戶給到什么樣的主播,如何合理流量分配世曾,如何個性推薦缨恒。這些就放在以后的文章里總結(jié)了。
后記
其實列表的排序問題轮听,由來已久骗露,所有的內(nèi)容型平臺都會涉及到這個問題,新聞網(wǎng)站熱門血巍,社區(qū)應(yīng)用的帖子排序萧锉,電商網(wǎng)站的商品,簡書首頁的文章排序排序述寡,等等柿隙。直播類產(chǎn)品的排序算是一種特殊情況下的應(yīng)用。所以這方面也有很多的資料可以參考辨赐,貼給大家
阮一峰老師之前曾經(jīng)翻譯總結(jié)過一系列的文章http://www.ruanyifeng.com/blog/2012/02/ranking_algorithm_hacker_news.html
知乎的問答排序規(guī)則和威爾遜算法
https://zhuanlan.zhihu.com/p/19902495?refer=zhihu-product
https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Wilson_score_interval