前言
在过去的几年中,我们看到了数据科学领域的惊人增长。几乎每天都有某种新的成果发表,例如,一篇研究论文宣布了一种新的或改进的机器学习或深度学习算法,或者是开发了一种最流行的编程语言的新库。
过去,许多进步都没有出现在主流媒体上。但这种情况也在迅速改变。例如,AlphaGo程序击败了著名围棋世界冠军,就造成了极大的新闻轰动;使用深度学习生成从未存在过的逼真的人类面孔,或者使用DALL-E 2或Stable Diffusion之类的模型通过文本创建美轮美奂的数字艺术,都在新闻和社交媒体上广泛传播。
另外,在近期获得惊人发展的例子是OpenAI的ChatGPT。它是一种语言模型,用户可以跟它进行听起来很自然的对话。该模型能够跟踪过去的问题并跟进它们,承认错误或拒绝不适当的请求。更重要的是,它不限于自然语言,可以根据用户的要求用各种编程语言编写实际的代码片段。
除了那些具有新闻价值的成就,在过去的几十年里,几乎每个行业都采用了人工智能。我们可以在身边看到它,例如,在电子商务网站上获得的产品推荐往往正是我们近期所需要的或心仪的商品。总之,世界各地的企业都在采用人工智能并通过以下方式获得竞争优势。
* 做出更好的数据驱动决策。
* 通过有效的定位或准确的推荐来增加他们的利润。
* 通过及早识别处于风险中的客户来减少客户流失。
* 自动执行人工智能可以比员工更快(并且可能更准确)地完成重复性任务。
同样的人工智能革命正在影响金融业。在2020年的一篇文章中,福布斯报道称“70%的金融服务公司正在使用机器学习来预测现金流事件、微调信用评分和检测欺诈交易”。此外,数据科学在各方面的研究成果还可广泛应用于算法交易、机器人咨询服务、个性化银行业务以及流程自动化等。
本书介绍了如何使用现代Python库解决金融领域内的各种任务,提供了基于实际操作方法的指南。我们试图通过利用许多行业内专业人士使用的成熟且“经过实战检验”的库来减少需要编写的代码量。虽然本书假设读者具备一些先验知识,并且没有从理论的角度解释所有概念,但是也提供了相关的参考资料,使读者可以更深入地研究自己感兴趣的主题。
本书读者
本书适用于想要学习如何在金融环境中执行各种任务的数据分析师、金融分析师、数据科学家或机器学习工程师。本书假定读者对金融市场和交易策略有一定了解。他们还应该熟悉使用Python及其面向数据科学的流行库(如pandas、numpy和scikit-learn)。
本书将帮助读者在金融领域正确使用先进的数据分析方法,避免潜在的陷阱和常见错误;对于那些试图解决的问题,帮助读者得出正确的结论。
此外,鉴于数据科学和金融领域在不断动态变化,因此本书也包含对学术论文和其他相关资源的引用,以帮助读者拓宽对所涵盖主题的理解。
内容介绍
本书共15章,各章内容如下。
* 第1章“获取金融数据”
本章介绍一些颇受欢迎的高质量金融数据的来源,包括雅虎财经、Nasdaq Data Link、Intrinio和Alpha Vantage等。本章重点演示了如何利用专用的Python库处理数据以方便进一步分析。
* 第2章“数据预处理”
本章描述用于数据预处理的各种技术。其中介绍了获取数据和使用数据构建机器学习模型或研究交易策略之间的关键步骤,讨论了诸如将价格转换为收益、根据通货膨胀调整股票价格、改变时间序列数据的频率、估算缺失值、转换货币单位或以不同方式聚合交易数据之类的主题。
* 第3章“可视化金融时间序列”
本章着重介绍如何可视化金融领域的时间序列数据。通过绘制数据,我们可以直观地识别一些模式,例如趋势、季节性和变化点。可以使用统计检验进一步确认这些模式。此时收集的见解可以导致在选择建模方法时做出更好的决策。
* 第4章“探索金融时间序列数据”
本章展示如何使用各种算法和统计检验来自动识别时间序列数据的潜在问题,例如异常值的存在。此外,本章还探讨了分析数据是否存在趋势或其他模式,例如均值回归。最后,本章还研究了资产收益的典型化事实。总之,这些概念在处理金融数据时至关重要,因为分析人员往往需要确保正在构建的模型/策略能够准确捕捉资产收益的动态。
* 第5章“技术分析和构建交互式仪表板”
本章介绍如何计算一些最流行的技术指标并自动识别K线图中的模式,阐释了Python技术分析的基础知识。本章还演示了如何创建基于Streamlit的Web应用程序,这使我们能够以交互方式可视化和检查预定义的技术分析指标。
* 第6章“时间序列分析和预测”
本章阐述时间序列建模的基础知识。首先讨论了时间序列的构建块,以及如何使用各种分解方法将它们分开。然后,介绍了平稳性的概念、如何对其进行测试,以及在原始序列不平稳的情况下如何实现平稳性。最后,本章还演示了如何使用两种最广泛使用的时间序列建模统计方法—指数平滑方法和ARIMA类模型。
* 第7章“基于机器学习的时间序列预测方法”
本章首先解释验证时间序列模型的不同方法,然后简要介绍了时间序列的特征工程,还引入了一种自动特征提取工具,只需几行代码即可生成数千个特征。此外,本章还阐释了简化回归的概念以及如何使用Meta流行的Prophet算法。最后,本章介绍了一种流行的时间序列预测AutoML框架。
* 第8章“多因素模型”
本章涵盖对各种因素模型的估计,从最简单的单因素模型(CAPM)开始,然后将其扩展到更高级的三因素、四因素和五因素模型。
* 第9章“使用GARCH类模型对波动率进行建模”
本章重点阐释波动率和条件异方差的概念,演示了如何使用单变量和多变量GARCH模型。这是目前最流行的建模和预测波动率的方法之一。
* 第10章“金融领域中的蒙特卡罗模拟”
本章解释如何将蒙特卡罗方法用于各种任务,例如,模拟股票价格、为没有闭合解的衍生品(美式/奇异期权)定价,或估计投资组合的不确定性(例如,计算风险价值和预期损失等)。
* 第11章“资产配置”
本章首先解释最基本的资产配置策略,并在此基础上演示了如何评估投资组合的绩效,然后介绍了找到有效边界的三种不同方法。最后,本章还探讨了分层风险平价,这是一种基于图论和机器学习相结合的资产配置新方法。
* 第12章“回测交易策略”
本章介绍如何在流行的Python库的帮助下使用两种方法(向量化和事件驱动)对各种交易策略进行回测。为此,本章提供了几个基于流行技术指标或均值-方差投资组合优化的策略示例。
* 第13章“应用机器学习:识别信用违约”
本章介绍现实生活中预测贷款违约的机器学习任务,涵盖了机器学习项目的整个范围(从收集和清理数据到构建和调整分类器)。阅读本章的一个重要收获是理解机器学习项目的一般方法,然后可以将其应用于许多不同的任务,无论是客户流失预测还是估算附近新房地产的价格。
* 第14章“机器学习项目的高级概念”
本章继续了第13章介绍的工作流程,并演示了对机器学习项目的最小可行产品(MVP)阶段的可能扩展。本章从介绍更高级的分类器开始,探讨了对分类特征进行编码的替代方法,并描述了一些处理不平衡数据的方法。
此外,本章还介绍了如何创建机器学习模型的堆叠集成并利用贝叶斯超参数调整来改进穷尽网格搜索,探讨了计算特征重要性以及使用它来选择信息最丰富的预测变量的各种方法。最后,本章探索了目前仍在快速发展的可解释人工智能领域。
* 第15章“金融领域的深度学习”
本章描述如何将一些最新的神经网络架构应用于金融领域的两个可能用例—预测信用卡违约(分类任务)和预测时间序列。
利用本书
本书试图为读者提供金融领域中使用的各种技术的概览,同时又关注这些方法的实际应用。因此,本书演示了如何使用各种流行的Python库来解决问题,使分析师或数据科学家的工作更轻松,更不容易出错。
最好的学习方式是实践,因此我们强烈鼓励读者尝试使用本书所提供的代码示例(这些代码可以在本书配套的GitHub存储库中找到),将其中的技术应用于不同的数据集,并探索可能的扩展。
为了更深入地研究理论,本书还提供了延伸阅读的参考资料,其中包括一些超出本书讨论范围的更高级的技术。
下载示例代码文件
本书的代码包可以在GitHub存储库中找到,网址如下。
https://github.com/PacktPublishing/Python-for-Finance-Cookbook-2E
如果代码有更新,也会在该GitHub存储库上进行更新。
下载彩色图像
我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像。你可以通过以下地址进行下载。
https://packt.link/JnpTe
本书约定
本书使用了许多文本约定。
(1)代码格式文本:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等。以下段落就是一个示例。
完整的可下载数据列表请参考yfinance的GitHub存储库,其网址如下。
https://github.com/ranaroussi/yfinance
(2)有关代码块的设置如下所示。
def realized_volatility(x):
return np.sqrt(np.sum(x**2))
(3)任何命令行输入或输出都采用如下所示的形式。
Downloaded 2769 rows of data.
(4)术语或重要单词在括号内保留其英文原文,方便读者对照查看。示例如下。
最后要考虑的指标是平滑异同移动平均线(moving average convergence divergence,MACD),这是一种以长期与短期指数移动平均线之间的聚合及分离状况,判断价格趋势及买入卖出时机的技术分析指标。
(5)本书还使用了以下两个图标。
表示警告或重要的注意事项。
表示提示或小技巧。
此外,在每个Jupyter Notebook(可在本书配套的GitHub存储库中获取)的最开始部分,我们运行了一些单元格,导入matplotlib并设置了绘图。为节约篇幅,本书后面的章节不再提及这一操作。所以在任何时候,均假设读者已经执行了以下命令。
首先,可使用以下代码片段提高生成图形的分辨率(可选)。
%config InlineBackend.figure_format = "retina"
然后,可执行以下代码片段。
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
from pandas.core.common import SettingWithCopyWarning
warnings.simplefilter(action="ignore", category=FutureWarning)
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
# 可以随意修改,例如,将context更改为 "notebook"
sns.set_theme(context="talk", style="whitegrid",
palette="colorblind", color_codes=True,
rc={"figure.figsize": [12, 8]})
在该单元格中,导入了matplotlib、warnings和seaborn。然后,禁用了一些警告并设置了绘图的样式。在本书的某些章节中,我们可能会修改这些设置以提高图形的可读性(尤其是对于纸质图书的黑白图形而言)。
·IV·
Python金融数据分析
·VII·
前 言
导语摘要
《Python金融数据分析》详细阐述了与Python金融数据分析相关的基本解决方案,主要包括获取金融数据、数据预处理、可视化金融时间序列、探索金融时间序列数据、技术分析和构建交互式仪表板、时间序列分析与预测、基于机器学习的时间序列预测、多因素模型、使用GARCH类模型对波动率进行建模、金融领域中的蒙特卡罗模拟、资产配置、回测交易策略、识别信用违约、机器学习项目的高级概念、金融领域的深度学习等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
作者简介
艾瑞克·里文森在荷兰鹿特丹伊拉斯姆斯大学(Erasmus University Rotterdam,EUR)获得量化金融(Quantitative Finance)硕士学位。他拥有在两家公司的风险管理和数据科学部门工作的经历,其间积累了数据科学方法的实际应用经验。这两家公司的其中一家是荷兰新经纪商,另一家则是荷兰最大的在线零售商。
工作之余,他撰写了一百多篇与数据科学相关的文章,阅读量超过300万次。在空闲时间,他喜欢玩电子游戏、看书以及和女友一起旅行。
目录
第1章 获取金融数据 1
1.1 从雅虎财经获取数据 2
1.1.1 实战操作 3
1.1.2 原理解释 4
1.1.3 扩展知识 4
1.1.4 参考资料 5
1.2 从Nasdaq Data Link获取数据 5
1.2.1 准备工作 6
1.2.2 实战操作 6
1.2.3 原理解释 7
1.2.4 扩展知识 8
1.2.5 参考资料 9
1.3 从Intrinio获取数据 10
1.3.1 准备工作 10
1.3.2 实战操作 10
1.3.3 原理解释 12
1.3.4 扩展知识 12
1.3.5 参考资料 16
1.4 从Alpha Vantage获取数据 16
1.4.1 准备工作 16
1.4.2 实战操作 17
1.4.3 原理解释 18
1.4.4 扩展知识 18
1.4.5 参考资料 21
1.5 从CoinGecko获取数据 21
1.5.1 实战操作 21
1.5.2 原理解释 22
1.5.3 扩展知识 23
1.5.4 参考资料 24
1.6 小结 24
第2章 数据预处理 27
2.1 将价格转化为收益 27
2.1.1 实战操作 28
2.1.2 原理解释 29
2.2 为通货膨胀调整收益 29
2.2.1 实战操作 30
2.2.2 原理解释 31
2.2.3 扩展知识 32
2.2.4 参考资料 33
2.3 改变时间序列数据的频率 33
2.3.1 做好准备 34
2.3.2 实战操作 34
2.3.3 原理解释 36
2.4 估算缺失数据的不同方法 36
2.4.1 实战操作 36
2.4.2 原理解释 39
2.4.3 扩展知识 39
2.4.4 参考资料 41
2.5 转换货币单位 41
2.5.1 实战操作 41
2.5.2 原理解释 42
2.5.3 扩展知识 43
2.5.4 参考资料 44
2.6 聚合交易数据的不同方式 44
2.6.1 实战操作 46
2.6.2 原理解释 50
2.6.3 扩展知识 52
2.6.4 参考资料 52
2.7 小结 52
第3章 可视化金融时间序列 53
3.1 时间序列数据的基本可视化 54
3.1.1 实战操作 54
3.1.2 原理解释 56
3.1.3 扩展知识 56
3.1.4 参考资料 59
3.2 可视化季节性模式 59
3.2.1 实战操作 59
3.2.2 原理解释 62
3.2.3 扩展知识 62
3.3 创建交互式可视化 65
3.3.1 实战操作 66
3.3.2 原理解释 68
3.3.3 扩展知识 69
3.3.4 参考资料 70
3.4 创建K线图 71
3.4.1 准备工作 72
3.4.2 实战操作 72
3.4.3 原理解释 74
3.4.4 扩展知识 74
3.4.5 参考资料 76
3.5 小结 77
第4章 探索金融时间序列数据 79
4.1 使用滚动统计进行异常值检测 79
4.1.1 实战操作 80
4.1.2 原理解释 82
4.1.3 扩展知识 82
4.2 使用Hampel过滤器进行异常值检测 83
4.2.1 实战操作 84
4.2.2 原理解释 85
4.2.3 扩展知识 86
4.2.4 参考资料 87
4.3 检测时间序列中的变点 88
4.3.1 实战操作 89
4.3.2 原理解释 91
4.3.3 扩展知识 91
4.3.4 参考资料 93
4.4 检测时间序列中的趋势 93
4.4.1 实战操作 94
4.4.2 原理解释 95
4.4.3 参考资料 96
4.5 使用Hurst指数检测时间序列中的模式 96
4.5.1 实战操作 97
4.5.2 原理解释 99
4.5.3 扩展知识 100
4.5.4 参考资料 100
4.6 研究资产收益的典型化事实 100
4.6.1
以下为对购买帮助不大的评价