彭博的软件工程师Roberto Martin正在测试一个模型,通过此模型,可以提升预测上市公司财务表现会否超过预期的准确率。建模的过程是用过去14年的历史数据训练出一个函数,入参是股市数据。目前模型测试结果显示,准确率已达60%以上。
Martin称,“这次工作经历无比珍贵。鉴于手头可用的编程工具、相对便宜的云系统和现成的大数据,我几乎可以事半功倍。”
让我们看看Martin是如何通过“机器学习(machine learning)”来建模的:
首先,搜集股票的历史数据,包括开盘价、日高、日低、收盘价、交易量(OHLCV)。
第二,通过Quantdl和Estimize搜集上市公司的历史收益数据(Earnings Data)。
第三,将所有数据导入计算机学习算法。在这种情况下,这些数据相对干净(一致性较好、无效值和缺失值较少)。我需要保证的是合理划分数据。在此层面上,合并数据集是比较有挑战性的一项工作。
第四,需要根据每个公司的财季/财年时间,来将以日计价的股价分组,并提取每个组的特征。这个步骤通过Python和Pandas来完成。
第五,提取特征是很重要的一步。因为这些特征有助于我们预测目标变量。比如,一个特征是:在某一季度,股价单日上涨的情况有出现50%以上吗?如果是,估值为1,否则估值为0。这些特征就是所谓的“经工程化”(Engineered)的特征。它们不是单单从数据提炼,而是从某一专业领域知识中提取的特征。
第六,一旦这些特征被提取出来。下一步是使用大数据处理工具Apache Spark的机器学习库(MLlib)建立模型。鉴于在这里只需要解决一个特性问题,在建立模型中,只采用三种数据挖掘算法,分别是逻辑回归、决策树,以及随机森林算法。把历史数据分为两类,训练组数据(60%)和测试组数据(40%)。训练组数据是为了得出一个可靠的模型,而测试组数据是检验训练组的结果是否可靠。
第七,用准确率(Precision)和召回率(Recall)矩阵来做模型评价。整体来看,随机森林模型预测结果最为准确,其次是决策树模型。尽管如此,建模程序还是有很多改善空间。首先,这些模型没有交叉验证。此外,尚未确定能够达到最佳预测效果的模型参数。还有一点,虽然使用了过去14年的历史数据,但聚合成为参数集后,数据就少得多了。
建模的过程,简而言之,就相当于用历史数据训练出一个函数,入参是股市数据,通过这个函数得出结果,来回答一个投资者关心的关键性问题:这家上市公司的财务报告会超过收益预期吗?
该模型还在测试中,目前测试的最佳结果是,准确率(P)达到61%,召回率(R)达到68%。
一般来说,P是检索出来的条目中有多少是准确的,R是所有准确的条目有多少被检索出来了。一般是希望检索的结果P越高越好,R也越高越好,但事实上这两者在某些情况下是矛盾的。如果是做实验研究,可以绘制P-R曲线来帮助分析。但Martin没有从这个角度给出分析。
不过Martin自己也说,没有任何事物不会出错。但对于精益求精的投资者,他们不会放过任何帮助投资决策的工具。
责任编辑:zwl
我来说两句排行榜