1

ユーザーが時間tに私のウェブサイトにアクセスし、が気にかけている特定のリンクをクリックする場合とクリックしない場合があります。クリックしたという事実と、クリックしてからの期間を記録します。これを呼び出します。d

次のようなクラスを作成できるアルゴリズムが必要です。

class ClickProbabilityEstimate {
    public void reportImpression(long id);
    public void reportClick(long id);

    public double estimateClickProbability(long id);
}

すべてのインプレッションは一意のIDを取得します。これは、クリックを報告するときに、クリックがどのインプレッションに属するかを示すために使用されます。

インプレッションが報告されてからの経過時間に基づいて、前回のクリックに必要な時間に基づいて、インプレッションがクリックを受け取る確率を返すアルゴリズムが必要です。明らかに、クリックがまだない場合、この確率は時間の経過とともに減少すると予想されます。

必要に応じて、クリック確率を0と見なす上限を設定できます(たとえば、インプレッションが発生してから1時間経過している場合は、クリックが発生しないことを確信できます)。

アルゴリズムは、スペースと時間の両方の効率が高く、エレガントでありながら、できるだけ少ない仮定を行う必要があります。実装のしやすさもいいでしょう。何か案は?

4

2 に答える 2

2

過去のインプレッションとクリックのデータを保持していると仮定すると、簡単です。たとえば、インプレッションがあり、そのインプレッションから時間d'が経過したとします。データは次の3つのグループに分けることができます。

  1. d'未満でクリックを受け取ったインプレッション
  2. d'以上後にクリックを受けたインプレッション
  3. クリックを受けたことのない印象

明らかに現在の印象はグループ(1)に含まれていないので、それを削除します。グループ(2)に含まれる確率が必要です。

P = N2 / (N2 + N3)

ここN2で、はグループ2のインプレッション数であり、同様にN3

実際の実装に関しては、最初に考えたのは、クリックを受け取った過去のインプレッションの時間dの順序付きリストと、クリックを受け取ったことがないインプレッションの数のカウントを保持し、そのリストのd' 。あなたが見つけた位置はあなたに与えるでしょうN1、そしてそれN2からリストの長さから。を引いたものN1です。

完全な粒度が必要ない場合は、代わりに過去の時間をヒストグラムとして保存できます。つまり、各要素list[n]に、少なくとも1分n以内にクリックを受け取ったインプレッションの数を含むリストを保存できますn+1。(または秒、または任意の時間間隔)その場合、簡単に計算できるように、クリックの総数を個別の変数として保持することをお勧めしますN2

(ちなみに、私はこれを作り上げたばかりですが、この種のもののための標準的なアルゴリズムがより良いかもしれないかどうかはわかりません)

于 2010-05-03T18:35:44.707 に答える
0

到着プロセス(1分あたりのクリック数)を仮定し、既存のデータを使用してその到着プロセスに分布を適合させることをお勧めします。結果は負の二項分布であると思います。これは、平均がガンマ分布である場合に、非定常平均でポアソン到着プロセスを実行したときに得られるものです。逆数(クリックあたりの分数)は、到着間プロセスの分布を示します。その名前のディストリビューションがあるかどうかはわかりませんが、経験的なディストリビューションを作成することはできます。

お役に立てれば。

于 2010-05-04T21:50:27.017 に答える