数据挖掘项目中的流程规范化
最近做完了几个项目, 开始要总结一些经验, 同时也开始整理一些原始数据, 发现根本没法做, 因为这个几个项目已经做了好几个月, 并且我是最后交付的时候才加入的, 所以预处理的部分我完全没有参与过, 这就导致很多字段根本就不知道是什么含义. 感觉头特别大...无从下手, 只能各种找之前人问, 还好之前的人都比较nice, 给了很多帮助.
由此, 我开始思考了下当前数据挖掘项目中规范化的问题.
由于是创业公司, 当然是快速迭代不应该有过多的条条框框, 但也不能完全freestyle, 一味应付需求而没有一些积累. 相对于, 传统公司的繁文缛节(另外一个极端). 我觉得对于创业公司来说可以有一个平衡点, 即规则和效率的平衡.
-
使用团队版本管理工具 (GIT/SVN)
其实数据挖掘项目代码的规模不太大, 一般来说用不着项目协同, 当然也有大的项目, 需要很多人一起来开发, 这种情况我认为是必要的.
但是, 对于小项目来说就完全用不着了么?
我的答案是否定的. 我觉得只要超过2个人以上开发的项目就有必要用项目协同工具. 首先, 版本管理工具有很多强大的分支工具, 这可以帮助开发者更好的管理自己的代码, 其次, 也可以更加方便的查看, 使用别人的代码. 其实版本管理工具的好处不用赘述, 可以认为它是规范化的基石. -
文档的规范化
程序员最讨厌写的大概就是注释和文档了吧, 但不管怎样算法工程师必须得写, 不写别人完全看不懂你的idea, 并且你的注释一定要完整并且规范. 例如方法的注释, 对于调用的人来说可以直接看到IDE显示输入和输出, 以及注意事项那将会是很舒服的一件事, 某种程度上这样提高了开发效率, 避免了别人因为看不懂而造轮子的时间成本.
另外, 关于字段的注释也一定有一个很完整的文档, 否则后期他人接手就完全没有头绪(比如现在的我...)
当然, 最好还需要有一个完整的工作日志, 类似与changelog的东西, 并且可以反馈到一个大家都可以看到的地方, 这也是降低大家沟通成本的一个途径. -
代码规范化
代码规范化对于团队来说也是很重要. 最大的好处就是团队内部开发协同时, 可以更加迅速得阅读别人的代码, 当然, 规范的代码出低级bug的可能性也会减少.
而对于没有经验的创业公司我认为可以先找一个比较好的实践来模仿, 然后逐渐演化出自己的标准. -
工程流水线化
工程流水化是我之前在看一个数据科学比赛大神的经验分享时得到的idea. 在比赛中, 经常需要寻找新的feature然后再跑一遍数据挖掘的流程, 数据清洗->二次筛选特征->(降维)->数据变换->选模型->交叉验证->导出结果... 其实这一系列的流程都可以流水线化. 比赛中它可以极大方便数据挖掘的的过程, 节省很多时间. 当然, 项目本质和比赛是没啥区别.
那么如何实现流水线化?
sklearn中有一个pipeline的包, 可以了解下.