验证式开发——简论算法开发的正确姿势

算法系统在开发的不同阶段都要做有效性验证,如果不做验证就一口气开发到底,很有可能算法会达不到预期效果,即使达到了,也是让人不踏实的。

在我之前一份工作中,组里同学开发了曾经一个覆盖率提升算法,目的是提升商家销售[1] 的图书商品的推荐覆盖率,算法的基本思想是把自营图书的推荐结果附加在商家图书(实质上是同一本书)的推荐结果后面,以此来提升目标商品的推荐覆盖率。算法的设计大家反复论证过,都认为是没问题的,符合业务特点。但是遗憾的是,做了AB之后发现效果并未达到预期,提升幅度非常小。

上面描述的案例,是算法开发中的一种典型情况,具体表现就是算法设计时觉得很好,但是上线后往往不能达到预期。造成这种偏差的原因当然是有很多的,今天在这里我们讨论其中的一个方面,一个通过调整开发流程可以适当控制和缓解的方面,就是算法开发过程中的有效 性验证 。

有效性验证 是一个比较模糊的说法,用具体情况来说明一下。具体到我说的这个项目,问题出在我们虽然给很多商家的商品增加了推荐,但是这些商品的PV量非常的小,导致这些增加的推荐并没有真正被用户看到,所以提升幅度也就非常小了。事后来看,这其实并不是一个隐藏很深的问题,应该是可以预先算出来的,因为商家图书推荐数量少的原因之一就是浏览量小。但问题就出在,我们在设计算法时只关注了算法逻辑是否正确可行,没有去计算这个算法是否能够发挥足够大的影响,产生足够好的效果。如果事先做了这个计算,就能够知道这个策略的问题,就可以在开发之前或者开发初期调整策略,避免这样的无用功。

这样的问题不止出现在推荐项目中,在机器学习项目中也比较常见,最典型的就是各种特征的置信度问题。机器学习系统中,特征往往是多多益善的,但是如果某些特征的样本覆盖很低,也就是说只有很少一部分样本上出现了这个特征,那么这个特征训练出来的值置信度就会比较低,因为我们知道预测结果的置信度和样本数是非常相关的。这样的特征虽然每个特征可能只影响不多几条样本,但是由于特征分布的长尾性,会存在一大批这样的特征,每个特征影响几条样本,加起来就会有大量的样本受到影响,在极端情况下,有可能每条样本中都会有那么几个置信度不高的特征,所以这样的特征还是需要处理掉的。

但是这种置信不足的问题如果不在前期做针对性的专门处理的话,是不容易发现的,毕竟有那么多的特征,如果不是目的明确地去看,是很难注意到这样的问题的。这个特征处理的过程,换个角度看也是在做可行性验证,在验证某个特征是否有足够多的样本覆盖,使得其估计值置信度足够高,而不是不管三七二十一地就扔进去训练。

上面用两个例子说明了可行性验证具体是在做什么,但是也只是涵盖了其中的一部分工作。抽象一点说,可行性验证,应该是要把算法系统的几个大的步骤进行拆解,在进入开发之前,或者在开发过程中,用尽量准确的方法去估计每个步骤的效果是否符合预期,如果某个步骤不符合预期,需要及时进行调整。

以机器学习系统这样一个典型的算法系统为例来说,其中的很多部分都可以用先行验证的方法来加强对过程质量的保证,从而保证最终结果的质量。典型的例如:

特征置信度验证:

如上所述,进入训练的特征需要验证其置信程度是否足够。

样本“填充度”验证:

训练之前,还需要验证样本上的特征数量,虽然稀疏性是大数据下的基本特点,但是如果大量样本上只有很少的特征覆盖,那么就需要考虑是否需要增加特征。

特征处理验证:

各种特征处理的流程都需要不同的验证,例如连续值分段的处理,在分段之后,需要看一下每分段内样本数量之类的,确认不会出现太稀疏或者太稠密的分段。

从上面的讨论中可以看出,这种强调验证的开发模式,本质上是在把控过程,通过把控过程来把控结果,因为只有过程正确了,结果才是正确的,同时也是可靠的。 不把控过程也可能得到好的结果,但是这样的结果是不够可靠的,因为你不知道为什么好,一旦变不好了,你也同样不知道为什么变不好了。这样的系统,无疑是危险的,不能让人踏实的。就像那句投资界著名的话所说(大意):“举着火把穿过弹药库,即使活下来了,你也还是个傻子”。换言之,就是不能做骑着瞎马的盲人,把掉不掉进坑里这件事情交给运气。

验证这件事情,如果不做的话,项目也是可以做下去的,但是当效果不好的时候,还是需要返回头来查找问题,所以,这个问题是绕不过去的,只是先做和后做的区别,而且相比后做,还是先做要更好,可以提前发现问题,及时调整方案,减少无用功。

商家指的是电商平台上的第三方商家,与之对应的是平台自营。

广告时间:

转转推荐搜索团队诚招靠谱算法工程师和搜索架构工程师:转转是58集团旗下的专业二手交易平台,现在正在高速发展中,拥有干净的海量数据,独一无二的挑战性问题,更拥有广阔的发展空间和一群靠谱的小伙伴,无论你是希望快速成长还是希望建功立业,这里都是你最好的选择。有意者请发简历到zhangxiangyu01@58ganji.com。

来源:知乎 http://www.zhihu.com

作者:张相於

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。

点击下载

Advertisements

Tags: