前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重磅来袭 | AFML系列开启,我们相信会成为经典~

重磅来袭 | AFML系列开启,我们相信会成为经典~

作者头像
量化投资与机器学习微信公众号
发布2019-05-17 13:39:57
1.3K0
发布2019-05-17 13:39:57
举报
文章被收录于专栏:量化投资与机器学习

声明

AFML系列 终于开始硬核将机器学习和量化投资结合在一起了,而且 Python 系列也派上用场了。

本系列内容,『量化投资与机器学习』公众号编辑部将与『王的机器』公众号密切合作,同时联合业界大佬共同一起,将这个系列出色完成!

本系列内容所用全部数据来自万矿Quantopian,一些高频交易的数据在用到时会注明。

开篇由『王的机器』主理人圣元兄完成,部分内容由公众号完成。

介绍

数据越原始其含有的价值越高。被处理过的数据虽然用起来很方便,但当你使用时别人很可能已经使用过了。这句话也适用于金融数据 (financial data)。金融数据主要可分为四类,见下表总结。

接下来我们详细讨论它们的特征以及应用。

基本面数据

基本面数据 (Fundamental Data) 通常是会计数据 (accounting data),包括资产 (assets)、负债 (liabilities)、销量 (sales) 和盈利 (earnings) 等等,来源于按季度发布的财务报告。

下图展示了苹果第二季度的财务报表中的部分基本面数据(销量、销售成本、运营费用等等)。

在使用基本面数据时需注意数据发布日期 (release date) 和季度报告截止日期 (quarter-end reporting period) 不一样!前者一般晚于后者 6 周,有时个股的发布日期各不相同。

以茅台 (600519.SH) 举例来看一段万矿 (WindQuant) 的代码:

代码语言:javascript
复制
_, date = w.wsd( "600519.SH", "stm_issuingdate", 
                         "2018-01-01", "2019-03-31", 
                        "Period=Q;Days=Alldays;Fill=Previous", 
                        usedf=True )WTable(data = date).plot()

这里 stm_issuingdate 代表「定期报告披露日期」。关于代码里的 wsd 的相关知识,请参考Pandas 上

对茅台 2018 年第一季度 (Q2) 来说,发布日期 (2018-08-02) 才是最重要的日期,因为只有发布之后大家才知道基本面数据值 (比如每股收益 EPS),用报告截止日期 (2018-06-30) 就会引进前视偏差 (look-ahead bias),因此在 2018-06-30 那天数据没有发布给大众,大众根本不知道 Q2 的 EPS 是多少。

万矿是取每个季度最后一天作为报告期,2018 年的报告期设置分别为

  • 一季报:2018-03-31
  • 半年报:2018-06-30
  • 三季报:2018-09-30
  • 年报:2018-12-31

下图展示了茅台 2018 年到 2019 年 Q1 的数据发布日期和报告截止日期。

用万矿来查看茅台 2018-06-30 的 EPS 值。

代码语言:javascript
复制
_, df = w.wsd( "600519.SH",
                     "eps_basic_is",
                     "2018-01-01", "2019-03-31",
                     "Days=Alldays;rptType=1", 
                     usedf=True )
WTable(data = df).plot()

这里 eps_basic_is 代表「基本每股收益」。

我们可以看到 2018-06-30 对应 eps_basic_is 的值为 12.55。由上面日期对比图可知,这个 12.55 的 EPS 应该在 2019-08-02 才发布。因此推断出 2018-06-30 这天的12.55 是从 2019-08-02 那天回填 (backfill) 得到的。

知识点

公司披露年报或季报经常会在第一次披露之后发布多个修订版本,对原本缺失的一些数据进行回填。

继续深挖验证我们的推断。用万矿来查看 2018-08-02 (Q2 数据的发布日) 的 EPS 值。这时 wsd 函数中用参数 fa_eps_basic 而不是用 eps_basic_is,fa_eps_basic 代表「基本每股收益_PIT」。用万矿里的 API 选出 fa_eps_basic 即可,操作非常简单如下屏所示。

上图操作完成之后,查看茅台 2018-06-30 的 EPS_PIT 值 (用的 fa_eps_basic) 的代码自动生成出来。

代码语言:javascript
复制
_, df = w.wsd( "600519.SH",
                     "fa_eps_basic", 
                    "2018-01-01", "2019-03-31", 
                    "Days=Alldays;rptType=1", 
                    usedf=True )
WTable(data = df).plot()

PIT 全称是 point-in-time,没有找到很好的中文翻译,就理解成「数据发布的时点」吧。

从下图发现 2018-08-02 的 EPS 值为 12.55,可以确定 2018-06-30 的 EPS 值是回填得来的。

此外,我们还发现 12.55 对应的起始日 2018-08-02 终止日 2018-10-28,它们不正是 Q2 的发布日期Q3 的发布日期前一天吗?下图就是2018 Q2 到 Q3 的 PIT 数据。

由于 12.55 是 Q2 截止日 2018-06-30 时 EPS 的值,但是在 Q2 发布日 2018-08-02 才公布于众,直到 2018-10-28。后一天 2018-10-29 是Q3截止日 2018-09-30 时 EPS 的发布日,那么 EPS 也会被更新。

下图给出了一年的 PIT 数据。

使用 PIT 数据可以避免「前视偏差」,自己收集 PIT 的数据太过繁琐,而购买提供 PIT 的数据商又太过昂贵。万矿做得真心不错,免费提供 PIT 数据。


国内有万矿,国外有 Quantopian,下面截屏蓝色高亮那部分说的就是 Quantopian 也考虑了 PIT 而消除了「前视偏差」。

在 Quantopian 用代码看看 Facebook 的基本面数据发布日期 (file_date) 和报告截止日期 (period_ending_date)。关于代码里的 Pipeline 相关知识,请参考张量 101

DataFrame 的前五行是 2018 年 1 月 2 日到 8 日的数据要看 2017-09-30 (Q3) 的数据,而其发布日是 2017-11-02。

DataFrame 的后五行意思是 2018 年 12 月 24 日到 31 日的数据要看 2018-09-30 (Q3) 的数据,而其发布日是 2018-10-31。

总结:基本面数据频率低,监管严,易获得,价值可被挖掘的差不多,通常是把基本面数据和其它类数据一起使用。

市场数据

市场数据 (Market Data) 包含交易所有类型产品时收集到的数据,包括现货价格 (spot price)、期货价格 (futures price)、利率 (interest rate)、汇率 (exchange rate)、波动率 (volatility)、成交量 (volume) 等等。

在交易中,市场数据以限价定单簿 (limitorder book, LOB) 的形式呈现。每个市场参与者都可从中看到订单信息 (order information)。

以阿里巴巴股票 (BABA) 为例的 LOB 如下图所示。

在 LOB 中,卖家看 Bid,买家看 Ask。LOB 里面有四个重要参数,合称为最佳买卖报价 (Best Bid and Offer, BBO),分别是

  • 买价 (bid price):卖家可以卖到的最高价 (160 美元)
  • 买量 (bid quantity):卖家可以卖的数量 (500 股)
  • 卖价 (ask price):买家可以买到的最低价 (161 美元)
  • 卖量 (ask quantity):买家可以买的数量 (600 股)

在每个时点LOB可以显示三种不同层次的信息。

L1 信息

如果只看 BABA 的最佳买卖价 (Best Bid and Offer, BBO),那么它是一维数据 (price),通常称为 Level 1 (L1) 信息。

卖家可以从市场中以 160 美元卖出 500 股,买家可以从市场中以 161 美元买进 600 股。

L2 信息

如果还看 BABA 的非最佳买卖价 (Not Best Bid and Offer, NBBO),那么它是二维数据 (price+depth),通常称为 Level 2 (L2) 信息。

卖家可以从市场中以 160 美元卖出 500 股,吃完最佳买价 (hitting the bid) 之后,卖家可以继续从市场中以 159 美元卖出 550 股…

买家可以从市场中以 161 美元买进 600 股,吃完最佳卖价(lifting the offer) 之后,买家可以继续从市场中以 162 美元买进 800 股…

L3 信息

如果在一个价位上,还想区分不同人下单的量 (比如 600 股有 200 是我下的,400 是小明下的,我比小明先下单),那么它是三维数据(price+depth+size),通常称为 Level 3 (L3) 信息。

通常数据商提供的是像金融信息交换协议 (Financial Information eXchange, FIX) 类似的原始数据,可以搭建出每个时点的交易账簿 (order book),更精确点的描述是限价定单簿 (limit order book, LOB)。

CME Globex 是世界上第一个期货电子交易系统,下图是 Globex 里 FIX 的数据结构说明。

从上面表格可看出:

  • 第 1 行显示价格的层位(为构建 L2 信息)
  • 第 2 行显示信息发送时间
  • 第 3-4 行显示买价和买量
  • 第 5-6 行显示卖价和卖量
  • 第 7 行显示数据更新状态,0 代表插入新信息,1 代表更新现有信息;2 代表删除老信息
  • 第 8 行显示某层价位的订单数 (为构建 L3 信息)

等等。。。

用第 1 到 9 行的信息可以从 FIX 表格重建 L3 的 LOB。

  • side S - 分买入 (bid) 和卖出 (ask)
  • class – 包含价格 (price) 和成交量 (size)
  • price level M - LOB 的深度

伪代码如下:

而第 7 行和 10 到 15 行用来做交易匹配 (trade matching) 的。

总结:基本面数据相比,市场数据更规范,而且频率更高,数据量更大,处理起来也更困难,但是价值更大。

分析数据

类比金融产品的原生资产和衍生品的关系,分析数据 (Analytics Data) 是原始数据的衍生品,即由原始数据加工得来的。原始数据可以是基本面数据和市场数据,甚至还可以是下节讨论的另类数据。

我们可用

  • 销量、成本、运营费用等「基本面数据」来评估一个公司的盈利能力和运营质量,并推荐买卖其股票
  • 限价定单簿和交易信息等「市场数据」来预测冰山单 (icerberg order) 的大小和概率
  • 新闻舆情、财报公告、卫星图像等「另类数据」来做情感分析 (sentiment analysis) 和经营预测

下图总结各类原始数据和对应的分析数据。

使用「分析数据」有利有弊

  • 优点是特征和信号已经从原始数据中提取出来,使用起来方便
  • 缺点是价格昂贵,而且处理方法不透明 (opaque) 也可能存有偏差 (bias)

另类数据

另类数据 (Alternative Data) 包括传统数据之外的新的数据,主要成分如下图。

个人数据

个人数据 (Individual Data) 是由个人网上行为产生的,它还可细分为

  • 社交网络数据 (social media data): Twitter, LinkedIn, 微信
  • 新闻舆论数据 (news & reviews data): 新闻、产品舆论
  • 网页搜索数据 (web search data): 谷歌搜索、百度搜索、邮件

案例:

  • iSentium 提供交易股票时用到的 Twitter 上的情绪数据指标
  • RavenPack 提供交易债券、外汇和股票时用到的新闻情绪数据指标

商业数据

商业数据 (Business Process Data) 是由商业流程产生的,它还可细分为

  • 交易数据 (transcation data): 主要是消费者交易数据 (Square,Intuit, Xero 等)
  • 公司数据 (corporate data): 主要是行业数据 (AROQ, Edmunds, SNL Financial, Smith Travel 等)
  • 政府机构数据 (government agency data): 国际级别(IMF, WTO, World Bank),国家级别(美联储, 人民央行)

案例

  • Eagle Alpha 提供交易个股时用到的用户电子邮件收据。

传感数据

传感数据 (Sensor Data) 是由手机、无人机、卫星上的传感器产生的,它还可细分为

  • 卫星图像数据 (satellites images data): 卫星、无人机
  • 地理定位数据 (geolocation data): GPS、手机 APP
  • 天气数据 (weather data)

案例:

  • Advan Research 提供交易个股时用手机记录的地理位置数据 (根据人流量预测零售)
  • RSMetrics 提供交易个股时用无人机拍的停车场和仓库图像数据 (根据车位占满率预测员工)

使用「另类数据」有利有弊

  • 优点是没被处理过,也没有为其他使用者提供,因此有很高的价值等待发掘,深度学习里的「计算机视觉」和「自然语言处理」的技术可以用来处理图像和文本数据
  • 缺点是「获取昂贵」和「隐私忧患」

总结

金融市场数据可分四类,基本面数据、交易数据、分析数据和另类数据。

前三类属于结构性数据 (structured data),即可以用二维数据表 (excel, DataFrame 等) 储存的;而最后的另类数据属于非结构性数据(unstructured data),在使用前通常要转换成结构性数据。

  • 处理「基本面数据」最容易 (人人可做),但剩余可发掘的价值也不太搞了。
  • 处理「另类数据」最困难 (鲜有人做),一旦你做了对你的价值是唯一的。

有价值的东西做起来从来不容易,如果太容易,大概率没什么价值。有人开玩笑说,如果一套数据集让数据科学家处理起来时很头疼,这套数据集很可能价值很高。

下期内容讲如何对数据采样 。Stay Tuned!

—End—

量化投资与机器学习微信公众号,是业内垂直于QuantMFECST等专业的主流自媒体。公众号拥有来自公募、私募、券商、银行、海外等众多圈内10W+关注者。每日发布行业前沿研究成果和最新资讯。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化投资与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档