代表的な面接トピック

推薦システムをオフラインおよびオンラインでどのように評価するか?

データ難しい
Offer.cc 編集チーム公開日 更新日

質問

フィードは1リクエストあたり10件の推薦を表示します。候補となるランカーが過去の暗黙的フィードバックログ上でNDCG@10を改善しました。これをローンチすべきかどうか、どのように判断しますか?

質問と使いどころ

フィードは1リクエストあたり10件の推薦を表示します。候補となるランカーが過去の暗黙的フィードバックログ上でNDCG@10を改善しました。ローンチを決定するために必要なオフライン評価とオンライン実験を設計してください。データ分割、候補セット、ランキング指標および精度以外の指標、露出バイアス、実験設計、ガードレール、そしてオフラインの勝者がオンラインで敗北した際の調査について網羅してください。

これは、機械学習エンジニアリングおよびデータサイエンスの代表的な面接質問です。推薦プラットフォーム全体のアーキテクチャではなく、モデルの決定を評価します。このシナリオでは、クリック、保存、視聴時間などの暗黙的フィードバックを前提としています。これらのログは旧システムが露出させたアイテムの結果を記録したものであり、露出されなかったアイテムに対する無反応は「不明」であって、検証済みの「ネガティブ」ではありません。

面接官が見ているポイント

基本的な回答は、precision、recall、NDCGを列挙します。優れた回答は、まずユーザーのアクションと配信サーフェスを定義します。同じ指標でも検索結果、ホームフィード、「類似アイテム」では意味が異なる可能性があるためです。次に、ベースラインと候補モデルを比較可能にします。具体的には、同じタイムカットオフ、ユーザー、適格性ルール、候補プール、ラベル、K の値を使用します。

次のシグナルは、候補者がログフィードバックの限界を認識しているかどうかです。行単位のランダム分割は、その後の行動をトレーニングにリークさせる可能性があります。ネガティブサンプリングはモデルの順序付けを変えてしまうことがあります。過去のログは以前のポリシーによって選択されたアイテムを優遇し、嗜好を露出や順位と交絡させます。オフライン評価は脆弱または安全でないモデルを却下することはできますが、それ自体でポリシー変更による因果的なプロダクト効果を確定させることはできません。

最後に、面接官はローンチプロセスを求めています。それには、安定した無作為化割り当て、露出ログ、プライマリアウトカム、システムおよびユーザー危害のガードレール、検出力と期間の計画、ロールバック基準、セグメント別の検証、そしてオフラインとオンラインの結果が食い違った場合の整然とした診断が含まれます。

回答前に確認すべき質問

  • どのユーザーの意思決定を改善すべきか? 少なくとも1つの有用なアイテムを素早く見つけることが目的であればMRRが重要になる可能性があり、10件のフィードのすべての位置が価値をもたらすのであればNDCGや累積エンゲージメントの方が適しています。
  • ラベルはどのように定義され、マチュア化(確定)されるか? クリック、一定基準を満たす視聴、保存、購入、明示的な「低評価」はそれぞれ異なる効用を表します。遅行する購入には、十分な観察期間が必要です。
  • ランカーは全カタログをスコアリングするのか、それとも上流のリトリーバーからの候補をスコアリングするのか? 評価は本番の候補境界を維持する必要があります。リトリーバルが提供しなかった関連アイテムをランカーが救出することはできません。
  • 過去の各時点でどのアイテムが適格だったか? 削除済み、利用不可、または未作成のアイテムが過去の候補セットに含まれてはなりません。
  • プロダクトで無作為化実験を実行できるか? 実行できない場合、結論はより慎重でなければなりません。ログに記録された傾向スコアは反事実推定量(counterfactual estimators)を支えることができますが、それは旧ポリシーが新ポリシーの選択肢に対して十分なサポート(カバレッジ)を与えていた場合に限られます。
  • どの結果を悪化させてはならないか? エンゲージメントが上昇しても、レイテンシ、エラー、非表示や通報、コンテンツの偏り、サプライヤーの露出、下流の品質などがモデルの制約となる場合があります。

30秒の回答フレームワーク

「NDCG@10の向上のみでローンチすることはありません。まず、プロダクトの目標、ラベル、K、時点確定スプリット、適格なカタログ、候補生成の境界、比較ベースラインを固定します。同一のサンプルに対してrecall@10とNDCG@10を報告し、プロダクトが必要とする場合はカバレッジや多様性を追加し、新規ユーザー、スパースユーザー、新規アイテム、主要市場ごとにスライス分析を行います。露出されなかったアイテムは不明として扱い、ネガティブサンプリングの手法を文書化します。候補モデルがオフラインチェックを通過した場合、割り当てと露出のログ、1つの主要なユーザー/ビジネスアウトカム、レイテンシと危害のガードレール、事前に定義した最小検出効果(MDE)と期間、ロールバック閾値を備えたユーザー単位の無作為化実験を実行します。オフラインでの勝利はテストに進む資格を与えるだけであり、プロダクトを改善するかどうかは無作為化オンライン結果によって判断します。」

ステップごとの解決策

ステップ 1: 指標を選択する前に意思決定を定義する

1行の推定対象(estimand)を作成します。「対象母集団からの適格なフィードリクエストに対して、現在のランカーを候補モデルに置き換えることで、実験期間中の主要なユーザーアウトカムはどれだけ変化するか?」 これにより、母集団、介入、アウトカム、期間が固定されます。また、後から都合のよい指標を選んでしまうことを防ぎます。

少なくとも本番ランカーと、単純な人気度または新着度のベースラインを使用します。単純なベースラインは、一見高度に見えて安価なポリシーに勝てないパイプラインを検出します。質問がランカーに特化している場合は、適格性フィルターと候補生成を固定します。リトリーバルも変更する場合は、それを別個のトリートメントとして評価するか、結果をエンドツーエンドのシステム比較として明記します。

ステップ 2: 時点確定のオフラインサンプルを再構築する

時間 t における各評価リクエストに対して、t までに入手可能な情報のみから特徴量を構築し、t におけるカタログおよび適格性状態を使用し、その後のインタラクションをラベルウィンドウに配置します。トレーニングが検証やテストに先行するように時間で分割します。パーティションをまたぐことで正解が漏洩する場合は、関連イベントをユーザーまたはセッションごとにグループ化します。候補モデルの結果を検査する前に、特徴量定義、フィルタリング、重複排除、ラベルのマチュア化期間を固定します。

ベースラインと候補モデルを、同一のユーザー、リクエスト、候補プール、ラベル、カットオフ、K で実行します。特徴量の欠損や未確定ラベルによって除外されたトラフィック量を報告します。そうしないと、モデルが難しいケースを暗黙的に除外することで『改善』したように見えてしまう可能性があります。新規ユーザーとリピートユーザー、スパースユーザーとヘビーユーザー、新規アイテムと既存アイテム、ロケール、デバイス、カタログカテゴリなどの重要なスライスを評価します。

ステップ 3: 各指標をプロダクトの主張と一致させる

ホールドアウトされた関連アイテムが {A, C} であり、上位5件のランキングが [A, B, D, C, E] であるとします。Precision@5 は 2 / 5、recall@5 は 2 / 2 = 1 です。NDCGは順位1のアイテムに順位4の関連アイテムよりも高い重みを与えるため、要素の包含だけでなく順序もテストします。MRRは、最初の関連結果が体験を大きく左右する場合に有用です。

これらの値は異なる問いに答えます。

  • Recall@K: ラベル付けされた関連セットのうち、上位 K 件に入った割合。
  • Precision@K: 表示された K 件のアイテムのうち、関連とラベル付けされた割合(暗黙的ログには偽陰性が含まれる可能性があります)。
  • NDCG@K: 順位割引を適用した上で、よりゲインの高いアイテムがより上位に表示されているか。
  • MRR@K: 最初にラベル付けされた関連アイテムがどれだけ早く表示されるか。
  • カバレッジ、多様性、新規性、またはキャリブレーション: ポリシーがカタログを十分にカバーしているか、重複リストを避けているか、発見の価値を提供しているか、またはユーザーの興味とミックスを一致させているか。プロダクトのリスクに直結するもののみを選択します。

配信指標(レイテンシ、エラー率およびフォールバック率、特徴量の可用性、スコア分布)を追加します。オンラインのバジェットを満たせないオフラインモデルはローンチできないためです。単一のオフライン指標が万能の勝者になることはありません。

ステップ 4: ログフィードバックのバイアスを可視化する

旧システムはユーザーが見るものを選択していました。クリックは露出と肯定的な行動の両方を意味します。クリックがないことは、無関心、悪い順位、または非露出を意味する可能性があります。観察されなかったすべてのカタログアイテムを確実なネガティブに変えてはなりません。可能であれば、全カタログランキングが最もクリーンな比較となります。評価でネガティブをサンプリングする場合は、すべてのモデルで同じ候補プール、サンプラー、サンプルサイズ、乱数シードを使用し、それらを明記した上で、サンプリングされた指標値を全カタログの値と比較しないようにします。ネガティブサンプラーが異なると、モデルの見かけの順位が逆転することさえあります。

オフラインの結果は、ログを記録したポリシーに依存し続けます。無作為化された露出傾向スコアがログに記録されている場合、逆傾向スコア(IPS)、自己正規化IPS、または二重に頑健な推定量(doubly robust estimators)によってポリシーバイアスを軽減できますが、旧ポリシーがアイテムをほとんど露出させなかった領域で証拠を生み出すことはできません。オーバーラップと重みの分散を報告し、少数の極端な重みによって結果が左右されている推定量はクリップまたは除外します。

ステップ 5: オフラインの生き残りをオンライン実験に移す

推薦の露出前に、安定した単位(通常はユーザーまたはアカウント)で無作為化します。1人のトリートメントが他の人のアウトカムに影響を与える可能性がある場合(世帯やソーシャルグループなど)は、クラスターを使用します。割り当て、適格性、生成されたスレート、順位、露出、アクション、モデルバージョン、フォールバックを記録します。割り当てられたトリートメントごとに分析(intent-to-treat)し、候補群から障害やフォールバックが除外されないようにします。

設定された目標に合致する主要なユーザーまたはビジネスアウトカムを1つ選択します。最小検出効果(MDE)、有意水準、検出力、割り当て比率、期間、トリートメント期間を事前に定義します。ガードレールには、p95レイテンシ、エラー、非表示、通報、離脱、コンテンツの偏り、下流の品質などを含めることができます。影響を読み取る前に、サンプル比率の不均衡(SRM)、割り当ての永続性、露出率、テレメトリの完全性、ラベルの確定度合いの同等性を検証します。

小さく可逆的なランプアップから開始し、ガードレールが維持されている間のみ拡大します。停止およびロールバックの条件を事前に定義します。季節性や遅行するアウトカムには、完全なビジネスサイクルやより長い観察期間が必要になる場合があります。都合の良い日に繰り返しデータを確認(ピーキング)して停止することは、通常の固定期間テストを無効にします。

ステップ 6: オフラインの勝者がオンラインで負ける原因を診断する

モデルを即座に破棄するのではなく、以下の順序で境界を調査します。

  1. 実験の完全性: サンプル比率の不一致(SRM)、不安定な割り当て、露出ログの欠落、不均等なフォールバック率。
  2. 配信の同等性(サービングパリティ): オンラインの特徴量、フィルター、候補生成、鮮度、レイテンシ、モデルバージョンがオフラインのリプレイと一致しているか。
  3. 評価の構築: 未来情報のリーク、非現実的なランダムスプリット、異なる候補プール、または都合の良いネガティブサンプラー。
  4. 目標の不一致: プロダクトが満足度、リテンション、購入、多様な発見を重視しているのに対し、NDCGは過去のクリックを最適化していた。
  5. ポリシーバイアス: 候補モデルが過去のログに存在しないアイテムや順位を探索したため、オフラインラベルがそれらを過小評価または誤評価した。
  6. 不均一な効果(Heterogeneous effects): 全体的な向上の裏で、新規ユーザー、特定の市場、アイテムクラス、または高価値セグメントでの損失が隠れていた。
  7. ダイナミクス: 新規性効果(novelty effect)の減衰、クリエイターやサプライヤーの適応、または新しい露出分布による将来のトレーニングデータの変化。

決定ルールには3つの階層があります。オフラインの証拠は、候補モデルが既知のログ条件下で妥当かつ安全であることを示し、無作為化オンライン実験はその因果的なプロダクト効果を推定し、本番モニタリングはユーザー、インベントリ、フィードバックループが変化してもその効果が持続するかどうかを確認します。

優れた回答例

「まず、2つのランカーを比較可能にします。評価カットオフ、適格アイテム、リトリーバル出力、ラベル、ユーザー、K=10 を同一にし、すべての特徴量がリクエスト時点で存在していなければなりません。時間外(out-of-time)テストセットを使用し、除外データとラベルのマチュア化状況を報告します。本番モデルと並んで人気度ベースラインも維持します。それに勝てない複雑な候補モデルは準備不足だからです。

NDCG@10は順序の評価に有用ですが、それ自体がローンチの決定打ではありません。recall@10を追加し、カタログカバレッジやリスト内多様性などのプロダクト固有の指標、さらにレイテンシとフォールバック率を加えます。結果には、コールドユーザー、スパースユーザー、新規アイテム、重要市場向けのスライスが必要です。また、ネガティブがどのように形成されたかも明記します。過去のポリシーが露出を決定していたため、露出されなかったアイテムは不明です。ネガティブをサンプリングする場合、すべてのモデルが同じサンプラーを使用する必要があり、その数値は全カタログの指標とは比較できません。

候補モデルがそれらのチェックをクリアした場合、ユーザー単位で永続的に無作為化を行います。割り当てと露出はアウトカムの前に記録され、分析ではフォールバックも割り当てられた群に含めたままにします。1つの主要アウトカム、最小検出効果、検出力、期間、ガードレール、ロールバック基準を事前に定義します。リフトを解釈する前に、サンプル比率のバランスとテレメトリを検証します。

オフラインのNDCGが上昇したにもかかわらずオンラインのアウトカムが低下した場合、まず実験の完全性と配信の同等性を確認します。次に、時間リーク、候補およびサンプリングの不一致、プロキシ指標の破綻、露出バイアス、セグメント効果を調査します。オフラインの結果は候補モデルに実験の機会を与えるだけであり、ガードレールを満たしたオンラインの因果結果のみがローンチを正当化します。」

よくある間違い

  • NDCGの向上だけでローンチする → オフラインのランキング品質は過去のラベルに依存しており、因果的なプロダクト効果を推定するものではありません → スクリーニングのシグナルとして使用し、無作為化オンライン結果とガードレールを必須とします。
  • インタラクション行をランダムに分割する → その後のユーザー行動やアイテムの状態がトレーニングにリークする可能性があります → 時点確定スプリットを使用し、その時点で存在していた特徴量、カタログ適格性、ラベルを構築します。
  • 明示せずにリトリーバルとランキングを同時に変更する → 向上の要因を特定できなくなります → ランカーの比較では候補生成を固定するか、トリートメントをエンドツーエンドとして定義します。
  • 未観察のすべてのアイテムをネガティブとして扱う → 多くのアイテムは一度も露出されていません → 露出された非アクションと未知のアイテムを区別し、評価候補セットを文書化します。
  • モデルごとに異なるネガティブサンプルを使用する → 比較によってモデルとテスト難易度の両方が変わってしまいます → プール、サンプラー、サイズ、シードを共通化するか、全カタログをランキングします。
  • 集計指標を1つだけ報告する → 全体の平均値がコールドスタートや特定市場の失敗を隠してしまうことがあります → 集計値と並んで、事前定義されたスライスと不確実性を報告します。
  • プロダクト目標を持たずにクリック数を最適化する → ポジションバイアスやクリックベイトは、満足度を損ないながらプロキシを改善してしまう可能性があります → モデル選定の前に、主要アウトカムと危害ガードレールを定義します。
  • トリートメント分析からフォールバックを除外する → これにより実際の配信障害が隠され、無作為化が損なわれます → intent-to-treat 分析を使用し、フォールバックをガードレールとして報告します。
  • 実験がポジティブになるまでデータを確認し続ける(ピーキング) → 計画外の停止を繰り返すと偽陽性が増加します → 期間と分析計画を固定するか、有効な逐次設計(sequential design)を使用します。
  • オフラインとオンラインのギャップを即座に「モデルドリフト」と決めつける → ログの破損、パリティの欠如、割り当ての問題でも同じ症状が頻繁に発生します → モデルの挙動を疑う前に、実験の完全性と配信パリティを確認します。

フォローアップの質問と回答

フォローアップ 1: オンライン実験を実行できない場合はどうしますか?

時間外リプレイ、複数の過去期間ウィンドウ、強力なベースライン、スライステスト、シャドウ配信または限定的なカナリア配信を使用して運用リスクを低減しますが、因果的なプロダクトへの影響は未証明のままであると明記します。無作為化傾向スコアがログに記録され、新ポリシーに十分なサポートがある場合は、オーバーラップと分散の診断を伴うIPS、自己正規化IPS、または二重に頑健な推定量を追加します。ただし、それらをログのサポート範囲を超えて外挿する許可として提示してはなりません。

フォローアップ 2: 新規ユーザーや新規アイテムはどのように評価しますか?

評価カットオフ時点で明示的なコールドスタートコホートを作成します。その後のユーザー履歴やアイテムインタラクションが特徴量に入らないようにします。フォールバックカバレッジ、初回セッションのアウトカム、新規アイテムの露出、最初の意味のあるアクションまでの時間を比較します。既存ユーザーや人気アイテムに支配された全体指標は、コールドスタートの問いには答えられません。

フォローアップ 3: 視聴時間は増加したが多様性が低下した場合はどうしますか?

事前に定義された目標と制約に立ち戻ります。多様性が長期的な満足度、カタログの健全性、ユーザーの選択肢を保護するものである場合、結果が出た後に無関係な指標を平均化するのではなく、ガードレールまたは制約付き最適化のターゲットとして扱います。セグメント別の集中度と反復露出の分布を調査し、リランカーや制約を新しいトリートメントとしてテストします。

フォローアップ 4: ユーザーではなくクラスターで無作為化すべきなのはどのような場合ですか?

トリートメントがユニット間でスピルオーバーする場合にクラスターを使用します。世帯プロファイルで画面を共有している場合、ソーシャル推薦が友人に影響を与える場合、マーケットプレイスの露出が共有在庫を変化させる場合などです。個人を無作為化すると独立性が侵害され、群が汚染されます。クラスター割り当ては有効サンプルサイズを小さくするため、検出力の計算にはクラスター内相関を含める必要があります。

フォローアップ 5: 反事実評価(Counterfactual evaluation)はA/Bテストを代替できますか?

アクション傾向スコアが既知であり、オーバーラップが十分である場合、ポリシーのスクリーニングを行うことができます。IPSは観察された報酬を重み付けして露出を補正し、自己正規化はある程度のバイアスと引き換えに分散を抑制し、二重に頑健な手法は報酬モデルと傾向スコアリングを組み合わせます。いずれも、傾向スコアの欠損、不十分なオーバーラップ、極端な重み、不正確な報酬モデルによって破綻する可能性があるため、ローンチの主張には依然として無作為化オンラインテストが有効です。

フォローアップ 6: ローンチ後に有害なフィードバックループをどのように検出しますか?

目先のエンゲージメントだけでなく、連続するコホートにわたる露出の集中度、クリエイターやサプライヤーのリーチ、カタログカバレッジ、反復インプレッション、アウトカムの品質を監視します。モデルとポリシーのバージョンをログに保存し、長期的なトレーニングデータの構成を比較し、実行可能な場合は小規模な参照ポリシーまたは探索ポリシーを維持します。集中度や危害のガードレールが事前定義された制限を超えた場合は、ポリシーをロールバックまたは制約します。

公開情報ソース

関連する質問