雪球:基于Tensorflow构建个性化股票内容推荐产品

avatar
@雪球财经

背景介绍

雪球是中国最大的股票投资社区,其使命是“连接投资的一切”,愿景是成为“全球最大的投资交流交易平台”。雪球的核心目标是为股票、基金投资者提供优质的信息获取、投资交流和行情交易体验。

在二级市场进行股票投资是一件非常复杂的事情,市场每天都会有大量的信息产生,雪球社区每天也有近10万+股票相关的内容产生,投资者需要花费相当多的精力来分析处理这些信息,同时因为个人投资经验和投资能力限制,对于大部分信息投资者个人很难作出判断,他迫切需要参考其他人的观点和建议。那么雪球是如何借助Tensorflow提供的深度学习算法解决用户的需求和痛点的呢?

图片

需求分析

首先经过需求分析,我们把用户的需求总结为三个方面:

1)寻找自己能力圈范围内的股票,进行研究和操作

2)寻找投资能力强、值得信赖的牛人,跟随他的炒股思路

3)获取市场资讯、个股点评和操作建议

这些需求的本质是如何高效的实现用户与内容、用户与股票、用户与用户的连接。雪球给出的解决方案是通过内容建立信任、找到牛人;通过内容发现投资机会,找到股票;我们为用户提供一个多目标的个性化内容推荐引擎,以此满足用户在投资过程中寻找标的、寻找牛人、获取信息的需求。

图片

产品流程

雪球首页内容推荐产品采用了典型的Feed流结构(如图1)。

图片

图1. 雪球首页推荐产品形态

首页推荐流程采用“召回-排序-多样性”过程(如图2),产品优化目标不仅局限于用户的点击率、阅读时长,更包括用户阅读文章时的互动行为,以及通过文章关注用户、关注股票等目标。

图片

图2. 雪球首页推荐流程

模型选择

2017年底雪球首页个性化推荐项目启动。在选择排序模型的时候,雪球算法同学主要考虑两个因素:1、模型泛化能力较好,能够兼容处理离散特征和连续特征 2、具有完备的工具支持,可以快速开发离线训练流程和在线预测模块。当时我们调研了各种开源的机器学习模型,从最简单的LR,GBDT 到FM、DNN、DSSM,最终选择了Tensorflow框架自带的Wide&Deep模型。在模型性能方面,W&D模型结合了线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化两个模型的参数,从而达到整体模型的预测能力最优。在工程实现方面,有Google工程团队的技术能力背书,Tensorflow框架应用在我们这样的场景毫无压力,另外框架本身的文档也非常详细,使整个推荐引擎的开发流程变得非常顺利。

图片

图3. wide & deep 模型结构

优化目标

雪球是一个股票内容社区,我们希望用户通过首页推荐阅读自己关心的投资信息,产生更多的转/评/赞互动行为,进而找到自己感兴趣的股票和大V。因此,推荐模型以点击率CTR为基础优化目标,根据阅读时长、互动行为、关注行为、用户People-Rank进行样本加权,具体如下图所示。

图片

特征工程

雪球用户在社区内会产生大量的行为数据和结构数据,在此基础上,算法团队建立起一套完整的特征体系,对用户、股票、内容进行细致的刻画。

图片

图4. 雪球推荐特征体系

在特征工程方面,Tensorflow 和 Wide&Deep提供了大量简单易用的工具封装,可以非常方便的进行各种特征处理,极大提升了团队的工作效率。特别是平台自带的Feature Columns API,完全覆盖了深度模型特征变换所需的功能。

图片

图5. Tensorflow Feature Columns API

服务部署

雪球社区覆盖了A股、港股、美股三大市场的股票信息,在不同交易时段、交易日与非交易日、用户的行为有很大差异。社区内可供消费的内容也是多种多样,包括资讯、公告、PGC长文、UGC帖子等等。为了获得更好的排序效果,我们根据用户人群、交易时段、内容品类拆分成十多个细分模型;在模型迭代过程中,需要支持数十路尾号流量做A/B Test;这些都给线上模型部署和管理带来很大挑战。我们的工程团队借助于TF-Serving框架,开发出一套模型自动部署和流量分配系统,非常给力的支持了推荐效果迭代。

总结与展望

Tensorflow 框架和Wide&Deep模型在雪球首页推荐效果优化过程中发挥了巨大的作用,有力的提升了雪球算法团队的工作效率,是中小型创业团队AI技术赋能的利器。

在算法演进方面,基于Point-Wise的CTR预估方案有其自身的局限,它主要是估计点击率的绝对值,没有考虑不同用户、不同内容品类的点击率bias。雪球算法团队的同学目前正在尝试使用TF-Ranking的Pair-Wise解决方案,相信它一定会给我们带来更好的用户体验。

参考文献

[1] Wide&Deep Learning for Recommender System

[2] github.com/tensorflow/…

[3] github.com/tensorflow/…

[4] xueqiu.com/