
ケース面接
2026/11/03
技術設計面接(システムデザイン面接)のお題「映画サブスクの推薦機能」を題材に、事前に押さえておく知識、面接で引き出せる前提、論点、模範解答、よくあるつまずきを順に解説します。
ほかのお題の解説は技術設計面接の解説と模範解答まとめにあります。
この記事で使う設計の基礎は、日本語のシステムデザイン面接の教材 SystemDesign InterviewCat で詳しく学べます。この記事の各節に関係する章は次のとおりです。
InterviewCat の章 | この記事で関係する節 |
|---|---|
SystemDesign InterviewCat の全体像 | |
面接で見られることと進め方 | |
事前知識、4. 全体構成(夜間バッチ) | |
5. 観た直後の反映 | |
4. 全体構成(推薦結果ストア)、5. 表示時の処理 | |
5. 表示時の処理(配信中の作品をメモリに持つ) | |
5. 人気順への切り替え、8. 障害への備え | |
7. 良い推薦の測り方(表示ログの集計) |
設計面接では、お題を聞いた時点で「たぶんこの作りだろう」という仮説を持ち、前提を聞くたびにそれを確かめたり崩したりします。推薦機能のお題なら、まず「会員ごとのおすすめを、いつ計算するか」の選択肢を押さえておきます。夜のうちにまとめて計算して保存しておくか、トップ画面を開くたびにその場で計算するか、その組み合わせか、です。
推薦の計算とは、会員ごとに全作品へ「この人が観そうな度合い」の点を付け、点の高い順に並べることです。たとえば『ローマの休日』を最後まで観た人には、同じ作品を最後まで観た人がよく観ている作品ほど高い点が付きます。点を付ける計算式をモデルと呼びます。この節では、会員の A さんが 21 時に『ローマの休日』を観終えてトップ画面に戻る場面と、その日の 15 時に配信が終わった作品を例にして、方式を比べます。
A さんがトップ画面を開くと、端末は推薦 API に「この会員のおすすめ」を問い合わせます。推薦 API が答えを返すには、夜のうちに計算しておいた並びを読むか、その場で計算するかのどちらかが要ります。

A さんがトップ画面を開いたとき、方式ごとに裏で起きることを並べます。
事前に計算する(バッチ):毎晩、全会員について作品を採点して並べ、上位の並びを推薦結果ストアに保存します。表示のときは会員 ID で 1 回読むだけなので速く、21 時台に大勢が開いても計算は増えません。重いモデルも夜のうちに時間をかけて回せます。弱いところは、計算した時点の情報で固定されることです。そこから 2 つのことが起きます。15 時に配信が終わった作品が A さんの並びに残り、観終えたばかりの『ローマの休日』も次に開いたときにまだおすすめに出ます。トップ画面を開かない会員の分まで計算するので、無駄も出ます。
表示のたびに計算する(オンライン):A さんがトップ画面を開くたびに、A さんの履歴を読み、作品を採点して並べます。事前に計算する方式と比べると、配信の終了や『ローマの休日』を観たことをその場で反映でき、開かない会員の分を計算する無駄もありません。その代わり、採点が終わるまで応答が返らないので、モデルが重いほど応答時間の上限に収まりにくくなります。21 時台には開いた人数の分だけ計算が増えるので、その山に合わせた計算用のサーバーを常に用意しておく必要があります。
組み合わせる:重い計算は事前に済ませ、表示のときは保存した並びを読んで、軽い処理だけをします。軽い処理とは、配信が終わった作品を除く、観た作品を外す、決まった枠に作品を差し込む、のように、モデルを使わず配信中の作品の一覧などと突き合わせるだけで済むものです。事前に計算する方式の速さを保ったまま、固定される弱みのうち急ぎのものだけを表示のときに直せます。その代わり、表示のときに参照する情報(配信中の作品の一覧など)を常に新しく保つ仕組みが別に要ります。
どの方式でも、推薦の計算が止まったときに何を出すかは別に決めておく必要があります。保存した並びが読めない、または時間内に返せないときは、全員共通の人気順のような計算の要らない答えに切り替えます。
方式の違いは、「21 時台に大勢が開いたとき」「昼に配信が終わったとき」「観終えた直後」の 3 つの場面で比べると分かりやすくなります。
方式 | 21 時台に大勢が開いたとき、表示のたびの仕事は | 15 時に配信が終わった作品は | A さんが『ローマの休日』を観終えてトップへ戻ったとき |
|---|---|---|---|
事前に計算する | 保存した並びを 1 回読むだけ | 翌晩の計算まで並びに残る | 『ローマの休日』がまだ出る |
表示のたびに計算する | 開いた人数の分だけ作品を採点する | 次に開いたときから消える | 観たことを反映した並びが出る |
組み合わせる | 読み取りと、一覧と突き合わせる軽い処理だけ | 表示のときに除くので、次に開いたときから消える | 『ローマの休日』を外し、似た作品を前に出すところまでは反映できる |
表から分かるとおり、事前に計算する方式は速いが変化に遅れ、表示のたびに計算する方式は変化に追いつくが、21 時台の山に合わせて計算の用意が要ります。組み合わせる方式は両方の良いところを取れますが、表示のときに参照する情報を新しく保つ仕組みと、計算が止まったときの切り替え先が別に要ります。
夜に済ませる重い計算は、ふつう 2 つの手順に分けます。全会員と全作品の組をすべて細かく採点すると重いので、まず手早い方法で 1 人あたり数百本に絞り(候補生成)、その数百本だけを細かく採点して並べます(ランキング)。YouTube もこの 2 つの手順で、数百万本から数百本に絞ってから並べています。
候補生成の方法には大きく 2 つあり、このお題では新作の扱いで違いが出ます。
お題文だけを読んだ段階では、次の仮説を置きがちです。どれも筋は悪くありませんが、前提を聞くと一部が崩れます。答え合わせは「隠れていた前提を見直す」で行います。
仮説 | 中身 | 確かめること |
|---|---|---|
1 | 毎晩全会員分を計算して保存し、表示のときはそれを返すだけでよい | 応答時間、配信が終わる時刻、観た直後の扱い、表示を約束した作品があるか |
2 | 視聴履歴から協調フィルタリングで推薦すればよい | 新作の数、評価の有無、1 つの会員を何人で使うか |
3 | おすすめのクリック率で良し悪しを測ればよい | このサービスが最終的に何を良くしたいか、効果が出るまでの期間 |
4 | 精度の高い深層学習のモデルを使えばよい | GPU、費用、作れる人の数、作品数の伸び |
面接官から示されるお題は次のとおりです。
本日はシステムの設計方法についてディスカッションしたいと思います。今、動画配信サービスで映画をもっと観てもらうために、おすすめ作品の推薦機能を作ることを考えています。トップ画面に、会員ごとのおすすめ作品の列を表示したいです
▼このお題は CaseMatch の AI 面接で、面接官に前提を質問しながら練習できます。
前提は質問すれば答えてもらえます。面接で引き出せる前提を、推薦をいつ計算するかの選び方に関わるものとそれ以外に分けて並べます。種類の列は、機能要件、非機能要件、制約、将来の計画のどれにあたるかです。値は面接官の答えそのままです。設計への影響の列は、次の節の問いを考えてから読んでください。
事前知識の比較表の 3 つの場面(利用の集中、配信の終了、観た直後)と、応答時間、計算が止まったときの扱い、計算にかけられる費用を決める前提です。
種類 | 前提 | 値 | 設計への影響 |
|---|---|---|---|
非機能 | 規模 | 会員150万人、作品1万本 | 表示のたびに全作品を採点すると、ピークの計算量が大きい |
非機能 | ピーク | 21時台に同時50万人 | 表示のときの仕事を、保存した並びの読み取りと軽い処理に限る |
非機能 | 応答時間 | 推薦200ms以内 | 重いモデルは表示のときに回さない |
非機能 | 履歴の反映 | 履歴反映は翌日まででよい | 本体の計算は日次のバッチでよい |
機能 | 表示する数 | トップの列には20作品を表示する | 除外で減るぶん、保存する並びは 20 より多く持つ |
機能 | 観た直後 | 観た直後におすすめを変えたい | 翌日反映とぶつかる。直後の分だけ別に流す |
制約 | 期限切れ | 期限切れ作品はすぐ表示から消す | 夜の計算結果に任せず、表示のときに除く |
制約 | 配信期限 | 配信期限は権利で決まり、毎日0時のほか不定期にも終わる | 配信中の作品の一覧を随時更新する |
制約 | 障害時 | 障害時は人気順にする | 人気順を事前に用意し、時間切れでも切り替える |
制約 | ログの置き場 | 視聴ログは日次でDWHに入る | 夜間バッチの入力はそのまま使える。直後の視聴は別の経路が要る |
制約 | GPU | 社内にGPUは無く、使うなら調達が要る | CPU で回る手法から始める |
制約 | 費用 | 推薦の計算と配信にかかる費用は月200万円以内 | 常時動くサーバーより、夜だけ動くバッチに寄せる |
将来 | 作品数 | 作品数を2年で10倍にする計画がある | 全組を採点する計算は伸ばせないので、候補を絞ってから並べる |
目標、データの中身、表示のルール、体制のように、どの方式を選んでも別に設計が要る前提です。
種類 | 前提 | 値 | 設計への影響 |
|---|---|---|---|
機能 | 目標 | おすすめから再生される作品を増やし、解約率を月3%から2.5%に下げたい | クリックだけでなく解約率まで測る |
機能 | 効果の判断 | 効果はA/Bテストで、1か月の視聴時間と解約率を見て判断する | テストは 1 か月より短くできない |
機能 | 作る範囲 | 検索や作品詳細ページの関連作品は対象外で、トップの1列だけを作る | 作るのは 1 列の API だけ |
機能 | 新作 | 新作は月約100本追加される | 視聴の記録がない作品を出す方法が要る |
機能 | R指定 | R指定の作品は、子ども向けを多く観ている会員のおすすめに出さない | 会員ごとの判定を持ち、表示のときにも除く |
機能 | 配給契約 | 特定作品を一定回数表示する配給契約がある | 好みの順位とは別に差し込む枠が要る |
機能 | 契約の確認 | 配給契約の表示回数は月単位で、達成状況を営業が週次で確認する | 表示した作品をログに残して数える |
非機能 | 会員の出入り | 新規会員は月約3万人、解約率は月約3% | 履歴のない会員を毎日迎える |
制約 | 視聴ログの中身 | 視聴ログは1日約800万イベント(再生・一時停止・停止・到達位置) | どこまで観たかを好みの手がかりにできる |
制約 | 評価 | 評価会員は1割未満、視聴到達位置は全員分ある | 星の評価ではなく視聴の記録で学ぶ |
制約 | 作品の情報 | 作品の情報はジャンル・出演者・監督・公開年・あらすじが揃っている | 新作は内容ベースで出せる |
制約 | 家族共有 | 家族共有が多いがプロフィール機能はない | 1 つの履歴に複数人の好みが混ざる |
制約 | 端末 | 端末はテレビ6割・スマホ3割・PC1割、テレビアプリは更新が数か月遅れる | 推薦の中身はサーバー側だけで変えられるようにする |
制約 | 今のトップ | 今のトップ画面は、全員に同じ人気ランキングを出している | 比べる相手と、障害時の切り替え先がすでにある |
制約 | A/B の仕組み | 会員単位で割り当てるA/Bテストの仕組みがある | 割り当ては作らず、表示ログに群を残す |
制約 | 体制 | ML担当は2名、データ基盤は別チーム | 運用の手間が少ない作りにする |
制約 | 期間 | 4か月後にA/Bテストを始め、効果が出たら全会員に広げる | 最初は簡単なモデルで測れる形を先に作る |
お題文は「会員ごとのおすすめ作品の列を表示したい」としか言っていません。前提の表は、質問して初めて出てきたものです。設計への影響を見る前に、あらためて前提を読み直し、お題文の裏に何が隠れていたかを考えます。先に次の問いを考えてから、前提の表の「設計への影響」の列と見比べてください。
前提の多くは単独では難しくありません。難しいのは 2 つが互いに逆を向いているところで、このお題では次の 3 組です。これがそのまま、面接の後半で詳しく問われる 3 つの論点(深掘り)になります。
ぶつかる前提 | なぜぶつかるか | 解き方 |
|---|---|---|
推薦 200ms、21 時台に同時 50 万人 × 期限切れはすぐ消す、観た直後に変えたい | 速さのためには事前に計算したいが、事前の結果は計算した時点で固定される | 重い計算は夜に済ませ、配信の終了と観た作品の除外、契約作品の差し込みだけを表示のときに行う |
おすすめから再生される作品を増やす × 新作は月約 100 本追加される | 観た記録に寄せて並べるほど、記録のない新作は列に出ない | 20 作品のうち数枠を新作と普段観ないジャンルに使い、その反応を翌晩の計算の入力に使う |
解約率を月 3% から 2.5% に下げたい × 4 か月後に A/B テストを始める(効果は 1 か月の視聴時間と解約率で判断) | すぐ測れるクリックは目標から遠く、解約率は始めてから 1 か月以上たたないと判断できない | すぐ動く指標と判断に使う指標を分け、日々はおすすめからの再生と視聴到達位置を見て、判断は解約率で行う |
仮説 | 崩した前提 | 置き換え |
|---|---|---|
1. 毎晩計算して返すだけ | 期限切れはすぐ消す、配信は不定期にも終わる、観た直後に変えたい、配給契約 | 「重い計算は毎晩」は正しい。崩れるのは「返すだけ」で、表示のときに配信の終了と観た作品を除き、契約と新作の枠を差し込む |
2. 協調フィルタリングで十分 | 新作は月約 100 本、評価会員は 1 割未満、家族共有 | 評価ではなく視聴到達位置で学ぶ。新作は作品の情報を使う内容ベースで出し始め、家族で混ざった好みには列に複数の好みの作品を並べて応える |
3. クリック率で測る | 解約率を下げたい、1 か月の視聴時間と解約率で判断する | クリックは日々の確認にとどめ、判断は視聴時間と解約率で行う。テストは 1 か月以上回す |
4. 深層学習のモデル | GPU が無い、ML 担当 2 名、4 か月後に開始、月 200 万円 | CPU で回る行列分解などの手法で始め、測れる形を先に作る。モデルは A/B で入れ替えればよい |
このお題は推薦アルゴリズムの選び方を問うように見えます。しかし実際に問われるのは、毎晩の計算と表示のときの処理をどう分けて 200ms を守るか、好みと探索をどう混ぜるか、その効果を解約率という遅い指標でどう判断するかです。
論点は 3 つあり、重さの順に事前計算と表示時の処理の分担、精度と多様性の両立、良い推薦の測り方です。推薦アルゴリズムの名前や細かい手法は深く問われません。
模範解答の深掘り(5〜7)では、論点ごとに「弱い答え」「よい答え」「より良い答え」を並べ、何が足りないかを示しています。
面接での問答の順には合わせず、このお題への答えを 1 つの設計としてまとめた解答例です。設計の筋は、重い推薦の計算は毎晩のバッチで済ませて会員ごとに保存し、表示のときは保存した並びを読んで配信中の作品の一覧などと突き合わせる軽い処理だけをし、間に合わないときは人気順に切り替える、というものです。前提に無いことは仮定として置き、その旨を書いています。
前提を確かめたうえで、最初に作る範囲を次のように切ります。
テレビアプリは更新が数か月遅れるので、アプリは今の人気ランキングの列と同じ形で 20 作品を受け取って並べるだけにし、何をどの順で出すかはすべてサーバー側で決めます。
見積もりで出すのは、構成を決める 3 つの数字だけです。どれも前提の値から計算できます。
見積もり | 計算 | 決まること |
|---|---|---|
1 回の表示の仕事 | 表示 1 回 × 作品 1 万本 = 1 万回の採点(保存した並びなら読み取り 1 回) | 表示のときはモデルを回さず、保存した並びを読む |
毎晩の計算 | 会員 150 万人 × 作品 1 万本 = 150 億組 | 候補を数百本に絞ってから並べる |
表示する数 | トップの列の 20 作品 + 表示のときに除く作品の分 | 保存する並びは 20 本より多く持つ |
推薦結果は毎晩まるごと作り直す使い捨ての表とし、表示のときに変わり得る情報(配信中かどうか、契約の残り回数)は別の表に持って、表示のときに突き合わせます。中心になる表は次の 4 つです。
表 | 主な項目 | 書き換え |
|---|---|---|
推薦結果 | 会員 ID、作品 ID の並び(20 本より多め)、R 指定を除くかの判定、計算日、モデルの版 | 毎晩、新しい並びを全部書き終えてから、推薦 API が読む先を新しい並びに替える |
作品 | 作品 ID、配信期限、配信中かどうか、R 指定かどうか、ジャンル、追加日 | 配信の終了や新作の追加のたびに更新する |
配給契約 | 作品 ID、月の目標表示回数、今月の表示回数 | 表示ログから数え直して更新する |
表示ログ | 会員 ID、表示した 20 作品と位置、枠の種類(好み、探索、新作、契約、人気順)、A/B の群、日時 | 追記のみ |
並びを 20 本より多めに持つのは、表示のときに配信の終了、観た作品、R 指定を除いても 20 本が残るようにするためです。何本持つかは、表示のときに除かれる本数を見て決めます。
会員がトップ画面を開いたときに通るのは推薦 API と、そこから読むストアだけです。推薦の計算は夜のバッチで、配信の終了と観た直後の変化は随時の小さな更新で、それぞれ表示とは別に動きます。

色を付けた推薦 API がこの設計の要で、表示のときの処理はここに集め、モデルは呼びません。
夜間バッチは CPU のマネージドな基盤で夜だけ動かし、常に動くのは推薦 API とストアだけにして、月 200 万円の中に収めます。データ基盤は別チームなので、DWH からの読み出しと表示ログの取り込みは、そのチームが用意している既存の取り込みの仕組みを使います(仮定)。
実例:YouTube の推薦は、候補生成で数百本に絞り、別のモデルで並べる 2 つの手順でできています。候補生成には、数十ミリ秒の応答時間の中で数百万本を採点するために、近似の近傍検索を使っています(Covington ほか, 2016)。Google の推薦システムの教材も、候補生成、採点、並べ替え直しの 3 つの手順に分け、最後の並べ替え直しで鮮度や多様性を整えると説明しています(Google for Developers)。
代わりの案:推薦の計算そのものを Amazon Personalize のようなマネージドな推薦サービスに任せる構成も有力です。まとめて全会員分を出すバッチの推薦(AWS, バッチの推薦)と、問い合わせのたびに返すリアルタイムの推薦の両方があります。リアルタイムの推薦では、条件に合わない作品をフィルタで除くと、その代わりに条件に合う次の作品が入ります(AWS, リアルタイムの推薦のフィルタ)。指定した割合の作品を別の条件で選んで差し込むプロモーションもあります(AWS, プロモーション)。ML 担当 2 名で 4 か月という前提に合います。その場合も、配信の終了の除外と人気順への切り替えは自前の推薦 API に残します。外部のサービスが止まったときにも 200ms 以内で人気順を返す必要があるからです。
推薦の並びは毎晩計算して保存し、表示のときはそれを読んで、配信中の作品の一覧などと突き合わせるだけで済む処理(除外と差し込み)だけを行います。最初の仮説の 1 は、ここで崩れます。毎晩計算する点は残し、「返すだけ」を「読んで直してから返す」に替えます。表示のたびに計算する方式を選ばないのは、履歴の反映は翌日まででよく、表示のたびに計算しても得るものが少ないからです。そのうえ 21 時台の山に合わせた計算用のサーバーを常に用意することになり、月 200 万円、GPU なし、ML 担当 2 名という前提と合いません。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | トップを開くたびにモデルで推薦を計算します | 21 時台は開いた人数の分だけ計算が増え、常に動かすサーバーの費用と運用が前提に合わず、重いモデルほど 200ms が苦しくなる |
よい答え | 毎晩全会員分を計算して保存し、表示のときはそれを返します | 夜の計算のあとに配信が終わった作品や、今観た作品がそのまま出る。推薦が止まったときの答えがない |
より良い答え | 毎晩計算して保存し、表示のときに除外と差し込みを行い、間に合わなければ人気順を返します | なし(中身は下の 5 つ) |
より良い答えの中身は次のとおりです。
この構成で最初に詰まるのは推薦 API ではなく、夜間バッチの終わる時刻です。作品が 10 倍になると候補生成の計算が増え、朝までに終わらない日が出ます。その日は前日の並びを使い続け、表示のときの除外で配信の終了には追いつけるので、読者に見えるのは並びが 1 日古いことだけです。
実例:Amazon Personalize は、全会員分をまとめて出すバッチの推薦と、問い合わせのたびに返すリアルタイムの推薦を分けて提供しています。バッチはジョブ開始の 15 分前までのデータしか使わないので、リアルタイムの推薦と完全には一致しないと明記しています(AWS, バッチの推薦)。Eugene Yan は、学習や索引作りを行うオフラインの環境と、その成果物を使って 1 件ずつの問い合わせに答えるオンラインの環境に分ける構成を、多くの企業の例とともに整理しています(Eugene Yan, 2021)。
20 作品のうち大半は好みに近い順で埋め、残りの数枠を探索と新作に使い、その反応を表示ログから翌晩の計算の入力に使います。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | 好みに近い順に 20 作品を並べます | 似た作品ばかりになり、新作は記録がないので出ない |
よい答え | 普段観ないジャンルや新作も混ぜます | どれだけ、どう混ぜるかと、混ぜた結果をどう使うかがない |
より良い答え | 枠を決めて混ぜ、ジャンルが続かないように並べ、反応を翌晩の計算の入力に使います | なし(中身は下の 4 つ) |
探索の枠を増やすと、短い期間ではおすすめからの再生が減ることがあります。好みに近い作品の枠を探索に譲るからです。探索の効果は長く使い続けてもらえるかに出るので、枠の数は 7 の長めの A/B テストで決めます。
実例:Netflix は、多くのアカウントが家族で共有されており、プロフィールを作れるようにしたあとも 1 つのプロフィールを複数人で使う例が多いため、誰が観ていても見つけられるように推薦を混ぜていると書いています。好みだけで並べるより、人気の度合いを適度に混ぜたほうがうまくいくとも述べています(Gomez-Uribe, Hunt, 2015)。Spotify は、聴く曲の幅が広い利用者ほど有料への転換や継続が多い一方で、推薦から聴く曲は幅が狭くなりやすいと報告しています(Anderson ほか, 2020)。
すぐ動く指標と判断に使う指標を分け、日々はおすすめからの再生と視聴到達位置を確認し、効果の判断は前提どおり 1 か月の視聴時間と解約率で行います。
答えの段階 | 答え | 足りないところ |
|---|---|---|
弱い答え | 推薦の精度を測ります | 何を、何のために測るかがない |
よい答え | クリック率と視聴完了率を A/B テストで比べます | 目標の解約率まで届いているか分からない。テストの期間がない |
より良い答え | すぐ動く指標と判断に使う指標を分け、解約率で判断できるだけの期間 A/B テストを回します | なし(中身は下の 4 つ) |
A/B の群は既存の会員単位の仕組みで割り当てます。家族で共有している会員は、群が会員単位なので家族全員が同じ群に入り、家族の中で見える列が群ごとに分かれることはありません。表示ログに群を残し、DWH で群ごとに集計します。
実例:Netflix は、売上が会員数に比例する定額制なので、推薦の良し悪しを中期の視聴の量と解約率で判断しています。A/B テストは会員を群に分けて通常 2〜6 か月回し、推薦の改善で月の解約率を数ポイント下げたと書いています(Gomez-Uribe, Hunt, 2015)。YouTube は、クリック率で並べると最後まで観られない釣りの動画が上に来るので、表示 1 回あたりの期待視聴時間で並べています。過去のデータでの評価は A/B の結果と相関しないことがあるので、最終判断は A/B で行うとも書いています(Covington ほか, 2016)。Google 検索の広告では、A/B テストの短期の効果が長期の効果を予測しないことがあり、長期の変化を測る方法を作っています(Hohnhold ほか, 2015)。
どこが止まっても、トップには何かしらの 20 作品が出続けます。配信が終わった作品だけは、止まったときにも出さないほうを選びます。
止まるもの | 会員に見えること | 手当て |
|---|---|---|
推薦結果ストア | 人気順の列が出る | 読み取りの時間を決めて人気順に切り替え、失敗が続いたら問い合わせを一時止める |
夜間バッチ | 前日の並びが出る | 新しい並びを全部書き終えるまで読む先を替えないので、途中の結果は出ない。並びが決めた日数より古くなったら人気順にする |
配信の終了の通知 | 終わった作品が出るおそれ | 期限の時刻が決まっている作品は、通知が届かなくても時刻で除く。不定期の終了の通知が遅れていないかを監視する |
再生イベントを受け取る処理 | 観た作品がしばらく出る | 翌日の DWH で反映される。推薦の計算には影響しない |
表示ログの取り込み | 変わらない | 契約の表示回数の集計が遅れる。ログは端末やサーバー側で再送し、ログの ID で二重に数えないようにする |
監視するのは、推薦 API の応答時間(遅いほうの 1% を含む)、人気順に切り替えた割合、推薦結果の計算日の古さ、配信が終わった作品を返した件数(0 であるべき)、契約作品の表示回数の進み具合です。
面接の後半では、運用で起きた不具合や将来の計画という形で条件が足されます。答え方は、今の設計でなぜ起きたか、何をきっかけに何をどう処理して直すか、変えずに済むところはどこか、の順です。
例 1:配信が終わった作品が、夜までおすすめに出ていた
例 2:作品数を 2 年で 10 倍にする
判断 | 選んだ案 | 捨てた案、代わりの案 | 理由 |
|---|---|---|---|
計算の時期 | 毎晩計算して保存し、表示のときは読むだけ | 表示のたびにモデルで計算 | 履歴は翌日反映でよく、21 時台の山に合わせた計算用のサーバーを常に持たずに月 200 万円に収まる |
表示のときの処理 | 配信の終了、観た作品、R 指定を除き、探索、新作、契約の枠を差し込む | 夜の結果をそのまま返す | 期限切れはすぐ消す、観た直後に変える、契約の回数を守る |
障害時 | 時間を決めて人気順に切り替える | 推薦を待ち続ける、エラーを返す | 前提どおり人気順にし、200ms を守る |
推薦の手法 | 視聴到達位置で学ぶ協調フィルタリングと、新作の内容ベース | 深層学習のモデル。代わりの案:マネージドな推薦サービス | GPU が無く、ML 担当 2 名で 4 か月後に測れる形を先に作る |
多様性 | 枠を決めて探索と新作を混ぜ、ジャンルが続かないように並べる | 好みに近い順だけ | 似た作品ばかりを避け、家族共有の混ざった好みにも応える |
測り方 | 再生と視聴到達位置で日々確認し、1 か月以上の A/B で視聴時間と解約率を見て判断 | クリック率だけ | 目標は解約率で、クリックは途中でやめる作品を上げてしまう |
つまずき | なぜ弱いか | 抜け出す一手 |
|---|---|---|
最初からアルゴリズムの名前を並べる | 応答時間や配信の終了など、構成を決める条件を取りこぼす | 応答時間、ピーク、反映の速さ、止まったときの扱いを先に聞く |
表示のたびにモデルで計算する | 21 時台の山に合わせた計算用のサーバーが常に要り、月 200 万円、GPU なし、ML 担当 2 名と合わない | 履歴は翌日まででよいので、重い計算は夜に回すと言う |
毎晩計算した結果を返すだけにする | 昼に配信が終わった作品や、今観た作品が出る | 表示のときに配信中の作品の一覧と突き合わせて除く処理を足す |
障害時は人気順、とだけ言う | 遅いだけで止まっていないときに 200ms を超える | 読み取りの時間を決め、超えたら切り替えると言う |
多様性も大事、とだけ言う | どれだけ、どう混ぜ、結果をどう使うかがない | 枠の数、並べ方、反応の返し方を言う |
新作も協調フィルタリングで出す | 追加した日の新作には視聴の記録がない | 作品の情報を使う内容ベースで出し始める |
クリック率で良し悪しを判断する | 目標の解約率まで届いているか分からない | すぐ動く指標と判断に使う指標を分け、解約率で判断できる期間テストを回す |
テレビアプリにも推薦の処理を入れる | テレビアプリは更新が数か月遅れ、直すのに時間がかかる | アプリは受け取った 20 作品を並べるだけにする |
▼解説を読んだら、同じお題を AI 面接官を相手に通しで解いてみましょう。
技術論文、技術ブログ、公式ドキュメントです。どれも開いて内容を確かめています。AWS のドキュメントは自社製品の説明を兼ねています。Netflix の論文は、公開されている PDF の写しで確かめました(原典は ACM Transactions on Management Information Systems, 2015)。
節 | 記事 | 参照した内容 |
|---|---|---|
事前知識、4, 7 | Deep Neural Networks for YouTube Recommendations(Covington ほか, RecSys 2016) | 候補生成とランキングの 2 つの手順、数十ミリ秒の応答時間、期待視聴時間で並べる理由、A/B で判断すること |
4 | Recommendation systems overview(Google for Developers) | 候補生成、採点、並べ替え直しの 3 つの手順 |
6 | Re-ranking(Google for Developers) | 並べ替え直しで鮮度と多様性を整える |
5 | System Design for Recommendations and Search(Eugene Yan, 2021) | オフラインとオンラインの環境の分け方 |
4, 5 | バッチの推薦はジョブ開始の 15 分前までのデータを使い、リアルタイムの推薦と一致しないことがある | |
4 | フィルタで除いた作品の代わりに、条件に合う次の作品が入る | |
4 | 指定した割合の作品を別の条件で選んで差し込む | |
6, 7 | The Netflix Recommender System: Algorithms, Business Value, and Innovation(Gomez-Uribe, Hunt, 2015) | 家族共有と推薦の混ぜ方、人気の混ぜ方、解約率と視聴で測る A/B テストと 2〜6 か月の期間 |
6 | Algorithmic Effects on the Diversity of Consumption on Spotify(Anderson ほか, The Web Conference 2020) | 聴く幅の広さと継続の関係、推薦で幅が狭まりやすいこと |
7 | Focus on the Long-Term: It's better for Users and Business(Hohnhold ほか, KDD 2015) | A/B テストの短期の効果が長期を予測しないこと |
▼ほかのお題の解説
公式アカウント
CaseMatch編集部
CaseMatch編集部は、就活・転職における面接対策やキャリア選択に役立つ情報を発信する編集チームです。AI面接練習サービス「CaseMatch」の運営で得た知見や、企業選考・ケース面接・自己分析に関する実践的なノウハウをもとに、候補者が納得感を持って選考に臨めるコンテンツをお届けします。
1分で完了