株式会社パレットリンクの@y-tsukahara_palettelinkです。
突然ですが、Netflixを開いたとき「なんかいつも好みに合ってるな」と思ったことはありませんか?
「あなたへのおすすめ」「〇〇に似た作品」「今夜のイチオシ」
あそこに並んでいるのは、世界中の3億人以上が同じものを見ているわけじゃなくて、あなた専用のラインナップなんです。
「まあAIがよしなにやってくれてるんでしょ」くらいに思ってた方も多いかもしれません。でも実はNetflixってレコメンドの研究開発に毎年数百億円規模を投じていて、「どうすればユーザーが画面の前に居続けてくれるか」をかなり本気で突き詰めているんです。
じゃあ実際どうやって「あなたが好きそうなもの」を当てているのか。
この記事ではNetflixのレコメンドの仕組みを整理していきます。
全体像:レコメンドは3つのアルゴリズムの合わせ技
Netflixのレコメンドは1つの賢いAIが全部やっているわけじゃないんです。用途の違う3つのアルゴリズムを組み合わせることで、精度と多様性を両立させています。
Netflixのレコメンド全体像
① 協調フィルタリング → 「似た人」を手がかりにする
② 行列分解 → 「隠れた好み」を数値で掴む
③ コンテンツベース → 「作品の特徴」から選ぶ
↓ 3つを状況に応じてブレンド
15,000本+ → 候補数百本 → 表示する数十本
(粗く絞る) (精密に並べる)
「1つで全部できればいいのに」と思いますが、それぞれに得意・不得意があるので組み合わせることでその弱点を補い合っています。この理由は後半の比較表で見ていきましょう。
まずは3つのアルゴリズムを順に見ていきます。
アルゴリズム① 協調フィルタリング:「似た人」を手がかりにする
考え方
「趣味の似ているユーザーが好きなものをあなたにも推薦する」
友達に映画を勧めてもらう感覚に近いです。「私たちいつも同じ映画好きだよね。だったらこれも絶対好きだよ。」
そのロジックを何億人ものデータで自動化したのがこのアルゴリズムです。
仕組みのイメージ
作品A 作品B 作品C 作品D
あなた [ ♥ ♥ - ? ]
Aさん [ ♥ ♥ ♥ ♥ ]
Bさん [ - - ♥ ♥ ]
♥ = 気に入った
- = 観ていない
? = 予測したい
→ あなたとAさんは作品A・Bが共通して好き
→ 趣味が近いAさんが好きな「作品D」をあなたに推薦!
「どれくらい似ているか」の測り方
ここで使われるのが コサイン類似度 という計算方法です。難しそうな名前ですが、要するに「好みの方向性がどれくらい一致しているか」を数値で表す指標です。
向きが近い矢印を想像してみてください。ユーザーの好みを矢印で表したとき、矢印の向きが近い人ほど「趣味が似ている」と判断されます。0なら全く違う趣味、1なら完全に一致する趣味です。
「絶対的な点数」ではなく「好みの傾向」で比べるので、辛口な人と甘口な人の間でも似た趣味を検出できます。
弱点
協調フィルタリング単体では以下のような弱点が存在します。
| 問題 | 内容 |
|---|---|
| コールドスタート | 新規ユーザー・新着作品は比較するデータがなく推薦できない |
| スパース問題 | ユーザーの大半は全体の1%も観ていない。データが薄すぎる |
| 人気バイアス | 誰もが観ている人気作品ばかりが推薦されがち |
これらの弱点を補うのが、次のアルゴリズムです。
アルゴリズム② 行列分解:「隠れた好み」を数値で掴む
考え方
協調フィルタリングの「データが薄い問題」を解決するために生まれた手法です。
「ユーザーと作品それぞれの隠れた好みを数値のリストで表して照合する」 というアイデアです。
「隠れた好み」とは?
たとえば、あなたが好きな作品を分析すると、こんな傾向が見えてくるかもしれません。
あなたの隠れた好み(AIが自動で発見する)
アクション要素 : 強く好む 0.9
感動・泣ける系 : あまり好まない 0.2
テンポの速さ : 好む 0.8
海外作品かどうか : 少し好む 0.6
同じように、各作品も「アクション度・感動度・テンポ・海外感」で数値化されます。そしてユーザーの数値と作品の数値がどれだけ近いかでスコアを出します。
「アクション」「感動系」という名前はあくまで人間がつけた説明で実際にはAIが「何かの特徴」をデータから自動で見つけているだけです。現実には人間に解釈しにくい特徴が何百個も使われていて、「これが何を意味するのか」がわからないことも普通にあります。
行列分解のイメージ
「行列」という言葉が出てきますが、要するに「ユーザーと作品のスカスカな表を2つの小さな表に分解して空白を埋める」という操作です。
① まず、スカスカな表があります
ユーザーが実際に観た作品だけにスコアが入っていて、ほとんどが空欄です。
作品A 作品B 作品C 作品D 作品E
ユーザー1 [ 5 4 - - 3 ]
ユーザー2 [ - 5 4 - - ]
ユーザー3 [ 1 - 5 4 - ]
ユーザー4 [ - - - ? - ] ← ?を予測したい
② AIが「好みの傾向」を数値リストで覚えます
AIは既に入っているスコアをもとに学習して、各ユーザーと各作品を「隠れた傾向」の数値リストで表現できるようになります。
ユーザーの数値リスト(AIが学習で獲得):
ユーザー1: [0.9, 0.1] ← アクション系が好き、じっくり系は苦手
ユーザー4: [0.8, 0.2] ← 同じくアクション系寄り
作品の数値リスト(AIが学習で獲得):
作品D: [0.9, 0.1] ← アクション系の作品
③ 数値リストを掛け合わせると、スコアが出ます
ここがポイントです。ユーザー4は作品Dをまだ観ていませんが、2つの数値リストを使って計算できます。
ユーザー4: [0.8, 0.2]
作品D: [0.9, 0.1]
→ 0.8×0.9 + 0.2×0.1
= 0.72 + 0.02
= 0.74 ← スコアが高い=相性が良さそう!
つまり、「観ていない作品でも、好みの傾向が似ていればスコアが計算できる」 というわけです。これが「空白が埋まる」仕組みです。
この考え方はSpotifyの「あなたへのおすすめ曲」やAmazonの「よく一緒に購入されている商品」にも使われています。
アルゴリズム③ コンテンツベースフィルタリング:「作品の特徴」から選ぶ
考え方
「あなたが好きな作品と似た特徴を持つ作品を推薦する」
①②が「人の行動データ」を使うのに対して、このアルゴリズムは「作品そのものの中身」を使います。
仕組みのイメージ
あなたがよく観る作品のタグ:
ストレンジャー・シングス → [SF , ホラー , 青春 , 海外 ]
オルタード・カーボン → [SF , アクション , 海外 ]
→ あなたのプロフィール: SF・ホラー・アクション・海外が好き
→ 同じタグを多く持つ作品を推薦!
Netflixが分析する「作品の特徴」は思っているより多岐にわたります。
- 基本情報: ジャンル、キャスト、監督、制作年
- 映像分析: AIがシーンを自動解析し「暗い場面が多い」「アクションシーンの比率」などを抽出
- テキスト分析: あらすじや字幕から内容の雰囲気をNLPで解析
- 視聴パターン: どんな人がどのシーンで反応したか
強み
最大の強みは新しく追加されたばかりの作品でも推薦できることです。視聴データが0件でも、作品の特徴さえあれば動きます。
弱点
一方で、意外な発見はしにくいという弱点があります。あなたが知っているジャンルの中でしか推薦されないので、「こんなジャンル、自分が好きだと思ってなかったのに!」という出会いは生まれにくいです。
3つの比較:なぜ組み合わせるのか
改めて3つを並べてみます。
協調フィルタリング 行列分解 コンテンツベース
──────────────────────────────────────────────────────────────────
新規ユーザーに使える? 苦手 やや苦手 得意
新着作品に使える? 苦手 やや苦手 得意
意外な作品との出会い 得意 得意 苦手
データが少なくても動く? 苦手 苦手 得意
計算の軽さ 中程度 重い 軽い
どれか1つだと必ず穴が出てきます。だから3つをブレンドして補い合うというのがNetflixの基本戦略です。
2段階で「速さと精度」を両立する
3つのアルゴリズムの話をしてきましたが、もうひとつ重要な仕組みがあります。どうやって15,000本の中から数十本に絞り込むか、という問題です。
なぜ2段階なのか
全コンテンツに対して毎回重い計算を走らせたら、アプリを開いた瞬間に表示が追いつきません。そこでNetflixは 2段階(2Stage) で絞り込む設計にしています。
全コンテンツ(15,000本+)
│
│ Stage 1: Retrieval(高速・大雑把)
│ 「好きそうなジャンル全体」をざっくり拾う
│ 軽い計算で数百本まで絞り込む
▼
候補作品(数百本)
│
│ Stage 2: Ranking(低速・精密)
│ 「今この人にドンピシャか」を精密に予測
│ 重い計算で最終的な順位をつける
▼
表示する作品(数十本)
料理にたとえると、Stage 1は「冷蔵庫から今日使えそうな食材を取り出す」ステップで、Stage 2は「その食材でどの料理を作るか決める」ステップに近いです。
「★評価」より「視聴行動」が大事な理由
最後に、Netflixが特に重視しているデータの話をします。
「この作品に★4をつけた」という評価より、視聴中の行動の方がはるかに参考にされています。
| 行動 | レコメンドへの影響 |
|---|---|
| 最後まで完走した | 強いポジティブシグナル |
| 同じ作品を2回観た | さらに強いポジティブシグナル |
| 数分で離脱した | ネガティブシグナル |
| 予告編を繰り返し見た | 中程度のポジティブシグナル |
| 一時停止したまま長時間放置 | 弱いネガティブシグナル |
「★5をつけた映画の続編を一度も観なかった」という行動は、その★評価が本音じゃなかったことを示します。逆に「なんとなく再生したら気づいたら最後まで観てた」という行動は、本当に好きだったサインです。
まとめ
-
3つのアルゴリズムを組み合わせている
・協調フィルタリング(似た人を探す)
・行列分解(隠れた好みを数値化)
・コンテンツベース(作品の特徴で選ぶ) -
2ステージで速さと精度を両立している
・Retrieval → Ranking の順で絞り込む -
「★評価」より「視聴行動」を重視している
・完走・離脱・再視聴が本音を語る
読んでみていかがでしたでしょうか?「なんとなく動いてるAI」だと思っていたものが、意外と泥臭い仕組みの積み重ねだったりします。そこが個人的には面白いところだと思っています。
興味が湧いた方はぜひNetflixのTechBlogなんかも読んでみるとおもしろいですよ!
参考文献
パレットリンクでは、日々のつながりや学びを大切にしながら、さまざまなお役立ち記事をお届けしています。よろしければ、ぜひ「Organization」のページもご覧ください。
また、私たちと一緒に未来をつくっていく仲間も募集中です。ご興味をお持ちの方は、ぜひお気軽にお問い合わせください。一緒に新しいご縁が生まれることを楽しみにしています。