2026-04-30·実装·⏱ 約 4 分
推薦システム 入門 ─ 協調フィルタリングからニューラル推薦へ
Amazon・Netflix・YouTube の中身を支える推薦アルゴリズム。協調フィルタリング・行列分解・Two-Tower・LLM 活用までの主要手法を整理します。
推薦システム は EC・動画配信・SNS のコア機能。Amazon の売上の 35%、Netflix 視聴の 80% が推薦経由とも言われます。本記事で主要手法を整理。
3 系統の推薦アプローチ
- 協調フィルタリング(CF): ユーザー × アイテム行列の類似度 / 行列分解
- コンテンツベース: アイテム特徴量 + ユーザープロファイル
- ハイブリッド: CF + コンテンツ + メタデータの統合
1. 協調フィルタリング ─ 古典の鉄板
User-User CF
似た嗜好を持つユーザーが好きなアイテムを薦める。コサイン類似度や Pearson 相関で計算。
Item-Item CF
アイテム同士の類似度を計算。Amazon の『この商品を買った人は…』はこれ。
行列分解(Matrix Factorization)
評価行列 と低ランク近似。 がユーザー埋め込み、 がアイテム埋め込み。Netflix Prize で有名に。
2. ニューラル推薦 ─ 現代の主流
Two-Tower モデル
ユーザーとアイテムをそれぞれ NN(タワー)で埋め込み、内積で関連度を計算。検索時は ANN(近似最近傍)で高速。
Two-Tower の最小実装
import torch.nn as nn
class TwoTower(nn.Module):
def __init__(self, user_dim, item_dim, emb_dim=64):
super().__init__()
self.user_tower = nn.Sequential(
nn.Linear(user_dim, 128), nn.ReLU(),
nn.Linear(128, emb_dim),
)
self.item_tower = nn.Sequential(
nn.Linear(item_dim, 128), nn.ReLU(),
nn.Linear(128, emb_dim),
)
def forward(self, user_feat, item_feat):
u = self.user_tower(user_feat)
i = self.item_tower(item_feat)
return (u * i).sum(dim=-1) # 内積Sequential Recommendation
ユーザーの 行動履歴 をシーケンスとして Transformer に入れる。SASRec / BERT4Rec が代表。
本番運用 ─ 2 段階アーキテクチャ
- 候補生成(Retrieval): 数百万アイテムから上位 100〜1000 を高速抽出 ─ Two-Tower + ANN
- 順位付け(Ranking): 候補の中からスコアリング ─ DLRM・Wide&Deep など重い NN
- ビジネスルール: 多様性確保・在庫考慮・スポンサー枠
評価指標
- Precision@k / Recall@k: 上位 k 件の精度 ・ 再現率
- NDCG: 順位を考慮した正解度
- MRR: 最初の正解の逆順位
- CTR ・ CVR ・ Watch Time: ビジネス側の指標
Cold Start 問題
新ユーザー・新アイテムには履歴がない。対策:
- コンテンツベース: メタデータでスタート
- LLM 活用: テキスト埋め込みで類似アイテム検索
- ヒューリスティック: 人気順・新着順をしばらく
- Bandit アルゴリズム: 探索と活用のバランス
学習リソース
- [線形代数を AI 視点で](/blog/linear-algebra-for-ai) ─ 行列分解の基礎
- [Transformer の数学](/blog/transformer-math) ─ Sequential Rec の前提
- [MLOps 基礎](/blog/mlops-basics) ─ 本番運用のための知識
- [E 資格 ロードマップ](/certs/e-shikaku/roadmap)
Related Articles
関連記事
- 2026-04-30実装OpenAI API 実装入門 ─ Chat / Embeddings / Function CallingOpenAI API を使ったプロダクション開発の基礎。Chat Completion・Embedding・Function Calling・ストリーミング・コスト管理まで実装パターンを網羅。
- 2026-04-30実装Vercel で AI アプリをデプロイする ─ Next.js + AI SDK 入門Vercel にデプロイする最短ルート。Next.js の AI SDK + AI Gateway で OpenAI/Claude を統合し、ストリーミングチャット UI を 1 時間で公開する手順。
- 2026-04-30実装Streamlit で 1 時間で ML デモアプリ ─ 転職に効くポートフォリオPython だけで動くインタラクティブな ML デモを Streamlit で作る方法。データ可視化・ファイルアップロード・モデル予測 UI までの最小実装。