离线算法

离线算法

离线算法(Offline Algorithms),是指基于在执行算法前输入数据已知的基本假设,也就是说,对于一个离线算法,在开始时就需要知道问题的所有输入数据,而且在解决一个问题后就要立即输出结果。

从定义中我们都可以看到,离线算法设计的前提是具有问题的完全信息。

应用场景

时效性在天级别以上的

根据面临的问题,在设计算法的时候,如果时效性要求在天级别以上的,通常会采用离线算法设计。例如用户中、长期的画像,就没有必要实时进行更新,天级更新已经能够满足业务需要了。又比如潜力商品的排序,需要一段时间商品交易数据才能有比较好的效果,这一类排序列表的更新也可以采用离线算法设计。还有给商家端的营销建议,如商品折扣建议,如果算法一天给一个商家的某商品推荐多次不同的折扣,那么商家估计会觉得这个建议太不靠谱,所以离线算法能够满足业务需求了。

新型业务应用的初期算法设计

当遇到一个新的算法问题的时候,通常没有经过系统的验证,直接上线在线算法风险会比较大,开发周期也比较长,难以满足业务快速创新的要求。这种时候会在初期版本中考虑先进行离线算法开发,同时在系统链路和效果上进行验证。比如在某个系统或产品中新增算法能力的时候,为了不影响系统的主要链路,通常会考虑采用离线算法,在离线算法产生效果之后,再考虑结合在线算法的升级策略。这样做的目的一方面可以检测智能算法的有效性,另一个方面能降低现有功能和链路的改造代价,是一种能够快速支持业务创新的低成本、有效的策略。例如业务平台红包投放平台第一次上线智能投放能力的时候,就采取了离线策略,为每个人预先算好了红包发放面额,之后要考虑线上成本控制、运营策略控制、用户实时访问的商品信息等因素,能够让动态红包策略更有效,才增加了在线算法的部分。

算法开发

离线算法开发通常分为 6 个环节:环境准备(项目和环境配置)-->输入(数据准备、数据读入、数据预处理和特征工程)-->训练(模型选择和训练)-->评估(模型评估)-->输出(预测和结果保存)-->部署(上线和调度)。