スコアリングシステム完全ガイド
複数スコアラーの仕組みと最終スコア計算
なぜ複数のスコアラーが存在するのか
第4章で説明したPhoenixモデルは19種類のエンゲージメント確率を予測しますが、それだけでは最終的なランキングは決まりません。Xのレコメンデーションシステムには、Phoenix以外にも複数のスコアラーがあります。
これらのスコアは足し算ではなく、掛け算で合成されます。つまり、一つでも弱い要素があると、全体のスコアが大きく下がります。
図5-1:最終スコアの合成(掛け算)
Phoenix Scorer
Phoenix Scorerは、機械学習モデルによる基礎スコアを計算します。19種類のエンゲージメント確率にそれぞれ重みを掛けて合計します。
Phoenix Scorer
ML予測に基づく重み付きスコア
| エンゲージメント | 重み | 備考 |
|---|---|---|
| リプライ | +13.5 | 最高重み |
| プロフィールクリック | +12 | 2番目 |
| フォロー | +4 | |
| 引用 | +1.1 | |
| リポスト | +1 | |
| いいね | +0.5 | 最低重み |
| 通報 | -10 | 最大ペナルティ |
| ブロック | -10 | |
| ミュート | -5 | |
| 興味なし | -1.5 |
fn calculate_phoenix_score(predictions: &EngagementPredictions) -> f32 {
let mut score = 0.0;
// ポジティブエンゲージメント
score += predictions.favorited * 0.5;
score += predictions.retweeted * 1.0;
score += predictions.replied * 13.5; // 最高重み
score += predictions.profile_clicked * 12.0; // 2番目
score += predictions.followed * 4.0;
// ネガティブエンゲージメント
score += predictions.reported * (-10.0);
score += predictions.blocked * (-10.0);
score += predictions.muted * (-5.0);
return score;
}リプライ確率がわずか5%でも、重み13.5により最大の貢献者となります。「いいね」より「リプライ」や「プロフィールクリック」を誘発するコンテンツが有利です。
OON Scorer
OON(Out of Network)Scorerは、投稿者と閲覧者の関係に基づいてスコアを調整します。
OON Scorer
フォロー関係によるスコア調整
fn calculate_oon_score(user_id: &str, author_id: &str, follow_graph: &FollowGraph) -> f32 {
if follow_graph.is_following(user_id, author_id) {
return 1.0; // フォロー中(ペナルティなし)
} else {
return 0.85; // フォロー外(15%ペナルティ)
}
}まずフォロワー基盤を構築し、IN(ネットワーク内)で強いエンゲージメントを生み出すことが重要です。フォロワーでの反応が良ければ、OONへの拡大も期待できます。
Author Diversity Scorer
このスコアラーは、同じ著者からの連続投稿がタイムラインを支配するのを防ぎます。
Author Diversity Scorer
同一著者の連続表示を抑制
| 同一著者数 | 係数 (0.95^n) | ペナルティ |
|---|---|---|
| 0件目 | 1 | 0% |
| 1件目 | 0.95 | 5% |
| 2件目 | 0.9025 | 10% |
| 3件目 | 0.857 | 14% |
| 4件目 | 0.815 | 19% |
| 5件目 | 0.774 | 23% |
| 9件目 | 0.63 | 37% |
fn calculate_diversity_score(author_id: &str, timeline: &[Tweet]) -> f32 {
// タイムライン内の同一著者投稿数をカウント
let same_author_count = timeline
.iter()
.filter(|t| t.author_id == author_id)
.count();
// 0.95の指数減衰を適用
let decay_factor = 0.95_f32.powf(same_author_count as f32);
return decay_factor;
}- 投稿間隔は最低4時間空ける
- 1日の投稿数は3件程度に
- 量より質を重視する
VQV Scorer
VQV(Video Quality View)は、特定の条件を満たす動画コンテンツに品質ボーナスを提供します。
VQV Scorer
動画品質視聴ボーナス
fn is_quality_view(view: &VideoView, video: &Video) -> bool {
// 条件1: 最小視聴時間
let min_duration = min(10_000, video.duration_ms / 2);
let duration_ok = view.watch_time_ms >= min_duration;
// 条件2: 音声オン
let audio_ok = view.audio_enabled;
// 条件3: スクロールで通過していない
let not_scrolled = view.not_scrolled_past;
return duration_ok && audio_ok && not_scrolled;
}この章のまとめ
第5章 重要ポイント
- スコアは掛け算で合成 - 一つでも弱い要素があると全体に大きく影響
- Phoenix Score - リプライ(13.5)とプロフィールクリック(12.0)が最高重み
- OON Score - 非フォロワーは15%ペナルティ(0.85係数)
- Author Diversity - 連続投稿は最大40%減
- VQV Score - 品質動画視聴は50%ボーナス(1.5倍)
- 投稿前に「これはリプライを呼ぶか?」と自問する
- 投稿間隔は4時間以上空ける
- 動画は最初の3秒と10秒地点に注力
- まずフォロワーとのエンゲージメントを優先
なぜ複数のスコアラーが掛け算で合成されるのですか?
掛け算による合成には重要な特性があります:一つでも弱い要素があると、全体のスコアが大きく下がります。例えば、Phoenix Scoreが高くてもAuthor Diversityペナルティがある場合、全体スコアが低下します。これにより、すべての次元でバランスの取れた品質が確保されます。
OON Scorerの15%ペナルティはどのくらい影響がありますか?
非フォロワーは0.85の係数(15%ペナルティ)を受けます。例:Phoenix Score 1.365の投稿がフォロワーに届く場合は1.365 x 1.0 = 1.365、非フォロワーに届く場合は1.365 x 0.85 = 1.16となります。まずフォロワー基盤を構築し、IN(ネットワーク内)で強いエンゲージメントを生み出すことが重要です。
Author Diversityの0.95減衰とは何ですか?
Author Diversityは、同じ著者が複数回表示される際に指数減衰(0.95^n)を適用します。1番目は1.0(ペナルティなし)、2番目は0.95(5%減少)、3番目は0.9025(10%減少)となります。最適なリーチのために投稿間隔を4時間以上空けることを推奨します。
VQV Scorerのボーナスを得るための条件は?
VQV(Video Quality View)は3つの条件すべてを満たす必要があります:(1) 最小視聴時間 - min(10秒, 動画時間/2)を視聴、(2) 音声オン - ミュートされた自動再生は不可、(3) スクロールで通過していない - 意図的な視聴であること。すべて満たすと1.5倍の乗数(50%ボーナス)を獲得できます。
スコアを最大化するための優先順位は?
最高優先度はリプライを誘発するコンテンツ(重み13.5)とプロフィールクリック(重み12.0)です。中優先度はフォロワーエンゲージメント優先(OON 1.0 vs 0.85)と動画品質(VQV 1.5倍)。基盤優先度は投稿頻度(4時間以上の間隔)とネガティブシグナル回避(通報-10、ブロック-10)です。
理解度チェック
スコアの合成方法は?
OONペナルティの係数は?
Author Diversityの減衰係数は?
VQVボーナスの倍率は?
Phoenix Scoreで最も重み付けが高いエンゲージメントは?
次回予告:第6章 - フィルター
第6章では、スコアリング前にコンテンツを候補から除外できる「フィルター」について説明します。どんなに高いスコアでも、フィルターされたコンテンツは表示されません。