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 前端展示的完整流程。项目虽然使用轻量评分器模拟机器学习模型,但架构上已经预留了模型替换位置,可以扩展为真实训练模型、批量导入、审批流、模型版本管理和风控规则引擎等功能。

项目代码

下载链接

相关推荐
zh路西法1 小时前
【双目相机 深度估计】PixelXYZ 3D 双目相机标定与实时深度估计全流程
python·opencv·相机标定·深度估计·双目相机·sgbm
雨落在了我的手上1 小时前
Java数据结构(九):栈和队列
java·开发语言·数据结构
卷无止境1 小时前
Python 相对导入与绝对导入的坑:从原理到工程实践
后端·python
FriendshipT1 小时前
Ultralytics:简要解读YOLOv8 → YOLO11 → YOLO26网络架构
人工智能·pytorch·python·深度学习·yolo·目标检测
BaoshengTT2 小时前
成都理想贴膜能否分期及汽车贴膜分期行业规则 保圣威固 7V 不凡门店
python·汽车
卷无止境2 小时前
Python调试那点事儿:从pdb到日志系统的实战指南
后端·python
j7~2 小时前
【C语言】《C语言自定义类型(结构体+联合体+枚举类型)》--详解
c语言·开发语言·深度学习·结构体·位段·联合体·枚举类型
wechat_Neal2 小时前
机器学习生命周期的核心环节
人工智能·机器学习
Escalating_xu2 小时前
C++11 彻底吃透 emplace_back 与 push_back(最全闭环:左右值|深浅拷贝|移动构造|万能引用|完美转发)
开发语言·c++
正和视觉教育2 小时前
深圳CCD视觉培训:快速掌握机器视觉检测核心技术
人工智能·python·计算机视觉·视觉检测