SHAP 自动解释成本构成 - 实现评估报告

一、方案可行性分析
1.1 当前项目架构匹配度
评估维度 当前状态 SHAP方案要求 匹配度 成本计算方式 规则驱动(13步公式链) ML模型驱动 低 - 需要新增ML模块 特征提取能力 已有 geometry_extractor.py B-Rep → 特征向量 中 - 需扩展特征维度 数据存储 SQLAlchemy数据库 训练数据集 中 - 需建立特征库 可视化能力 PyQt6 UI框架 SHAP图表渲染 高 - 可集成matplotlib 扩展架构 模块化设计 新模块插入 高 - 支持插件式扩展
1.2 核心差距分析
当前QuoteApp采用 规则引擎 计算成本(13步公式链),而SHAP方案需要 机器学习模型 作为基础。这是最大的技术差异。
二、实现路径规划
2.1 分阶段实施策略
阶段1:数据准备 → 阶段2:模型训练 → 阶段3:SHAP集成 → 阶段4:UI展示
```阶段1:特征工程与数据收集
需求 :建立标准化特征向量,用于训练和预测
新增文件 : src/core/ml_feature_extractor.py
特征向量设计(约30-50维)
FeatureVector = {
几何特征(15维)
'volume_mm3': float, # 体积
'surface_area_mm2': float, # 表面积
'min_thickness_mm': float, # 最小壁厚
'max_thickness_mm': float, # 最大壁厚
'bbox_length_mm': float, # 包围盒长
'bbox_width_mm': float, # 包围盒宽
'bbox_height_mm': float, # 包围盒高
# 孔特征(8维)
'hole_count': int, # 孔总数
'avg_hole_diameter_mm': float, # 平均孔径
'max_hole_depth_mm': float, # 最大孔深
'deep_hole_count': int, # 深孔数量(深径比>5)
# 曲面特征(5维)
'curved_surface_ratio': float, # 曲面占比
'max_curvature': float, # 最大曲率
# 材料特征(3维)
'material_code': str, # 材料代码(编码化)
'density_gcm3': float, # 密度
'hardness_hrc': float, # 硬度
# 工艺特征(5维)
'process_count': int, # 工序数量
'has_cnc': bool, # 是否CNC加工
'has_wire_cut': bool, # 是否线切割
'has_surface_treatment': bool, # 是否表面处理
# 批量特征(2维)
'quantity': int, # 数量
}
阶段2:成本预测模型训练
需求 :训练回归模型预测成本
新增文件 : src/core/ml_cost_model.py
模型架构建议
class CostPredictor(nn.Module):
def init (self, n_features=30):
super().init ()
self.net = nn.Sequential(
nn.Linear(n_features, 128),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 1)
)
def forward(self, x):
return self.net(x).squeeze(-1)
训练数据需求 :
- 历史报价数据(特征 + 实际成本)
- 建议样本量:≥1000条有效记录 阶段3:SHAP解释模块集成
需求 :计算SHAP值并提供解释
新增文件 : src/core/shap_explainer.py
class SHAPCostExplainer:
def init (self, model, background_data):
self.explainer = shap.DeepExplainer(model, background_data)
def explain(self, feature_vector):
"""返回各特征的SHAP值和贡献度"""
shap_values = self.explainer.shap_values(feature_vector)
return shap_values
def get_top_features(self, feature_vector, top_n=10):
"""获取对成本影响最大的前N个特征"""
shap_vals = self.explain(feature_vector)
# 排序并返回
...
阶段4:UI展示集成
需求 :在报价面板中展示SHAP解释
修改文件 : src/ui/quote_panel.py
新增SHAP可视化组件
class SHAPExplanationWidget(QWidget):
def init (self):
super().init ()
瀑布图展示
特征贡献条形图
交互式力状图(可选)
## 三、实施优先级建议
### 3.1 推荐顺序(从易到难)
优先级 任务 难度 依赖 产出 P0 特征提取模块 中 geometry_extractor 标准化特征向量 P1 数据集构建 低 数据库 训练数据集 P2 模型训练框架 中 PyTorch/SHAP 训练脚本 P3 SHAP解释器 低 训练好的模型 解释API P4 UI集成 中 Qt UI框架 可视化组件
### 3.2 关键依赖清单
依赖包 当前状态 说明 shap 未安装 核心解释库 torch / xgboost 未安装 模型训练 matplotlib 未安装 可视化 numpy ✅ 已安装 数值计算
## 四、技术风险评估
风险点 风险等级 缓解策略 数据质量 高 需要清洗历史报价数据,处理异常值 模型准确性 中 使用交叉验证,监控MAE/MAPE指标 计算性能 中 使用KernelSHAP近似算法,预计算缓存 特征漂移 中 定期重新训练模型,监控特征分布 可解释性冲突 低 规则引擎与ML模型并行运行,对比验证
## 五、预期价值与ROI
### 5.1 业务价值
价值点 描述 量化收益 客户信任 报价可解释,展示成本构成 提升客户满意度 模型验证 SHAP发现模型bug 提高报价准确性 设计优化 指导客户优化设计降本 增加客户粘性 内部审计 成本驱动因素可视化 优化工艺路线
### 5.2 实现成本估算
阶段 预估工时 人力需求 需求分析 & 设计 8h 1人 特征工程 16h 1人 模型训练 24h 1人 SHAP集成 16h 1人 UI展示 24h 1人 总计 88h 1人·2周
## 六、结论与建议
### 6.1 可行性结论
方案可行,但需要分阶段实施 。当前项目架构支持扩展,但缺少ML基础设施。
### 6.2 下一步建议
1. 立即行动 :安装依赖包 shap , torch , matplotlib
2. 短期目标 :完成特征提取模块和数据集构建
3. 中期目标 :训练第一个版本的成本预测模型
4. 长期目标 :完成SHAP解释和UI集成
### 6.3 替代方案(快速落地)
如果暂时无法收集足够训练数据,可以采用 混合方案 :
- 保留现有规则引擎作为"基准模型"
- 使用SHAP解释规则引擎的决策逻辑(通过模拟采样)
- 逐步过渡到ML模型