2

私は辞書の配列を持っています。各辞書には、個々のオーディオトラックに関するデータが含まれています。私のアプリは星評価システムを使用しているため、ユーザーは1〜5個の星を追跡できます。各辞書には、次のように、トラックごとに独自の評価データがあります。

  • avgRating(例:4.6)
  • rating_5_count(トラックが受け取った5つ星の評価の数を表す整数)
  • rating_4_count
  • rating_3_count
  • rating_2_count
  • rating_1_count

アプリでトップチャートテーブルを作成しようとしています。オブジェクトをでソートした新しい配列を作成していますavgRating。を使用してオブジェクトを並べ替える方法は理解してNSSortDescriptorsいますが、ここで問題が発生しています...

並べ替え記述子としてのみ使用するavgRating場合、トラックが5つ星の評価を1つだけ受け取ると、チャートの一番上にジャンプし、4.9のトラックを数百票で打ち負かします。

トップチャート配列でこれを防ぐために最小投票数を設定することはできますが、これは行いたくありません。その後、ユーザーが増えるにつれて、最小投票数を変更する必要があります。

これは少し主観的ですが、配列を効果的にソートする方法について他に何か提案はありますか?

4

2 に答える 2

0

はい、投票の平均と数から計算された重みを返すメソッドをクラスに追加します。明らかに、体重の魔法の公式はあなた次第です。avgRating * log2(2 + number_of_votes)のようなものがそれを行う可能性があります。次に、このメソッドでソートする単一のソート記述子を使用します。

于 2012-07-14T19:16:11.883 に答える
0

このような状況に対処する方法はたくさんあります。

1つのアプローチは、評価平均の信頼度の尺度として投票数を考慮することです。平均を3に設定して開始します(例ごと)。

const double baseConfidenceRating = 3;
NSUInteger averageRating = ...;
NSUInteger voteCount = ...;

const NSUInteger baseConfidence = log10( 1000 );
double confidence = log10( 1 + voteCount ) / baseConfidence;
double confidenceWeight = fmin( confidence, 1.0 );

double confidenceRating = (1.0 - confidenceWeight) * baseConfidenceRating + confidenceWeight * averageRating;

confidenceRating次に、の代わりにに基づいて配列を並べ替えますaverageRating

必要な投票数を変更して、confidenceRatingがaverageRatingと等しくなるように、上記のアルゴリズムを微調整できます。もちろん、例で使用した関数を変更することもできます。平方根も同様に機能する可能性があります。または、線形進行ではないのはなぜですか。あなたの呼び出し。

これはもちろん単なる例であり、かなり馬鹿げたものです。投票の標準偏差は、投票数だけでなく投票の分布も考慮に入れて、アルゴリズムにインテリジェンスを追加する場合があります。5で100に100票を投じると、0から5の間にランダムに散らばった1000票よりも「自信」があります。

于 2012-07-14T20:21:13.110 に答える