Python实现的智能商品推荐系统分享+核心代码
智能商品推荐系统
项目简介
智能商品推荐系统是一个基于Python、Flask和SQLite开发的电商推荐平台,采用基于用户的协同过滤算法为用户提供个性化的商品推荐。系统通过分析用户的收藏和购物车行为,识别用户偏好,并推荐相似用户喜欢的商品,特别优先推荐与用户已交互商品相同类别的商品。
技术栈
- 后端:Python + Flask
- 数据库:SQLite
- 前端:HTML + CSS + JavaScript
- 推荐算法:基于协同过滤的推荐系统
系统功能
1. 用户管理
- 用户注册与登录
- 个人信息管理
- 权限控制(普通用户/管理员)
登录页面
注册页面
后台管理页面
2. 商品管理
- 商品列表展示
- 商品详情页
- 商品分类浏览
- 商品库存管理
商品管理页面
3. 购物车功能
- 添加商品到购物车
- 实时更新购物车数量(无需刷新页面)
- 移除购物车商品(前端处理,同步到后端)
- 购物车商品数量调整
- 购物车总价实时计算
4. 收藏功能
- 商品收藏与取消
- 收藏列表管理
- 批量检查收藏状态(性能优化)
收藏页面
5. 推荐系统
- 基于协同过滤的个性化推荐
- 用户偏好类别识别
- 类别偏好加权(2.5倍权重)
- 热门商品推荐(优先推荐用户偏好类别)
6. 订单管理
- 订单创建与支付
- 订单状态跟踪
- 订单历史查询
- 订单取消功能
推荐算法详解
本系统采用基于用户的协同过滤算法(User-Based Collaborative Filtering)实现商品推荐:
-
用户行为数据收集:
- 购物车行为(权重为2×数量)
- 收藏行为(权重为1+1)
# wx:xiaotankelaoshi # 填充购物车数据(权重为2) cart_items = CartItem.query.all() for item in cart_items:if item.user_id in user_dict and item.product_id in product_dict:user_item_interactions[item.user_id][item.product_id] = 2 * item.quantity # 数量越多,权重越大# 填充收藏数据(权重为1) favorites = Favorite.query.all() for fav in favorites:if fav.user_id in user_dict and fav.product_id in product_dict:# 如果已经在购物车中,则增加权重,否则设为1current_weight = user_item_interactions[fav.user_id].get(fav.product_id, 0)user_item_interactions[fav.user_id][fav.product_id] = max(current_weight, 1) + 1
-
用户相似度计算:
- 使用余弦相似度计算用户之间的相似性
- 考虑共同交互的商品及其评分权重
# wx:xiaotankelaoshi @staticmethod def calculate_similarity(user1_items, user2_items):"""计算两个用户之间的余弦相似度"""# 获取两个用户共同交互的商品common_items = set(user1_items.keys()) & set(user2_items.keys())if not common_items:return 0.0# 计算分子(点积)numerator = sum(user1_items[item] * user2_items[item] for item in common_items)# 计算分母(两个向量的模长乘积)sum1 = sum(user1_items[item] ** 2 for item in user1_items)sum2 = sum(user2_items[item] ** 2 for item in user2_items)denominator = math.sqrt(sum1) * math.sqrt(sum2)if denominator == 0:return 0.0return numerator / denominator
-
推荐生成:
- 找出与当前用户相似的其他用户
- 推荐相似用户喜欢但当前用户未交互的商品
- 为与用户已交互商品相同类别的商品增加2.5倍权重
# 获取用户喜欢的商品类别 # wx: xiaotankelaoshi user_preferred_categories = set() for product_id in current_user_items.keys():product = Product.query.get(product_id)if product and product.category:user_preferred_categories.add(product.category)# 计算推荐分数 product_scores = defaultdict(float) for other_user_id, similarity in user_similarities[:10]: # 只考虑前10个最相似的用户other_user_items = user_item_interactions[other_user_id]for product_id, rating in other_user_items.items():if product_id not in user_interacted_items: # 排除用户已交互的商品product = Product.query.get(product_id)category_bonus = 1.0 # 默认权重# 如果商品类别与用户喜欢的类别相同,增加权重if product and product.category and product.category in user_preferred_categories:category_bonus = 2.5 # 类别匹配时的权重提升# 加权评分product_scores[product_id] += similarity * rating * category_bonus
-
热门商品补充:
- 当个性化推荐不足时,补充热门商品
- 优先推荐用户偏好类别的热门商品
- 确保推荐结果多样性
@staticmethod def get_popular_products(limit=10, preferred_categories=None):"""获取热门商品"""# 获取热门商品(基于购物车和收藏的总数)popular_products_query = db.session.query(Product,func.count(CartItem.id) + func.count(Favorite.id).label('popularity')).outerjoin(CartItem).outerjoin(Favorite).group_by(Product.id).order_by(func.count(CartItem.id) + func.count(Favorite.id).desc())# 如果有偏好类别,先获取该类别的热门商品preferred_products = []if preferred_categories:preferred_query = popular_products_query.filter(Product.category.in_(preferred_categories)).limit(limit)preferred_products = [product for product, _ in preferred_query.all()]# 如果偏好类别的商品不足,获取其他热门商品remaining_limit = limit - len(preferred_products)if remaining_limit > 0:existing_ids = [p.id for p in preferred_products]other_query = popular_products_queryif preferred_categories:other_query = other_query.filter(~Product.category.in_(preferred_categories))if existing_ids:other_query = other_query.filter(~Product.id.in_(existing_ids))other_query = other_query.limit(remaining_limit)other_products = [product for product, _ in other_query.all()]preferred_products.extend(other_products)return preferred_products
性能优化
系统在多个方面进行了性能优化:
-
批量API调用:
- 实现批量检查收藏状态接口(
/favorite/batch_check
) - 将多次HTTP请求合并为一次请求,减少网络开销
- 实现批量检查收藏状态接口(
-
前端无刷新交互:
- 购物车操作完全在前端处理,无需页面刷新
- 保留后端API调用以确保数据持久化
-
静态资源优化:
- 配置静态文件缓存(一年有效期)
- 图片懒加载与错误处理
-
数据库查询优化:
- 使用适当的索引
- 减少不必要的数据库查询
项目结构
recommend-python/
├── app/
│ ├── __init__.py # 应用初始化
│ ├── models/ # 数据模型
│ │ ├── user.py # 用户模型
│ │ ├── product.py # 商品模型
│ │ ├── cart.py # 购物车模型
│ │ ├── favorite.py # 收藏模型
│ │ ├── order.py # 订单模型
│ │ └── recommendation.py # 推荐系统模型
│ ├── routes/ # 路由控制
│ │ ├── auth_routes.py # 认证路由
│ │ ├── product_routes.py # 商品路由
│ │ ├── cart_routes.py # 购物车路由
│ │ ├── favorite_routes.py # 收藏路由
│ │ ├── recommendation_routes.py # 推荐路由
│ │ └── order_routes.py # 订单路由
│ ├── static/ # 静态资源
│ │ ├── css/ # 样式文件
│ │ ├── js/ # JavaScript文件
│ │ └── images/ # 图片资源
│ └── templates/ # HTML模板
│ ├── auth/ # 认证相关模板
│ ├── product/ # 商品相关模板
│ ├── cart/ # 购物车相关模板
│ └── admin/ # 管理员相关模板
├── recommend.db # SQLite数据库
└── run.py # 应用启动脚本
运行说明
- 确保已安装Python 3.6+
- 安装依赖包:
pip install -r requirements.txt
- 运行应用:
python run.py
- 访问 http://localhost:5000 开始使用
特色亮点
- 无刷新用户体验:购物车和收藏操作无需刷新页面,提供流畅的用户体验
- 类别偏好推荐:优先推荐与用户已交互商品相同类别的商品,使推荐更符合用户期望
- 性能优化:批量API调用、静态资源优化等提高系统响应速度
- 响应式设计:适配不同设备屏幕,提供一致的用户体验
- 实时反馈:操作后提供视觉反馈,增强用户交互体验