背景介绍
雪球是中国最大的股票投资社区,其使命是“连接投资的一切”,愿景是成为“全球最大的投资交流交易平台”。雪球的核心目标是为股票、基金投资者提供优质的信息获取、投资交流和行情交易体验。
在二级市场进行股票投资是一件非常复杂的事情,市场每天都会有大量的信息产生,雪球社区每天也有近 10 万 + 股票相关的内容产生,投资者需要花费相当多的精力来分析处理这些信息,同时因为个人投资经验和投资能力限制,对于大部分信息投资者个人很难进行筛选,他迫切需要匹配合适的投资策略建议。那么雪球是如何借助 TensorFlow 提供的深度学习算法解决用户的需求和痛点的呢?
需求分析
首先经过需求分析,我们把用户的需求总结为三个方面:
- 寻找自己能力圈范围内的股票,进行研究和操作
- 寻找投资能力强、值得信赖的专家,学习投资思路
- 获取市场资讯、个股点评和操作建议
这些需求的本质是如何高效的实现用户与内容、用户与股票、用户与用户的连接。雪球给出的解决方案是通过内容建立信任、找到专家;通过内容发现投资机会,找到股票;我们为用户提供一个多目标的个性化内容推荐引擎,以此满足用户在投资过程中寻找标的、寻找专家、获取信息的需求。
产品流程
雪球首页内容推荐产品采用了典型的 Feed 流结构,如下图:
首页推荐流程采用“召回-排序-多样性”过程,产品优化目标不仅局限于用户的点击率、阅读时长,更包括用户阅读文章时的互动行为,以及通过文章关注用户、关注股票等目标。
模型选择
2017 年底雪球首页个性化推荐项目启动。在选择排序模型的时候,雪球算法同学主要考虑两个因素:
- 模型泛化能力较好,能够兼容处理离散特征和连续特征
- 具有完备的工具支持,可以快速开发离线训练流程和在线预测模块
当时我们调研了各种开源的机器学习模型,从最简单的 LR,GBDT 到 FM、DNN、DSSM,最终选择了 TensorFlow 框架自带的 Wide&Deep 模型。在模型性能方面, W&D 模型结合了线性模型的记忆能力 (memorization) 和 DNN 模型的泛化能力 (generalization),在训练过程中同时优化两个模型的参数,从而达到整体模型的预测能力最优。在工程实现方面,有 Google 工程团队的技术能力背书,TensorFlow 框架应用在我们这样的场景毫无压力,另外框架本身的文档也非常详细,使整个推荐引擎的开发流程变得非常顺利。
优化目标
雪球是一个股票内容社区,我们希望用户通过首页推荐阅读自己关心的投资信息,产生更多的转/评/赞互动行为,进而找到自己感兴趣的股票和大 V。因此,推荐模型以点击率 CTR 为基础优化目标,根据阅读时长、互动行为、关注行为、用户 People-Rank 进行样本加权,具体下图所示。
特征工程
雪球用户在社区内会产生大量的行为数据和结构数据,在此基础上,算法团队建立起一套完整的特征体系,对用户、股票、内容进行细致的刻画。
在特征工程方面,TensorFlow 和 Wide&Deep 提供了大量简单易用的工具封装,可以非常方便的进行各种特征处理,极大提升了团队的工作效率。特别是平台自带的 Feature Columns API,完全覆盖了深度模型特征变换所需的功能。
服务部署
雪球社区覆盖了 A 股、港股、美股三大市场的股票信息,在不同交易时段、交易日与非交易日、用户的行为有很大差异。社区内可供消费的内容也是多种多样,包括资讯、公告、PGC 长文、UGC 帖子等等。为了获得更好的排序效果,我们根据用户人群、交易时段、内容品类拆分成十多个细分模型;在模型迭代过程中,需要支持数十路尾号流量做 A/B Test;这些都给线上模型部署和管理带来很大挑战。我们的工程团队借助于 TF-Serving 框架,开发出一套模型自动部署和流量分配系统,非常给力的支持了推荐效果迭代。
总结与展望
TensorFlow 框架和 Wide&Deep 模型在雪球首页推荐效果优化过程中发挥了巨大的作用,不仅有力的提升了雪球算法团队的工作效率,更使得用户的阅读时长和互动行为上提升了 200%。是中小型创业团队AI技术赋能的利器。
在算法演进方面,基于 Point-Wise 的 CTR 预估方案有其自身的局限,它主要是估计点击率的绝对值,没有考虑不同用户、不同内容品类的点击率 bias。雪球算法团队的同学目前正在尝试使用 TF-Ranking 的 Pair-Wise 解决方案,相信它一定会给我们带来更好的用户体验。
参考文献
- Wide & Deep Learning for Recommender Systems - arXiv
https://arxiv.org/pdf/1606.07792.pdf - https://github.com/tensorflow/models/tree/master/official/r1/wide_deep
- https://github.com/tensorflow/serving
- https://xueqiu.com/