『金融数据结构』「3. 基于事件采样」

本文介绍了金融数据处理中的事件采样方法,对比了无脑型下采样和基于事件采样的优缺点,重点探讨了基于事件采样的金融含义,如结构性突破和市场微观结构。通过实例展示了如何从标普500价值股ETF的tick数据中,进行数据清洗、整合和异常值处理,最终采用CUSUM Filter进行事件采样,得出更高质量的训练样本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=png


本文含  6821   48  图表截屏 建议阅读 34  分钟


0引言


本文是 AFML 系列的第三篇


  1. 金融数据类型

  2. 从 Tick 到 Bar

  3. 基于事件采样


在上贴〖从 Tick 到 Bar〗里,我们已经会从「异质」的 tick 数据采样出「同质」的 bar 数据。当数据太多时,传统 (非深度) 机器学习算法的表现会有上限,如下图的红线所示。


640?wx_fmt=jpeg


这时减少数据量并发掘出更好特征的数据才能使机器学习算法取得好效果。通常有两种方法:


  1. 无脑型下采样(downsampling)

  2. 基于事件采样(event-based sampling)


第一种又可细分为线性等分采样(linspace sampling) 和均匀采样(uniform sampling)。它们虽然可以做到减少数据量,但是采样数据的方法都没有金融含义支撑,线性等分采样过于简单,均匀采样过于随机。 因此本帖来看看第二种基于事件采样,即背后有金融含义支撑的采样方法。


想想投资组合经理买卖是不是通常发生在特定事件发生后,如


  • 结构性突破 (structural break):均值回归模式 → 动量模式

  • 市场微观结构 (market microstructure ):FIX 信息


这些事件通常伴随着下面三种场景


  1. 宏观统计数据公布

  2. 波动率急剧增加

  3. 价格大幅偏离均衡水平


本帖内容很简单,只围绕着一个公式展开。但困难的是当我用标普 500 价值股 ETF的高频 tick 的数据的时候,做了很多数据处理的工作。这些很麻烦但又非常重要,因此我也想将这个处理数据的完整过程记录下来,防止以后再踩坑。


首先引入 datetime, numpy, pandas, matplotlib, seaborn 等必要的包,并定义我最喜欢的一些颜色 (看过我盘一盘 Python 系列的读者应该知道我的喜好 640)。

from datetime import datetimeimport numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as sns
dt_hex = '#2B4750'    # darkteal,  RGB = 43,71,80r_hex = '#DC2624'     # red,       RGB = 220,38,36g_hex = '#649E7D'     # green,     RGB = 100,158,125tl_hex = '#45A0A2'    # teal,      RGB = 69,160,162tn_hex = '#C89F91'    # tan,       RGB = 200,159,145


此外我还会用两个额外的工具包 mlfinlab 和 pathlib ,到使用它们的时候再解释。



1数据处理


1.1

源数据


我们使用的标普 500 价值股 ETF (IVE) tick 级别的数据从来自以下链接。


http://www.kibot.com/free_historical_data.aspx


知识点:指数 ETF ETF 是 Exchange Traded Fund 的缩写,交易型开放式指数基金,是一种追踪「标的指数」的基金。
想投资指数就可以买 ETF。比如我看好美国股票市场,但又不想投资个股,那么可以投资标普 500 指数,用的金融工具就是其 ETF,代号为 IVE。


今天 (2019 年 8 月 1 日) 下载 IVE 的数据是从


    2009 年 9 月 28 日早上 9:30

    2019 年 7 月 31 日下午 16:00


数据存在 txt 格式,如下图所示 (注意最后三条数据的时间晚于下午 16:00,但是成交量为 0)。


640?wx_fmt=png



1.2

<think>好的,我现在需要回答用户关于需求获取中模型驱动方法的分类、目标、方法、场景和用例采样的问题。首先,我需要回忆需求工程中的相关知识,特别是模型驱动方法的相关内容。 模型驱动方法在需求获取中主要是通过建立模型来帮助理解和分析用户需求。常见的分类可能有基于不同建模技术的分类,比如结构化方法、面向对象方法、形式化方法等。需要确定每个分类的目标,例如结构化方法可能旨在通过分解系统功能来明确需求,而面向对象方法可能关注对象和类的交互。 接下来是方法部分,可能需要提到具体的建模技术,如数据流图、用例图、状态机等。场景方面,不同的模型适用于不同的场景,例如复杂系统可能需要形式化方法,而用户交互较多的系统可能使用用例图。用例采样则是如何选择代表性的用例来覆盖系统功能,可能需要考虑用户操作频率和关键业务流程。 需要检查引用内容是否有相关支持。引用[3]提到场景描述方式,可能涉及形式化或非形式化语言,这与模型驱动方法中的建模技术相关。引用[4]关于用例的描述方式,选项中的动态结构化文本可能与用例的动态特性有关。引用[5]提到观察方法在用户无法主动告知时的使用,这可能与模型驱动方法中的场景分析互补。 要注意用户问题中的关键词:分类、目标、方法、场景、用例、采样。要确保每个部分都涵盖到,并且引用合适的文献支持。可能引用[3]和[4]来支持场景和用例的描述方式,引用[5]来补充需求获取方法的选择场景。 最后,生成相关问题时要围绕模型驱动方法的其他方面,比如优缺点、具体技术比较、实施步骤等,确保问题具有连贯性和逻辑性。</think>### 需求获取中的模型驱动方法 #### 1. **分类** 模型驱动方法在需求获取中主要分为以下几类: - **结构化方法**:通过分层分解系统功能(如数据流图、实体关系图)捕捉需求[^3]。 - **面向对象方法**:基于对象、类和交互建模(如用例图、类图、状态机)[^4]。 - **形式化方法**:使用数学符号严格描述需求(如Z语言、Petri网),适用于高安全性系统。 #### 2. **目标** - 提升需求描述的**精确性**和**一致性**,减少自然语言的二义性。 - 通过抽象建模支持系统设计的**可追溯性**和**可验证性**。 - 促进利益相关者之间的**共识**,尤其是复杂系统[^4]。 #### 3. **方法** - **数据流图(DFD)**:描述系统数据流动与处理过程。 - **用例图**:以用户视角定义系统功能边界(如“动态结构化文本”描述用例步骤)[^4]。 - **状态机**:刻画系统状态转换逻辑。 - **领域模型**:通过类图表示业务领域中的实体与关系。 #### 4. **场景** - **复杂业务流程**:结构化方法适合分解多层级功能(如金融交易系统)[^3]。 - **用户交互密集型系统**:面向对象方法通过用例图捕捉用户操作路径(如电商平台)[^4]。 - **高可靠性需求**:形式化方法用于航空航天控制系统。 #### 5. **用例与采样** - **用例采样原则**: - 覆盖核心功能(如“用户登录”“支付流程”)。 - 包含典型、异常和边界场景(如超时处理、并发访问)。 - **动态结构化描述**:用例步骤按时间顺序组织,体现用户与系统的交互流。 #### 示例:电商系统用例采样 ```plaintext 用例:商品购买 1. 用户浏览商品目录 2. 选择商品加入购物车 3. 进入结算页面 4. 选择支付方式并确认订单 异常分支:库存不足时提示缺货 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值