CostPrediction/CLAUDE.md

109 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
本文件为 Claude Codeclaude.ai/code在此仓库中工作提供指引。
## 常用命令
```bash
# 安装后端依赖(核心:无需 MySQL、无需 PyTorch
pip install -e .
pip install -e ".[dev]" # 含开发工具pytest, black, mypy
pip install -e ".[torch]" # 安装可选 PyTorch神经网络训练需要
# 启动后端Flask0.0.0.0:5001
python run.py
# 启动前端开发服务器另开终端localhost:3000
cd frontend && npm install && npm run serve
# 构建前端生产版本
cd frontend && npm run build
# 运行测试
python -m pytest tests/
python -m pytest tests/test_demo_service.py -q # 单个测试文件
python -m pytest tests/test_demo_routes.py -q
# 代码格式化 / 类型检查
black src/ tests/ # 自动格式化line-length=88
mypy src/ # 类型检查
# 运行独立演示模式(仅需 5 个依赖)
cd demo_standalone && pip install -r requirements.txt && python server.py
```
## 项目概述
基于机器学习的装备成本预测系统。支持两种装备类型:**火箭炮**和**巡飞弹**。
### 技术栈
- **后端**Python 3.9-3.11, Flask 3.1+
- **数据库**SQLitePython 内置,零外部依赖),首次启动自动建表,无需手动安装配置
- **机器学习**scikit-learn核心、XGBoost、LightGBM
- **可选依赖**PyTorch仅神经网络训练需要约 800MB
- **前端**Vue 3 (Composition API) + Element Plus + ECharts, 使用 Vite 构建
### 关键文件
| 文件 | 用途 |
|---|---|
| `run.py` | 入口点,启动 Flask 服务器 |
| `src/app.py` | Flask 应用工厂 |
| `src/routes.py` | 所有 API 路由(约 1300 行) |
| `src/model_trainer.py` | ModelTrainer 类 + CostPredictionModelPyTorch NN |
| `src/data_preparation.py` | DataPreparation + EquipmentDataset |
| `src/cost_prediction.py` | CostPredictor预测编排 |
| `src/demo_service.py` | DemoModelService基于 CSV无需数据库 |
| `src/database/db_connection.py` | SQLite 数据库连接 + 建表 DDL内置 |
| `config.py` | 运行时配置 |
| `frontend/src/router/index.js` | Vue Router共 8 个路由 |
| `frontend/src/api/index.js` | Axios API 客户端 |
## 架构
### 与旧架构的核心变化
| 项目 | 旧架构MySQL | 新架构SQLite |
|------|----------------|-----------------|
| 数据库 | MySQL 8.0+,需单独安装运行 | SQLitePython 内置,零依赖 |
| 数据库依赖 | sqlalchemy, pymysql, cryptography, mysql-connector-python | 无(仅用 Python 标准库 sqlite3 |
| PyTorch | 硬依赖(顶层 import无则崩溃 | 可选依赖try/except 保护,无 PyTorch 可启动) |
| 前端构建 | Vue CLI + Babel + SCSS | Vite无需 Babel/SCSS |
| Vuex | 存在但完全空 | 已移除 |
| 依赖总数(核心)| 15+ | 5flask, numpy, pandas, scikit-learn, openpyxl |
### 训练数据流
```
用户界面 → POST /api/train → 查询 SQLite → DataPreparation特征提取 + 标准化)
→ ModelTrainer.fit_model()(训练 XGBoost, LightGBM, RF, GBM, PyTorch NN, PLS
→ 保存最优模型 → 写入 SQLite trained_models 表
```
### 预测数据流
```
用户界面 → POST /api/predict → 从 SQLite 加载最优模型 + 标准化器 → 提取特征
→ 特征标准化 → 预测 → ±20% 置信区间 → JSON 返回
```
### 机器学习模型
| 模型 | 标识 | 说明 |
|---|---|---|
| XGBoost | `xgboost` | 针对小数据量使用保守参数 |
| LightGBM | `lightgbm` | 针对小数据量使用保守参数 |
| Random Forest | `rf` | sklearn.ensemble |
| Gradient Boosting | `gbm` | sklearn.ensemble |
| PyTorch NN | `pytorch` | 可选(需安装 torch针对不同装备类型定制网络结构 |
| PLS 回归 | `pls` | 不参与最优模型评选 |
| Linear/Ridge/SVR/KNN | 仅演示 | 用于算法对比演示 |
## 重要注意事项
- **小数据量机器学习**:所有模型超参数均为保守设置(强正则化、浅树、低学习率、早停)
- **两种装备类型**火箭炮27+ 特征和巡飞弹24+ 特征),各自有独立数据库表和神经网络结构
- **生产商议价能力特征**:技术等级、规模、供应链、地区等信息被纳入特征,地区成本乘数(如美国 1.2 倍、中国 0.8 倍)
- **SQLite 首次使用**`data/equipment_cost.db` 文件在首次数据库操作时自动创建,无需手动初始化
- **编码规范**UTF-8 无 BOMLF 换行符,文件末尾保留换行符
- **中文内容**:绝不修改中文注释或文本。编辑中文附近代码时,完整保留原有中文内容