QuoteApp × SHAP 可解释成本估算 — 可行性分析报告
·
QuoteApp × SHAP 可解释成本估算 — 可行性分析报告

QuoteApp × 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
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 |
✅ 已安装 | 数值计算 |
立即执行安装:
pip install shap torch matplotlib
四、技术风险评估
| 风险点 | 风险等级 | 缓解策略 |
|---|---|---|
| 数据质量 | 🔴 高 | 需要清洗历史报价数据,处理异常值 |
| 模型准确性 | 🟡 中 | 使用交叉验证,监控 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 下一步行动计划
- 立即行动:安装依赖包
shap、torch、matplotlib - 短期目标:完成特征提取模块和数据集构建(P0 + P1)
- 中期目标:训练第一个版本的成本预测模型(P2)
- 长期目标:完成 SHAP 解释和 UI 集成(P3 + P4)
6.3 替代方案(快速落地)
如果暂时无法收集足够训练数据,可以采用混合方案:
- 保留现有规则引擎作为"基准模型"
- 使用 SHAP 解释规则引擎的决策逻辑(通过模拟采样)
- 逐步过渡到 ML 模型
混合方案优势:SHAP 可视化可以立即落地,不需要等模型训练完成,可先向客户展示成本解释能力,验证市场价值后再投入完整 ML 开发。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)