如何設計一個演算法實現商品的展示排序按照用戶的點擊量和發布時間綜合排序?

比如,前天發布的點擊量 1000 的商品排在今天發布的點擊量 700 的商品後面。

如何設置這兩個變數(發布時間和點擊量)的權重,如何設置時間變數的值?


可以參考Hacker Newers或Reddit的排序演算法。

Hacker Newers方法簡單的講,就是: 點擊量/(當前時間-發布時間),隨著時間不斷增加,權重逐漸減少。具體的參數需要通過觀察實際業務數據來調整,藉助wolframalpha的函數繪圖功能很快搞定。

例如,Hacker Newers的具體公式是:(p – 1) / (t + 2)^1.8。

p表示投票數量,t表示時間,新文章在沒有得到很多投票的情況下24小時後rank會減小很多。

進一步的解釋以及Reddit的排序方法可以去 http://pmbox.diandian.com/post/2011-07-06/2683519 查看。


受邀回答

其實這是比較經典的rank問題了,說來話長,可以參考信息檢索相關的書籍和資料。

我就簡單說說:

1、這是一個規劃問題,多條件的規劃問題,有很多方法。

2、你需要一個評價規則,就是說兩個不同順序,你自己都沒法評定哪個好,讓程序怎麼做?所以你需要定一個評價方法,比如點擊率,收入或者一個公式等等,需要一個目標。

3、選擇方法,比如最土的,你可以設計一個a*pv+b*time的函數,然後遍歷所有a和b,找到讓收入最多的兩個參數,就行了吧?當然這個模型太簡單了,有很多很多現成的機器學習方法可以幫助你。比如工業界常用的邏輯回歸、神經網路等,或者看看learning-to-rank理論,可以基於點-對-序列進行訓練,要做得好就太深了。但說白了你就需要一個公式,f(pv, time),找到一個模型把f裡面的參數定出來,就搞定了。

4、這東西要長期訓練才能保證方法的有效性,比如每天都把日誌拉出來,訓練一次,模型的效果就會越來越好,光訓練一次,模型會根據環境的變化逐漸衰減的。


http://weixin.qq.com/r/_EPD25TEAsl9rdC49xbq (二維碼自動識別)


推薦閱讀:

從損失函數的角度解釋為什麼lr做點擊率預測不如GBDT好???
你同意「數據比演算法重要」這個說法嗎?
進行數據挖掘時演算法需要學習到什麼樣的程度?
如何構造 n 個數使其最小公倍數(LCM)=其和?( n 個數互不相等)
std::unique為什麼不用一個hash table實現,而是要先std::sort?

TAG:演算法 | 排序演算法 |