2015-06-15 29 views
0

我正在尋找一種基本的算法,給最近的評論更多的權衡。排名時間權重

因此,算法的輸出值是可變的。例如,兩個評分完全相同的評論將根據創建的時間戳進行不同的排名。

Review_1 
Score 10 
creation 10/5/2014 

Review_2 
Score 10 
creation 10/5/2015 

一個喜歡思考:

1 if review ts < 1 year 
0.5 if review > year 

所以,我可以使用類似(review_1.score * 1) + (review_1.score * 0.5)

但是,如果兩個評論都是舊的沒有意義(review_1.score * 0.5) + (review_1.score * 0.5),對不對?由於沒有新的評論,整體將是原始評分的一半。

+0

考慮最近一次審查的時間戳作爲「存在」的權重。 – collapsar

+0

你只是給分子加權,重量分母也是如此。或者你不是在做一個平均的? –

+0

@DanGetz,我看不出如何解決這個問題。但是,是的,我做的是平均水平。 – user2990084

回答

0

澄清@丹·蓋茨,並添加@collapsar答案,我會加入以下內容:

丹的公式是正確的:

(score1 * weight1 + ... + scoreN * weightN)/(weight1 + ... + weightN)

加權平均的優點是你可以選擇重量!

所以我們選擇第一條消息以來的天數作爲權重。所以我會選擇一些數據並顯示它是如何工作的。在所有情況下,簡單的平均值是5.0。

首先我們來看看隨着時間的推移而增加的評分。

Date[0]: May 6  Rating[0]: 1  Weight[0]: 0 
Date[1]: May 7  Rating[1]: 3  Weight[1]: 1 
Date[2]: May 8  Rating[2]: 5  Weight[2]: 2 
Date[3]: May 9  Rating[3]: 7  Weight[3]: 3 
Date[4]: May 10  Rating[4]: 9  Weight[4]: 4 

這樣來計算權重:

Weight[i] = Date[i] - Date[0] 

爲了計算平均

(Rating[0]*Weight[0] + Rating[1]*Weight[1] + ... + Rating[N]*Weight[N])/
(Weight[0] + Weight[1] + ... + Weight[N]) 

計算:

(1*0 + 3*1 + 5*2 + 7*3 + 9*4)/(0 + 1 + 2 + 3 + 4) = (0+3+10+21+36)/10 = 7.0 

同樣已經隨着時間的推移下降的評級:

Date[0]: May 6  Rating[0]: 9  Weight[0]: 0 
Date[1]: May 7  Rating[1]: 7  Weight[1]: 1 
Date[2]: May 8  Rating[2]: 5  Weight[2]: 2 
Date[3]: May 9  Rating[3]: 3  Weight[3]: 3 
Date[4]: May 10  Rating[4]: 1  Weight[4]: 4 

計算將是:

(9*0 + 7*1 + 5*2 + 3*3 + 1*4)/(0 + 1 + 2 + 3 + 4) = (0+7+10+9+4)/10 = 3.0 

選擇重量使得較大的權重對應我想有更多的重量的收視率。

0

要進行加權平均,不是將加權總數除以得分數,而是將加權總數除以總權重。

說明

當你這樣做的N分數中的正常平均其範圍可以從0到maxScore,您可以通過將所有的成績開始:

score1 + score2 + ... + scoreN 

此值的範圍,取決於個人分數,從0到maxScore * N。因此,要改變它的範圍從0到maxScore,我們應該N劃分:

(score1 + score2 + ... + scoreN)/N 

如果你做一個加權平均,總的分數有不同的公式:

score1 * weight1 + score2 * weight2 + ... + scoreN * weightN 

這不更長的範圍是從0到N * maxScore,所以再劃分N沒有任何意義。它的範圍從0到:

maxScore * weight1 + maxScore * weight2 + ... + maxScore * weightN 

這就是maxScore * totalWeight。因此,爲了您的加權總改造成一個加權平均,我們需要的總重量來劃分:

(score1 * weight1 + ... + scoreN * weightN)/(weight1 + ... + weightN) 

請注意,如果您設置的每重量等於1,你會得到一個正常的平均公式,這是一個表明我們可能已經完成了這個數學計劃。

+0

丹,我的問題是如何解決時間加權的問題? – user2990084

+0

嗯,我想我回答了你提出的問題 - 當你做一個時間加權時,如何讓平均值有意義,就像你在問題中描述的那樣。你已經想出了每個分數的重要性,所以如果你覺得它會給人爲的低分結果,那是因爲你沒有加權平均分。 –

+1

我認爲@collapsar的評論是關注這個問題的唯一答案。不管怎麼說,還是要謝謝你。 – user2990084