0
点赞
收藏
分享

微信扫一扫

推荐系统入门:用几十行代码实现“猜你喜欢”功能

当你浏览完一件“不锈钢餐盘”退出后,页面下方立刻刷出了一排各种款式的餐具。这就是推荐系统在起作用。一个优秀的推荐系统能让用户在平台上停留更久,显著提升客单价。今天我们抛开复杂的深度学习,用最经典的“余弦相似度”来实现一个基于物品的协同过滤(Item-based CF)雏形。

应用场景

在商品详情页的最下方,实现“看过该商品的人还看了”或“相似好物”模块。系统需要通过计算当前商品与数据库中其他商品的特征相似程度,挑出最相似的前3件商品展示给用户。

核心代码实现

我们将使用 numpyscikit-learn 中的距离计算工具。

Python

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd

def get_similar_items(target_item_id, top_n=2):
    """
    基于商品特征向量计算相似度,推荐最相似的商品
    """
    # 模拟商品数据库:假设我们提取了3个核心特征维度
    # 特征 = [价格(标准化), 品牌等级(1-5), 类别编码(如:餐具=10, 布草=20)]
    data = {
        'item_id': ['A01', 'A02', 'B01', 'B02'],
        'name': ['高档不锈钢餐盘', '普通陶瓷餐盘', '全棉大浴巾', '一次性拖鞋'],
        'price_feature': [0.8, 0.3, 0.5, 0.1],
        'brand_level': [4, 2, 4, 1],
        'category_code': [10, 10, 20, 20]
    }
    df = pd.DataFrame(data)
    
    # 提取特征矩阵 (排除id和name列)
    features_matrix = df[['price_feature', 'brand_level', 'category_code']].values
    
    # 计算所有商品两两之间的余弦相似度矩阵
    similarity_matrix = cosine_similarity(features_matrix)
    
    # 找到目标商品在矩阵中的索引
    target_idx = df.index[df['item_id'] == target_item_id].tolist()[0]
    
    # 获取目标商品与其他所有商品的相似度得分
    item_scores = list(enumerate(similarity_matrix[target_idx]))
    
    # 按照相似度得分从高到低排序 (排除自身)
    sorted_scores = sorted(item_scores, key=lambda x: x[1], reverse=True)
    sorted_scores = [score for score in sorted_scores if score[0] != target_idx]
    
    # 输出推荐结果
    print(f"因为您正在查看:【{df.iloc[target_idx]['name']}】")
    print("-" * 30)
    for i in range(min(top_n, len(sorted_scores))):
        idx, score = sorted_scores[i]
        print(f"推荐商品: {df.iloc[idx]['name']} (相似度: {score:.2f})")

# 测试推荐逻辑
get_similar_items(target_item_id='A01')

代码深度解析

在这个简化的模型中,我们将商品抽象成了由数字组成的“向量”。cosine_similarity 函数会计算这些向量在多维空间中的夹角。夹角越小(余弦值越接近1),说明两件商品在属性上越相似(比如同样是高价格、高品牌等级的餐具类目)。在真实的电商推荐架构中,特征会多达数千维(包括点击率、用户画像、停留时长等),但底层的数学比较逻辑与这几十行代码可谓一脉相承。

举报
0 条评论