优化的起点#

平台基本功能跑通后,我问 AI 了一个开放性问题:

针对当前平台,从用户体验角度,有哪些可优化的方向?请按必要性排序。

AI 返回了 8 个方向,我选了前 6 个(P0-P2):

优先级优化方向解决什么问题
P0训练过程可见性用户盯着"运行中"三个字几分钟,完全不知道进度
P0训练前数据探索用户不了解数据分布就做特征选择
P1错误反馈可操作Python traceback 看不懂
P1跨任务模型对比每个训练结果相互隔离,无法横向比较
P2任务队列透明化solo pool 排队中不知道前面还有几个
P2流程串联优化6 个页面相互独立,上下文在跳转中丢失

P0:训练过程可见性#

AI 设计了一个很优雅的 ProgressCallback 机制:

  • 每个 task_type 定义阶段列表(如监督学习 7 步、聚类 4 步)
  • 每个阶段入口调用 progress_callback('stage_name', message='...'),写入 MLTask.progress_info(JSONField)
  • 前端每 2s 轮询时拿到进度数据:进度条百分比、当前阶段名、实时日志
监督学习进度条:
数据导入 → 预处理 → 相关性分析 → 特征选择 → 模型训练 → 超参数调优 → 模型保存

P1:错误反馈可操作#

AI 利用 ml_utils.py 中已有的异常体系(MLDataErrorMLFeatureError 等),按异常类型映射到 5 个类别:

{
  "category": "data_quality",
  "category_display": "数据质量问题",
  "icon": "📄",
  "summary": "数据中存在大量缺失值",
  "suggestion": "建议在预处理阶段移除缺失率过高的列"
}

这比直接给用户看 Traceback (most recent call last): ... 友好太多了。每个错误都有 中文摘要 + 修复建议,用户可以直接按建议操作。

P0:数据探索面板#

上传 CSV 后,预览模态框扩展为 4 个 Tab:

  1. 原始数据:前 5 行表格
  2. 统计描述:数值列 describe 表格 + 分类列频率表
  3. 分布图:ECharts 直方图(数值列)/ 柱状图(分类列)
  4. 相关性:RdBu 发散色板热力图
热力图踩坑:ECharts 在 display:none 容器中宽高为 0

热力图在 Bootstrap Tab 中,非活动 Tab 是 display:none。ECharts 在隐藏容器中初始化时拿到 0 尺寸,渲染出来是一条细线。

解决方案:监听 Bootstrap 的 shown.bs.tab 事件,用户切到"相关性"Tab 时才初始化 ECharts 图表。

4-Tab 数据探索面板的最终效果

P1:跨任务模型对比#

新增任务对比页面,支持 2-5 个同类型已完成任务的横向对比:

  • 指标表格:最佳值绿色高亮,最差值红色
  • ECharts 分组柱状图:模型性能对比
  • 特征对比表:交集/差集
  • 参数差异表

P2:流程串联——工作流步骤指示器#

在导航栏下方加一个 5 步进度条:

1.数据管理 → 2.特征配置 → 3.模型训练 → 4.结果查看 → 5.在线预测

当前步骤高亮,已完成步骤绿色,未到达步骤灰色。通过 URL pathname 自动判断当前步骤。

同时每个步骤完成后页面自动提示"下一步":

  • 上传完数据 → “前往配置特征”
  • 配置完 → 自动跳转到看板并带上 dataset_id
  • 训练完 → “可以进行在线预测”

下面数据仅作测试演示,并不是平台真实的预测结果。

工作流步骤指示器的最终效果

变更总览#

新建文件用途
error_classifier.py错误分类器 — 5 类错误映射 + 中文摘要
progress.py训练进度回调 — 按阶段写入 DB
task_compare.html任务对比页 — 多选 → 指标表格 + 图表

修改文件 12 个,数据库迁移 2 次(MLTask 增加 error_detail/progress_info,DataSet 增加 statistics)。