AI大赛答辩之李立:营收预测偏差也有用 可发现异动股

AI大赛答辩之李立:营收预测偏差也有用 可发现异动股
2018年08月29日 10:06 新浪财经

  新浪财经讯 8月29日,由中国证券投资基金业协会金融科技专业委员会联合易方达基金、华夏基金、阿里云、通联数据等举办,新浪财经独家媒体支持的“FDDC2018全球金融数据探索与发现大赛答辩会”在北京金融街威斯汀大酒举行。本次大赛有两大赛题,分别为“A股上市公司营业收入预测”与“A股上市公司公告信息抽取”。

  在营收预测赛题中,复赛排名第五名的“KingoWind”战队李立表示,财务数据对于模型的构建至关重要,逻辑相关性较强,使用时的优先级别也要靠前。

  在实用性方面,李立介绍,自己的模型具有高效率、可扩展等特征,可以及时预测出相关数据,灵活支持特征的组合、转化。并且,还加入了股票价格与价值相关性分析,用结合量化策略进行建模。

  李立还表示,如果对公司的营收预测出现偏差,这本身也是有用信息,可以发现异动的股票,分析异动信息和未来走势的相关性。

  据了解,“KingoWind”战队为李立一人组成的团队,李立毕业于武汉大学计算机科学与技术专业,现为公司职员。

  以下是现场文字实录:

  KingofWind

  李立:大家早上好!很高兴能在这里和大家一起分享和交流我对这个赛题的一些思考,也非常感谢在座的领导、导师以及所有选手和主办方,让我们有这样一次机会参加这个比赛并且在一起交流。

  接下来我进入我的答辩分享环节。

  首先今天的分享分为四个部分,第一部分是简单的团队介绍。第二部分我会讲一下我对赛题的理解以及拿到赛题以后初步的解题思路。第三部分会详细地介绍一下整个算法的方案以及其中比较关键的信息。最后一部分会对方案的实用性做总结。

  首先团队介绍,我们团队就我一位同学,我是个人参赛。所以我首先自我介绍一下,我叫李立,长时间就职于各大互联网公司,主要是从事系统架构和产品研发方面的工作。当然我的个人兴趣是机器学习和量化投资,所以今天我就站在了这里。

  我个人可能在AI方面有一个愿景,这也是我们团队的口碑,叫做“让AI成为合伙人,AI as a Partner”,合伙人是在某个专业能够给我们提供独一无二的帮助。事实上我们一些AI系统,能够在我们的数据的发现、数据的挖掘以及有效的信息上面,给予我们一般人得不到的帮助。所以如果我们很好地建设我们的AI系统,让它给我们提供对我们的业务有帮助的信号的话,它完全可以成为我们的合伙人,来提升我们业务的效率和质量。

  接下来我说一下我个人的兴趣爱好,首先我自己是一个既做着量化投资,也坚持着价值投资方向的股民。所以我自己平时也会去看一些财报的数据、宏观数据以及公司运营的数据。而这次比赛,其实提供的就是这样的一些数据。所以我对比赛提供的数据以及数据里面的逻辑,是非常感兴趣的。

  同时我比较关注大数据辅助下的价值投资,我们举一个例子,在很多的财报和价值分析的报告里面,会使用到PB band等数据,会帮我们做出买卖点的决策。那如果我们使用大数据,其实能得到更丰富的数据,并且能够在这些数据上更精准、更准确地来判断我们的结论,而不是靠人主观的经验得出结论。

  最后我个人非常关注量化投资的策略,量化投资要用到的数据一方面包含我们的行情数据,也就是我们平时所说的技术数据,同时也包含很多价值的数据就是财报的数据。

  这次比赛不管是从提供的数据、解题思路以及解题目标来说,和我的兴趣非常相符,所以我就参加了这次比赛。

  拿到赛题的时候,我简单看了一遍赛题,赛题的目标是非常明确的,预测上市公司的营业收入。实际上整个解题思路是我们要了解我们能够使用什么样的数据,这个数据里面可以做出什么样的特征提取,应用在什么模型上,最后尽量能够去预测出一个很准确的营业收入。所以解题的关键我觉得就是分析清楚比赛提供给我们什么数据,以及我们还能用到什么数据。所以我的赛题分析主要是会对我们能够拿到的数据做一个比较详细的分析。

  我衡量数据的维度主要包括这样一些,首先是数据量,因为数据量覆盖越广,意味着我们能够挖掘出更多的信息,同时也意味着我们的结果是可以泛化和广泛应用的。

  第二我关注数据的逻辑相关性,举个例子,如果我们知道了一个航空公司的航班起降的数量或者是国内航班、国外航班的起降数量,其实我们很容易判断出这个航空公司未来的业绩是什么样的。但是如果我们仅仅是知道了一只股票价格的高低,可能我们比较能判断出它未来的业绩是什么样的。所以数据和我们的目标逻辑相关性,决定了数据能够产生多大的价值。

  第三方面我比较关注数据的及时性,这里举一个比较极端的例子,我们要预测的是营业收入,实际上我们已经拿到了一个Q以前的营业收入,如果我们能拿到一个月以前的营业收入,其实这件事情会变得简单很多。所以数据的及时性本身意味着它有很高的使用价值。

  那么从这几个评估角度出发,我比较了一下比较提供的这么些数据。首先是财务数据,包括资产负债表、利润表和现金流量表,这份数据的数据量,我这可能写少了,应该在10万以上的量级,因为它是所有季度呈上所有公司的这么一个量级,是一个比较大的量级。财务数据和我们要预测的营业收入其实是强相关的,因为营业收入本身就是财务数据里面一个很重要的部分。

  财务数据的及时性算不上非常及时,我们只能拿到一个季度以前的数据。但是综合来看的话,财务数据在这次比赛里面价值很高的数据,所以我觉得它的使用优先级是比较高的。

  第二份数据是行情数据也就是股票市场上股票价格的数据,这份数据的数据量可能也写少了,至少是在50万的量级,比赛给到的数据是每个月呈上每只股票的价格这么一个数据,它应该是在30到50万的量级。事实上我们如果愿意的话可以拿到天或者分钟级的,数据量非常大,所以数据量没问题。但是在逻辑相关性上,这个数据的逻辑相关性相对比较低,因为股票价格受影响因素比较多,除开公司的经营状况、财务数据以外,特别是短期来看的话,它跟宏观消息面等各方面有很强的联系,这方面的相关性比较低。而从及时性上来看没有问题的,首先数据已经到月级了,如果我们需要的话,我们可以拿到更及时的。所以行情的数据,当我有时间的时候我会使用并尝试这类数据。

  接下来是公司的营业数据,营业数据首先这次比赛方直接给到的数据量其实是不多的,它覆盖的公司和指标会比较少,所以这方面来看优先级会低一点。但是公司的营业数据其实它的逻辑相关性是非常高的,比如我刚才提到的几场航班起降量、某些公司业务的经营状况,其实它的逻辑相关性和营业收入是非常之高的。这个及时性也是不错的,它是每个月。

  总的来看,这份数据由于它的覆盖量比较少,能够覆盖的公司不是很多,所以对我们来预测我们需要得到的1400多个公司的营业收入来说,可能它的作用不是很大。

  行业宏观数据,它其中有一一些数据的相关性可能不高,比如特别偏宏观的数据,但其中有一些行业的数据相关性非常高。这份数据里面包含的指标相对偏少,能够覆盖的公司不多,所以我们认为它的优先级是相对来说比较低的。

  对比赛方给出的数据主要是这么一个判断,所以优先级高的我会尽量使用,尽量在上面产生好的结果。优先级中的数据,我在有时间的情况下会做实验。

  由于我是个人参赛,比赛时间有限制,我额外提一下我认为一些和公司业务经营相关的数据,其实都是我们可以用来预测营业收入的数据。由于我是经常做互联网,我在这简单提一个我的想法,我认为定位的数据其实是能够非常好地用在数据里面,因为定位的数据可以间接分析出很多行业直接相关的数据。我举一个小例子,比如我们知道在机场这个范围内每天能够定位在这个地方的人的数量,其实我们就可以推断出它的航班起降量,或者我们在某一个线下超市里面研究量有什么样的变化,我们也能够知道它的营业状况和营业状况的发展趋势。这个数据我并没有用。

  基于前面的数据分析和赛题的理解,我接下来给大家介绍一下整体的算法方案。

  首先在算法方案上,我设计的是我们的系统的架构是什么样的。我后续所有的逻辑的实现、算法模型的实现,都是需要基于一个软件来做的,而这个软件架构性良好会帮助我更快地实现代码和做更多的实验。

  这个架构设计的设计目标主要是这样的,首先我希望能够使用多样性的数据。因为本身比赛提供了包括各种各样的财务数据、行情数据以及宏观数据、行业数据,实际上如果有可能的话,我们还希望在这里扩展更多的数据进来。所以这个框架首先要能够很灵活、很快速地使用各种各样的数据,不至于因为我们加一份数据,来做更多的开发。

  第二我们需要支持灵活的数据转换和组合。因为在实验的过程中,我们需要不断地去做实验这个数据怎么样提取成我们的特征,怎么样把不同的特征做组合,所以架构必须要支持这样的一个特性。

  最后其实架构的最终目标是能够支持我们快速做实验,得到一个比较好的结果。

  右边这张图展示了我们系统的架构从上到下,首先是一个数据的读取和清洗,在这里我们会读取多样的数据,我们读取多样的数据。这一层我们只需要把数据读取进来,尽量保持数据的信息量,做简单的清洗就可以了,不需要做太多的处理。

  第二层是构建特征和目标的数据级的这么一层,这一层主要的工作首先我们需要做数据的转换,比如说我们的数据可能是每个季度的营业收入,实际上我们用到的特征并不是单个营业收入,而是营业收入某些转换过的形式,我在后面会详细讲到。第二我们需要支持数据的组合,比如我可能先试营业收入,我们希望把股票的数据拿进来试一试看看效果,所以这一层主要做这个事。

  接下来这一层基本的工作是做训练级和测试级的划分,我们后面做训练以及模型的评估。

  接下来一层是模型训练和测试评估,在这一层就是应用我们觉得合适的模型,把相关的数据放进去判断结果。

  最后一层就是数据的导出。

  接下来我说一下数据的基本处理,数据的基本处理,中间主要有这么一些细节,我们在读取利润表的时候,里面不同的横向的数据是不一样的,我们设计了针对每个股票加上它的时间,比如我读取它的营业收入的时候都能够得到正确的数据。第二我们存在这么一些财报更新以往的报告的时候,比如它在2016年3月份更新了2015年3月份的数据,这个数据第一我们是要做更新的,第二我们维持了一个原则是我们不适用未来数据。也就是说当我在2014年2月份的时候,我不会使用2015年3月份的数据,虽然那个数据更准,但是我使用的话,这个结果在实际中整个操作不了,因为我使用了未来的数据。

  接下来我们会丢弃掉重复的数据,在这次提供的数据里面,会有很多的重复数据,重复数据的抓取量一样,可能会有一些数据上的小差异,我们一般使用最先出现的数据,后面重复出现的数据我们会丢弃。最后是丢弃关键字段为空的数据。

  在整理完基本的数据以后,我们要做的是特征的提取。我们采用时间切片的方法,我们把数据按照时间列成一个序列,我们假设当前的时间为t,那么t之前的时间我们会把它取出来作为特征,而t之后的时间的数据我们会把它取出来做目标。

  举个小例子说明一下,比如说我们在2015年3月份的时候,我们会把2015年3月份、2014年9月份、10月份的数据作为特征,而把2015年6月份的营业收入作为我们的目标。在这里我们只选用了连续的数据,如果中间数据有断掉的话,我们会把相关的数据舍弃掉,断掉的可能造成逻辑上的偏差。整个数据提取下来,我们的样本量大概在时间乘以公司数这么一个规模上。

  关于具体的特征选取在利润表上,我实际上使用了营业收入、营业成本以及归母净利润这样几个数。在股票行情上简单说一下,因为股票行情受到影响比较大,股票的涨跌并不直接和营业收入好坏相关,所以我们使用的是某一个公司的股价在最近的一个月、三个月或者是N个月相对整个大盘的涨幅排名的百分比,使用的是这样的数据。最后这次所有的实验统一使用的是2015年3月31号小于等于这个时间的训练集,之后的数据全部为测试集。

  接下来给大家介绍一下中间一个比较重要的数据转换,首先直观上我们有两个规律,就是公司的营业收入它每个季度的同比往往是比较稳定的,也就是说当我的公司规模扩大了,我的QE的同比规模达到了50%的时候,Q2的往往也能到50%。

  第二是周期性,比较广泛的周期性是一个季节的周期性,比如说卖空调的企业,它不管哪一年,可能Q3的环比都是一个相对比较大的数,而Q4的环比可能是一个复数,这个规律是比较稳定的。

  基于这个规律,其实我们可以简单地来想象出我们要预测的一个季度的数据,往往可以表示成之前的某一个季度除出来的一个比例再乘以某一个数,这其实是一个比例关系,但这里我们会注意到比例关系并不是一个线性的关系,所以我们需要log,因为log转化一次就会把它转换成线性的关系,而线性的关系我们会有比较简单的模型来支持它的预测。

  同时由于我们的财报上季度的收入是两级收入,Q1的起来是Q2和Q1的累加。所以做log之前,我们把数据算起来,不让它混到log的空间转化去。我们做完单季度的转换和log的转换之后,这一步一般来说会有30%的效果误差上的提升。

  最后给大家介绍一下转化成线性以后,我们主要就是使用Ridge Regression来做预测。

  这里介绍一下我们的多切片的策略。多切片主要考虑到可能我们要预测的股票并不具备连续的很长的数据,比如这个股票一共才上市一年,它最多可能只有四个季度的财报。基于这个考虑,我们实际上是训练了很多的模型,对不同的长度,比如一个季度、两个季度、十几个季度、二十几个季度我们都会训练模型,同时这么做的好处是我们能够知道多长时间的数据用来预测是比较有效果和准确的。所以我们这里有一个Model Set,它做的是从之前的一个季度到之前25个季度的数据都会拿出来做训练和预测,我们会在评估结果里面选出最好的那些,其实是希望给出一个优先级的排序,对我们每一个需要预测的股票,根据它拥有的长度找到最优的。实际上这一次比赛给出的数据质量很高,超过1400个公司都是具有十几、二十几个季度的数据。

  最后这有一份数据,这张表展示了切片长度和我们实际上获得的样本数的关系。当切片长度到10期的数据的时候,不要超过这个数,其实整个数据量是比较可以接受的,这样我们不容易陷入过理河(音),它的结果具有泛化能力。右边的图展示的是切片长度和分数的关系,那么实际上也是在小于20的情况下分数都是不错的,只是当数据太少的时候,分数会稍微差一些。

  所以结合测试结果和样本量的管理,最后我们选定了模型优先级的策略,有满足超过17个季度的数据我们统一用17个季度,如果小于这个数据尽量使用更长的数据特征模型。

  最后这张图比较了我们之前提到的各种特征以及各种策略组合的测试情况,第一条是我们直接使用营收在线性模型中来做,误差相对来说会比较大。第二张图是营收+log转换。第三张图是营收+log+单季度,这是我最后提交的数据就是最优的数据。接下来我简单说一下我们在加入行情数据的时候,可能因为这个结果误差大一些,但是我觉得这个方向是值得探索的。接下来加入营业成本的时候,误差也会稍微变大一些。最后一条我们加入归母净利润之后,数据非常好,为什么没有用呢?因为后来我发现我在归母净利润处理之后刨掉利润为负的这么一些数据,实际上得出来的利润持续为正的时候,这些公司是很符合这个模型的,所以它的结果会比较好。但是我后来又试了一下,如果我不加归母净利润,我只是看利润率这么一些公司在我选择最优的模型里面,实际上数据更好。反应出一个信息,利润持续为正的公司可能跟利润有一些时间为负的公司,特征是不一样的,这个特征有可能我们加盈利的。

  最后是方案实用性的总结。

  首先在效率上,在我自己本地的个人电脑上读取数据,这个包括利润表和股票的数据,以及这些数据的处理,大概花了两分钟的时间。多模型的预测,这应该是25个模型预测的时间,训练+测试的时间一共是10秒,每一个模型大概是500豪秒。最后预测结果大概花了300毫秒。对于效率我个人的评价是首先预测花300毫秒是在线提供服务的一个量级了,模型的预测的10秒我们这么看,首先我觉得在数据的抽取和转化上我们做得比较精准,所以这么一个时间很少。第二的话其实这个地方可以用的时间是相对很多的,这个时间给我们加入更多的数据来得到更好的结果,其实提供了很大的时间和空间。

  关于扩展性方面,我主要想讲一下,我们前面提到的架构,我们支持很灵活的组合转化,支持快速实验,我前面提到的一些数据对比可以做很简单的改动就能使用,未来可以在这个基础上我们做更多的使用。

  相关问题的思考,我分享两个点。第一,前面提到了行情数据,这次并没有得到太好的结果,但我觉得这件事情我们可以继续地去研究。因为股票的价格数据和我们的公司价值数据之间一定是存在某种关系的,而这个关系完全可以被用在我们的量化策略当中。第二个点是今天我们都实现了预测的模型,预测的结果和公司真实发布的数据如果存在比较大的偏差的话,其实我们可以用提醒信号,表明了这个公司可能最近有比较异常的动作,可以提醒我们尽快介入对应的公司,进行比较深入的分析。同时这个信号同时也可以继续用在对公司后续的包括股价、包括财务状况的预测,对它本来就是一个特征的维度。

  我的答辩的汇报就到这里,谢谢大家!

  主持人:感谢KingofWind战队的陈述,基于刚才的赛题陈述,我们的评委有没有什么想要与选手讨论的呢?

  王继忠:所有的陈列假设,大赛出题都是偏寻找营收增长最快、最好的,包括你的前提假设。假如今天的问题变了一下,你是一个做空的基金,你想预测一下下一季度谁的营收降得最多,还是在你这个前提下,你做哪些改进?因为你前面全是做多的策略,如果是换一个角度你想做空,在现有的基础上怎么做改进?我听一听你这应用的10分能怎么样。

  李立:王老师提到这么一个问题,我的理解是这样的,首先我们的预测其实预测出来的是营业收入,首先我们可以把营业收入转化成一个预期,我们需要知道在市场上大家对这个公司未来的收入是一个什么样的预期,因为我们自己有预期了,而市场上对一个公司的预期是另外一个算法和另外一个心理上或者其他方面的东西。这个数据我们可以通过比如说舆情的监控或者是其他方面跟公众的方面来获取。这个时候当我们发现我们预测的数据和公众上的数据有比较大的偏差,这个偏差我们更低的时候,我们选择相信我们的预测的情况下,我们可以考虑对这个公司来做空,这是第一个方面的考虑,我们需要算预期的偏差差。

  第二个方面的考虑是我们今天预测的这个数,其实是一个确定的数,不是一个概念的数,一个公司今天是10个,明天是11个,可能两个公司都是这样,但它会有一些区别。我们的预测模型可以换成不是线性的预订一个特定数的模型,可以换成比如分位数或者预测一个摊位的分布的东西。即使这个公司它未来的平均值还可以,但是如果它有比较大的概率出现一个下跌的话,那么我们可以考虑去算一算,如果我们去做空这个概念有没有更大的空间。

  我的理解主要是这样的,谢谢。

  尤海峰:我看你这个特征选取的时候主要是看利润表里面的一些项目,有没有什么理由,除了利润表之外还有现金流量表以及资产负债表,资产负债表、现金流量表里面可能会有一些投资行为或者有一些公司的预收款这些,其实这些项目有可能也是对预测公司未来的营收会有帮助的,当时有什么想法,为什么不考虑这些因素,会有什么负面的模型的效果有什么样的影响?有什么样的考量?

  李立:谢谢尤老师的问题。

  这个考量说出来有点惭愧,主要可能是时间上的问题,我没有去试。但是我这里可以简单分享一下我对其中某些数据的个人的理解。

  首先我之前看财报的时候,像尤老师所说的我比较关注应付账款的数据,因为应付账款的话其实它一方面说明了这个公司的现金流量和支付的能力,另一方面它也说明了这个公司在它的产业里面的议价的权利也好或者是主动性,这个主动性也是比较能用的。这个事情我没有来做的话,一方面刚才说是时间的问题,第二方面是我可能个人对这些财务数据背后的逻辑以及它应用完以后能产生的效果的判断理解不是很深,所以我觉得这个地方有一个地方是我个人可以回头在财务上面做更多的理解,在公司的财报的分析上面投入更多的精力,这样我在众多的数据里面拿出我们的数据来做实验,这样效果更高,在有限的时间能够得到更好的解决。

  Vinod Chandrashekaran:(英)

  王政:他的意思是有的公司要去管理它的营收,它本来这个季度营收很好,但是它为了不要太好了,人为地把收入给降低了,那你怎么去预测?

  李立:谢谢!

  对于这个问题我的理解是这样的,因为我对这一块的财务报表中间的关系不是很熟,所以我确实给不出一个逻辑的回答,但是我可以说一个我的思路。

  我觉得在做这个报表的时候,如果最后体现在营收这一项,会去追求某种平衡的话,那么在它的现金流量或者资产负债表或者是它的某些支出或者是某些采购上面,一定会有某些数据会体现出来。我觉得这个需要借助一些行业方向的背景,比如找会计背景的人来帮忙分析哪些事情可能会成为这个事情的特征,我们在这个事情上做建模,什么样的数据是我需要来预测的目标,那么我再来分析它在这次的最后的营收里面去做了多大的调整,也许我能够把它预测和评估出来的。

责任编辑:常福强

热门推荐

收起
新浪财经公众号
新浪财经公众号

24小时滚动播报最新的财经资讯和视频,更多粉丝福利扫描二维码关注(sinafinance)

7X24小时

Array
Array

股市直播

  • 图文直播间
  • 视频直播间