0

掲示板に投票システムを導入する予定で、ユーザーに賞を与えるための優れた効率的なアルゴリズムを探しています。私が考えている投票システムはとてもシンプルです。説明させてください。

  • ユーザーが作成したすべての投稿は、ボード上の他のすべてのユーザーによって 1 回だけ賛成または反対の投票を受けることができます。ユーザーは自分の投稿に投票できません。
  • 賛成票には 1 ポイント、反対票には 2 ポイントがかかります (簡単なバッシングやいじめを避けるため)。
  • X 日ごとに、ボード上のすべてのユーザーは、単純な式に基づいて、上下の投票に使用するポイントの量 A を受け取ります。

    A = 5 + AwardUserPerformance();
    Where AwardUserPerformance() is a function that returns a value between 0 and 10 depending on the performance of the user during the past X days.
    

ユーザーのパフォーマンスを計算するために、AwardUserPerformance() 関数内で次の変数を使用できます。

  1. T = 過去 X 日間にユーザーがオンラインで費やした時間
  2. P = 過去 X 日間にユーザーが作成した投稿の数
  3. V = 過去 X 日間にユーザーの投稿に与えられた反対票と賛成票の合計 (たとえば、ユーザーが 3 つの賛成票と 2 つの反対票を受け取った場合、V=1)

これらの変数から 0 から 10 までの数値を取得するための適切なアルゴリズムがわかりません。

4

1 に答える 1

2

これは些細な質問ではなく、「完全に一意の答え」を得ることができるとは思いません。なぜなら、必要な機能は、報酬をどのように機能させたいかによって大きく異なるからです。

最も明白なアプローチは、各指標を 0 (ひどい) と 1 (完璧) の間で正規化する方法を見つけることです。次に、各メジャーで 0 から 1 の間のスコアを取得し、それらを掛け合わせて 10 を掛けると、定義上 0 から 10 の間の数値を取得できます。時間はかなり簡単です (0 = 費やされた時間はありません) 、1 = オンラインで費やされた時間全体)、他の 2 つは最小しきい値と最大しきい値を設定し、上記のすべてを切り捨てる必要があります。例: 10 件以上の投稿 = 1、0 件の投稿 = 0、その間は n 件 / 10 です。

ただし、これには問題があります。まず、乗算効果により、3 つのいずれかが 0 になると、合計スコアがゼロになります。より一般的には、大きなスコアを獲得することは非常に難しくなります。なぜなら、どの次元でもスコアが低いと合計に大きなペナルティが課せられるからです。次に、境界の設定は任意 (最小値と最大値を決定する) か、やや複雑 (たとえば、ユーザーが観察した投稿数に基づいて最大値を設定し、90% フラクタイルを最大境界として選択できます) のいずれかです。 . これが問題である理由は、境界がサイトでのアクティビティに依存するためです。100 人のユーザーから始めた場合、99 の賛成票を獲得するのは非常に困難です。100 万人のユーザーに到達すると、それははるかに簡単になり、報酬システムは (おそらく) それに合わせて調整する必要があります。

単純な線形関数間の乗算を使用する代わりに、各メジャーを [0; にマップする任意の増加関数を使用できます。1]。勾配が減少する関数 (丸太のような) は、たとえば、適度にアクティブなユーザーには「簡単なポイント」を与えますが、高得点を獲得するのは難しくなります。これは、さまざまな関数で何が起こるかを少し視覚化するために、Excel を使用することをお勧めするケースの 1 つです。

または、乗算の問題を回避するために、分離可能な関数を使用して、合計スコアを時間スコア + 投稿スコア + 投票スコアで分割することができます。その場合、これらの各関数を 0 から開始する必要があり、それらの最大値を合計すると 10 になる必要があります。

しかし、最良のシステムは単に受け取った投票を使用することであると私は主張します。他の 2 つと関連している可能性があります (投稿せずに投票することはできず、オンラインにしないと投稿できません)。

于 2012-06-09T05:23:16.903 に答える