标题:Django+Vue 协同过滤 大数据的美食推荐系统

1. 系统概述

1.1 研究背景与意义

  • 餐饮行业数字化转型与个性化推荐需求增长

  • 传统推荐方法在美食领域的局限性

  • 大数据技术赋能精准美食推荐

  • 协同过滤算法在推荐系统中的优势

1.2 系统目标

  • 构建基于用户行为的大数据美食推荐平台

  • 实现用户-美食交互数据的采集与存储

  • 开发基于协同过滤的推荐算法引擎

  • 提供个性化、场景化的美食推荐服务

2. 技术架构

2.1 整体架构

text

前端展示层 (Vue.js + Element UI)
↑
API网关层 (Django REST Framework)
↑
推荐引擎层 (协同过滤算法)
↑
大数据处理层 (Spark MLlib)
↑
数据存储层 (MongoDB + Redis + HBase)
↑
数据采集层 (用户行为日志 + 第三方API)

2.2 技术选型

  • 前端:Vue3 + Vant UI + ECharts

  • 后端:Django + Django REST Framework

  • 数据库

    • MongoDB (用户画像/美食数据)

    • Redis (实时推荐/缓存)

    • HBase (海量用户行为日志)

  • 大数据处理:Spark + Spark MLlib

  • 推荐算法:基于用户的协同过滤(UserCF) + 基于物品的协同过滤(ItemCF)

  • 辅助工具:Kafka (实时数据流), ELK (日志分析)

3. 系统功能模块

3.1 数据采集模块

  • 用户显式评分数据采集(1-5星评价)

  • 用户隐式行为数据采集(浏览、收藏、下单、分享等)

  • 美食基础信息采集(品类、口味、价格、地理位置等)

  • 第三方数据接入(美团/大众点评API)

3.2 用户画像模块

  • 用户基础属性(年龄、性别、地区等)

  • 口味偏好模型(辣度、甜度、菜品类型等)

  • 消费行为分析(消费时段、价格敏感度等)

  • 社交关系图谱(好友口味相似度)

3.3 推荐引擎模块

  • 基于用户的协同过滤(UserCF)

    • 计算用户相似度矩阵

    • 生成最近邻用户集

    • 预测目标用户未评分项目

  • 基于物品的协同过滤(ItemCF)

    • 计算物品相似度矩阵

    • 基于用户历史偏好推荐相似物品

  • 混合推荐策略

    • 加权融合UserCF和ItemCF结果

    • 结合时间衰减因子

    • 冷启动处理策略(热门推荐/内容推荐)

3.4 实时推荐模块

  • 用户实时行为捕捉与分析

  • 短期兴趣模型更新

  • 实时推荐列表刷新

  • A/B测试框架支持

3.5 可视化分析模块

  • 用户偏好雷达图

  • 推荐结果解释性展示

  • 推荐效果评估指标可视化

  • 系统运行监控看板

4. 数据库设计

4.1 主要数据集合

  • 用户数据(user_profiles)

    json

    {
      "user_id": "u1001",
      "basic_info": {"age": 25, "gender": "male", "location": "重庆渝中区"},
      "taste_prefs": {"spicy_level": 4, "sweet_level": 2},
      "diet_restrictions": ["no_pork"]
    }
  • 美食数据(food_items)

    json

    {
      "food_id": "f2001",
      "name": "重庆火锅",
      "category": ["火锅", "川菜"],
      "attributes": {"spicy_level": 5, "price_range": 2},
      "location": {"lng": 106.55, "lat": 29.56}
    }
  • 用户行为日志(user_behavior_logs)

    json

    {
      "log_id": "log3001",
      "user_id": "u1001",
      "food_id": "f2001",
      "behavior_type": "order", // view/collect/share/order
      "timestamp": "2023-08-20T18:30:00Z",
      "context": {"device": "mobile", "location": "home"}
    }
  • 推荐结果(recommendations)

    json

    {
      "rec_id": "r4001",
      "user_id": "u1001",
      "recommended_items": [
        {"food_id": "f2001", "score": 0.87, "reason": "similar_users_liked"},
        {"food_id": "f2002", "score": 0.82, "reason": "similar_to_your_favorites"}
      ],
      "generated_at": "2023-08-20T18:35:00Z"
    }

5. 协同过滤算法实现

5.1 基于用户的协同过滤(UserCF)

python

from pyspark.mllib.recommendation import ALS, Rating

# 准备评分数据
ratings = sc.parallelize([
    Rating(user=1, product=101, rating=5.0),
    Rating(user=1, product=102, rating=3.0),
    # ...更多评分数据
])

# 训练ALS模型
rank = 10  # 潜在因子数
numIterations = 10
model = ALS.train(ratings, rank, numIterations)

# 为用户推荐Top-N美食
user_id = 1
top_n = model.recommendProducts(user_id, 5)

5.2 基于物品的协同过滤(ItemCF)

python

from pyspark.mllib.recommendation import MatrixFactorizationModel

# 计算物品相似度矩阵
item_sim = model.productFeatures.cartesian(model.productFeatures)\
    .map(lambda x: {
        "item1": x[0][0],
        "item2": x[1][0],
        "sim": cosine_similarity(x[0][1], x[1][1])
    }).filter(lambda x: x["item1"] != x["item2"])

# 为指定物品找相似物品
def find_similar_items(food_id, n=5):
    return item_sim.filter(lambda x: x["item1"] == food_id)\
                  .takeOrdered(n, key=lambda x: -x["sim"])

5.3 混合推荐策略

python

def hybrid_recommend(user_id, n=10):
    # UserCF推荐结果
    user_cf_recs = model.recommendProducts(user_id, n*2)
    
    # ItemCF推荐结果(基于用户最近浏览)
    recent_views = get_user_recent_views(user_id)
    item_cf_recs = []
    for view in recent_views:
        item_cf_recs.extend(find_similar_items(view["food_id"], n//2))
    
    # 合并并去重
    all_recs = combine_and_deduplicate(user_cf_recs, item_cf_recs)
    
    # 加入业务规则过滤(如距离、价格等)
    filtered_recs = apply_business_rules(all_recs, user_id)
    
    return filtered_recs[:n]

6. 系统实现细节

6.1 前端关键功能

  • 个性化推荐主页:基于用户口味的瀑布流展示

  • 美食详情页:"喜欢这个的人也喜欢"推荐模块

  • 搜索推荐:输入联想与搜索结果排序优化

  • 反馈机制:推荐结果满意度评价收集

6.2 后端关键设计

  • 推荐API服务

    • GET /api/recommendations?user_id=u1001&context=home

    • POST /api/feedback (收集用户反馈)

  • 实时数据处理流水线

    text

    用户行为 → Kafka → Spark Streaming → 更新推荐模型 → Redis缓存
  • 冷启动解决方案

    • 新用户:基于人口统计特征的推荐

    • 新菜品:基于内容相似度的推荐

6.3 性能优化策略

  • 离线计算:每日更新用户相似度矩阵

  • 近线更新:每小时更新物品相似度

  • 实时补充:基于最新行为的实时调整

  • 缓存策略:Redis缓存热门推荐结果

7. 评估指标

7.1 算法评估

  • 准确率:Precision@K, Recall@K

  • 覆盖率:推荐物品占总物品比例

  • 新颖性:推荐物品的平均热门程度

  • 多样性:推荐列表的内部分散度

7.2 业务指标

  • 点击率(CTR)

  • 转化率(订单量/曝光量)

  • 用户停留时长

  • 复购率提升

8. 扩展方向

  1. 多模态推荐:结合菜品图片的视觉特征

  2. 情境感知推荐:天气、时间、位置等上下文因素

  3. 社交推荐:好友关系网络分析

  4. 强化学习:动态调整推荐策略

  5. 可解释推荐:生成推荐理由自然语言描述

9. 部署方案

9.1 开发环境

  • 前端:Webpack + Vue CLI

  • 后端:Django开发服务器

  • 数据库:MongoDB社区版

9.2 生产环境

  • 前端:Nginx静态资源服务 + CDN加速

  • 后端:Docker容器 + Kubernetes集群

  • 数据库

    • MongoDB分片集群

    • Redis哨兵模式

    • HBase on HDFS

  • 大数据处理:Spark on YARN

  • 监控:Prometheus + Grafana

10. 典型应用场景

  1. 外卖平台:首页个性化推荐

  2. 餐饮连锁:跨门店推荐

  3. 美食社区:内容推荐

  4. 智能点餐:搭配推荐

  5. 饮食健康:营养均衡推荐

代码实现:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐