大数据应用实践1:基于开源架构的股票行情分析与预测

股票市场行情分析与预测一直是数据分析领域里面的重头戏,确切地说IT行业的每一次重大发展的幕后推动者以及新产品(特别是高端产品)的最先尝试者都包含金融行业,特别是证券交易市场,它符合大数据的四大特征:交易量大频率高数据种类多价值高

在本小节,我为大家介绍一种完全基于开源软件构建的大数据驱动的股票行情分析与预测系统的实现。

通常我们认为在一个充分共享信息的股票市场内,股票价格的短期走向是不可预测的,因此无论是技术分析(Technical Analysis)还是基本面分析(Fundamental Analysis)都不可能让一只股票在短周期(小时、天、1周或10天)内获得好于市场表现的成绩—以上分析是基于著名经济学家Eugene Fama在1970年提出的EMH(Efficient Market Hypothesis,有效市场假说)。

图:经济学家Eugene Fama(尤金·法玛)全世界引用率最高的经济学家之一,金融经济学思想家,2013年诺贝尔经济学奖获得者,提出“有效市场假说”

以美国证券市场为例,它属于半强型有效市场(Semi-Strong Efficient Market),也就是说美国证券市场价格能够充分地反映投资者可以获得的信息,无论投资人选择何种证券,都只能获得与投资风险相当的正常收益率(除非是基于保密信息的内部交易,而在美国市场,内部交易是被法律严格禁止的)。

有鉴于EMH假说,目前市场绝大多数的交易分析与预测软件都集中精力在以下两个领域寻求突破:

·高频交易(HFT,High Frequency Trading)或实时行情预测;

·长期趋势预测(>10天)。

因此,我们在本节中设计的股票行情预测系统主要关注实时预测与长期预测。在这样的系统内,至少有如下三个功能是必须实现的:

·采集:实时股票交易数据导入与存储。

·训练:基于历史数据集的训练、建模。

·预测:结合实时数据与历史数据的决策生成。

下图展示了这样的系统的基本数据流程逻辑图。在设计系统时,我们需要充分考虑系统的并发性与可扩展性。以单只股票为例,可供分析的数据特征有几十种之多(例如PE ratio、EBITDA、EPS等),而分析的频率与周期可以以天为单位,也可能到秒级甚至毫秒级,如果要对多只股票并发分析,则对系统的吞吐率要求更高。

图:基于机器学习的股票分析(预测)

有鉴于此,我们采用了如下开源组件来构建这套系统。

·实时数据采集:Spring XD。

·实时数据分析(IMDG):Apache Geode。

·历史数据存储+分析(NoSQL):Apache HAWQ4 + Apache Hadoop。

·机器学习、建模、优化:MADLib + R + Spark。

如下图所示,整体架构的数据流程及工具链如下:

(1)实时数据导入MPP或IMDG集群:Spring XD。

(2)基于机器学习模型的实时数据+历史数据比对分析:Spark MLlib+R(Spark作为基于内存的分布式计算引擎来处理通过R语言机器学习建模的数据)。

(3)分析结果实时推送至股票交易处理应用端。

(4)实时数据存入历史数据库并进行线下分析(非实时): Apache Hadoop和Apache HAWQ(用于交互式、PB规模高效SQL查询)。

(5)线下分析结果用于更新、调整机器学习模型。

细心的读者还会发现,下图中由上至下,数据的热度是逐渐降低的,对应于基础架构的方案(硬件+软件)也呈现出由高成本到低成本的转变,体现在硬件层面:内存→闪存或硬盘;软件层面:基于内存的网格计算→HDFS。

图:基于开源软件构建的股票分析(预测)系统流程

关于机器学习部分,无论是Spark MLlib、Apache MADlib还是R语言,尽管它们支持的底层分布式基础架构大不相同(MLlib跑在Spark之上;MADlib可以支持主流的数据库系统,如PostgreSQL、Pivotal Greenplum以及HAWQ;R语言则是提供了专注于统计计算与制图的工具包),它们都支持基本的学习算法与工具链,例如分类(Classification)、回归(Regression)、聚类(Clustering)、降维(Dimensionality Reduction)、协同过滤(Collaborative Filtering)等。

在机器学习分类层面,通常我们有三种方式:

· 监督学习(Supervised Learning);

· 非监督学习(Unsupervised Learning);

· 增强学习(Reinforcement Learning)。

三者当中,通常监督学习最适合用于股票行情预测。监督学习算法有很多,简单地列举几个:

·逻辑回归(LR,Logistic Regression);

·高斯判别分析(GDA,Gaussian Discriminant Analysis);

· 二次判别分析(QDA,Quadratic Discriminant Analysis);

·支持向量机(SVM,Supporting Vector Machine)。

鉴于篇幅所限,在这里我们无法对每一种算法深究,但是关于机器学习,特别是监督学习,有两个基本的知识点最为重要。

·针对数据训练集进行运算,进而推导出预测模型来对未知数据集进行预测。而选取训练集的大小对预测准确性与性能影响非常大,训练集过小则准确性低,过大则性能低。因此一般选择大小适中的训练数据集来进行处理。

·运算最重要做两件事情:分类+回归,前者就是把集中的数据分门别类加以区分,后者则是发现它们之间的关联性,两者对立统一。

我们发现在长期(>10天)股票趋势预测中SVM的稳定性最高,QDA其次,而GDA与LR则低于50%(也就是说甚至低于抛硬币猜中正反面的50%的几率);而在短周期(1~10天)分析中,四种算法并没有显示出太大的区别,预测准确率基本上处于50%上下(这样的结果符合EMH假说中对美国这类半强型证券市场的推断)。

另外,在对每一只股票的分析过程中,使用的特征数据越多,则准确率越高。不过,效率与特征的关系不会持续保持线性可增长,当待分析特征多到一定程度后,系统处理性能(或性价比)一定会降低,进而影响到实时性,因此还需要考虑系统效率与实践成本问题。

为了能让大数据工作者更好地进行相关实验与实践,笔者的Pivotal同事们还把本股票实时预测分析系统移植到了笔记本电脑之上,如下图所示。与上图的唯一区别在于把Apache Hadoop与HAWQ组件去掉,也就是说数据处理完全实时化(实时导入、近实时机器学习模型训练、实时数据比对、实时操作建议推送)。

图:单机版开源股票分析系统

对本案例有兴趣的读者可以在Github上面下载相关源代码及文档。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python是一种功能强大的编程语言,被广泛应用股票数据分析领域。Python提供了丰富的库和工具,可用于获取、处理和分析股票数据,同时还可以进行可视化展示。 在股票数据分析中,首先需要获取股票数据。Python中有许多数据源,如Yahoo Finance、Quandl和Alpha Vantage等,可以免费获取股票基本数据以及技术分析数据等。 接着,使用Python中的Pandas库对数据进行数据预处理,如数据清洗、排序、过滤等。Pandas提供了强大的数据结构和数据操作方法,可以对大规模的股票数据进行高效处理。 在数据预处理完成后,使用Python中的Matplotlib、Seaborn等库进行数据可视化展示。通过图形化展示分析结果,可以更加清晰地了解数据特点和股票市场走向。 除此之外,Python还提供了一些量化分析工具,如Pyfolio、Zipline等。这些工具可以在股票交易策略的制定和回测中发挥重要作用。 我们可以使用Python将股票数据转化为更直观和可操作的信息,进行更全面、深入的股票分析,从而制定更有效的股票交易策略,提高交易的成功率。 ### 回答2: 随着互联网金融行业的持续发展,越来越多的人开始关注股票市场,希望通过对市场数据的深入分析来获取更加科学的投资决策。而Python作为一种高效、易学易用的编程语言,可以帮助投资者轻松地进行股票数据分析。 Python对于股票分析有许多非常有用的库,其中最重要的是Pandas和NumPy库。Pandas库是Python中用于数据分析的主要库之一,它提供了丰富的数据结构和数据分析工具,使数据的处理和分析变得更加简单。Pandas拥有强大的数据读取功能,能够轻松地处理一系列格式的股票数据,如csv、Excel、JSON、SQL等数据文件格式。 NumPy库是Python中用于科学计算的主要库之一,它提供了高效的数组和矩阵运算功能。在股票分析中,NumPy库可以用来进行多维数组的数据处理和计算。 通过使用Pandas和NumPy库,可以轻松地对股票数据进行读取、处理、分析和可视化,以帮助投资者更准确地预测股票走势和做出更科学的投资决策。实际上,越来越多的金融机构正在将Python作为他们的主要编程语言,以便更好地处理数据和进行分析。 在Python之外,还有许多其他的库和工具可用于股票分析。例如,Matplotlib库可以用于图表绘制和可视化,Scikit-learn库可以用于数据挖掘和预测建模。 总之,Python作为一种通用的编程语言,能够轻松地与其他软件集成,并为股票数据分析提供丰富的库和工具。无论是日常投资者还是专业的金融分析师,都可以受益于Python在股票数据分析中的应用。 ### 回答3: Python是一种流行的编程语言,适用于各种应用领域,包括股票数据分析。在股票市场上, 数据驱动投资策略已经成为了趋势,而 Python 对于股票数据的处理以及可视化具有极高的应用价值。 Python语言与众多的科学计算库的出现,大大简化了股票数据分析的工作流程,并激发了数据科学家和量化投资者的创造力。下面让我们一起探讨如何使用Python进行股票数据分析。 首先,我们需要获取股票数据。在中国,我们可以通过股票交易所和证券公司的接口获得数据。在海外,Yahoo Finance等数据服务供应商也提供了数据接口。我们还可以使用网络爬虫技术从网站抓取股票数据。这些数据可以是个股价格、财务报表等各种形式。 其次,我们需要对数据进行清洗和处理。这些数据可能来自多个来源,格式也可能不同,因此需要进行标准化处理,以便于我们进行后续的数据分析和建模。例如,对于行情数据,我们可能需要进行填补缺失值、去掉异常值等操作。 接着,我们需要对数据进行分析。 对于股票数据所涉及到的问题复杂性,数据科学家需要从多个角度来进行分析。在Python中,我们可以使用众多的数据科学库(如numpy、pandas和matplotlib等)来进行数据统计和可视化。 最后是数据建模。 在进行数据建模之前,我们需要对数据进行特征工程和建立模型。在Python中,我们可以使用不同的机器学习库(如scikit-learn等)来创建机器学习模型。 股票数据分析是一个复杂的过程,需要充分的调研、数据清洗、统计分析和模型建立等工作,但是Python提供了很多有用的工具和库,使得这个过程更加简单和高效。值得一提的是,Python还有很多贡献者开发了一些量化投资库(如backtrader等),这些库已经提供了大量的开源策略和模型,方便开发者快速实现策略并验证其可行性,提高了工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值