信息流作為一種呈現內容的形式,天然地存在一些問題,為了更好地展示信息,滿足用戶需求,須要對信息流進行一些優化。筆者在本文中由牛頓冷卻定理得到啟發,對信息流的呈現提出了優化方式。
之前做社區類產品時,為了讓用戶才能及時聽到一些比較熱門的貼子,以及讓一些新的內容就能及時呈現給用戶,所以嘗試了好多辦法。
例如,簡單粗魯地根據時間先后次序詮釋貼子,最新發布的就在最前面的位置,實現上去最簡單,但對用戶而言一些熱門的貼子就有可能沉在下邊去了。
又考慮結合用戶評價、瀏覽等其他維度的數據綜合來進行評定,分別按一定權重計分,總分最高的排最前面,用這些方法的話從某種程度上確實可以實現熱門貼子的爆光;但會引起的問題就是越是熱門的貼子越是會被置頂,而新的貼子反倒缺乏了爆光的機會。
于是,只好想一些其他的辦法,甚至考慮去依靠算法進行實現,但在嘗試去找尋成熟算法的過程中就發覺,好多算法相對來說比較復雜,但是最主要的是好多算法都須要在大量的數據情況下才能得到相對確切的結果。
所以,最后思索解決這個問題的方法,便又回到貼子瀏覽這個事情的本質上來。站在用戶的角度上,一方面其實是希望對于一些比較熱門的貼子才能及時看見,但另外一方面還是希望能不斷聽到新的東西。
一、相關原理
前面的這些場景,概括上去就是新的內容總是會取代老的內容,而它又剛好類似于化學學當中的一個定理,它稱作“牛頓冷卻定理”。
本質上它描述了低于周圍濕度的物感受向外散熱,并逐步降溫的過程,同時單位時間內散熱與周圍溫差會成反比關系。
而這個就跟我們上面提及的貼子的爆光情況是基本一致的牛頓冷卻定律代碼,假如把貼子爆光或則排行情況想像成體溫,隨著時間的推移,最終貼子的排行也是會漸漸降出來。
二、影響誘因
按照前面的描述,我們會發覺,貼子的排行遭到了幾方面的誘因影響:
1.初始熱度
既然是一個隨著時間推移熱度逐步增加的過程,假如貼子剛被發布的初始情況下,沒有一個默認的熱度值,則會造成貼子沒有辦法增加熱度;出現的結果就是大量貼子的熱度是相同的,那就難以分辨排行情況。
所以,對于貼子剛發布時,須要給出相應的熱度,假如完全是模擬體溫降溫的情況,這么就可以把初始的熱度設置為100,最終貼子的熱度就會漸漸趨近于0,但不會等于0。
但是,因為當時我們有好多不同的內容分類展示在同一個貼子列表當中,而我們又有一些對于不同內容的初始情況下的不同展示傾向,于是便依照不同的內容分類界定了不同的初始熱度值。
例如有科技、財經、體育、女性等不同類別的內容,而我們傾向的次序是科技、女性、體育、財經,所以最終界定的初始熱度值就不再都是100,而是界定成了100,90,80,70。其實,具體的數值,還是須要依照實際上線后的情況去反復的調整。
2.用戶行為
若果只是有前面提及的誘因,這么可能會造成的問題就是,有好多相仿或則同一時間段發布的貼子,熱度值隨著時間的推移增加的速率幾乎是一致的,這都會造成貼子的排行也基本上是一致的,因而喪失了我們做這個東西的目的。
所以為了解決這樣的問題,還可以在不僅初始熱度以外,引入貼子被發布后用戶對其形成的一些行為,常見的行為可以包括瀏覽、評價、收藏、分享、點贊等。
具體實現時,可以根據不同的維度界定權重,之后根據實際的數目減去對應的權重后(例如瀏覽量、評價量、收藏量、點贊量、分享量分別對應的權重是10%、20%、20%、20%、30%),求總的得分,總分暫且稱之為用戶行為熱度,估算方法為:
用戶行為熱度=瀏覽量*10%+評價量*20%+收藏量*20%+點贊量*20%+分享量*30%
3.時間
最主要的毫無疑惑是時間。
無論對于用戶還是平臺,其實是不希望仍然是同樣的內容強占了排名榜或則貼子列表的最上面位置的,而是希望不斷被更新的內容所取代,也可以稱之為貼子的熱度須要隨時時間的推移而漸漸衰減,最好能呈現出下邊這樣的一種趨勢:
在時間方面,不僅前面提及的隨時間推移的趨勢,站在實際的場景上牛頓冷卻定律代碼,對于任一貼子,最好是在某一定時間段過后,貼子次序才能發生周期性的變化。
可以理解為刷新貼子熱度的時間間隔,具體的間隔多少則須要依照平臺的內容量來確定、如果內容較多,希望早日呈現新的內容給用戶,便可以把時間間隔設置的比較短;假如內容較少,則可以把間隔時間設置的比較長。
三、推導過程
確定了前面的影響誘因,便可以參照牛頓冷卻定理整理出對應的算法公式了,牛頓冷卻定理的公式可以表示為:
ΔT(t)/Δt=–k(T(t)–C)
其中T(t)表示濕度隨時間變化的函數,t表示當前的時間,C表示一個常量溫度,ΔT(t)表示當前時間從開始到當前時間的氣溫隨時間變化的差值,Δt則表示從開始到當前時間的間隔,而-k則是牛頓冷卻定理概念當中單位時間內散熱與周圍溫差會成反比關系的比值,又稱之為冷卻系數。
而將前面這個公式借助導函數、積分的知識,進行相應的轉換變型后,可以變化如下(具體過程就不推論了,何況沒太大意義):
T=T0x(1/e)^(k(t-t0))
而將里面那些變量和常量替換為產品設計當中的貼子情況時,則可以理解為,T代表著貼子當前的熱度,T0代表著初始熱度和用戶行為熱度的總和,k則代表著冷卻系數,t-t0則代表間隔時間。
結合上面提及的關于初始熱度和用戶行為熱度的估算方法,則相關公式可以為:
T0=H(Type)+H()
H()=*a%+*b%+*c%+……
H(Type)則為初始熱度值,可以依據不同類型內容進行設置,H()則為用戶行為熱度值,不同的行為有各自的權重,權重占比支出為1。
而從函數曲線上來說,k越大,則曲線越陡,意味著熱度增加越快,k越小,則曲線越緩慢,意味著熱度增加越慢。
四、注意事項
針對一些異常情況,須要定義相關規則。在熱度值剛好一樣的情況下,須要定義相關的排序規則,例如根據某個單一維度或則綜合維度排序。
上線后,還須要不斷去監控數據情況,若果發覺排行變化太快,則須要去對冷卻系數進行相應的調整。
其實,為了更好的拓展相關業務,例如會在正常的貼子熱度當中加入付費的排名,或則其他推廣的業務,可以考慮優化公式,或則強行人工推薦,這么對于貼子內容可能還會考慮做一些不一樣的貼子池的維護。