XGBoost · 登录防欺诈示例

使用 XGBoost 二分类模型识别可疑登录。本项目包含合成 CSV 数据、Flask 后端 JSON API,以及浏览器前端:可浏览数据、调参训练、保存/加载参数预设与模型,并在测试集上评估。

代码下载: Download .


内容概览

项目 说明
数据 data/train.csv(200 条)、data/test.csv(20 条);约 30% 为正样本(is_fraud = 1
后端 Flask,默认 http://127.0.0.1:5050/ (可用环境变量 PORT 修改端口)
前端 单页 HTML,三个标签页:数据训练与调参预测
产出 超参数预设保存在 params/,训练好的模型保存在 models/

环境要求

  • 推荐 Python 3.10+(一般 3.9+ 也可用)
  • 已安装 pip

安装步骤

在项目根目录(xgboost/)执行:

复制代码
cd xgboost

# 建议:创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate

pip install -r requirements.txt

依赖包括:Flask、XGBoost、NumPy、scikit-learn(用于指标与训练/验证划分)。


启动服务

复制代码
python backend/app.py

浏览器访问:http://127.0.0.1:5050/

更换端口示例:

复制代码
PORT=8080 python backend/app.py

首次启动时,若缺少 data/train.csvdata/test.csv,程序会自动运行数据生成逻辑创建这两个文件。


使用流程(网页界面)

在浏览器打开 http://127.0.0.1:5050/ 后,建议按下面顺序操作。

一、「数据」标签页

  1. 下拉框选择 训练集(200 条)测试集(20 条)
  2. 若在磁盘上重新生成了 CSV,点击 Reload 刷新表格。
  3. 表格中带红色背景的为欺诈样本,绿色偏色的为正常登录。

二、「训练与调参」标签页

  1. 修改超参数(页面加载时会填入默认值):
  • 树相关: n_estimatorsmax_depthlearning_rate
  • 采样: subsamplecolsample_bytree
  • 正则: min_child_weightgammareg_alphareg_lambda
  • 训练过程: early_stopping_rounds(早停轮数)、val_size(验证集比例)、random_state(随机种子)
  1. 点击 Train model 开始训练,等待状态与指标出现。
  2. 查看 Training results
  • 准确率、精确率、召回率、F1、ROC-AUC(在可计算时显示)
  • 验证集混淆矩阵 (当 val_size > 0 时从训练数据中划出验证集)
  • 特征重要度(按增益排序的主要特征)
  1. 保存参数预设: 在输入框填写名称(仅允许字母、数字、_-),点击 Save preset 。下方列表可对预设 LoadDelete
  2. 保存模型: 填写模型名称,点击 Save model 。文件写入 models/ 目录(<名称>.json<名称>.meta.json)。
  3. 页面底部的 Saved models 可快速跳转预测或删除模型。

三、「预测」标签页

  1. Source(来源): 选择 本会话最后一次训练的模型 ,或下拉选择已保存的 model: xxx
  2. Decision threshold(决策阈值): 默认 0.5;当预测概率 ≥ 阈值时判为欺诈。
  3. 点击 Run prediction 。后端会对 **data/test.csv 中全部行** 打分。
  4. 查看 Test-set metricsConfusion matrix
  5. Predictions 表格中查看每条样本:原始字段、真实标签 is_fraud_probability_predicted_correct。预测错误的行会以橙色高亮。

可选:重新生成数据

使用内置脚本(脚本内固定随机种子)重新生成训练/测试 CSV:

复制代码
python backend/data_generator.py

生成后重启服务或在「数据」页点击 Reload


目录结构

复制代码
xgboost/
├── backend/
│   ├── app.py              Flask 接口
│   └── data_generator.py   合成数据生成
├── frontend/
│   └── index.html          前端页面
├── data/
│   ├── train.csv
│   └── test.csv
├── models/                 已保存的 XGBoost 模型及元数据
├── params/                 已保存的超参数 JSON
├── requirements.txt
├── README.md
└── README_cn.md

特征字段说明

字段 含义
username_lengthpassword_lengthpassword_strength 用户名/密码长度与强度
login_hourlogin_day_of_weekis_weekend 登录时间模式
ip_country_matchip_change_count_24h IP 与地域一致性
failed_login_attempts_24hcaptcha_failures 暴力破解 / 验证码失败
typing_speed_cpmmouse_movement_score 打字与鼠标行为(人机区分)
device_knownuser_agent_knownnum_devices_used_30d 设备与 UA 指纹
vpn_detectedtor_detectedproxy_detected VPN / Tor / 代理
account_age_daysnum_password_changes_30d 账号历史
geo_distance_kmtime_since_last_login_havg_session_duration_min 地理位置与会话习惯
is_fraud 标签: 0 正常,1 欺诈

HTTP 接口速查

方法 路径 作用
GET / 网页前端
GET /api/features 特征列名与标签列
GET /api/data/train/api/data/test 返回对应 CSV 的 JSON
GET /api/params/defaults 默认超参数
POST /api/train 请求体:{ "params": { ... } }
POST /api/predict 请求体:{ "use_last": true }{ "model": "名称", "threshold": 0.5 }
GET /api/params/list 列出所有参数预设
POST /api/params/save 请求体:{ "name": "...", "params": { ... } }
GET /api/params/load/<name> 加载某一预设
DELETE /api/params/<name> 删除预设
GET /api/models/list 列出已保存模型
POST /api/models/save 请求体:{ "name": "...", "metrics": { ... } }(保存内存中最近一次训练的模型)
DELETE /api/models/<name> 删除模型文件

命令行示例 --- 使用默认参数训练:

复制代码
curl -s -X POST http://127.0.0.1:5050/api/train \
  -H 'Content-Type: application/json' \
  -d '{"params":{}}'

命令行示例 --- 用本会话最后一次训练的模型预测测试集:

复制代码
curl -s -X POST http://127.0.0.1:5050/api/predict \
  -H 'Content-Type: application/json' \
  -d '{"use_last":true,"threshold":0.5}'

常见问题

现象 处理建议
端口被占用(Address already in use) 换端口:PORT=8080 python backend/app.py,或结束占用该端口的旧进程。
ModuleNotFoundError 在已激活的虚拟环境中执行 pip install -r requirements.txt
数据页为空或不是最新 执行 python backend/data_generator.py 后,在「数据」页点 Reload
预测报错提示没有模型 先在「训练与调参」中训练一次,或在「预测」中选择已保存的模型名称。

生产环境说明

当前使用的是 Flask 开发服务器,适合学习与演示。若要在生产环境部署,请使用 Gunicorn 等 WSGI 服务器并结合反向代理,并做好接口鉴权与安全加固。

相关推荐
久违 °2 小时前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
AI360labs_atyun3 小时前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.3 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary3 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_3 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
好评笔记3 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466853 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
weixin_468466853 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理
回眸&啤酒鸭3 小时前
【回眸】CSDN新增功能测评——AI数字营销之内容创作
人工智能
小糖学代码3 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络