Python全栈项目--基于机器学习的金融风险评估系统

一、项目简介

金融机构在处理贷款、分期、授信等业务时,需要快速判断申请人的违约风险。本文实现一个可运行的 Python 全栈项目:基于机器学习的金融风险评估系统。系统支持用户注册登录、JWT 鉴权、申请人金融特征录入、风险评分、风险等级输出、历史评估记录和统计看板。

项目不是单纯讲算法,而是从前端页面、后端接口、数据库模型到部署运行完整串联,适合作为课程设计、毕业设计或全栈项目练习。

二、技术栈

  • 后端:FastAPI、SQLAlchemy、Pydantic、JWT、Passlib
  • 数据库:SQLite
  • 前端:Vue 3 + Vite
  • 鉴权:Bearer Token / JWT
  • 风控模型:轻量机器学习风格特征加权评分器,可替换为真实训练模型
  • 打包交付:Markdown 博文 + 完整源码 zip

三、系统架构

text 复制代码
Vue 3 前端
  ├─ 注册/登录页面
  ├─ 风控录入表单
  ├─ 评估记录表格
  └─ 统计看板
       │ HTTP + JWT
       ▼
FastAPI 后端
  ├─ auth 用户认证模块
  ├─ risks 风险评估模块
  ├─ dashboard 统计模块
  └─ SQLAlchemy ORM
       │
       ▼
SQLite 数据库
  ├─ users
  └─ risk_applications

用户登录后,前端将 token 保存到 localStorage,调用受保护接口时统一在请求头中携带 Authorization: Bearer <token>。后端校验 token 后,只允许用户访问自己的风险评估数据。

四、功能模块

  1. 用户模块

    • 用户注册
    • 用户登录
    • 密码哈希存储
    • JWT token 生成与校验
    • 获取当前登录用户
  2. 风险评估模块

    • 录入申请人姓名、年龄、年收入、贷款金额、信用分、工作年限、负债率、逾期次数
    • 计算风险分
    • 输出 LOW/MEDIUM/HIGH 风险等级
    • 给出审批建议
  3. 统计看板模块

    • 申请总数
    • 平均风险分
    • 低/中/高风险数量
  4. 前端交互模块

    • 注册页
    • 登录页
    • 登录状态保持
    • 退出登录
    • 鉴权 API 请求封装
    • 风控表单与记录列表

五、数据库/数据模型设计

系统主要包含两张表。

1. users 用户表

字段 类型 说明
id Integer 主键
username String 用户名,唯一
email String 邮箱,唯一
hashed_password String 哈希后的密码
created_at DateTime 创建时间

2. risk_applications 风险申请表

字段 类型 说明
id Integer 主键
applicant_name String 申请人姓名
age Integer 年龄
annual_income Float 年收入
loan_amount Float 贷款金额
credit_score Integer 信用分
employment_years Float 工作年限
debt_ratio Float 负债率
overdue_count Integer 逾期次数
risk_score Float 风险分
risk_level String 风险等级
suggestion Text 审批建议
owner_id Integer 所属用户

对应 SQLAlchemy 模型位于:backend/app/models.py。

六、后端接口设计

方法 地址 鉴权 说明
GET /api/health 否 健康检查
POST /api/auth/register 否 注册
POST /api/auth/login 否 登录并返回 token
GET /api/auth/me 是 当前用户
POST /api/risks 是 创建风险评估
GET /api/risks 是 查询评估记录
GET /api/dashboard 是 查询统计看板

七、前端页面设计

前端采用 Vue 3 + Vite,核心文件如下:

text 复制代码
frontend/
  ├─ package.json
  ├─ index.html
  └─ src/
     ├─ main.js
     ├─ App.vue
     ├─ api.js
     └─ style.css

页面分为两种状态:

  • 未登录:显示登录/注册切换表单。
  • 已登录:显示统计看板、风险评估表单、评估记录表格和退出登录按钮。

src/api.js 负责统一封装 API 请求,并在存在 token 时自动追加认证请求头。

八、核心代码讲解

1. FastAPI 应用入口

backend/app/main.py 中创建 FastAPI 应用,配置 CORS,初始化数据库,并定义认证与业务接口。

python 复制代码
app = FastAPI(title="金融风险评估系统 API", version="1.0.0")

@app.post("/api/auth/login", response_model=schemas.TokenOut)
def login(payload: schemas.UserLogin, db: Session = Depends(get_db)):
    user = crud.get_user_by_username(db, payload.username)
    if not user or not crud.verify_password(payload.password, user.hashed_password):
        raise HTTPException(status_code=401, detail="用户名或密码错误")
    token = create_access_token({"sub": user.username})
    return {"access_token": token, "token_type": "bearer", "user": user}

登录成功后返回 JWT,前端后续访问风险评估接口时必须携带 token。

2. 密码哈希与用户创建

backend/app/crud.py 使用 Passlib 对密码进行哈希,避免明文密码入库。

python 复制代码
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def hash_password(password: str) -> str:
    return pwd_context.hash(password)

def verify_password(plain_password: str, hashed_password: str) -> bool:
    return pwd_context.verify(plain_password, hashed_password)

3. 风险评分模型

示例项目内置轻量机器学习风格评分器,对多个特征进行归一化和加权:

python 复制代码
score = (
    credit_component * 35
    + debt_component * 25
    + overdue_component * 20
    + income_loan_ratio * 12
    + employment_component * 6
    + age_component * 2
)

评分越高代表风险越大:

  • LOW:低风险,可快速复核
  • MEDIUM:中风险,需要补充材料或降低授信额度
  • HIGH:高风险,建议拒绝或人工复核

在真实业务中,可以将该函数替换为训练好的 scikit-learn、XGBoost 或深度学习模型。

4. 前端鉴权请求

frontend/src/api.js 统一封装请求:

javascript 复制代码
const token = getToken()
if (token) headers.Authorization = `Bearer ${token}`

这样 App.vue 中调用 api.dashboard()、api.risks()、api.createRisk() 时会自动带上 token。

5. Vue 交互逻辑

App.vue 使用组合式 API 管理登录状态、表单数据与列表刷新。用户提交风险表单后,调用后端 /api/risks 接口,成功后重新加载看板与记录。

九、部署与运行步骤

1. 启动后端

bash 复制代码
cd project/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

后端默认地址:http://127.0.0.1:8000。

2. 启动前端

bash 复制代码
cd project/frontend
npm install
npm run dev

前端默认地址:http://127.0.0.1:5173。

3. 使用流程

  1. 注册账号。
  2. 登录系统。
  3. 填写申请人金融信息。
  4. 提交风险评估。
  5. 在评估记录和统计看板中查看结果。

十、项目总结

本文完成了一个围绕金融风控业务的 Python 全栈项目,覆盖了从数据库建模、后端接口、认证鉴权、风险评分到 Vue 3 前端展示的完整流程。项目虽然使用轻量评分器模拟机器学习模型,但架构上已经预留了模型替换位置,可以扩展为真实训练模型、批量导入、审批流、模型版本管理和风控规则引擎等功能。

项目代码

下载链接

相关推荐
进击的明明11 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿12 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境13 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境16 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
WJ.Polar17 小时前
Java封装、继承、多态
java·开发语言
摇滚侠17 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
在所不辞兄17 小时前
为什么神经网络对对抗扰动和分布偏移往往比较脆弱,而人类感知相对更鲁棒?
人工智能·深度学习·神经网络·机器学习
滴啦嘟啦哒18 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
weixin_3077791318 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
全栈练习生18 小时前
AI安全与红队测试
python·ai