Skill 寫法圖鑑

algo-rec-cf

asgard-ai-platform | 資料與分析 | 原文 | MIT

用協同過濾依使用者行為模式做推薦

中文翻譯

---
name: "algo-rec-cf"
description: "實作協同過濾(collaborative filtering),依使用者行為模式做推薦。當使用者需要從使用者與項目的互動資料建立推薦引擎、找出相似的使用者或項目、或預測評分時使用,即使他們說的是「買了這個的人也買了」、「相似的使用者」或「依行為推薦」也一樣。"
metadata:
  category: "WP-36 推薦系統"
  tags: ["recommendation", "collaborative-filtering", "similarity"]
---

# 協同過濾(Collaborative Filtering)

## 概述

協同過濾依據群體的使用者行為模式來推薦項目。以使用者為基礎的 CF 找相似的使用者;以項目為基礎的 CF 找相似的項目。以使用者為基礎的複雜度是 O(U² × I),以項目為基礎的是 O(I² × U),其中 U=使用者數、I=項目數。

## 何時使用

**觸發條件:**
- 要從使用者與項目的互動資料(評分、點擊、購買)建立推薦
- 要做出「和你類似的使用者也喜歡」或「常一起購買」的模式

**何時不要用:**
- 完全沒有互動資料時(冷啟動,改用內容式過濾)
- 項目特徵比行為模式更重要時(用內容式)

## 演算法

```
鐵律:CF 需要「足夠」的互動資料
矩陣很稀疏(填充率 < 1%)時,相似度的計算不可靠。
最低可行標準:每位使用者評過 5 個以上的項目,每個項目
有 5 則以上的評分。低於這個標準,就退回內容式或熱門度推薦。
```

### 階段 1:輸入驗證
載入使用者與項目的互動矩陣。檢查稀疏程度,並過濾掉低於最低互動門檻的使用者/項目。
**關卡:** 矩陣稀疏度 < 99%、達到最低互動門檻。

### 階段 2:核心演算法
**以使用者為基礎的 CF:**
1. 計算使用者兩兩之間的相似度(餘弦或 Pearson 相關係數)
2. 對目標使用者,找出最相似的前 K 位使用者
3. 預測評分:相似使用者評分的加權平均

**以項目為基礎的 CF:**
1. 從共同評分的模式計算項目兩兩之間的相似度
2. 對目標項目,找出最相似的前 K 個項目
3. 預測:該使用者對相似項目評分的加權平均

### 階段 3:驗證
留出 20% 的互動資料做測試。計算 RMSE、MAE,或 precision@K / recall@K。
**關卡:** RMSE 低於基準線(全域平均預測器)。

### 階段 4:輸出
回傳前 N 名推薦,附上預測分數。

## 輸出格式

```json
{
  "recommendations": [{"item_id": "123", "predicted_score": 4.2, "similar_items_used": 5}],
  "metadata": {"method": "item-based", "similarity": "cosine", "k_neighbors": 20, "sparsity": 0.97}
}
```

## 範例

### 輸入輸出範例
**輸入:** 5 位使用者 × 5 個項目的評分矩陣,目標:user1、item5
**預期:** 預測評分是依 user1 評過的項目裡,與 item5 相似者的加權相似度算出來的

### 邊界情況
| 輸入 | 預期 | 原因 |
|-------|----------|-----|
| 新使用者,沒有評分 | 無法推薦 | 冷啟動,退回熱門度推薦 |
| 所有使用者都評過的項目 | 區分度低 | 高人氣 ≠ 個人化的匹配 |
| 只有一個共同項目 | 相似度不可靠 | 需要多個共同評分,相似度才穩定 |

## 常見陷阱

- **擴展性**:使用者數百萬時,以使用者為基礎的 CF 是 O(U²)。要用近似最近鄰(LSH),或改用以項目為基礎的 CF(項目目錄通常比較小)。
- **熱門度偏誤**:熱門項目的共同評分比較多,會墊高它們的相似度分數。要用熱門度的倒數做正規化。
- **隱性 vs 顯性回饋**:點擊/瀏覽(隱性)和評分(顯性)的處理方式不同。隱性資料要用信心權重。
- **相似度指標很重要**:餘弦相似度忽略評分尺度的差異;Pearson 相關係數會考慮使用者的評分偏好。依資料特性來選。
- **灰羊(gray sheep)**:口味不尋常的使用者找不到相似的同儕。CF 對他們沒用,要考慮混合式做法。

## 參考資料

- 矩陣分解這個可擴展的替代方案,見 `references/matrix-factorization.md`
- 隱性回饋的處理,見 `references/implicit-feedback.md`

英文原文

---
name: "algo-rec-cf"
description: "Implement collaborative filtering for recommendations based on user behavior patterns. Use this skill when the user needs to build a recommendation engine from user-item interaction data, find similar users or items, or predict ratings — even if they say 'users who bought this also bought', 'similar users', or 'recommend based on behavior'."
metadata:
  category: "WP-36 推薦系統"
  tags: ["recommendation", "collaborative-filtering", "similarity"]
---

# Collaborative Filtering

## Overview

Collaborative filtering recommends items based on collective user behavior patterns. User-based CF finds similar users; item-based CF finds similar items. Computes in O(U² × I) for user-based or O(I² × U) for item-based where U=users, I=items.

## When to Use

**Trigger conditions:**
- Building recommendations from user-item interaction data (ratings, clicks, purchases)
- Finding "users like you also liked" or "frequently bought together" patterns

**When NOT to use:**
- When you have no interaction data (cold start — use content-based filtering)
- When item features matter more than behavior patterns (use content-based)

## Algorithm

```
IRON LAW: CF Requires SUFFICIENT Interaction Data
With sparse matrices (< 1% fill rate), similarity computation is
unreliable. Minimum viable: each user has rated 5+ items, each item
has 5+ ratings. Below this, fallback to content-based or popularity.
```

### Phase 1: Input Validation
Load user-item interaction matrix. Check sparsity level and filter users/items below minimum interaction threshold.
**Gate:** Matrix sparsity < 99%, minimum interaction thresholds met.

### Phase 2: Core Algorithm
**User-based CF:**
1. Compute pairwise user similarity (cosine or Pearson correlation)
2. For target user, find top-K most similar users
3. Predict rating: weighted average of similar users' ratings

**Item-based CF:**
1. Compute pairwise item similarity from co-rating patterns
2. For target item, find top-K most similar items
3. Predict: weighted average of user's ratings on similar items

### Phase 3: Verification
Hold out 20% of interactions for testing. Compute RMSE, MAE, or precision@K / recall@K.
**Gate:** RMSE below baseline (global mean predictor).

### Phase 4: Output
Return top-N recommendations with predicted scores.

## Output Format

```json
{
  "recommendations": [{"item_id": "123", "predicted_score": 4.2, "similar_items_used": 5}],
  "metadata": {"method": "item-based", "similarity": "cosine", "k_neighbors": 20, "sparsity": 0.97}
}
```

## Examples

### Sample I/O
**Input:** 5 users × 5 items rating matrix, target: user1, item5
**Expected:** Predicted rating based on weighted similarity of user1's rated items similar to item5

### Edge Cases
| Input | Expected | Why |
|-------|----------|-----|
| New user, no ratings | Cannot recommend | Cold start — fallback to popularity |
| Item rated by all users | Low differentiation | High popularity ≠ personalized match |
| Single shared item | Unreliable similarity | Need multiple co-ratings for stable similarity |

## Gotchas

- **Scalability**: User-based CF with millions of users is O(U²). Use approximate nearest neighbors (LSH) or switch to item-based CF (item catalog is usually smaller).
- **Popularity bias**: Popular items have more co-ratings, inflating their similarity scores. Normalize by inverse popularity.
- **Implicit vs explicit feedback**: Clicks/views (implicit) need different treatment than ratings (explicit). Use confidence weighting for implicit data.
- **Similarity metric matters**: Cosine similarity ignores rating scale differences; Pearson correlation accounts for user rating biases. Choose based on data characteristics.
- **Gray sheep**: Users with unusual taste patterns have no similar peers. CF fails for them — consider hybrid approaches.

## References

- For matrix factorization as a scalable alternative, see `references/matrix-factorization.md`
- For implicit feedback handling, see `references/implicit-feedback.md`