9

今年の生徒会では、私は「歌」委員会に所属していて、曲を選びます。残念ながら、ダンスの子供たちはいつも愚かな歌の選択のいくつかを嫌うことになります。今年は違うものにできると思いました。先週の木曜日、私は簡単なPHPアプリケーションを作成して、子供たちが曲をデータベースに送信し、曲の名前、アーティスト、ジャンルを(ドロップダウンから)提供できるようにしました。また、Redditと同様の投票機能を実装しました。賛成ボタンをクリックすると、曲が賛成され、賛成数が増えます。反対票も同じです。

だれでも、データベースには、これらの曲、賛成票、反対票、およびタイムスタンプを評価するために使用できると思った3つの情報があります。しばらくの間、ランクは単に「投票」数の多い曲を一番上に置くことによって作成されました。つまり、賛成票が多いほど、反対票が少なくなります(賛成票-反対票)がリストの一番上に表示されます。それはしばらくの間はうまくいきましたが、日曜日までにリストには約75曲があり、最初に提出された曲は単にリストの一番上にありました。

日曜日に、ランクアルゴリズムを(賛成-反対)/(CurrentTimestamp-CreationTimestamp)に変更しました。つまり、短い時間で投票数が多いほど、リストに含まれる曲の数が多くなります。これはうまくいきますが、それでも私が望む方法ではありません。

今何が起こっているのかというと、曲が作成されて投票数1に投票された瞬間、それはどこかのリストの一番上に行き着くということです。ネガティブに投票数がある曲は、子供が通常一番下までスクロールしないため、あまり表示されません。

下の曲が上に表示されるようにデータを並べ替えることができたので、人々は下の曲を見る必要があります。正直なところ、これまで「人気」アルゴリズムに取り組む必要はなかったので、どう思いますか?

ウェブサイトhttp://www.songs.taphappysoftware.com-これをここに置くべきかどうかはわかりませんが、ダンスで不要な曲が発生する可能性があります:0

4

2 に答える 2

6

それはとても良い質問です。ここで尋ねられたいくつかの同様の質問があります。

この記事はおそらく始めるのに良い場所です。どうやら賛成票から反対票を引いたものはそれを行うのに悪い方法です。より良い方法は、複雑な数学を使用してそれぞれにスコアを割り当て、それで並べ替えることです。

記事のRubyのスコアリング関数は次のとおりです。

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

posは正の評価の数、nは評価の総数でありpower、統計的検出力を指します。下限が正しい確率が95%になるように0.10を選択し、97.5%の確率になるように0.05を選択します。

使いやすさとして、スコアでデータを並べ替えますが、ユーザーにはスコアを表示しません。賛成票と反対票の数だけを表示します。

于 2010-09-14T01:23:20.203 に答える
0

時間や投票数(マイナス+プラス)で曲を並べ替えてみませんか?あなたの目標がすべての曲に平等な注意を払うことであるならば、これは十分によく聞こえます。

于 2010-09-14T01:24:54.683 に答える