我们项目目标是要预测每个用户在点击广告后APP游戏和电商的转化率。期间两个半开发,从开始做到完成一共用了3个多月时候,完成了第一版转化率预测。从中的确学到了不少东西。学到的就不说了,就只提一下感觉做不好的地方。
失误1:不应该将电商和APP的数据混在一起。甚至完全可以先做类别比较平衡的APP数据,这个失误的后果是模型要预测两个任务,对模型所有的参数调整都要考虑对这两个任务的影响,往往是一个好一个不好。这对我们做第一版造成很大的精神压力,特别是还面临着交接和KPI的时候。更糟糕是APP是可以认为是类别平衡的数据,而电商是严重类别倾斜的数据,现在我怀疑是否电商的数据我们真的训练好了。
失误2:特征一开始就复杂了。我们有Doc特征,User特征,交叉特征。做前一版的同事已经证明了只用Doc特征是可以提高转化率的。我们并没有在实现中先使用Doc特征让系统run起来,相反,我们加入了过多的特征,我有三周多的时间,都是在写hadoop job去处理特征逻辑。如果我们只用Doc特征去训练,并行的做加入其它特征的工作,进度不会是三个月才出一个版本。
失误3:特征和参数的实验没有留下常人能理解的结果。先说特征,特征的加入,有很明显的随意性,没有通过实验说明特征加入的重要性,也没有认真的通过特征选择算法去确认。以致于我们第一个版本刚发布上去的时候,我们发现还没上一个版本好时都惊讶了,为什么有User特征还比没有User特征要差。再说参数,隐层的结点数,学习率,时间窗口的结果都不能用图来表示出来,后来我写PPT的时候很郁闷,没这些图,我怎么去搞升级面试,总不能临时造几幅图吧。就算不升级,给别人解释的时候,也不能傲慢的说一句,我实验出来的,但数据乱的很。
失误4:对线上工程的轻视。本来想着线上工程的工作是比较少的,算法搞完再搞也可以,但事实上线上工程也有不少事。我在写工程部分的代码时,才发现连Hash算法也无法解决Binarize时的速度问题,又只能把一部搞Binarize任务移到线下。并且还要写一些工具,数据同步,监控任务,其实花了不少时间。这些本可以在算法开发的时候就同步进行的工作。搞到最后,它反而成了项目完成时间的瓶颈,导致晚了两周。
失误5:外部原因。搜搜被卖后,搜索广告就和我们合并了,我们的转化率预测最后的主人就不确定了。渐渐的,我对转化率预测已经失去兴趣了,因为这个项目已经逐渐离开我了。我在工作中比较实际,可做可不做的事,那我当然是不做了,除非那工作很有意思。其实这也是我经常劝那些因为工作不爽就想辞职的同事的一个理由,通常,工作的变化要比你想的要大,要快。想想有多少公司消失了,多少部门解散了,多少领导离职了,真的就不能忍一下吗?
失误6:缺少更上层领导的支持。我从没听过我组长以上的领导问我们项目进度。没有领导的支持,这就不是一个重要项目,推动的时候会有阻力,你不可能让同事去冒发布风险去发一个他感觉都没听过的项目。并且别人的配合情绪也不高,人人天天听那么多项目,对别人来讲,只是又一个不知所云的项目而已。