2009-07-13 12 views
3

良いアルゴリズムの推奨をお探しです。複数のソースを使用して成果を標準化する

私はユーザーと業績があります。ユーザーはAchievementsを作成し、他のユーザーに提供します。各達成度には、ユーザーが指定するポイント値が関連付けられます。ユーザーの合計得点は、すべての成果の合計です。

基本的に

Achievement : 
    owner = Alias 
    points = int 

User : 
    achievements = list(Achievement) 
    def points() : 
     sum([achievements.points]) 

[OK]を、ので、このシステムは明らかに非常にゲームが可能です。あなたは多くのアカウントを作り、お互いに多くの成果をあげることができます。ポイントの値をユーザーが指定したものとは異なるものにスケールすることで、これを少し減らそうとしています。

  1. すべてのユーザーが正直であると仮定しても、それほど違いはありません。ポイント値を正規化するにはどうすればよいですか? 1人のユーザーが簡単な成果ごとに5ポイントを与え、別のユーザーが10ポイントを与えます。どのようにして1つの値に正規化できますか?目標は、ポイントが難易度に比例する分布になります。
  2. ポイント値を判断できないユーザーがいる場合は、達成したユーザーの数に基づいて難易度をどのように把握できますか?
  3. ユーザーは大部分が分割されたグループに分割され、1人のユーザーが他のグループ全体に対して成果を出すと仮定します。これは、前の2つのアルゴリズムに役立ちますか?たとえば、ユーザーAは奇数で終了するユーザーにのみ成果を与え、ユーザーBは偶数で終了するユーザーに成果を与えます。
  4. 誰もが悪意のある人であれば、ユーザーがポイント値を過大に膨らませることができなくなる可能性はどれくらいありますか?

:与えるユーザーの品質は、彼が受けたどのように多くの実績に関連するどのような方法ではありません。多くの恩人は、何も受け取っていないボットですが、特定のアクションを実行するとユーザーに自動的に報酬を与えます。

私の現在の計画は、このようなものです。私は私からの成果を得ている10ポイント/人の割り当てを持っています。合計55人に10の業績を出すと、私の配分は550になります。そして、これはそれを持っている人の数に基づいて各業績に与えられます。分布が[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]人で、各達成度を得た場合、ポイント値は[50, 25, 16.6, 12.5, 10, 8.3, 7.1, 6.25, 5.5, 5]になります。

私のアプローチや代替案に関する問題は、歓迎され、感謝しています。また、私が逃したと考えることができる他の事例を投稿し、それらをリストに追加します。ありがとう!

答えて

0

は、私はあなたのシステムでは、などのstackoverflow、ディグ、スラッシュドット、のように、あなたの基本的な目標は、彼らの行動は

一般的に、我々は特定

  • 推進

    1. Indentify正直なユーザーにあることを考えます正直なユーザーの行動:サイトに長い間存在していて、他のユーザーやあなたによって審査されたアカウント。スタックオーバフローはこれに対する評判スコアを使用し、slashdotはカルマポイントを使用します。

      これらの正直なユーザーを特定すると、評判スコアに比例して投票数をカウントすることができます。ユーザーが自分の業績をより信頼しているように感じることができます。

      したがって、新しいアカウントの初期スコアを10にすることができます。そのユーザーは任意の数の業績を与えることができますが、実際の合計金額は10です(提案する比例配分など)。つまり、新しいユーザーが100点の成果(同じポイント数の価値がある)を与えた場合、スコアは10点であるため1点になります。その後、そのユーザーは他のユーザーからの成果を得てスコアが増加します。

      基本的には、pagerankを使用することをお勧めしますが、Webページをランキングするのではなく、ユーザーをランキングし、ハイパーリンクの代わりに、そのユーザーが他のユーザーに与えた成果をリンクします。

      これは、この問題を解決する方法の1つです。他にも多くのものがあります。それはあなたの特定のニーズに依存します。オークションは常に楽しいです。コミュニティがその業績にもたらす価格(スコア)を確立するために、実際に達成される前に、すべての人に業績に入札させることができます。人々が持っている「お金」の量を制限する必要があります。

  • +1

    ありがとうございます。私はページランクのアプローチをしたがっているだろうが、多くのユーザーは実際には成果を上げていない単なる「ボット」である。人々はこれらのボットを作りますが、「10ポイント」が容易さを意味するものに常に同意するわけではありません。私はむしろ、達成度に関する明示的な入札を避け、暗黙の特性を値にするようにしたいと思います。これに照らして、私のアルゴリズムは「最良の」方法ですか? –

    +0

    あなたの説明で私は混乱しています。すなわち、「私には10点/人の割り当てがあり、私から達成しました」と言うとき。あなた、ウェブサイトの所有者を指す「私」、またはウェブサイト上のアカウントを持つ人を指していますか? –

    +0

    申し訳ありませんが、*私*は達成を与える人でした。ウェブサイトの誰でもそれらを与えることができます。ポストの言い換え。 –

    0

    私は自分のサイトでこの種の問題に苦労しています。あなたがベースラインとして使用できる既存のデータの大きなコーパスを持っている場合、スコアの正規化はかなり効果的であるようです。

    SELECT AVG(Points) AS user_average, 
    STDDEV_POP(Points) AS user_stddev 
    FROM Achievements WHERE Owner = X 
    

    は文脈自由「Zスコア」を算出するために、これらの値を使用します:

    $zscore = ($rating - $user_average)/$user_stddev; 
    

    平均値と標準偏差を取得まず、ユーザーの作成した成果の平均値と標準偏差を取得すべて achievments:

    SELECT AVG(Points) AS all_average, 
    STDDEV_POP(Points) AS all_stddev 
    FROM Achievements 
    

    は、正規化された "Tスコア" を作成するには、これらの値を使用します。

    $tscore = $all_average + ($all_stddev * $zscore); 
    

    次に、達成度の値の内部表現としてtスコアを使用します。 YMMV。 :)

    +0

    興味深い...あなたの入力は$ ratingであり、出力は$ tscore rightですか?私が思っているのは、なぜユーザーの評価を全く信用しているのかということです。コーパスはより多くの情報を持っていると思われます。 –

    +0

    コメントの長さに制限があるため、別の回答として私の回答をご覧ください。私はここに新しいです、多分私は間違ったサイトを使用していますか? –

    0

    正解ですが、$定格が入力され、$ tscoreは正規化された出力です。

    理想的には、誰もが同じ業績で得点を割り当てます。愚かな成果、控えめな成果のための10ポイント、真に壮大な成果のための50ポイント、または何でも。しかし、スコアの割り当てに関しては、人々の行動は大きく異なります。いくつかは非常に寛大で、すべての成果を最大にすることができます。他のものは厳密かつ正確であり、達成の難しさに関連して慎重にその尺度に従う。他の人は、人々がポイントを心配し、自分が作成したすべての成果に対して最小値を割り当てることは馬鹿だと思うかもしれません。

    正規化では、これらの個々の異常を処理し、すべての評価を同じスケールに合わせようとします。それは彼らがオリンピックの審査員の得点と同じようなものです。ユーザーがアチーブメントに割り当てた値を「盲目的に信頼」しているわけではありませんが、システムの一部であればそれを考慮する必要があります。それ以外の場合は、達成度のポイント値をハードコーディングし、作成可能な頻度を制限し、最悪の虐待を抑えるように思えるかもしれません。しかし、正規化の後に、の値がの場合、それが何の価値があるのか​​を知ることができるので、スコアは有用です。それは、人々が業績の平均値と分布からさらに離れるほど、自分の価値がベースラインに向かって正規化されるため、人々がシステムを「ゲーム」するのを困難にします。

    私は専門的に訓練されたプログラマーではないことを言及する必要があります。私は統計クラスやそれ以上の高等数学を取ったことはありません。私自身の理解の限界のために、おそらく私はこれを説明するのに最良の人ではない。しかし、私は自分のサイトで同様の問題(ユーザーからユーザーへの評価)に苦しんでおり、多くのアプローチを試した後、これは最も有望なようです。実装のインスピレーションのほとんどはhttp://www.ericdigests.org/2003-4/score-normilization.htmlから来ていますので、あなたもそれを読むことをお勧めします。

    関連する問題