本教學目標
在這篇文章裡,我們會帶你從零開始,了解什麼是推薦系統、為什麼它能讓使用者一秒鐘就找到喜歡的東西,最後一步步寫出最簡單的實作範例。你不需要任何機器學習背景,只要有 Python 基礎,就能跟著完成。
為什麼推薦演算法重要?
- 個人化體驗:像是「這部電影你一定會喜歡」的推播,讓使用者覺得平台真的懂他們。
- 提升黏著度:當內容更貼近需求時,用戶就不容易跳離。
- 商業價值:推薦好的商品能直接帶來銷售額。
開始實作:最簡易協同過濾範例
步驟一:準備資料
- 這裡以「使用者-電影評分」為例,手動建立三筆樣本資料。
import pandas as pd
# 建立簡易的評分表 (user_id, movie_id, rating)
raw_data = {
'user_id': [1, 1, 2, 2, 3],
'movie_id': [101, 102, 101, 103, 104],
'rating': [5, 4, 5, 3, 4]
}
df = pd.DataFrame(raw_data)
print(df)
步驟二:建立使用者-電影矩陣
- 把資料轉成「使用者」為列、"電影" 為欄的矩陣,缺失值用 0 填補。
user_movie_matrix = df.pivot(index='user_id', columns='movie_id', values='rating').fillna(0)
print(user_movie_matrix)
步驟三:計算相似度(這裡用餘弦相似度)
- 先把矩陣轉成 numpy 陣列,然後利用 sklearn 的 cosine_similarity。
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# 計算使用者之間的相似度
similarity = cosine_similarity(user_movie_matrix)
print(np.round(similarity, 2))
步驟四:產生推薦清單
- 以 User 1 為例,找出最相近的另一位使用者(User 2),再把他喜歡但 User 1 未看過的電影加入建議。
# 找到與 user 1 最相似的其他人 (排除自己)
user_idx = 0 # user_id=1 的索引位置
similar_users = list(enumerate(similarity[user_idx]))
similar_users.sort(key=lambda x: -x[1]) # 降序排列
# 取第一個相似使用者的 ID (這裡是 User 2)
closest_user_id = user_movie_matrix.index[similar_users[1][0]]
print('最相近的使用者:', closest_user_id)
# 找出該使用者看過但目標使用者未看的電影
target_movies = set(user_movie_matrix.columns[user_movie_matrix.loc[user_idx] > 0])
closest_movies = set(user_movie_matrix.columns[user_movie_matrix.loc[similar_users[1][0]] > 0])
recommendations = list(closest_movies - target_movies)
print('推薦的電影 ID:', recommendations)
小結:
- 這個範例僅展示「協同過濾」的一個簡易流程,實際上還需要處理大量資料、加入權重調整、避免冷啟動問題等。