登陆

QuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)

admin 2019-06-25 300人围观 ,发现0个评论

作者:Nandita Dwivedi

编译:Lin | 大众号翻译部

动机和布景

出资组合办理是最大化出资组合报答的进程。出资组合司理依据他们对危险的偏好,代表客户做出买卖决议计划。他们在决议他们应该在出资组合中持有哪些股票以平衡危险和获取最大报答之前,剖析不同的财物的优势和下风。这使得出资组合办理变得困难。咱们的方针是经过运用猜测建模和深度学习技能使这个进程更好,依据下个季度的猜测股价生成安稳的出资组合。

在曩昔,人们做了许多猜测公司股票价格的测验,而且测验去了解新闻文章,Twitter帖子和其他渠道的文字内容怎么影响股票价格。这些测验触及剖析上述资源的心情影响并猜测股价。没有评论过的是财务陈述的心情影响在猜测股价上的作用。哈佛商学院宣告了一份作业论文,名为“Lazy Prices”。论文指出财务陈述对公司的市值有影响。他们标明,报表的相似性(Jaccard和Cosine Score)急剧改动能够增加或削减公司的市值[1]。

译者注:该论文认为年报或季报中惯例内容的改变包括有用的猜测信息,做空报表改变大的公司,做多报表无改变的公司,能够取得超量收益。

问题陈说

该项目要求咱们首要探究金融范畴,并搜集有关股票价格改变,买卖办法和出资组合办理技能的信息。咱们了解到现在为止数据科学在金融方面的影响力怎么,并提出了咱们想要重视的三个首要问题:

1、企业提交的季度和年度财务陈述在多大程度上影响其股价?

2、包括前史财务陈述的心情要素,股票价格的猜测会发作什么改动?

3、咱们怎么运用下一季度的猜测值树立安稳的出资组合?

这些问题具有应战性,因为咱们不得不对该范畴进行很多的布景研讨。运用正确的特征和进行恰当的特征工程来提出最佳猜测办法具有十分峻峭的学习曲线。除此之外,这些文件的数据来历和格局不一致,因而解析数据也是一项巨大的应战。这儿触及两种不同的数据源:一种是来自财务陈述的数据,另一种是股票行情数据。为了预备剖析数据集并练习咱们的猜测模型,咱们有必要研讨各种办法来整合这两种数据源。这些数据集彼此之间不是直接对齐的,因为OHLC(开凹凸收)数据每天发布,而SEC陈述每季度发布一次。要将这两种数据兼并在一同,咱们有必要细心匹配日期,然后深思熟虑地进行特征工程来结构下个季度的猜测值。

数据作业

数据搜集

来自EDGAR的SEC 10-Q和10-K文件。

咱们数据处理流程的第一步是解析SEC Edgar(电子数据搜集,剖析和检索)数据库。这是一个由美国证券买卖委员会(“SEC”)保护的在线数据库,用于盯梢上市公司提交的一切SEC文件,现在包括超越1200万份此类文件。

因为EDGAR在编撰本文时不支持除公司代码和中心索引键(CQuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)IK)之外的任何过滤选项,因而咱们不得不提取标普500 [2]公司一切10-K和10-Q文件,而不是只提取咱们感兴趣的某段时刻内的文件。

咱们从数据库中为S&P 500一切股票搜集了大约60 GB的数据。因为EDGAR将每个用户的请求数束缚为每秒10次,因而咱们有必要增加一些额定的模块以习惯此束缚。此外,考虑到数据集的巨大规划,咱们在下载时对每个下载的股票进行保护和检查,以便在发作毛病时答应在稍后康复并防止任何数据丢掉。

来自QuandlAPI的OHLC数据

OHLC(open-high-low-close)是包括每个作业日股票开盘价,最高价,最低价和收盘价的数据集。该数据集在咱们流程的后期是用于练习模型的最重要信息之一。咱们运用Stocker [3](Quandl API的Python接口)来检索每个标普500指数公司的OHLC数据。

数据预备

来自EDGAR的SEC 10-Q和10-K报表文件

咱们发现搜集的10-K和10-Q SEC文件是高度非结构化的,因为它包括HTML标签,符号和数字表。咱们经过删去不相关的数据来整理这些文件,然后将HTML解析为洁净的文本数据,然后用于剖析心情。为了整理和解析,咱们运用了正则表达式,NumPy和BeautifulSoup。

作为数据预备的一部分,咱们还为每个CIK生成了10-K和10-Q文件的CikList列表映射文件,其间包括日期,SEC类型,文件名,CIK和股票代码。日期字段是SEC表格的提交日期; SEC类型为10-Q或10-K,文件名为SEC文件名。

每个CikList映射文件大约有12行用于10-K和34行用于10-Q SEC,时刻窗口是10年。咱们运用这些映射文件来盯梢每个CIK的SEC报表。这些保存的映射稍后用于核算与每个CIK相对应的一切SEC报表的心情。

来自QuandlAPI的OHLC数据

经过Python Stocker模块,能够轻松获取每个股票的Pandas dataframe格局的OHLC数据。可是,因为咱们用曩昔90天窗口(原因将在下文介绍)对下一季度进行猜测,因而咱们有必要先进行一些数据处理才干将其供给给咱们的深度学习模型。

咱们运用了90天的窗口(一个季度是90天)将每行结构为包括该期间一切OHLC数据的X和Adj.Close作为Y.咱们结构该数据的可视化办法如图1所示:

图1:在OHLC数据上创立的90天窗口

数据集成

将心情分数与OHLC数据相结合

将Quandl API取得的OHLC数据与依据日期的SEC文件的心情相结合是很杂乱的,因为SEC文件日期和OHLC季度日期不同。

关于OHLC数据,季度股票收益率别离为第3,第6,第9和第12个月,而关于SEC,季度数据为第2,第5,第7和第10个月。

因而,为了处理这个问题,咱们运用了Pandas的“forward”兼并办法,该办法将该季度SEC文件的心情分数与下一个最近的日期的股票价格数据相匹配。这种映射背面的意图是剖析在财务陈述发布后怎么影响收盘价的。咱们在图2中显现了兼并后数据的前10行。

图2:OHLC数据与GWW的SEC心情分数兼并

规范化标普500股票的OHLC数据

咱们只获取标普500指数公司10年的股票数据。将这些数据束缚在最近的时刻窗口的原因在于,人们普遍认为财务数据是“非平稳的”而且准则的改动或许使旧数据与猜测的相关性下降[4,5]。因而,咱们将此期限界说为2008年1月1日至2018年12月31日。

在检索到这些数据并束缚时刻为最近10年之后,咱们发现有些公司在2008年1月1日之后上市而且有必要将其过滤以坚持一致性。此过滤将数据集削减到大约300个股票。此外,在某些状况下,某些股票代码中短少少数OHLC数据行。进一步剖析并未发现这些公司前史上的任何特定事情,因而或许是Quandl API中的一些过错。为了处理这种不一致,咱们运用Pandas的“插值”办法来结构那些缺失的行。

咱们还运用fastai库将日期转化为“周内第几天”,“年中第几月”和“周”等,以便模型能够了解股票价格是否存在任何时刻联系。

研讨办法

运用NLTKVADER进行情感剖析

咱们运用了NLTK VADER(ValeQuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)nce Aware Dictionary和sEntiment Reasoner)心情剖析器,这是一个依据词典和规矩的情感剖析东西。在这种办法中,词典中的每个单词都被评定为是正面,负面仍是中性,而且依据心情的正面,负面或中性来核算得分。

Vader词典没有金融词典,所以咱们用Loughran-McDonald Financial Sentiment Word Lists的金融词典更新了它[6,7]。

因为SEC文件的MD&A部分重视从办理层的视点对财务指标的前史描绘,假如处理妥当,本部分能够协助出资者更好地猜测公司未来的报答。开始,咱们决议专心于MD&A部分,并测验运用正则表达式从该部分获取内容,但因为SEC文件的结构紊乱,咱们未能完结它。

相反,咱们取得了每份SEC文件的整个部分的正面,负面和中性心情分数(大约4600个SEC文件)。VADER关于大文本来说十分慢,因而咱们将内容分红2000个单词一组的不同批次,这使得心情核算时刻削减。关于这些批次中的每一个文件,咱们核算了正面,负面和中性心情分数并取均匀值,得到每个SEC文件的终究心情分数。

股票价格猜测

如前面所述,考虑到咱们在前面部分中描绘的束缚,咱们有大约300个股票可供运用。咱们经过特征工程,开始运用一切300个股票数据练习一个模型,如下:

运用90天窗口构建每个股票的pandas dataframe,如图1所示。

设置缩放器,将每个股票价格别离缩放到0到1之间。每个股票一个独自的缩放器是必不行少的,因为每个股票能够具有不同的最小和最大价格。

然后运用这些缩放器来转化每个股票的练习,验证和测验数据集。

在一切这些转化完结之后,咱们运用Keras TimeseriesGenerator为一切股票级联OHLC数据,如图3所示。

图3:每个股票的级联OHLC数据

每个图层标明运用图1中所示的办法窗口化的一个股票代码的数据集。

因为硬件资源的束缚,咱们未能运用一切300只股票数据练习模型,而且终究不得不将其束缚为前50种股票。

LSTM模型已被很好地研讨并证明在时刻序列数据上十分有用。咱们运用Keras编译了神经网络模型,其间包括两个LSTM层,两个dropout层和一个用于输出的密布层。

在用一切50只股票(如图3所示构建)的数据练习1个模型后,咱们取得了十分差的成果。为了进一步研讨,咱们还为50只股票的每一只都练习了独自的模型而没有级联办法。运用后者取得的成果证明更精确,趋势线反映了这些股票的实在趋势。这50个模型中的每一个都被练习了20步而且没有心情分数。运用该办法取得的成果将在第5节中评论。

参加心情练习

情感分数只能每个季度核算,公司每个财政年度有三个10-Q和一个10-K文件。因而,需求将它们映射到每只股票的每日OHLC数据。咱们经过将90天OHLC数据视为一个季度而且每一行仿制前一季度的心情分数。关于50个股票中的每一只,对具有与上述完全相同的架构的独自模型进行了20步的练习。第一次练习是以活跃的心情分数完结的,第2次练习是以负面的。成果将在后边的部分中评论。

咱们决议创立安稳的出资组合,因为咱们期望持有猜测的下一季度组合。咱们为了创立安稳的出资组合而采纳的战略是将不相关的股票坚持在同一出资组合中。咱们这样做是为了防止出资组合发生巨大丢失,因为假如一只股票跌落,其他股票或许平衡丢失。例如:假如出资组合有2只股票[AAPL,FB],假QuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)如它们相关,假如AAPL跌落,这意味着FB也会跌落,咱们会在出资组合中取得全体丢失。但假如股票不相关,AAPL和FB将不会一同跌,然后防止重大丢失。这发明了安稳的危险平衡的组合,能够为该季度带来继续的收益。

咱们首要评价每对股票组合的相关性和协方差,并坚持同一组中的每对组合之间具有弱相关性。咱们考虑哪些相联系数小于0.5,而且协方差小于均匀协方差的组合。然后,关于每个调集,咱们依据低相关/协方差值检查能够增加哪个其他股票。

夏普比率的核算办法是,从出资组合的收益中减去无危险利率,并将该成果除以出资组合超量收益的规范差。

夏普比率较高意味着更好的危险调整报答。夏普比率大于1被认为是好的,大于2被认为是十分好的,大于3被认为是优异的。咱们设置无危险利率为2%,即美国商场的当时无危险利率。咱们核算了随机挑选的200个权重中每个出资组合的最佳夏普比率。依据取得的夏普比率,咱们将咱们的出资组合划分为好,更好,最好。

评价

评价SEC心情对股票价格的影响

咱们将季度OHLC数据与季度心情分数进行映射,以剖析正面和负面心情怎么影响收盘价。

从图4中能够看出,当活跃心情增加时,GWW下一季度的收盘价一向处于上涨趋势而且走高。在图5百变小樱中呈现负面心情的状况下,呈现了相反的趋势。

图4:SEC文件的活跃心情对GWW后续收盘价的时刻序列影响

图5:SEC文件的负面心情对GWW后续收盘价的时刻序列影响

咱们能够看到股票收盘价与SEC心情分数之间的正负趋势。这标明上一季度的心情分数对下一季度股票的收盘价有影响。

因为股票价格也取决于其他各种要素,咱们无法看到每个季度的心情与股票收盘价之间的这种联系。

评价股票猜测

咱们为50个模型中的每个模型练习了三个事例; 没有心情,活跃的心情作为特征和负面心情作为特征。表1中显现了一切三种状况的某只股票(WW Grainger Inc)的成果。

表1:WW Grainger Inc(GWW)的成果

虽然咱们为GWW股票取得了有期望的成果,但状况并非总是如此,一些股票的心情从均方差错上看简直没有影响。这标明SEC文件的心情并不是影响股票价格的仅有要素,或许存在其他能够研讨的潜在要素。例如,忽然宣告动力方针的改动会对清洁动力公司发生活跃或消沉的影响,这种改动能够反映出下一季度的状况。假如此类变更在之前的SEC存案中从未得到处理,那么经过练习的模型将无法从该SEC存案的心情分数中挑选该信息。未来作业部分评论了改善和防止这种状况的主张。

图6中的图显现了GWW的Adj.Close价格 。绿线标明10年期间的前史股票体现(运用此时段的数据进行模型练习)。蓝线显现没有心情特征的猜测趋势,黄线显现包括负心情分数后的猜测趋势。

测验窗口的扩大视图如图7所示,包括实践和猜测的趋势。请注意,虽然两种猜测趋势相似,但包括负面心情的趋势好像更挨近实践值。表1中给出的较低RMSE证明了这一点。

图6:GWW的Adj.Close

图7:比较实践Adj.Close、带和不带负面心情得分的猜测价格

咱们运用python colormaps剖析了50只股票之间的相关性。

图8:50种股票的相关矩阵

蓝色对应最小相关性而赤色对应于最高相关性。这意味着蓝色股票能够在同一出资组合中。例如:[sbac,msci]

在得到相关性小于0.5且协方差小于均值协方差的股票对之后,咱们运用图9中的图剖析了“可配对”股票和“不行配对”股票:

图9:可配对和不配对的股票

该图显现绿色的可对配对股票和蓝色不行配对股票。例如:[amgn,mat]依据其协方差和相关值有资历在同一个出资组合中。咱们依据上面的图生成了出资组合,并核算了每个出资组合的夏普比率和权重散布。显现终究dataframe的前几行以供参阅:

图10:构建的出资组合的终究数据结构

终究,依据夏普比率,出资组合分为好,更好和最好。以下图表显现了“好”,“更好”和“最佳”规模内出资组合的收益率和动摇率值。这些图可用于评价动摇率,收益率和危险之间的均衡,并挑选出资组合。

图11中的图是针对“好”出QuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)资组合生成的。经过检查下面的图表进行权衡的一个比如是[ma,zion,mat,vno,sna,flir,aee,duk,etr,pnr,akam]和[ndaq,mat]。能够看出,后者的报答率为20%,具有相似1.7夏普比率的危险。

图11:“好”出资组合图

图12中的情节是针对夏普比率> = 2且<3(更好)的出资组合。这儿的夏普比率越大意味着出资组合相对“好”出资组合的危险更小。如上所述,也能够在该调集中导出相似的风趣组合。该图显现了[ndaq,flir]和[wfc,rtn]之间的这种权衡,挑选或许给出简直相同的报答,但后者因为更高的夏普比率而危险更小。

图12:“更好”出资组合图

从“最佳”夏普比率规模(图13)也能够得出相似的定论。这组出资组合触及的危险最小。

图13:“最佳”出资组合图

代码文件介绍

咱们的终究产品是Jupyter notebook调集。咱们将产品分为四个模块:SEC 解析,情感剖析,股票猜测器和出资组合生成器

SEC解析器:该模块解析SECEdgar网站,为标普500指数公司提取10-Q和10-K文件。能够完结点查验,以便稍后康复失利的下载。它还对HTML履行整理并生成原始文本文件。

情感剖析器:此模块包括两个notebook。

心情剖析 notebook:从目录中供给的SEC文件中提取正面,负面和中性心情的分数。它将这些提取的心情保存为CSV文件,今后可用于模型练习,可视化等。

情感可视化notebook:用于制作心情趋势以及股票收盘价的通用notebook。

股票猜测器:此模块包括三个notebook

没有心情的LSTM股票:履行股票数据特征工程,练习并评价每个给定股票的LSTM模型。然后将每个模型保存在各自的目录中,一起将实践价格与猜测价格进行比较。练习步数和一切目录都是可装备的。

具有心情的LSTM股票:对股票数据以及情感剖析器模块中提取的心情数据履行特征工程。然后练习并保存每个模型以及比照图。

猜测生成器:此notebook 可在练习后用于加载已保存的模型并对测验数据履行猜测。然后,能够将猜测dataframe导出为CSV文件,以便稍后在各种景象下运用。

出资组合生成器和优化器:成对挑选弱相关股票构建出资组合。经过给出资组合中股票的最佳权重,优化出资组合以取得最高的夏普比率。

经验教训

了解金融范畴以了解哪些或许起作用肯定是一项应战。此外,研讨怎么操作时刻序列数据,窗口办法和运用它们练习LSTM模型是十分风趣的。咱们的研讨成果还标明,因为相关性和协方差等问题,为一切公司的数据练习单一模型是富有成效的。

从SEC文件中提取的心情对猜测未来股票趋势具有重要意义。咱们学会了运用NTLK VADER提取十分大的文本数据(在某些状况下为100,000个单词)的心情。

咱们学习了怎么经过运用相关性,协方差,夏普比率和动摇率等概念来构建出资组合。比如colormap和相关矩阵之类的相关可视化关于承认取得的成果十分有用

总结

金融机器学习最近才发展起来,很难找到适宜的资源。此外,股票价格猜测通常被认为是一个难题,也是大多数出资组合司理不完全依靠它的原因之一。咱们现已展现了使用LSTM构建神经网络关于这个问题是牢靠的。SEC文件的心情剖析也被证明是一种牢靠的技能。运用更明晰的数据和运用前面描绘的东西进行更多评价,咱们信任成果能够进一步改善。终究,出资组合构建很难,商场也或许发作改变。咱们现已展现了一种可用于下降危险并依据猜测成果构建多元化出资组合的办法。

情感剖析

关于情感剖析,咱们能够考虑字嵌入模型,即:Word2Vec,FastText和Universal Sentence Encoder。咱们能够评价这些模型是否能够为咱们供给更精确的心情分数,并评价它们是否有助于更好的猜测股票商场的趋势。

咱们从SEC的文件中仅提取了活跃,消沉和中立的心情。金融业还有许多其他心情,如不确定性,诉讼性,束缚性,剩余性,能够进一步提取和剖析。

股票价格猜测

现在,咱们已为所考虑的每只股票练习了独自的模型。之所以这样做是因为咱们在运用前面描绘的办法练习单个模型后取得了十分差的成果。可是,假如股票数量很大,这种给每只股票练习独自模型的办法或许行不通。为了处理这个问题,咱们能够考虑针对一组高度相关的股票而不是单一股票进行练习。这能够削减练习模型的数量。此外,咱们对处于某共线性规模内的每个股票,能够运用搬迁学习来从头练习这些模型的终究一层。

咱们之前解说过,包括SEC文件心情分数并不一定会得到较低的RMSE和更好的趋势线。为了进一步验证这一定论,咱们能够经过在每个季度为每个股票增加新闻心情来增强咱们的功用,并评价这些分数和SEC分数相结合是否有助于咱们做出更好的猜测

组合优化

有许多其他出资组合构建办法能够运用咱们的猜测进行评价。咱们能够评价行业规范技能,如“大局最小方差出资组合(GMV)”和“反向动摇率出资组合IVP”[8],并比较特定时刻窗口下组合的实践作用。

终究,出资组合再平衡是出资公司的规范做法。咱们能够扩展咱们的办法来完结现有出资组合的再平衡,并将它们的体现与咱们每季度都结构组合的办法进行比照

参阅文献

1、Lazy Prices http://laurenhcohen.com/wp-content/uploads/2017/09/lazyprices.pdf

2、S&P 500 Companies https://en.wikipedia.org/wiki/List_of_S%26P_500_companies

3、Python Stocker https://github.com/WillKoehrsen/Data-Analysis/tree/master/stocker

4、Universal features of price formation in financial markets: perspectives from Deep Learning https://arxiv.org/pdf/1803.06917.pdf

5、When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks https://www.uts.edu.au/sites/default/files/ADG_Cons2015_Loughran%20McDonald%20JE%202011.pdf

6、Financial lexicon from Loughran-McDonald SentiQuantML | 运用财政心情与量价数据猜测稳健的出资组合(附代码)ment Word Lists.https://sraf.nd.edu/textual-analysis/resources/#LM%20Sentiment%20Word%20Lists

7、The Most Rewarding Portfolio Construction Techniques https://seekingalpha.com/article/1710142-the-most-rewarding-portfolio-construction-techniques-an-unbiased-evaluation

出资组合-ML

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP