質問

今年の学生評議会のために、私は「歌」委員会に参加しています。私たちは歌を選びます。残念ながら、ダンスの子供たちは常に愚かな歌の選択のいくつかを嫌うことになります。今年は違うものにできると思いました。先週の木曜日、私は子供たちがソングの名前、アーティスト、ジャンル(ドロップダウンから)を提供できるように、子供たちがデータベースに曲を提出できるように簡単なPHPアプリケーションを作成しました。また、Redditに似た投票機能も実装しました。 upvoteボタンをクリックすると、曲を繰り返し、upvoteカウントを増やしました。ダウンボートでも同じです。

誰でも、データベースには、これらの曲、upvotes、downvotes、およびタイムスタンプを評価するために使用できると思った情報の3つの情報があります。しばらくの間、ランクは、単に「投票」が高い曲を上にカウントするだけで作成されました。つまり、より多くのvotvotesが少ないほど、ダウンボット(upvotes -downvotes)がリストのトップになります。それはしばらくの間機能しましたが、日曜日までにリストには約75曲があり、最初に提出された曲はリストの一番上にありました。

日曜日、ランクアルゴリズムを(upvotes -downvotes) /(currentTimestamp -CreationTimestamp)に変更しました。つまり、投票数が少ないほど、曲はリストに載っています。これはうまく機能しますが、それでも私がそれを望んでいるのではありません。

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

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

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

役に立ちましたか?

解決

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

この記事 おそらく開始するのに適した場所です。どうやらdownvotesを除いて、それを行うのに悪い方法です。より良い方法は使用することです 複雑な数学 それぞれにスコアを割り当てて、それによって並べ替えます。

これは、記事の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 統計力を指します:0.10を選択して、下限が正しいという95%の可能性があり、0.05が97.5%の確率であるなどです。

使いやすいこととして、私はスコアでデータを並べ替えますが、ユーザーにスコアを表示しません。 Upvotesとdownvotesの数のみを表示します。

他のヒント

投票数または投票数を投稿して曲を並べ替えるのはどうですか(ネガティブ +ポジティブ)?あなたの目標がすべての曲に等しい注意を払うことであれば、これは十分に聞こえます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top