メインコンテンツへスキップ

SukoScoops

AIプログラマーによる日々の経験と研究

「DLsite-maniax-ゲームジャンル-掘り出し物ランキング」のスコア計算について

「DLsite-maniax-ゲームジャンル-掘り出し物ランキング」のスコア計算について

ランキングで使用しているスコア計算式の解説

  • #アルゴリズム
  • #DLsite

このページでは、「DLsite-maniax-ゲームジャンル-掘り出し物ランキング」で使用しているスコア計算式について解説します。

掘り出し物とは?

0~3000DL程度の作品が強くなるようにし、評価数/DL数(評価率)を重視したランキングです。

ポイントとして、評価数、DL数が極端な場合にスコアが暴れないよう補正を行っています。

入力データ

  • dl = dl_count(DL数)
  • rc = rate_count(評価数:星とか付けた人の数)
  • avg = rate_average_2dp(平均評価:0〜5、高いほど星5が多い)

事前の基準値

  • mu0 = ゲームジャンル全体の平均評価(事前集計)
  • m = 20(疑似件数:平均的な評価をする人が20人いると仮定)
  • k = 3(事前評価数)
  • d = 100(事前DL数)
  • r0 = 30(信頼度の基準値:この評価数で信頼度が約63%になる)
  • s = 3000(DL減衰開始の目安)
  • c = 2000(減衰の緩さ)

計算の流れ

1. 評価が少ない作品のブレを抑える(ベイズ平均)

bayes_avg = (mu0 * m + avg * rc) / (m + rc)

平均評価をする疑似的な件数を使って評価平均の値を補正します。

2. 評価率をなめらかにする(少数サンプル対策)

eval_rate = (rc + k) / (dl + d)

100DLあたり3件の評価があると仮定して足して、評価数が少なくても極端に上がりすぎないよう補正します。

3. 評価数の信頼度

conf = 1 - exp(-rc / r0)

評価数が少ないうちはスコアを大きく下げ、30件程度(約63%)で十分な信頼度として扱います。

4. DL数が大きすぎる作品を減衰

saturation = 1 / (1 + max(0, dl - s) / c)

3000DLまではそのままのスコアとし、それ以上売れている作品はスコアを徐々に減衰させます。

5. 品質と最終スコア

信頼度で割引いた期待値スコアを品質とし、

quality = bayes_avg * conf
final_score = quality * eval_rate * saturation

補正をかけて最終順位を決めます。

注意

現在、「最近更新のあった作品」から順に取得しているため、作品全体のランキングにはなっていません。

それはそれで、最近の評価の高いランキングにはなっているので様子を見ようと思います。

Share: