BlvckKryptonite/fraudsight
GitHub: BlvckKryptonite/fraudsight
FraudSight 是一款基于 Python 和机器学习的金融交易欺诈检测原型,通过规则引擎与随机森林模型实时分析交易数据并标记可疑活动。
Stars: 0 | Forks: 1
# FraudSight 风险分析器
## 










## 📌 项目概述
**FraudSight 风险分析器**是一款预测性分析 Web 应用程序,旨在利用机器学习和交互式数据可视化来识别潜在的欺诈性金融交易。
该应用程序结合了探索性数据分析、监督式机器学习和基于 Streamlit 的仪表板,以支持欺诈检测、调查和性能评估。虽然部署版本使用代表性样本数据集来演示核心功能,但由于平台上传和内存限制,完整模型和数据集建议在本地运行。
## 📖 目录
- [数据集内容](#📊-dataset-content)
- [业务需求](#🎯-business-requirements)
- [假设与验证](#🔬-hypotheses-and-validation)
- [数据可视化与机器学习任务的依据](#📈-rationale-for-data-visualisations-and-ml-tasks)
- [机器学习业务案例](#🤖-machine-learning-business-case)
- [仪表板设计](#🧭-dashboard-design)
- [开发笔记与技术决策](#🛠️-development-notes--technical-decisions)
- [未修复的缺陷与已知限制](#🐞-unfixed-bugs--known-limitations)
- [部署](#🚀-deployment)
- [主要数据分析与机器学习库](#📚-main-data-analysis--ml-libraries)
- [致谢](#📎-credits)
- [鸣谢](#🙏-acknowledgements)
- [给评审员的最终说明](#✅-final-note-for-assessors)
## 📊 数据集内容
### 来源
本项目使用的数据集为 [Kaggle 信用卡欺诈检测数据集](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud)。
该数据集包含匿名化的信用卡交易记录,且高度不平衡,非常适合用于欺诈检测任务。
### 变量
| 变量 | 描述 | 示例值 |
|-----------------|-----------------------------------------------------------------|-----------------------|
| `Time` | 该交易与第一笔交易之间经过的秒数 | `12345` |
| `Amount` | 交易金额 | `2.99`, `149.99` |
| `V1–V28` | 匿名化的 PCA 转换特征(来自原始数据集) | 连续值 |
| `Class` / `Is_Fraud` | 欺诈标签(0 = 合法,1 = 欺诈) | `0`, `1` |
## 🎯 业务需求 ### 利益相关方 - 金融分析师 - 风险管理团队 - 合规与欺诈调查团队
### 核心需求 | 需求 | 描述 | |------------------------|----------------------------------------------------------| | **可视化分析** | 识别欺诈交易的趋势和模式 | | **预测建模** | 将交易分类为欺诈或合法 | | **决策支持** | 标记高风险交易以供进一步审查 |
## 🔬 假设与验证 ### 假设 1. 欺诈交易更可能在标准营业时间之外发生 2. 高金额交易与欺诈的关联比例不成比例地高 ### 验证方法 - 基于时间的聚合和欺诈率比较 - 按欺诈标签分析交易金额的分布 ### 结论 | 假设 | 结果 | |----------------|------------------------------------------------------------------------| | **假设 1** | ✅ 已确认 — 在典型营业时间之外欺诈率上升 | | **假设 2** | ✅ 已确认 — 较高的交易金额显示出更高的欺诈风险 |
## 📈 数据可视化与机器学习任务的依据 | 业务需求 | 可视化 / 机器学习任务 | 工具 | |---------------------------|-------------------------------|-----------------------| | 欺诈趋势分析 | 时间序列图 | Matplotlib, Seaborn | | 欺诈分类 | Random Forest 流水线 | Scikit-learn | | 风险检查 | 交互式表格 | Streamlit, Pandas |
## 🤖 机器学习业务案例 ### 目标: 通过尽早标记潜在的欺诈性交易来减少财务损失。 ### 模型选择 选择 **Random Forest 分类器**的原因如下: - 对噪声和不平衡数据具有鲁棒性 - 无需大量特征工程即可获得强大的基线性能 - 与更不透明的模型相比具有可解释性 ### 成功指标 - 优先提高召回率以最小化假阴性 - 使用交叉验证评估平衡性能 ### 输出 - 二元欺诈预测 - 欺诈概率评分
## 🧭 仪表板设计 ### 页面: | 页面 | 描述 | |-------------------|-----------------------------------------------------------------| | **项目摘要** | 目标、数据集和项目范围的概述 | | **欺诈可视化器** | 展示欺诈趋势和分布的探索性图表 | | **欺诈检测器** | CSV 上传以进行交易级别的欺诈预测 | | **模型性能** | 评估指标、混淆矩阵和诊断 | ### 组件: - CSV 文件上传器 - 交互式表格和可视化输出
## 🛠️ 开发笔记与技术决策 ### 为什么有这么多 pull request? 在开发早期,大数据集处理导致了反复的部署和环境问题。为了避免破坏主分支的稳定性,使用了单独的 `fixes` 分支进行调试和恢复工作,然后逐步合并。
### 模型调优与文凭范围 最初花费了大量时间通过 `GridSearchCV` 进行超参数调优。虽然在本地环境中效果良好,但对于我的部署环境来说过于复杂。 因此: - 减少了生产环境的参数网格 - 优先考虑稳定、高性能的配置,而非穷举优化
### Notebook 中的调试打印语句 尽管在生产代码中通常会避免使用打印语句,但在选定的 Notebook(例如模型训练)中保留了打印语句,以支持: - 透明的调试 - 更便捷的未来迭代和重新训练 - 长时间运行过程中的清晰执行检查点
## 🐞 未修复的缺陷与已知限制 | 问题 | 描述 | |---------------------------|--------------------------------------------------------------------------------------------------------------| | **部署上传限制** | 由于 Fly.io 内存限制,大型 CSV 上传可能在部署的应用上失败。欺诈检测器在本地使用完整数据集运行时可靠。 | | **类别不平衡敏感性** | 由于类别不平衡,极小金额的交易的预测可靠性可能降低。 | | **模型性能采样** | 模型性能页面对 5,000 行样本计算指标,而非完整数据集,以适应部署应用的内存限制。结果具有代表性但不穷尽。 |
## 🚀 部署 ### 在线应用 应用已上线:**[https://fraudsight.fly.dev](https://fraudsight.fly.dev)** 部署在 [Fly.io](https://fly.io) 上。由于平台内存限制,部署版本使用代表性样本数据集进行演示。完整的分析工作流可在本地使用。 ### 本地设置(推荐用于完整功能) ``` git clone https://github.com/BlvckKryptonite/fraudsight-risk-analyzer.git cd fraudsight-risk-analyzer pip install -r requirements.txt streamlit run src/app.py ```
### 迁移至 Fly.io 该应用最初部署在 Heroku 上,在 Heroku 取消免费套餐后迁移至 [Fly.io](https://fly.io)。由于应用的数据科学技术栈和大数据集,这是三次迁移中最复杂的一次。 ### 为什么选择 Fly.io? Fly.io 提供慷慨的免费套餐和基于 Docker 的部署,可完全控制运行时环境——这对于具有特定内存和依赖要求的数据科学应用非常重要。 #### 遇到的问题及修复方法 **1. 内存不足(OOM)崩溃** 应用在启动时反复被终止,报错 `Killed process (streamlit) — Out of memory`。仅导入 Streamlit 结合 pandas、scikit-learn、matplotlib 和 seaborn 就会消耗大量内存。 修复:将机器扩容至 2048mb。 ``` fly scale memory 2048 ``` 并更新 `fly.toml`: ``` [[vm]] memory = '2048mb' cpu_kind = 'shared' cpus = 1 ``` **2. 模型性能页面每次访问都加载完整数据集** `model_performance.py` 在每次访问时加载整个 143MB 的 CSV 并对所有行运行预测,且没有缓存,导致反复出现内存峰值。 修复:将数据加载和预测包装在 `@st.cache_data` 函数中,并采样 5,000 行——足以获得统计上有意义的混淆矩阵和 ROC 曲线输出。 **3. 143MB CSV 被 GitHub 文件大小限制阻止** 数据集已被提交到 Git 历史记录中,导致所有推送被 `GH001: Large files detected` 阻止。 修复:使用 `git filter-repo` 从 Git 历史记录中完全清除该文件: ``` git filter-repo --path data/sample_cleaned_transactions.csv --invert-paths --force git remote add origin https://github.com/BlvckKryptonite/fraudsight.git git push origin --force --all ``` 该文件现在通过 `.gitignore` 排除在 Git 之外,但在构建时仍通过 Dockerfile 打包到 Docker 镜像中,因此部署的应用仍然可以访问它。 **4. 部署缓慢(600–800 秒的构建上下文)** 整个 `data/` 文件夹在每次部署时都被发送到构建服务器,使构建上下文膨胀至超过 800MB。 修复:添加 `.dockerignore` 以排除不必要的大文件,仅保留运行时所需的 `sample_cleaned_transactions.csv`。 **5. 运行时找不到 CSV 文件** 添加 `.dockerignore` 后,`sample_cleaned_transactions.csv` 被意外排除,导致运行时出现 `FileNotFoundError`。 修复:从 `.dockerignore` 中移除该文件,并确保 `COPY data/ data/` 在 Dockerfile 中出现在 `COPY . .` 之前,以便应用在启动时数据可用。 #### 最终 Dockerfile ``` FROM python:3.12-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY data/ data/ COPY . . EXPOSE 8080 CMD ["streamlit", "run", "src/app.py", "--server.port=8080", "--server.address=0.0.0.0"] ```
## 🚀 部署 ### 在线应用 通过 Heroku(或等效平台)部署。由于平台限制,部署版本使用代表性样本数据集进行演示。 ### 本地设置(推荐用于完整功能) ``` git clone https://github.com/BlvckKryptonite/fraudsight-risk-analyzer.git cd fraudsight-risk-analyzer pip install -r requirements.txt streamlit run src/app.py ```
## 📚 主要数据分析与机器学习库 | 库 | 用途 | |-----------------------|------------------------------------| | Pandas | 数据操作和分析 | | Scikit-learn | 机器学习与评估 | | Matplotlib / Seaborn | 数据可视化 | | Streamlit | 交互式仪表板 UI | | Joblib / Pickle | 模型持久化 |
## 📎 致谢 - **数据集**: [Kaggle 信用卡欺诈检测](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud) - **文档**: [Scikit-learn](https://scikit-learn.org/) 和 [Streamlit](https://docs.streamlit.io/)
## 🙏 鸣谢 特别感谢导师、同行和评审员的反馈,他们的意见帮助塑造了这个项目。 该项目代表了课程计划中的技术和学习里程碑。
## ✅ 给评审员的最终说明
## 










## 📌 项目概述
**FraudSight 风险分析器**是一款预测性分析 Web 应用程序,旨在利用机器学习和交互式数据可视化来识别潜在的欺诈性金融交易。
该应用程序结合了探索性数据分析、监督式机器学习和基于 Streamlit 的仪表板,以支持欺诈检测、调查和性能评估。虽然部署版本使用代表性样本数据集来演示核心功能,但由于平台上传和内存限制,完整模型和数据集建议在本地运行。
## 📖 目录
- [数据集内容](#📊-dataset-content)
- [业务需求](#🎯-business-requirements)
- [假设与验证](#🔬-hypotheses-and-validation)
- [数据可视化与机器学习任务的依据](#📈-rationale-for-data-visualisations-and-ml-tasks)
- [机器学习业务案例](#🤖-machine-learning-business-case)
- [仪表板设计](#🧭-dashboard-design)
- [开发笔记与技术决策](#🛠️-development-notes--technical-decisions)
- [未修复的缺陷与已知限制](#🐞-unfixed-bugs--known-limitations)
- [部署](#🚀-deployment)
- [主要数据分析与机器学习库](#📚-main-data-analysis--ml-libraries)
- [致谢](#📎-credits)
- [鸣谢](#🙏-acknowledgements)
- [给评审员的最终说明](#✅-final-note-for-assessors)
## 📊 数据集内容
### 来源
本项目使用的数据集为 [Kaggle 信用卡欺诈检测数据集](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud)。
该数据集包含匿名化的信用卡交易记录,且高度不平衡,非常适合用于欺诈检测任务。
### 变量
| 变量 | 描述 | 示例值 |
|-----------------|-----------------------------------------------------------------|-----------------------|
| `Time` | 该交易与第一笔交易之间经过的秒数 | `12345` |
| `Amount` | 交易金额 | `2.99`, `149.99` |
| `V1–V28` | 匿名化的 PCA 转换特征(来自原始数据集) | 连续值 |
| `Class` / `Is_Fraud` | 欺诈标签(0 = 合法,1 = 欺诈) | `0`, `1` |
## 🎯 业务需求 ### 利益相关方 - 金融分析师 - 风险管理团队 - 合规与欺诈调查团队
### 核心需求 | 需求 | 描述 | |------------------------|----------------------------------------------------------| | **可视化分析** | 识别欺诈交易的趋势和模式 | | **预测建模** | 将交易分类为欺诈或合法 | | **决策支持** | 标记高风险交易以供进一步审查 |
## 🔬 假设与验证 ### 假设 1. 欺诈交易更可能在标准营业时间之外发生 2. 高金额交易与欺诈的关联比例不成比例地高 ### 验证方法 - 基于时间的聚合和欺诈率比较 - 按欺诈标签分析交易金额的分布 ### 结论 | 假设 | 结果 | |----------------|------------------------------------------------------------------------| | **假设 1** | ✅ 已确认 — 在典型营业时间之外欺诈率上升 | | **假设 2** | ✅ 已确认 — 较高的交易金额显示出更高的欺诈风险 |
## 📈 数据可视化与机器学习任务的依据 | 业务需求 | 可视化 / 机器学习任务 | 工具 | |---------------------------|-------------------------------|-----------------------| | 欺诈趋势分析 | 时间序列图 | Matplotlib, Seaborn | | 欺诈分类 | Random Forest 流水线 | Scikit-learn | | 风险检查 | 交互式表格 | Streamlit, Pandas |
## 🤖 机器学习业务案例 ### 目标: 通过尽早标记潜在的欺诈性交易来减少财务损失。 ### 模型选择 选择 **Random Forest 分类器**的原因如下: - 对噪声和不平衡数据具有鲁棒性 - 无需大量特征工程即可获得强大的基线性能 - 与更不透明的模型相比具有可解释性 ### 成功指标 - 优先提高召回率以最小化假阴性 - 使用交叉验证评估平衡性能 ### 输出 - 二元欺诈预测 - 欺诈概率评分
## 🧭 仪表板设计 ### 页面: | 页面 | 描述 | |-------------------|-----------------------------------------------------------------| | **项目摘要** | 目标、数据集和项目范围的概述 | | **欺诈可视化器** | 展示欺诈趋势和分布的探索性图表 | | **欺诈检测器** | CSV 上传以进行交易级别的欺诈预测 | | **模型性能** | 评估指标、混淆矩阵和诊断 | ### 组件: - CSV 文件上传器 - 交互式表格和可视化输出
## 🛠️ 开发笔记与技术决策 ### 为什么有这么多 pull request? 在开发早期,大数据集处理导致了反复的部署和环境问题。为了避免破坏主分支的稳定性,使用了单独的 `fixes` 分支进行调试和恢复工作,然后逐步合并。
### 模型调优与文凭范围 最初花费了大量时间通过 `GridSearchCV` 进行超参数调优。虽然在本地环境中效果良好,但对于我的部署环境来说过于复杂。 因此: - 减少了生产环境的参数网格 - 优先考虑稳定、高性能的配置,而非穷举优化
### Notebook 中的调试打印语句 尽管在生产代码中通常会避免使用打印语句,但在选定的 Notebook(例如模型训练)中保留了打印语句,以支持: - 透明的调试 - 更便捷的未来迭代和重新训练 - 长时间运行过程中的清晰执行检查点
## 🐞 未修复的缺陷与已知限制 | 问题 | 描述 | |---------------------------|--------------------------------------------------------------------------------------------------------------| | **部署上传限制** | 由于 Fly.io 内存限制,大型 CSV 上传可能在部署的应用上失败。欺诈检测器在本地使用完整数据集运行时可靠。 | | **类别不平衡敏感性** | 由于类别不平衡,极小金额的交易的预测可靠性可能降低。 | | **模型性能采样** | 模型性能页面对 5,000 行样本计算指标,而非完整数据集,以适应部署应用的内存限制。结果具有代表性但不穷尽。 |
## 🚀 部署 ### 在线应用 应用已上线:**[https://fraudsight.fly.dev](https://fraudsight.fly.dev)** 部署在 [Fly.io](https://fly.io) 上。由于平台内存限制,部署版本使用代表性样本数据集进行演示。完整的分析工作流可在本地使用。 ### 本地设置(推荐用于完整功能) ``` git clone https://github.com/BlvckKryptonite/fraudsight-risk-analyzer.git cd fraudsight-risk-analyzer pip install -r requirements.txt streamlit run src/app.py ```
### 迁移至 Fly.io 该应用最初部署在 Heroku 上,在 Heroku 取消免费套餐后迁移至 [Fly.io](https://fly.io)。由于应用的数据科学技术栈和大数据集,这是三次迁移中最复杂的一次。 ### 为什么选择 Fly.io? Fly.io 提供慷慨的免费套餐和基于 Docker 的部署,可完全控制运行时环境——这对于具有特定内存和依赖要求的数据科学应用非常重要。 #### 遇到的问题及修复方法 **1. 内存不足(OOM)崩溃** 应用在启动时反复被终止,报错 `Killed process (streamlit) — Out of memory`。仅导入 Streamlit 结合 pandas、scikit-learn、matplotlib 和 seaborn 就会消耗大量内存。 修复:将机器扩容至 2048mb。 ``` fly scale memory 2048 ``` 并更新 `fly.toml`: ``` [[vm]] memory = '2048mb' cpu_kind = 'shared' cpus = 1 ``` **2. 模型性能页面每次访问都加载完整数据集** `model_performance.py` 在每次访问时加载整个 143MB 的 CSV 并对所有行运行预测,且没有缓存,导致反复出现内存峰值。 修复:将数据加载和预测包装在 `@st.cache_data` 函数中,并采样 5,000 行——足以获得统计上有意义的混淆矩阵和 ROC 曲线输出。 **3. 143MB CSV 被 GitHub 文件大小限制阻止** 数据集已被提交到 Git 历史记录中,导致所有推送被 `GH001: Large files detected` 阻止。 修复:使用 `git filter-repo` 从 Git 历史记录中完全清除该文件: ``` git filter-repo --path data/sample_cleaned_transactions.csv --invert-paths --force git remote add origin https://github.com/BlvckKryptonite/fraudsight.git git push origin --force --all ``` 该文件现在通过 `.gitignore` 排除在 Git 之外,但在构建时仍通过 Dockerfile 打包到 Docker 镜像中,因此部署的应用仍然可以访问它。 **4. 部署缓慢(600–800 秒的构建上下文)** 整个 `data/` 文件夹在每次部署时都被发送到构建服务器,使构建上下文膨胀至超过 800MB。 修复:添加 `.dockerignore` 以排除不必要的大文件,仅保留运行时所需的 `sample_cleaned_transactions.csv`。 **5. 运行时找不到 CSV 文件** 添加 `.dockerignore` 后,`sample_cleaned_transactions.csv` 被意外排除,导致运行时出现 `FileNotFoundError`。 修复:从 `.dockerignore` 中移除该文件,并确保 `COPY data/ data/` 在 Dockerfile 中出现在 `COPY . .` 之前,以便应用在启动时数据可用。 #### 最终 Dockerfile ``` FROM python:3.12-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY data/ data/ COPY . . EXPOSE 8080 CMD ["streamlit", "run", "src/app.py", "--server.port=8080", "--server.address=0.0.0.0"] ```
## 🚀 部署 ### 在线应用 通过 Heroku(或等效平台)部署。由于平台限制,部署版本使用代表性样本数据集进行演示。 ### 本地设置(推荐用于完整功能) ``` git clone https://github.com/BlvckKryptonite/fraudsight-risk-analyzer.git cd fraudsight-risk-analyzer pip install -r requirements.txt streamlit run src/app.py ```
## 📚 主要数据分析与机器学习库 | 库 | 用途 | |-----------------------|------------------------------------| | Pandas | 数据操作和分析 | | Scikit-learn | 机器学习与评估 | | Matplotlib / Seaborn | 数据可视化 | | Streamlit | 交互式仪表板 UI | | Joblib / Pickle | 模型持久化 |
## 📎 致谢 - **数据集**: [Kaggle 信用卡欺诈检测](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud) - **文档**: [Scikit-learn](https://scikit-learn.org/) 和 [Streamlit](https://docs.streamlit.io/)
## 🙏 鸣谢 特别感谢导师、同行和评审员的反馈,他们的意见帮助塑造了这个项目。 该项目代表了课程计划中的技术和学习里程碑。
## ✅ 给评审员的最终说明
标签:Anomaly Detection, Apex, Cybersecurity, Dashboard, Data Visualization, Financial Crime Prevention, Financial Services, Fly.io, Fraud Detection, Fraud Prevention, Git, Heroku, Interactive Dashboard, Kubernetes, Machine Learning, Matplotlib, meg, NumPy, Open Source, Predictive Analytics, Prototype, Python, Python Project, Real-time Transaction Monitoring, Risk Analysis, Risk Scoring, scikit-learn, Streamlit, Supervised Learning, Transaction Security, 交易风险评分, 代码示例, 企业级应用, 信息安全, 决策支持, 实时分析, 异常交易, 异常检测, 数据分析, 无后门, 机器学习, 欺诈检测, 流平台, 特征工程, 监督学习, 网络安全, 网络安全研究, 自托管, 访问控制, 请求拦截, 逆向工具, 金融科技, 金融风控, 隐私保护, 预测建模, 预防系统, 风险提示