CostPrediction/docs/dev/design.md

16 KiB
Raw Permalink Blame History

装备成本估算系统设计方案

一、系统概述

本系统旨在通过装备的技术参数,利用机器学习方法对装备成本进行估算。系统采用前后端分离架构,主要包含数据预处理、特征分析、模型训练和成本预测等模块。

二、系统架构

1. 技术架构

  • 前端Vue.js + Element UI
  • 后端Python Flask
  • 数据库: Mysql
  • 机器学习框架TensorFlow, Scikit-learn

2. 系统模块

graph TD
    A[装备成本估算系统] --> B[数据预处理模块]
    A --> C[特征分析模块]
    A --> D[模型训练模块]
    A --> E[成本预测模块]
    A --> F[系统管理模块]

三、数据模型设计

1. 数据库表结构

装备基本信息表(equipment)

  • id: 主键
  • name: 装备名称
  • type: 装备类型
  • manufacturer: 制造商
  • created_at: 创建时间

技术参数表(technical_params)

尺寸参数
  • length_m: 总长(m)
  • width_m: 宽度(m)
  • height_m: 高度(m)
  • weight_standard_kg: 标准重量(kg)
  • weight_combat_kg: 战斗重量(kg)
火力参数
  • firing_angle_horizontal: 方向射界(度)
  • firing_angle_vertical: 高低射界(度)
  • rocket_length_m: 火箭弹长度(m)
  • rocket_diameter_mm: 弹体直径(mm)
  • rocket_weight_kg: 火箭弹重量(kg)
性能参数
  • max_speed_ms: 最大速度(m/s)
  • max_range_km: 最大射程(km)
  • warhead_weight_kg: 战斗部重量(kg)
其他参数
  • mobility_type: 机动性类型
  • wheel_arrangement: 轮式布局
  • amphibious: 两栖能力

成本数据表(cost_data)

  • equipment_id: 装备ID
  • actual_cost: 实际成本
  • predicted_cost: 预测成本
  • prediction_date: 预测日期

四、核心功能模块设计

1. 特征工程模块

  • 数据预处理
    • 数据清洗
    • 缺失值处理
    • 异常值检测
    • 数据标准化
  • 特征衍生
    • 功重比(power_weight_ratio)
    • 体积(volume)
    • 射程速度比(range_speed_ratio)
    • 战斗部比例(warhead_rocket_ratio)
  • 特征选择
    • 方差分析
    • 相关性分析
    • 互信息分析
  • 一致性分析
    • rwg值计算组内一致性
    • ICC值计算组内相关系数

2. 模型训练模块

2.1 集成学习模型

  1. XGBoost (eXtreme Gradient Boosting)
  • 特点:

    • 使用二阶导数进行优化,收敛更快
    • 支持自定义损失函数
    • 内置正则化,防止过拟合
    • 支持特征重要性评估
  • 配置:

    XGBRegressor(
        n_estimators=100,      # 树的数量适中,避免过拟合
        learning_rate=0.1,     # 较大的学习率,加快收敛
        max_depth=3,           # 较小的树深度,防止过拟合
        min_child_weight=3,    # 控制过拟合
        subsample=0.8,         # 随机采样,增加模型鲁棒性
        colsample_bytree=0.8,  # 特征采样,防止过拟合
        objective='reg:squarederror'  # 回归任务
    )
    
  1. LightGBM (Light Gradient Boosting Machine)
  • 特点:

    • 基于直方图的决策树算法,训练速度快
    • 支持类别特征的直接输入
    • 叶子优先的生长策略
    • 内存占用小
  • 配置:

    LGBMRegressor(
        n_estimators=100,
        learning_rate=0.1,
        max_depth=3,
        num_leaves=8,          # 控制树的复杂度
        subsample=0.8,
        colsample_bytree=0.8,
        objective='regression'
    )
    
  1. GBDT (Gradient Boosting Decision Tree)
  • 特点:

    • 经典的梯度提升算法
    • 较好的可解释性
    • 对异常值不敏感
    • 预测稳定性好
  • 配置:

    GradientBoostingRegressor(
        n_estimators=100,
        learning_rate=0.1,
        max_depth=3,
        subsample=0.8
    )
    
  1. Random Forest (随机森林)
  • 特点:

    • Bagging集成方法
    • 训练过程可并行化
    • 不易过拟合
    • 对特征尺度不敏感
  • 配置:

    RandomForestRegressor(
        n_estimators=100,
        max_depth=3,
        min_samples_split=3,
        min_samples_leaf=2
    )
    

2.2 模型选择策略

  1. 交叉验证
  • 小样本数据集使用留一法LOO交叉验证
  • 大样本数据集使用5折交叉验证
  1. 模型评估指标
  • R²分数评估拟合优度
  • 标准差:评估预测稳定性
  • MAE评估预测误差
  • MSE惩罚较大误差
  1. 自动模型选择
  • 对每个模型进行交叉验证评估
  • 选择R²分数最高的模型
  • 保存模型训练历史记录

2.3 特征工程与模型优化

  1. 特征选择
  • 使用模型的特征重要性评分
  • 基于互信息的特征筛选
  • 相关性分析去除冗余特征
  1. 参数优化
  • 针对小样本:
    • 减小模型复杂度(树的深度和数量)
    • 增加正则化强度
    • 使用较大的学习率
  • 针对大样本:
    • 增加模型复杂度
    • 减小学习率
    • 使用特征采样
  1. 集成策略
  • 模型投票:综合多个模型的预测结果
  • 置信区间使用bootstrap方法估计预测不确定性
  • 异常检测:识别并处理异常预测值

3. 成本预测模块

  • 数据标准化处理
  • 模型预测流程
  • 置信区间计算
  • 预测评估指标
    • MAE(平均绝对误差)
    • MSE(均方误差)
    • RMSE(均方根误差)
    • R²(决定系数)

4. 数据管理模块

4.1 数据查询优化

  1. 特殊参数查询策略
  • 使用子查询替代 JOIN 操作,避免数据重复和空值问题
  • 使用 COALESCE 确保返回空数组而不是 NULL
  • 在 WHERE 子句中添加条件确保只获取有效参数
  • 简化查询结构,移除不必要的 GROUP BY 子句
  1. 查询性能优化
  • 数据结构清晰,每个装备保持单一记录
  • 特殊参数组织在 JSON 数组中
  • 避免空值和无效数据的显示
  • 优化查询性能,减少复杂的 JOIN 和 GROUP BY 操作

4.2 数据展示

  1. 基本信息展示
  • 装备基本参数表格展示
  • 支持搜索和过滤功能
  • 分类显示不同类型装备数据
  1. 特殊参数展示
  • 在详情页面显示装备特有参数
  • 支持特殊参数的格式化显示
  • 根据参数类型自动添加单位
  • 区分数值类型和文本类型参数
  1. 数据编辑功能
  • 支持基本参数和特殊参数的编辑
  • 根据参数类型提供不同的编辑控件
  • 数值类型参数支持精度控制
  • 保存时进行数据验证

4.3 数据维护

  1. 数据导入导出
  • 支持 Excel 模板导入
  • 提供数据模板下载
  • 导入时进行数据验证和错误提示
  1. 数据删除
  • 级联删除相关数据
  • 删除前进行确认
  • 删除后自动刷新数据列表
  1. 数据更新
  • 支持单条记录更新
  • 保存时进行数据完整性验证
  • 更新后实时刷新显示

4.4 扩展性设计

  1. 参数管理
  • 支持动态添加特殊参数
  • 参数定义包含名称、单位、说明等
  • 支持参数值类型定义
  1. 数据结构
  • 采用灵活的数据模型设计
  • 支持不同类型装备的差异化参数
  • 便于后续功能扩展
  1. 接口设计
  • RESTful API 设计
  • 统一的响应格式
  • 完善的错误处理机制

五、API接口设计

1. 成本预测接口

  • 路径POST /api/predict
  • 必要参数:
    • length_m: 总长
    • width_m: 宽度
    • height_m: 高度
    • weight_standard_kg: 标准重量
    • weight_combat_kg: 战斗重量
    • max_range_km: 最大射程
    • max_speed_ms: 最大速度
  • 响应数据:
    • predicted_cost: 预测成本
    • confidence_interval: 置信区间(上下限)

2. 特征分析接口

  • 路径POST /api/analyze-features
  • 响应数据:
    • important_features: 重要特征列表
    • correlation_analysis: 相关性分析结果

六、部署要求

1. 环境要求

  • Python 3.8+
  • PostgreSQL 12+
  • Node.js 14+

2. 依赖包

  • Flask
  • NumPy
  • Pandas
  • Scikit-learn
  • TensorFlow
  • SQLAlchemy

3. 部署步骤

  1. 数据库初始化
    • 创建数据库
    • 执行表结构脚本
    • 导入基础数据
  2. 后端服务部署
    • 安装依赖包
    • 配置环境变量
    • 启动服务
  3. 前端部署
    • 安装依赖
    • 构建生产版本
    • 配置Nginx

七、后续优化建议

1. 特征工程优化

  • 增加更多领域特征
    • 火力密度指标
    • 机动性综合指标
    • 作战效能指标
  • 优化特征选择算法
  • 增强数据清洗能力

2. 模型优化

  • 引入集成学习方法
    • Random Forest
    • XGBoost
    • LightGBM
  • 实现模型自动调优
  • 增加在线学习能力

3. 系统优化

  • 增加批量处理能力
  • 实现模型版本管理
  • 提升预测结果可解释性
  • 优化系统性能
    • 数据库索引优化
    • 缓存策略
    • API性能优化

4. 安全性优化

  • 数据加密存储
  • API访问认证
  • 操作日志记录
  • 数据备份策略

八、项目进度规划

第一阶段基础功能开发4周

  1. 数据库设计和实现
  2. 特征工程模块开发
  3. 基础API实现

第二阶段模型开发4周

  1. 数据预处理
  2. 模型训练与优化
  3. 预测功能实现

第三阶段系统集成3周

  1. 前端开发
  2. 系统集成测试
  3. 性能优化

第四阶段系统测试与部署2周

  1. 系统测试
  2. 部署上线
  3. 文档完善

2.4 数据集划分策略

2.4.1 基本原则

  1. 数据量分配

    • 训练集约80%的数据
    • 验证集约20%的数据
    • 确保数据集大小适合模型训练
  2. 数据分布均衡

    • 不同价格区间的装备均匀分布
    • 不同制造商的产品保持代表性
    • 不同技术代际的装备都要包含
    • 不同性能等级的装备要均衡
  3. 特征覆盖

    • 确保关键特征的取值范围覆盖完整
    • 避免某些特征在验证集中出现极端值
    • 保持特征分布的相似性

2.4.2 具体策略

  1. 价格区间分层

    • 高价格装备(>500万美元
    • 中等价格装备200-500万美元
    • 低价格装备(<200万美元
    • 每个价格区间按8:2比例分配
  2. 制造商分布

    • 主要制造商的产品都要在训练集和验证集中有代表
    • 每个制造商至少保留一个型号在验证集中
    • 系列装备要适当分散在两个数据集中
  3. 技术特征考虑

    • 口径分布小口径≤200mm、中口径200-300mm、大口径>300mm
    • 射程分布:近程、中程、远程
    • 发射平台:轮式、履带式
    • 制导水平:不同制导等级的均衡分布
  4. 时代分布

    • 新型装备和老式装备都要包含
    • 不同代际的装备要保持合理比例
    • 确保模型对新老装备都有良好的预测能力

2.4.3 验证方法

  1. 数据分布检验

    • 使用统计方法验证两个数据集的分布相似性
    • 检查关键特征的均值和方差
    • 验证分类特征的比例分布
  2. 代表性检验

    • 确保每个重要类别都有足够的样本
    • 验证特征空间的覆盖情况
    • 检查是否存在数据偏差
  3. 完整性检验

    • 验证数据集的完整性
    • 检查关键字段的缺失情况
    • 确保数据质量满足要求

2.4.4 实例说明

以火箭炮数据为例67个型号

  1. 训练集54个型号

    • 中国系列7/9型号
    • 俄罗斯系列4/5型号
    • 美国系列3/4型号
    • 以色列系列3/4型号
    • 韩国系列2/3型号
    • 土耳其系列2/3型号
    • 巴西系列3/4型号
    • 印度系列3/4型号
    • 波兰系列3/4型号
    • 南非系列3/4型号
    • 伊朗系列6/7型号
    • 乌克兰系列3/4型号
    • 白俄罗斯系列2/3型号
    • 阿联酋系列2/3型号
    • 新加坡系列2/3型号
    • 日本系列2/3型号
  2. 验证集13个型号

    • 每个制造商选择1-2个代表型号
    • 覆盖不同价格区间
    • 包含新老装备
    • 确保性能参数分布合理

这种划分方式确保了:

  1. 训练集和验证集都包含各个制造商的产品
  2. 不同价格区间的装备都有代表
  3. 不同技术水平的装备都被覆盖
  4. 特征分布保持相似性

2.5 火箭炮特征工程设计

2.5.1 设计原则

  1. 物理意义

    • 特征必须具有明确的物理意义
    • 反映装备的实际性能特点
    • 便于专业人员理解和解释
  2. 可计算性

    • 基于已有参数计算得出
    • 计算方法科学合理
    • 避免过于复杂的计算
  3. 区分度

    • 能够反映不同装备间的差异
    • 具有合适的数值范围
    • 避免过于集中的分布
  4. 完整性

    • 覆盖关键性能维度
    • 包含技术和战术层面
    • 形成完整的评估体系

2.5.2 特征设计

  1. 火力密度fire_density

    • 定义:单位面积的火力输出能力
    • 计算:射速 / (火箭弹直径² / 1000000)
    • 单位:发/分钟/平方米
    • 意义:反映武器系统的火力集中程度
    fire_density = rate_of_fire / (rocket_diameter_mm * rocket_diameter_mm / 1000000)
    
  2. 射程比range_ratio

    • 定义:最大射程与最小射程的比值
    • 计算:最大射程 / 最小射程
    • 意义:反映火箭炮的射程适应性
    range_ratio = max_range_km / NULLIF(min_range_km, 0)
    
  3. 机动性评分mobility_score

    • 定义:基于底盘类型的机动能力评分

    • 计算范围1-10分

    • 评分标准:

      CASE 
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%8x8%' THEN 9
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%6x6%' THEN 8
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%4x4%' THEN 7
          WHEN mobility_type = '履带式' THEN 6
          ELSE 5
      END
      
  4. 战备状态评分combat_readiness_score

    • 定义:基于射速的快速反应能力评分

    • 计算范围1-10分

    • 评分标准:

      CASE 
          WHEN rate_of_fire >= 30 THEN 10
          WHEN rate_of_fire >= 20 THEN 8
          WHEN rate_of_fire >= 10 THEN 6
          ELSE 4
      END
      
  5. 火箭弹功重比rocket_power_ratio

    • 定义:火箭弹重量与长度的比值
    • 计算:火箭弹重量 / 火箭弹长度
    • 意义:反映火箭弹的设计效率
    rocket_power_ratio = rocket_weight_kg / NULLIF(rocket_length_m, 0)
    
  6. 平台效率platform_efficiency

    • 定义:单位重量的火力输出能力
    • 计算:(射速 / 战斗重量) * 1000
    • 意义:反映发射平台的效率
    platform_efficiency = rate_of_fire / NULLIF(combat_weight_kg, 0) * 1000
    
  7. 部署评分deployment_score

    • 定义:综合机动性和射速的部署能力评分

    • 计算范围1-10分

    • 评分标准:

      CASE 
          WHEN mobility_type = '轮式' AND rate_of_fire >= 20 THEN 9
          WHEN mobility_type = '轮式' AND rate_of_fire >= 10 THEN 8
          WHEN mobility_type = '履带式' AND rate_of_fire >= 20 THEN 7
          WHEN mobility_type = '履带式' AND rate_of_fire >= 10 THEN 6
          ELSE 5
      END
      
  8. 地形适应性评分terrain_adaptability_score

    • 定义:基于底盘类型的地形适应能力评分

    • 计算范围1-10分

    • 评分标准:

      CASE 
          WHEN mobility_type = '履带式' THEN 9
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%8x8%' THEN 8
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%6x6%' THEN 7
          WHEN mobility_type = '轮式' AND structure_layout LIKE '%4x4%' THEN 6
          ELSE 5
      END
      

2.5.3 特征验证

  1. 数值范围验证

    • 检查特征值的合理性
    • 识别异常值和极端值
    • 确保计算结果在预期范围内
  2. 区分度验证

    • 检查特征值的分布情况
    • 验证不同装备间的差异性
    • 确保特征具有足够的区分能力
  3. 相关性分析

    • 检查特征间的相关性
    • 识别冗余特征
    • 确保特征集的独立性
  4. 实用性验证

    • 评估特征对成本预测的贡献
    • 检验特征的可解释性
    • 确保特征的实际应用价值

2.5.4 应用建议

  1. 特征选择

    • 根据具体任务选择合适的特征子集
    • 考虑特征的重要性排序
    • 平衡特征数量和模型复杂度
  2. 特征更新

    • 定期评估特征的有效性
    • 根据新数据调整计算参数
    • 及时更新评分标准
  3. 特征组合

    • 考虑特征间的组合效应
    • 设计复合特征
    • 探索特征交互作用