一个基于 Flask 的智能虚拟信用卡管理系统,专为旅游场景设计
集成 Face ID、PDF 智能识别、AI 信用评估、盲盒抽奖和 AI 旅游推荐功能
- Face ID 认证 - 人脸识别注册与登录 (详细说明)
- PDF 智能识别 - 自动提取银行流水和余额证明(支持12个核心财务指标)
- AI 信用评估 - Home Credit XGBoost模型 + EV优化算法
- 违约概率预测(PD Model)
- 额度利用率预测(Utilization Model)
- 基于期望价值最大化的额度优化
- 智能杠杆率调整机制
- 16 位卡号生成 - 可定制后 8 位卡号
- 多币种支持 - 实时汇率转换(AED ⇄ CNY)
- WECoin 积分 - 消费获得积分奖励
- 消费记录追踪 - 详细账单统计与分析
- 智能概率算法 - 基于用户行为动态调整中奖率
- 多种奖品 - 消费券、汇率券、商户券
- 奖品包管理 - 查看和使用优惠券
- 本地 LLM 驱动 - 使用 Ollama + Llama3.2 模型
- 智能搜索 - DuckDuckGo 实时搜索阿布扎比景点
- 个性化推荐 - AI 生成旅游、美食、购物建议
- 完全免费 - 无需 API Key,本地运行
- 灵动岛设计 - 流畅动画效果
- 毛玻璃效果 - 现代化界面
- 响应式布局 - 完美适配移动端
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Python | 3.8+ | 必需 |
| Ollama | 最新版 | AI 推荐功能必需 |
| Clash/代理 | 可选 | 访问 DuckDuckGo(国内用户推荐) |
| Conda | 推荐 | 便于安装 dlib |
Windows 用户:
# 双击运行启动脚本
启动项目.bat脚本会自动完成:
- ✅ 检查 Python 环境
- ✅ 安装所有依赖
- ✅ 初始化数据库
- ✅ 启动服务器
git clone https://github.com/your-repo/Fintech2026.git
cd Fintech2026推荐使用 Conda(避免 dlib 安装问题):
# 创建虚拟环境
conda create -n fintech python=3.8 -y
conda activate fintech
# 安装 dlib(使用 conda 最可靠)
conda install -c conda-forge dlib -y
# 安装其他依赖
pip install -r requirements.txt或使用 pip:
pip install -r requirements.txt国内用户加速:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txtWindows:
- 访问 Ollama 官网 下载安装包
- 安装后运行:
ollama pull llama3.2:3b验证安装:
ollama list
# 应该看到 llama3.2:3b 模型如果需要访问 DuckDuckGo 搜索,请配置代理:
- 启动 Clash 或其他代理工具(默认端口 7890)
- 修改
app.py第 35 行:
abu_dhabi_service = AbuDhabiService(
model_name="llama3.2:3b",
use_proxy=True, # 启用代理
proxy_url="http://127.0.0.1:7890" # Clash 默认端口
)不使用代理:
use_proxy=False # 改为 False详细说明:代理配置文档
python utils/init_db.py执行后会:
- 创建
instance/fintech.db数据库 - 创建 8 个数据表
- 插入测试用户数据(用户名: Yogurt)
- 插入初始奖品和消费记录
启动 Ollama 服务(新终端窗口):
ollama serve启动 Flask 应用:
python app.py启动成功后会看到:
* Running on http://127.0.0.1:5000
* Debug mode: on
✅ Ollama客户端初始化成功,模型: llama3.2:3b
Fintech2026/
├── app.py # Flask 主应用
├── requirements.txt # Python 依赖列表
├── 启动项目.bat # 一键启动脚本(Windows)
│
├── services/ # 业务服务层
│ ├── face_service.py # Face ID 服务
│ ├── pdf_service.py # PDF 识别服务(提取交易数据)
│ ├── feature_engineering_service.py # 特征工程(13个指标)
│ ├── pd_model_service.py # 违约概率预测模型
│ ├── utilization_model_service.py # 利用率预测模型
│ ├── credit_optimizer_service.py # 额度优化器(EV最大化)
│ ├── credit_limit_service.py # 信用评估服务(主入口)
│ ├── register.py # 注册管理
│ ├── lottery.py # 抽奖核心逻辑
│ ├── lottery_prob.py # AI 概率算法
│ ├── search_service.py # 搜索服务
│ └── abu_dhabi_service.py # AI 旅游推荐服务
│
├── models/ # 机器学习模型
│ ├── hc_pd_model.pkl # 违约概率模型(13特征)
│ └── hc_utilization_model.pkl # 利用率模型(13特征)
│
├── utils/ # 工具类
│ ├── database.py # 数据库操作
│ └── init_db.py # 数据库初始化
│
├── config/ # 配置文件
│ └── lottery_rules.py # 抽奖规则配置
│
├── templates/ # 前端页面
│ ├── index.html # 主页(包含 AI 推荐)
│ ├── login.html # 登录页
│ ├── register.html # 注册页
│ └── static/ # 静态资源
│
├── uploads/ # 上传文件
│ ├── faces/ # 人脸照片
│ └── pdfs/ # PDF 文件
│
├── instance/ # 数据库
│ └── fintech.db # SQLite 数据库
│
├── docs/ # 📚 文档目录
│ ├── 环境配置指南.md # Python、dlib 安装
│ ├── Ollama配置指南.md # AI 推荐配置
│ ├── Face_ID使用说明.md # 人脸识别说明
│ └── 代理配置说明.md # 代理配置(可选)
│
├── tests/ # 测试文件
│ ├── test_pdf.py
│ ├── test_face_recognition.py
│ └── install_dependencies.py
│
└── data/ # 测试数据
└── 消费流水.pdf
- ✅ 注册时录入人脸(支持多角度)
- ✅ 登录时 Face ID 认证
- ✅ 完全免费(基于 face_recognition 库)
- ✅ 离线可用(本地处理,保护隐私)
- ✅ 高准确率(基于 dlib 深度学习模型)
技术栈:face_recognition + dlib + opencv-python
- ✅ 自动提取银行流水(收入/支出/余额)
- ✅ 按月份分组统计
- ✅ 支持多种 PDF 格式
- ✅ 智能识别交易类型
- ✅ 自动计算月度收支
技术栈:pdfplumber + 正则表达式
核心组件:
- ✅ PDF解析服务 - 提取银行流水交易数据
- ✅ 特征工程服务 - 计算13个核心财务指标
- ✅ 违约概率模型 (PD) - XGBoost预测违约风险
- ✅ 利用率模型 - XGBoost预测额度使用率
- ✅ 额度优化器 - 基于EV最大化原则计算最优额度
13个核心特征:
- 收入能力 (3个) - 3个月平均收入、收入方差、总收入
- 支出能力 (3个) - 大额支出、月消费、收支比
- 偿还能力 (5个) - 当前余额、余额收入比、最低余额、还款压力、大额取现比
- 额度相关 (2个) - 候选额度、杠杆率(额度/收入比)
预测指标:
- 违约概率 (PD) - 预测用户违约风险,额度越高→PD越高(指数增长)
- 利用率 - 预测额度使用率,额度越大→利用率越低(指数衰减)
- 预期价值 (EV) - 计算公式:
EV = 利息收入 - 预期损失- 利息收入 = 额度 × 利用率 × APR (36%)
- 预期损失 = 额度 × 利用率 × PD × LGD (80%)
优化策略:
- 候选额度范围:余额的 1x - 10x
- 选择预期价值最高的额度作为最优授信额度
- 智能杠杆率调整机制确保风险随额度增长
技术栈:XGBoost + scikit-learn + numpy + pandas
注册流程:
上传银行流水PDF → 提取交易数据 → 计算13个指标 →
PD模型预测 → 利用率模型预测 → EV优化 → 返回最优授信额度
- ✅ 基于用户行为动态调整概率
- ✅ 新用户专属奖品
- ✅ 高消费用户获得更好奖品
- ✅ 智能权重衰减算法
- ✅ 防作弊机制
算法特点:
- 新用户权重加成:+30%
- 高消费用户权重加成:最高 +50%
- 动态概率调整:基于历史中奖记录
核心技术:
- 本地 LLM:Ollama + Llama3.2:3b 模型
- 实时搜索:DuckDuckGo HTML 搜索
- 智能翻译:中文查询自动翻译为英文
- 个性化生成:AI 根据搜索结果生成推荐
功能亮点:
- ✅ 完全免费(无需 API Key)
- ✅ 本地运行(保护隐私)
- ✅ 实时搜索(最新信息)
- ✅ 智能推荐(景点、美食、购物)
- ✅ 中英文支持
推荐类型:
- 🏛️ 旅游景点 - 博物馆、地标、公园
- 🍽️ 美食餐厅 - 当地特色、米其林餐厅
- 🛍️ 购物中心 - 奢侈品、传统市集
技术实现:
# 搜索流程
用户输入 → 中文翻译 → DuckDuckGo 搜索 → 提取结果 → Ollama AI 生成推荐PDF上传 → PDF解析 → 特征工程 → 模型预测 → 额度优化 → 返回结果
功能:从银行流水PDF中提取交易数据
- 识别交易类型(收入/支出/ATM取现/POS消费/转账)
- 按月份分组统计
- 计算基础财务指标
功能:将PDF数据转换为13个模型特征
| 类别 | 特征 | 说明 |
|---|---|---|
| 收入能力 | avg_income_3m | 过去3个月平均收入 |
| income_variance_3m | 3个月收入方差(稳定性) | |
| total_income | 总收入 | |
| 支出能力 | avg_large_spending | 大额支出平均值 |
| avg_monthly_consumption | 平均月消费 | |
| income_consumption_ratio | 收入/消费比 | |
| 偿还能力 | current_balance | 当前余额 |
| balance_income_ratio | 余额/收入比 | |
| min_balance_12m | 12个月最低余额 | |
| payday_plus_5_drop | 发薪日后5天余额下降 | |
| large_withdrawal_ratio | 大额取现比例 | |
| 额度相关 | credit_amount | 候选额度 |
| credit_to_income_ratio | 杠杆率(额度/收入) |
功能:预测用户违约概率(PD)
核心机制:
# 基础预测
base_PD = XGBoost模型预测(13个特征)
# 杠杆率调整(确保额度越高→PD越高)
leverage_ratio = credit_amount / total_income
scaled_base = base_PD × 0.7 # 缩小基础PD
multiplier = exp(1.0 × leverage_ratio) # 指数增长
adjusted_PD = scaled_base × multiplier
adjusted_PD = clip(adjusted_PD, 0, 0.70) # 上限70%效果示例(假设base_PD = 40%):
- 杠杆率 0.1 → PD ≈ 31%
- 杠杆率 0.5 → PD ≈ 46%
- 杠杆率 1.0 → PD ≈ 76% → 限制为70%
- 杠杆率 2.0 → PD ≈ 70%(触及上限)
功能:预测额度使用率
核心机制:
# 基础预测
base_utilization = XGBoost模型预测(13个特征)
# 杠杆率调整(确保额度越大→利用率越低)
leverage_ratio = credit_amount / total_income
multiplier = exp(-0.35 × leverage_ratio) # 指数衰减
adjusted_utilization = base_utilization × multiplier
adjusted_utilization = clip(adjusted_utilization, 0.30, 0.95)效果示例:
- 杠杆率 0.1 → 利用率 ≈ 85-90%(额度小,容易用满)
- 杠杆率 0.5 → 利用率 ≈ 70-75%
- 杠杆率 1.0 → 利用率 ≈ 55-60%
- 杠杆率 2.0 → 利用率 ≈ 40-45%(额度大,用不完)
功能:基于EV最大化原则计算最优额度
优化算法:
# 候选额度:余额的1x到10x
candidate_amounts = [balance × 1.0, balance × 1.5, ..., balance × 10.0]
# 对每个候选额度计算EV
for amount in candidate_amounts:
PD = pd_model.predict(features)
utilization = utilization_model.predict(features)
# 计算预期价值
exposure = amount × utilization
interest_income = exposure × APR (36%)
expected_loss = exposure × PD × LGD (80%)
expected_value = interest_income - expected_loss
# 选择EV最大的额度
optimal_amount = max(candidate_amounts, key=lambda x: EV(x))风险参数:
- APR(年化利率):36%
- LGD(违约损失率):80%
- 候选倍数:[1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
输入:
- 总收入:¥74,707.66
- 当前余额:¥4,204.74
输出:
所有候选额度的评估结果:
------------------------------------------------------------
倍数 额度 违约概率 利用率 预期价值
------------------------------------------------------------
1.0x ¥ 4,204.74 14.79% 80.81% ¥ 821.22
1.5x ¥ 6,307.11 15.21% 80.02% ¥ 1,202.72
2.0x ¥ 8,409.48 15.65% 79.23% ¥ 1,564.76
2.5x ¥ 10,511.85 16.09% 78.46% ¥ 1,907.32
...
10.0x ¥ 42,047.40 23.90% 67.68% ¥ 4,803.33
------------------------------------------------------------
最优额度: ¥42,047.40 (10.0x余额)
预期价值: ¥4,803.33
违约概率: 23.90%
风险等级: 较高风险
- 🚀 QUICKSTART.md - 3分钟快速部署指南
- 📋 PROJECT_SUMMARY.md - 项目总结
- 🔧 环境配置指南 - Python、dlib、依赖安装
- 🤖 Ollama 配置指南 - AI 推荐功能配置
- 🌐 代理配置说明 - 国内用户代理配置(可选)
- 👤 Face ID 使用说明 - 人脸识别功能详细说明
- 📡 API_REFERENCE.md - 完整API参考文档
- 🧪 test_pdf_features.py - PDF提取和信用评估测试
初始化数据库后,可使用以下测试账号:
| 字段 | 值 |
|---|---|
| 用户名 | Yogurt |
| 用户 ID | 1 |
| 卡号 | 5210 7132 0767 1316 |
| WECoin | 200 |
| 抽奖次数 | 10 |
| 授信额度 | ¥100,000 |
- Web 框架:Flask 3.0.0
- 数据库:SQLite3(内置)
- AI/ML:
- XGBoost 2.0.3(信用评估 - Home Credit完整模型,13特征)
- face_recognition 1.3.0(人脸识别 - 基于 dlib)
- Ollama + Llama3.2:3b(旅游推荐 - 本地 LLM)
- PDF 处理:pdfplumber 0.10.3
- 数据处理:pandas 2.0.0, numpy 1.24.0
- 搜索引擎:DuckDuckGo + BeautifulSoup4 4.12.2
- UI 框架:原生 HTML5 + CSS3 + JavaScript
- 设计风格:iOS 风格(灵动岛、毛玻璃效果)
- 响应式布局:移动优先(390×844px)
问题:sqlite3.OperationalError: unable to open database file
解决:
python utils/init_db.py问题:ModuleNotFoundError: No module named 'flask'
解决:
pip install flask
# 或
pip install -r requirements.txt问题:ERROR: Could not build wheels for dlib
解决:
# 使用 conda 安装(推荐)
conda install -c conda-forge dlib -y
# 或下载预编译包(Windows)
pip install dlib-19.24.0-cp38-cp38-win_amd64.whl问题:❌ 生成推荐失败: (status code: 502)
解决:
# 1. 检查 Ollama 是否运行
ollama list
# 2. 确认模型已下载
ollama pull llama3.2:3b
# 3. 测试模型
ollama run llama3.2:3b "你好"
# 4. 重启 Ollama 服务
# 关闭当前 ollama serve,然后重新运行
ollama serve问题:⚠️ 搜索未找到结果
解决:
# 方法 1: 启用代理(国内用户)
# 修改 app.py 第 35 行
use_proxy=True
proxy_url="http://127.0.0.1:7890" # Clash 默认端口
# 方法 2: 检查网络连接
# 在浏览器访问 https://duckduckgo.com 测试详细说明:代理配置文档
问题:OSError: [Errno 48] Address already in use
解决:
# Windows 查找占用 5000 端口的进程
netstat -ano | findstr :5000
# 杀死进程
taskkill /PID <进程ID> /F
# 或修改端口
# 在 app.py 最后一行修改
app.run(debug=True, port=5001)问题:翻卡时提示 WECoin 不足
解决:
# 在 Python 控制台手动增加 WECoin
from utils.database import Database
db = Database('instance/fintech.db')
db.add_wecoin(user_id=1, amount=100)问题:❌ 模型加载失败
解决:
# 确认模型文件存在
ls models/xgboost_simple_model.pkl
# 安装 xgboost
pip install xgboost
# 或
conda install -c conda-forge xgboost问题:登录时人脸识别失败
解决:
- ✅ 确保光线充足
- ✅ 正面面对摄像头
- ✅ 移除眼镜、帽子等遮挡物
- ✅ 重新注册人脸(多角度录入)
问题:上传 PDF 后无法提取数据
解决:
- ✅ 确保 PDF 是文本格式(非扫描件)
- ✅ 检查 PDF 格式是否符合银行流水格式
- ✅ 使用测试文件
data/消费流水.pdf验证功能
遇到问题请检查:
- ✅ Python 版本 ≥ 3.8
- ✅ 所有依赖是否正确安装
- ✅ 数据库是否已初始化
- ✅ 端口 5000 是否被占用
- ✅ 模型文件是否在正确位置
- ✅ Ollama 服务是否运行
- ✅ 代理配置是否正确(如需要)
调试模式:
# 启用详细日志
export FLASK_DEBUG=1
python app.py本项目仅供学习和研究使用。
- Flask - Web 框架
- face_recognition - 人脸识别
- XGBoost - 机器学习
- Ollama - 本地 LLM 部署
- DuckDuckGo - 搜索引擎
⭐ 如果这个项目对你有帮助,请给个 Star!
开始使用: 双击 启动项目.bat 或运行 python app.py
详细文档: 查看 docs/ 目录
Made with ❤️ by Fintech2026 Team