跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于协同过滤算法的 Flask 理财产品推荐系统实现

综述由AI生成本项目基于 Python Flask 框架构建理财产品推荐系统,核心采用协同过滤算法(余弦相似度)进行用户行为分析与个性化推荐。系统涵盖用户管理、产品浏览、订单处理及后台管理模块,支持 MySQL 数据存储。通过清洗历史收藏数据计算用户相似度,实现精准的产品排序与展示,解决了传统理财推荐效率低的问题,提升了用户体验与管理便捷性。

女王发布于 2026/3/25更新于 2026/5/2317 浏览
基于协同过滤算法的 Flask 理财产品推荐系统实现

项目背景与技术栈

在理财信息爆炸的时代,传统的人工管理方式效率低下且容易出错。为了提升交易效率和管理便利性,我们构建了一套基于协同过滤算法的理财产品推荐系统。该系统旨在将传统的线下管理模式转化为线上自动化服务,通过数据分析为用户提供个性化的产品推荐。

开发环境

  • 语言: Python 3.8
  • 框架: Flask (轻量级 Web 应用框架)
  • 数据库: MySQL 5.7
  • 工具: Navicat 12, PyCharm

Flask 作为微框架,提供了路由、会话管理等核心功能,配合丰富的扩展生态,非常适合此类中小型项目的快速开发。Vue 用于前端交互,MySQL 负责数据存储,B/S 架构确保了系统的可维护性和跨平台性。

系统界面预览

系统主要包含用户端与管理端两大模块,涵盖了从登录、浏览、购买到后台管理的完整流程。

文章配图 系统首页展示

文章配图 推荐算法逻辑示意

文章配图 用户登录界面

文章配图 理财产品列表

文章配图 个人中心

管理员与产品经理拥有独立的管理后台,支持对用户、产品类型、订单及反馈信息的全面管控。

文章配图 管理员功能界面

文章配图

用户管理

文章配图 理财产品管理

文章配图 理财订单

文章配图 反馈信息

文章配图 产品经理功能界面

核心算法实现

首页理财产品的推荐是系统的亮点,采用协同过滤算法。该算法通过分析用户的历史行为和偏好(如收藏记录),识别用户之间或理财产品之间的相似性。

具体思路是:计算目标用户与其他用户的相似度,找到最相似的用户群体,然后推荐那些相似用户喜欢但目标用户尚未接触过的产品。这里使用的是余弦相似度(Cosine Similarity)来量化向量间的夹角。

代码解析

下面展示了核心的推荐逻辑实现。注意处理 datetime 类型序列化以及 SQL 拼接的安全性问题。

import math
from flask import request, session, jsonify
from sqlalchemy import text

# 计算余弦相似度
# a, b 为两个用户的评分字典 {product_id: rating}
def cosine_similarity(a, b):
    # 分子:对应元素乘积之和
    numerator = sum([a[key] * b[key] for key in a if key in b])
    # 分母:各自模长的乘积
    denominator = math.sqrt(sum([a[key]**2 for key in a])) * math.sqrt(sum([b[key]**2 for key in b]))
    
    if denominator == 0:
        return 0
    return numerator / denominator

# 收藏协同算法接口
@main_bp.route("/pythonlrx30079/licaichanpin/autoSort2", methods=['GET'])
def pythonlrx30079_licaichanpin_autoSort2():
    if request.method == 'GET':
        user_ratings = {}
        req_dict = session.get("req_dict")
        userinfo = session.get("params")
        
        # 查询当前用户的收藏记录
        sql = "select * from storeup where type = 1 and tablename = 'licaichanpin' order by addtime desc"
        data = db.session.execute(sql)
        data_dict = [dict(zip(result.keys(), result)) for result in data.fetchall()]
        
        # 封装 userid、refid 的矩阵
        for item in data_dict:
            uid = str(item["userid"])
            rid = str(item["refid"])
            if uid not in user_ratings:
                user_ratings[uid] = {}
            if rid in user_ratings[uid]:
                user_ratings[uid][rid] += 1
            else:
                user_ratings[uid][rid] = 1

        sorted_recommended_goods = []
        try:
            # 计算目标用户与其他用户的相似度
            target_uid = userinfo.get("id")
            similarities = {
                other_user: cosine_similarity(user_ratings[target_uid], user_ratings[other_user]) 
                for other_user in user_ratings 
                if other_user != target_uid
            }
            
            # 找到与目标用户最相似的用户
            most_similar_user = sorted(similarities, key=similarities.get, reverse=True)[0]
            
            # 找到最相似用户喜欢但目标用户未购买过的商品
            recommended_goods = {
                goods: rating 
                for goods, rating in user_ratings[most_similar_user].items() 
                if goods not in user_ratings[target_uid]
            }
            
            # 按评分降序排列推荐
            sorted_recommended_goods = sorted(recommended_goods, key=recommended_goods.get, reverse=True)
        except Exception:
            pass

        L = []
        # 构建查询条件,优先展示推荐商品
        where_conditions = [
            f"{key} = '{value}'" 
            for key, value in req_dict.items() 
            if key not in ["page", "limit", "order", "sort"]
        ]
        where = " AND ".join(where_conditions) if where_conditions else "1=1"

        # 执行查询:推荐商品优先,其余后置
        if where != "1=1":
            sql = f'''SELECT * FROM (SELECT * FROM licaichanpin WHERE {where}) AS table1 
                      WHERE id IN ('{"','".join(sorted_recommended_goods)}') 
                      UNION ALL 
                      SELECT * FROM (SELECT * FROM licaichanpin WHERE {where}) AS table1 
                      WHERE id NOT IN ('{"','".join(sorted_recommended_goods)}')'''
        else:
            sql = f"select * from licaichanpin where id in ('%s'%('","'.join(sorted_recommended_goods)+") union all select * from licaichanpin where id not in('%s'%('","'.join(sorted_recommended_goods)+")"

        data = db.session.execute(text(sql))
        data_dict = [dict(zip(result.keys(), result)) for result in data.fetchall()]

        # 处理 datetime 对象序列化
        for online_dict in data_dict:
            for key in online_dict:
                val_type = str(type(online_dict[key]))
                if 'datetime.datetime' in val_type or 'datetime' in val_type:
                    online_dict[key] = online_dict[key].strftime("%Y-%m-%d %H:%M:%S")
            L.append(online_dict)

        # 返回封装的 json 结果
        limit_count = int(req_dict.get('limit', 5))
        return jsonify({
            "code": 0, 
            "msg": '', 
            "data": {
                "currPage": 1,
                "totalPage": 1,
                "total": len(L),
                "pageSize": limit_count,
                "list": L[:limit_count]
            }
        })

总结

本系统实现了基于 Flask 的理财产品推荐功能,通过协同过滤算法有效提升了推荐的准确性。虽然在实际应用中还有优化空间(如引入更多特征维度),但整体已达成预期设计目的。开发过程中,细心和耐心是保证代码质量的关键,后续可进一步丰富系统功能以应对更复杂的业务场景。

目录

  1. 项目背景与技术栈
  2. 系统界面预览
  3. 核心算法实现
  4. 代码解析
  5. 计算余弦相似度
  6. a, b 为两个用户的评分字典 {product_id: rating}
  7. 收藏协同算法接口
  8. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端安全:别让你的应用变成黑客的游乐场
  • CCF-GESP 2025 年 6 月 C++ 二级真题解析
  • 大模型微调后部署实战:GGUF 转换与 ModelScope 托管
  • API 设计的 7 个常见错误及最佳实践指南
  • Rust 异步并发安全与内存管理最佳实践
  • Python 判断变量或输入是否为数字的几种实用方法
  • 使用 LangChain 构建开源大语言模型智能体实践
  • OpenRouter 入门:统一接口调用 500+AI 模型实战
  • Linux 下 OpenClaw 配置教程(集成局域网 Ollama)
  • 大语言模型综述:核心能力与局限性分析
  • C++ 日志系统:高效异步日志实现解析
  • Visual C++ 6.0 开发环境搭建与 MFC 实战指南
  • Flutter anthropic_sdk_dart 鸿蒙化适配指南
  • Ollama 本地大语言模型部署与使用指南
  • Python 使用 MCP 协议调用高德地图天气服务示例
  • 大厂为何对大模型投入变得谨慎?
  • Android 不规则封闭区域颜色填充算法实现与示例
  • 大模型技术学习指南:从基础理论到高级应用路线
  • GitHub 学生认证与 PyCharm 配置 Copilot 全流程指南
  • 基于 uni-app 与 DeepSeek 的跨端 AI 流式对话系统实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online