一个人搭建完整的预测平台,关键是把系统拆成「数据→模型→服务→客户端→部署」五个独立层,每层先做出最小可用版本再逐层打通。本文以真实上线的生物稳定性分析平台为例,给出 8 个子项目的拆分方法与技术选型。
为什么要做这个平台
在生物药研发里,“这个细胞株还稳不稳”是一个反复出现、又高度依赖经验的问题。实验室里的做法是看几次传代数据、凭感觉拍板——慢,且不可复现。
我决定把这件事做成一个系统:输入传代数据,自动输出稳定性预测与可视化报告。从第一行清洗脚本到最后一个部署脚本,全部一个人完成。这篇文章是整个项目的复盘。
系统全景:8 个子项目
平台不是一个大单体,而是 8 个各司其职的子项目:
| 编号 | 子项目 | 职责 | 技术要点 |
|---|---|---|---|
| A-01 | 数据清洗引擎 | 原始数据去噪、缺失值处理、特征工程 | pandas、正则校验 |
| A-02 | 模型训练模块 | 多算法对比、超参搜索、自动报告 | scikit-learn、交叉验证 |
| A-03 | 预测引擎 | 核心推理逻辑,批量 + 实时两种模式 | 模型序列化、接口统一 |
| A-04 | Web 服务端 | 独立部署的 API 与页面服务 | 端口 8501、nginx 反代 |
| A-05 | 数据管理后台 | 训练集管理、版本回溯、导出 | 文件版本化 |
| A-06 | 桌面客户端 | 单文件 exe,双击即用 | PyInstaller |
| A-07 | 报告生成器 | 一键导出 Word / Excel 报告 | python-docx、openpyxl |
| A-08 | 一键部署脚本 | 系统服务、开机自启、崩溃自动拉起 | systemd、shell |
一个人做全栈的三条经验
1. 先让数据流动起来,再谈模型精度
最常见的失败顺序是:先花三周调模型,最后发现数据管道根本跑不通。我的顺序反过来——先写 A-01 数据清洗和 A-03 预测引擎的最小闭环,用规则模型(甚至线性回归)占位,让”上传数据→出结果”这条链路第一天就是通的。之后再迭代模型,每一步都有可对比的基线。
2. 每个子项目都能独立运行、独立测试
8 个子项目各自有入口、有自己的输出物。数据清洗引擎可以单独跑一批文件,报告生成器可以单独喂一份结果 JSON。这样做的好处是:任何一层出问题,我都能在 5 分钟内定位到是哪一层——这对单人维护至关重要,因为你没有队友帮你分担排查成本。
3. 交付形态决定工具的命运
同一个预测引擎,我做了三种交付:
- Web 版:给有浏览器的所有人,部署在
wxsunday.cloud/stability/; - 桌面 exe:给不能联网的实验环境,PyInstaller 打成单文件,双击即用;
- Word/Excel 报告:给需要归档和汇报的场景,一键导出。
工具的算法再好,交付形态不对就不会被用。“让别人用起来”本身,就是工程设计的一部分。
踩过的三个坑
- PyInstaller 打包体积爆炸:科学计算全家桶打出来超过 500MB。解法是按需裁剪依赖、排除测试目录,最终压到可接受范围。
- 模型版本混乱:训练集更新后旧预测结果无法复现。解法是 A-05 数据管理后台强制”训练集—模型—预测结果”三者版本绑定。
- 服务器重启后服务没起来:解法是 A-08 部署脚本把服务注册成 systemd 单元,开机自启 + 崩溃自动拉起,从此没再半夜爬起来重启过。
写在最后
一个人做完整套系统,最大的收获不是省了人力,而是你对每一层都了如指掌——数据从哪来、模型怎么判、服务怎么挂、报告怎么出,没有任何黑盒。这种全链路的掌控感,是团队协作很难给的。
如果你也在考虑把某个”靠经验拍板”的问题做成系统,我的建议是:今天就把最小闭环写出来,哪怕预测逻辑只是 if-else。
平台 Web 版已上线:细胞株稳定性预测,欢迎试用并把反馈发给我。
常见问题
生物稳定性分析平台是做什么的?
它预测细胞株克隆在传代过程中的表达稳定性:输入历史传代数据,模型输出稳定性指标与趋势图表,帮助研发人员判断一个克隆是否值得继续投入。
一个人做这样一套平台需要哪些技术?
核心是 Python 生态:pandas 做数据清洗,scikit-learn 做建模,Flask/Streamlit 做 Web 服务,PyInstaller 打包桌面客户端,再加 systemd 与 nginx 完成服务器部署。
这个平台可以在线体验吗?
可以,Web 版已在 wxsunday.cloud/stability/ 上线,打开浏览器上传数据即可使用,无需安装。
本文由 祥哥(祥哥)撰写并首发于 祥哥的私人工坊。 转载或引用请注明出处:https://wxsunday.cloud/blog/stability-platform-fullstack.html