信息流優化:牛頓冷卻定律的應用
信息流作為一種呈現內容的方式,天然地存在一些問題,為了更好地展示信息,滿足用戶需求,需要對信息流進行一些優化。筆者在本文中由牛頓冷卻定律得到啟發,對信息流的呈現提出了優化方法。
之前做社區類產品時,為了讓用戶能夠及時看到一些比較熱門的帖子,以及讓一些新的內容能夠及時呈現給用戶,所以嘗試了很多辦法。
比如,簡單粗暴地按照時間先后順序展現帖子,最新發布的就在最上面的位置,實現起來最簡單,但對用戶而言一些熱門的帖子就有可能沉在下面去了。
又考慮結合用戶評價、瀏覽等其他維度的數據綜合來進行評定,分別按一定權重計分,總分最高的排最上面,用這種方式的話從某種程度上確實可以實現熱門帖子的曝光;但會導致的問題就是越是熱門的帖子越是會被置頂,而新的帖子反而缺少了曝光的機會。
于是,只好想一些其他的辦法,甚至考慮去借助算法進行實現,但在嘗試去尋找成熟算法的過程中就發現,很多算法相對來說比較復雜,而且最主要的是很多算法都需要在大量的數據情況下才會得到相對準確的結果。
所以,最后思考解決這個問題的方式,便又回到帖子瀏覽這個事情的本質上來。站在用戶的角度上,一方面當然是希望對于一些比較熱門的帖子能夠及時看到,但另外一方面還是希望能不斷看到新的東西。
一、相關原理
上面的這種場景,概括起來就是新的內容總是會替代老的內容,而它又恰好類似于物理學當中的一個定律,它叫做“牛頓冷卻定律”。
本質上它描述了高于周圍溫度的物體會向外散熱,并逐漸降溫的過程,同時單位時間內散熱與周圍溫差會成正比關系。
而這個就跟我們前面提到的帖子的曝光情況是基本一致的,如果把帖子曝光或者排名情況想象成溫度,隨著時間的推移,最終帖子的排名也是會慢慢降下來。
二、影響因素
根據上面的描述,我們會發現,帖子的排名受到了幾方面的因素影響:
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 = T0 x (1/e) ^(k(t-t0))
而將上面這些變量和常量替換為產品設計當中的帖子情況時,則可以理解為,T代表著帖子當前的熱度,T0代表著初始熱度和用戶行為熱度的總和,k則代表著冷卻系數,t-t0則代表間隔時間。
結合前面提到的關于初始熱度和用戶行為熱度的計算方式,則相關公式可以為:
T0 = H(Type)+ H(Action)
H(Action) = action1* a% + action2* b% + action3* c% + ……
H(Type)則為初始熱度值,可以根據不同類型內容進行設置,H(Action)則為用戶行為熱度值,不同的行為有各自的權重,權重占比總額為1。
而從函數曲線上來說,k越大,則曲線越陡,意味著熱度降低越快,k越小,則曲線越平緩,意味著熱度降低越慢。
四、注意事項
針對一些異常情況,需要定義相關規則。在熱度值恰好一樣的情況下,需要定義相關的排序規則,比如按照某個單一維度或者綜合維度排序。
上線后,還需要不斷去監控數據情況,如果發現排名變化太快,則需要去對冷卻系數進行相應的調整。
當然,為了更好的拓展相關業務,比如會在正常的帖子熱度當中加入付費的排行,或者其他推廣的業務,可以考慮優化公式,或者強行人工推薦,那么對于帖子內容可能就會考慮做一些不一樣的帖子池的維護。
作者:小風,產品經理;公眾號:村上風
本文由 @小風 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自 Pexels,基于 CC0 協議
老師好,還有些沒看懂,方便了給指導一下呢,感謝 感謝!
T = T0 x (1/e) ^(k(t-t0)),公式里1/e,這個“e”代表啥意思呢?t-t0,“t”代表時間總數,“t0”是不斷變化的?感謝百忙之中,給予指導,感謝 感謝!
小風老師yyds?。。?/p>
想法不錯~