是否有干扰信息。这个指的是模块周围是否有影响用户注意力的其他内容,能否让用户比较专心地浏览推荐模块。典型的如一些亮闪闪的广告或者促销/活动banner之类的,放在推荐位的旁边会对用户的注意力产生不同程度的影响,进而影响转化。如果推荐系统在你的业务中是重要的一部分,那么就应该给予它足够专注(dedicated)的空间和位置,而尽量不要将其与其他内容混在一起。在这个纷繁复杂的世界里,很多时候,少就是多(less is more)。 三、数据因素 推荐系统是典型算法驱动的系统,而如果说算法是系统的骨架,那么数据就是系统的血液。如果数据质量和数量不够,那么任何算法的效果都会打折扣。数据的数量不足是很容易理解的,而且数据量是否充足很多时候和整个网站或APP的发展状况有关,不是我们所能左右的,但数据质量则不同,是可以通过人为的努力而不断加强的。所以这里就简单说一下数据质量方面常见的可能存在的问题。 关键信息缺失。信息缺失是数据质量方面最大的问题之一,尤其是影响到算法策略或排序模型的关键信息。例如曝光数据中没有具体曝光位置信息,展现日志中没有用户停留时长的信息等等,这些信息的确实会直接导致算法效果的下降,进而影响最终效果。类似这些问题的出现,很多时候是因为在最初的数据系统建设时,没有算法相关的人员参与,导致没有把这些相关信息设计进去。不过这类问题也相对好解决,只要在发现有缺失之后尽快补充进去就好了。 数据设计欠佳,使用复杂。还有一种情况,就是关键信息都有,没有严重缺失,但是数据结构或表结构设计不够合理,导致获取一个信息要join多张表,或经过复杂的运算逻辑。这种情况下,虽然关键信息都可以获取到,但是由于获取成本高,很有可能在工程实现中被不同程度地做折中,导致数据质量打折扣,影响最终效果。这类问题的解决方法,从大的思路上来讲是要做好算法相关的数据仓库/数据集市建设,使得数据的获取、变动和维护都尽量简单化,减少数据建设的成本,从而提高数据的使用效率。 推荐系统使用到的数据通常是整个网站的数据系统中的一个子集,所以这部分数据质量的把控需要推荐系统的开发人员和数据系统的开发人员共同的努力,才能保证数据的可用性和易用性。 四、算法策略因素 上面说了这么多,终于说到了推荐系统最核心的算法策略部分。算法策略对效果的影响是毋庸置疑的,但是其影响也是多方面的,具体来讲,算法可能会从以下几个方面影响效果。 算法复杂度影响准确性。复杂度越高的算法整体上准确性较高,无论使用什么具体算法,这个大趋势整体来说是正确的。例如简单的排序模型可能干不过非线性模型,连续值特征有可能干不过离散化后的非线性特征,时序问题上vanilla rnn干不过LSTM等等。在保证数据质量的前提下,用复杂度高的模型是一种能够确保收益的效果提升方式,当然前提是算法要与业务相契合,不能为了复杂而复杂。 算法的稳定性影响效果的稳定性。我们知道在机器学习模型中有一类模型具有低偏差但同时也具有高方差,这里的高方差,指的是在训练出来的模型,在不同的数据集上表现差异会比较大,这种现象还有另外一个名字就是过拟合。如果数据量足够大的话,再加上合理的正则化手段,过拟合是比较容易避免的。所以问题更容易出现在数据量不足的情况下,在这种情况下,应该选择例如线性模型这样简单模型来保证结果的稳定性,甚至可以考虑使用基于规则的算法来保证稳定性。 为什么要关注结果的稳定性呢?这里的原因和我们在学习算法设计分析时要关注算法的平均复杂度是类似的。我们虽然希望得到一个非常准确的模型,但是更希望这个模型在线上运行时稳定的,是可预期的,不会今天效果好,明天效果差。在实际使用中,无论准确率如何,都希望稳定性是有保证的。 五、工程架构因素 最后,我们再来简单说一下工程架构方面的因素。无论什么样的数据,什么样的算法,最终呈献给用户之前都需要具体的工程落地,那么这个落地过程中选择的具体工程架构也会对效果产生影响。 效应耗时的影响。接口的响应速度无疑是工程架构对用户的最直接体现,响应速度慢肯定会导致用户的不耐烦,可能就直接流失掉了。要提高速度,通常会有几类方法,一类是对算法进行优化,减少不必要的计算;二是选择简单算法;三是使用缓存的思路,只在在线部分进行尽量少的计算,其余的计算都放到离线或近线层去做,减少实时计算的负担。 (责任编辑:admin) |