本文へ移動
Xアルゴリズム解体新書
10第四部9

合計したあとの調整

26項目を足したら終わりではない。新人枠・作者減衰・フォロー外割引が順に掛かる。

この章で分かること

  • 新人枠が「1件だけの席」であることが分かる
  • 連投が不利になる度合いを数値で言える
  • フォロー中でも割引されるケースを説明できる

26項目を合計したあと、3つの調整が順番に掛かります。ここを知らないと「点数が高いはずなのに」の説明がつきません。

その前に ─ オフセット変換

まず、合計値が負になった投稿の扱いです。負のスコアは 00.001 という極めて狭い帯域に線形圧縮されます。

調整① 新人枠 ─ 1リクエストにつき1件だけ

ここは最も誤解が多い部分です。「新人アカウントが全体的に優遇される」仕組みではありません

effective[best_idx] = effective[best_idx].max(target);
掛け算ではなく max。1件だけを引き上げます。author_cold_start.rs:306

target は「点数降順に並べたときの16番目のスコア」です。つまりあなたのフィードを作るたびに、条件を満たす投稿の中から1件だけを選んで、16位相当まで持ち上げる。席を1つ確保するイメージです。

条件
返信でない必須
リポストでない必須
著者のフォロワー数1,000人以下
その投稿の表示回数1,000回未満
点数付き候補内の順位上位85%以内
投稿の年齢(一部の実験群のみ)24時間以内

調整② 同じ作者の連投は減点される

同じ著者の投稿が並ぶと、2本目以降に倍率が掛かります。

1.000
1本目
0.625
2本目
0.438
3本目
0.344
4本目
0.297
5本目
0.273
6本目

倍率 = (1 − 0.25) × 0.5k + 0.25

kは同じ作者で自分より上位にある投稿の本数です。ranking_scorer.rs:643-645

k は「同じ作者で、自分より上位にある投稿の本数」です。1本目は減衰なし、2本目で0.625倍、3本目で0.4375倍。下限は0.25倍です。同じ人が1つのフィードを埋め尽くすことはできません。

調整③ フォロー外は0.75倍

フォローされていないアカウントの投稿には、一律 ×0.75 が掛かります。そして、ここが見落とされがちです。

状況倍率
フォロー中 × オリジナル投稿1.00
フォロー中 × 返信・リポスト0.75
フォロー外0.75
トピック指定時のフォロー外0.50

適用の順番

Phoenix予測
 → Σ(予測値 × ウェイト)     ※相互フォロー+15はウェイト側に内包
 → オフセット変換
 → 新人枠(1件だけ16位相当へ引き上げ)
 → 同一作者の減衰(×0.75·0.5^k+0.25)
 → フォロー外割引(×0.75)
ranking_scorer.rs:851-887

順番が意味を持ちます。新人枠で持ち上げられた1件も、そのあとの減衰と割引を受けます。16位相当に上げられても、フォロー外なら ×0.75 されて実質的にはもう少し下になります。

第2章の計算機で、下の3つのつまみを動かしてみてください。同じ予測でも最終スコアがどれだけ変わるかが見えます。

スコア計算機

左は「AIがそう予測した確率」です。実際の回数ではありません。動かすと右の点数が変わります。

同じ作者の
  • 40.00%×0.5=+0.200
  • 5.00%×5=+0.250
  • 3.00%×1=+0.030
  • 0.60%×5=+0.030
  • 0.40%×20=+0.080
  • 0.50%×5=+0.025
  • 0.80%×2=+0.016
  • 0.30%×4=+0.012
  • 12.00%×0.4=+0.048
  • 4.00%×0.2=+0.008
  • 6.00%×0.05=+0.003
  • 5.00%×0.05=+0.003
  • 25秒×0.004=+0.100
  • 0.05%×-43.2=-0.022
  • 0.02%×-31.2=-0.006
  • 0.02%×-58.8=-0.012
  • 0.01%×-234=-0.023
  • 55.00%×-0.02=-0.011
最終スコア
0.5486
プラスの合計
+0.804
マイナスの合計
−0.074
差引
+0.731
オフセット変換+0.001
0.7315
同一作者の減衰(1本目)1本目は減衰なし
×1.0000
フォロー外割引フォロー外のため適用
×0.75

この計算機は新人枠とDPP多様化を含んでいません。

計算手順 ranking_scorer.rs:460-562

既定値 param.rs:308-474