为了机器学习量化策略,我标注了两万条数据

【量化课程】08_1.机器学习量化策略基础实战 SVC(Support Vector Classifier)是一种在机器学习中常用的分类算法,它基于支持向量机(Support Vector Machine)算法。SVC通过寻找最佳的超平面来实现分类任务,在数据平面上进行线性或非线性的划分。 阅读详情

在这里插入图片描述

题图:芝加哥大学海德公园。芝大是经济学重镇,其学者开创了著名的芝加哥经济学派,共产生了 100 位诺奖、10 位菲尔兹奖、4 位图灵奖。今天量化人追逐的 Alpha, 最早就来自于 Michael Jessen 在芝大时的博士论文。


很多人对基于机器学习的量化策略很好奇,常常问什么时候有机器学习的课。其实,对很多人(我自己就是)来说,没有能力改进机器学习的算法和框架,机器学习都是作为黑盒子来学习,难度主要是卡在训练数据上。

这篇文章,将介绍一种数据标注方法和工具。

有监督的机器学习需要标注数据。标注数据一般是一个二维矩阵,其中一列是标签(一般记为 y),其它列是特征(一般记为 X)。训练的过程就是:

$$

fit(x) = WX -> y’ \approx y

$$

训练就是通过反向传播来调整权重矩阵WWW,使之得到的y′y'y′最接近于yyy。

特征矩阵并不困难。它可以是因子在某个时间点上的取值。但如何标注是一个难题。它实际上反应的是,你如何理解因子与标签之间的逻辑关系:因子究竟是能预测标的未来的价格呢,还是可以预测它未来价格的走势?

应该如何标注数据

前几年有一篇比较火的论文,使用 LSTM 来预测股价。我了解到的一些人工智能与金融结合的硕士专业,还把类似的题目布置给学生练习。


作为练习题无可厚非,但也应该讲清楚,使用 LSTM 来预测股价的荒谬之处:你无法利用充满噪声的时序金融数据,从价格直接推导出下一个价格。

坊间还流传另一个方法,既然数据与标签之间不是逻辑回归的关系,那么我们把标签离散化,使之转换成为一个分类问题。比如,按第二天的涨跌,大于 3%的,归类为大幅上涨;涨跌在 1%到 3%的,归类为小幅上涨。在-1%到 1%的,归类为方向不明。

其实这种方法背后的逻辑仍然是逻辑回归。而且,为什么上涨 2.99%是小幅上涨,上涨 3%就是大幅上涨呢?有人就提出改进方法,在每个类之间加上 gap,即 [-0.5%, 0.5%] 为方向不明,[1%,3%] 为小幅上涨,而处在 [0.5%, 1%] 之间的数据就丢掉,不进行训练。这些技巧在其它领域有时候是有效的,但在量化领域,我认为它仍然不够好。因为原理不对。

我们应该回归问题的本质。要判断每一天的涨跌,其实是有难度的。但如果要判断一段趋势是否结束,则相对来讲,特征会多一点,偶然性会低一点。用数学语言来讲,我们可以把一段 k 线中的顶点标注为 1,底部标注为-1,中间的部分都标注为 0。每一个峰都会有一个谷对应,但中间的点会显著多一些,数据分类不够平衡。在训练时,要做到数据分类平衡,把标签为 0 的部分少取一点即可。


顶底数据的标注

鉴于上面的思考,我做了一个小工具,用来标注行情数据的顶和底。

这个工具要实现的任务是:

  1. 加载一段行情数据,绘制 k 线图
  2. 自动识别这段 k 线中的的顶和底,并在图上标记出来
  3. 把这些顶和底的时间提取出来,放到峰和谷两个编辑框中,供人工纠错
  4. 数据校准后,点击“记录 > 下一组"来标注下一段数据

我们使用 zigzag 库来自动寻找 k 线中的顶和底。相比 scipy.signals 包中的 argrelextrema 和 find_peaks 等方法,zigzag 库中的 peaks_valleys_pivot 方法更适合股价数据 – 像 find_peaks 这样的方法,要求的数据质量太高了,金融数据的噪声远远超过它的期待。

peaks_valleys_pivot 会自动把首尾的部分也标记成为峰或者谷 – 这在很多时候会是错误的 – 因为行情还没走完,尾部的标记还没有固定下来。因此,我们需要手动移除这部分标记。此外,偶尔会发现峰谷标记太密的情况 – 一般是由于股价波动太厉害,但如果很快得到修复,我们也可以不标记这一部分。这也需要我们手动移除。

最终,我们将行情数据的 OHLC、成交量等数据与顶底标记一起保存起来。最终,我们将得到类似下面的数据:

当然,它只能作为我们训练数据的一个底稿。我们说过,不能直接使用价格数据作为训练数据。我们必须从中提取特征。显然,像 RSI 这样的反转类指标是比较好的特征。


另外,冲高回落、均线切线斜率变化(由正转负意味着见顶,反之意味着见底)、两次冲击高点不过、k 线 pattern 中的早晨之星、黄昏之星(如果你将它们的 k 线进行 resample, 实际上它是一个冲高回落过程,或者说长上影、长下影)等等都是有一定指示性的特征。

标注工具构建方法

!!! tip
这里我们介绍的是 jupyter 的 ipywidgets 来构建界面的方法。此外,Plotly Dash, streamlit, H2O wave 也是主要为此目标设计的工具。

为了在 notebook 中使用界面元素,我们需要先导入相关的控件:

from ipywidgets import Button, HBox, VBox, Textarea, Layout,Output, Box

from IPython.display import display

在一个单元格中,如果最后的输出是一个对象,那么 notebook 将会直接显示这个对象。如果我们要在一个单元格中显示多个对象,或者,在中间的代码中要显示一些对象,就需要用到 display 这个方法。这是我们上面代码引入 display 的原因。

这里我们引入了 HBox, VBox 和 Box 三个容器类控件,Button, TextArea 这样的功能性控件。


Layout 用来指定控件的样式,比如要指定一个峰值时刻输入框的宽度和高度:

peaks_box = Textarea(
    value='',
    placeholder='请输入峰值时间,每行一个',
    description='峰值时间',
    layout=Layout(width='40%',height='100px')
)

按钮类控件一般需要指定点击时执行的动作,我们通过 on_click 方法,将点击事件和一个事件处理方法相绑定:

save_button = Button(
    description='存盘'
)
save_button.on_click(save)

def save(c):
    # SAVE DATA TO DISK
    pass

这里要注意的是,事件响应函数(比如这里的 save),在函数签名上一定要带一个参数。否则,当按钮被点击时,事件就无法传导到这个函数中来,并且不会有任何错误提示。

HBox, VBox 用来将子控件按行、列进行排列。比如:

# K 线图的父容器
figbox = Box(layout=Layout(width="100%"))
inputs = HBox((peaks_box, valleys_box))
buttons = HBox((backward_button, keep_button, save_button, info))
display(VBox((buttons, inputs, figbox)))

Output 控件是比较特殊的一个控件。如果我们在事件响应函数中进行了打印,这些打印是无法像其它单元格中的打印那样,直接输出在单元格下方的。我们必须定义一个 Output 控制,打印的消息将会捕获,并显示在 Output 控件的显示区域中。

info = Output(layout=Layout(width="40%"))

def save(c):
    global info
    # DO THE SAVE JOB
    with info:
        print("数据已保存到磁盘!")

与此类似,plotly 绘制的 k 线图,也不能直接显示。我们要通过 go.FigureWidget 来显示 k 线图。

import plotly.graph_objects as go

figure = ... # draw the candlestick with bars
fig = go.FigureWidget(figure)
figbox.children = (fig, )

我们特别给出这段代码,是要展示更换 k 线图的方法。在初始化时,我们就必须把 figbox 与其它控件一起安排好,但如何更新 figbox 的内容呢?

答案是,让 figbox 成为一个容器,而 go.FigureWidget 成为它的一个子控件。每次要更新 k 线图时,我们生成一个新的 fig 对象,通过figbox.children = (fig, )来替换它。


最后,谈一点 troubleshooting 的方法。所有通过 on_click 方法绑定的事件函数,即使在运行中出了错,也不会有任何提示。因此,我们需要自己捕获错误,再通过 Output 控件来显示错误堆栈:

def log(msg):
    global info

    info.clear_output()
    with info:
        if isinstance(msg, Exception):
            traceback.print_exc(msg)
        else:
            print(msg)

def on_save(b):
    try:
        # DO SOMETHING MAY CAUSE CHAOS
        raise ValueError()
    except Exception as e:
        log(e)

info = Output(layout = Layout(...))
save_button = Button()
save_button.on_click(on_save)

利用这款工具,大概花了两小时,最终我得到了2万条数据,其中顶底标签约1600个。

AI量化策略,我该如何理解你? 人工智能(AI)技术得到了飞速发展,其在各个领域的运用也不断取得成果。机器学习被评为人工智能中最能体现人类智慧的技术,因此开发AI量化策略可以理解为将机器学习应用在量化投资领域。 理解机器学习算法——以StockRanker为例 机器学习算法太多,本文讨论只针对适用于金融数据预测的常用有监督型机器学习(Supervised Machine Learning)算法:StockRanker。假设我们要... 阅读详情

相关推荐

AI量化策略快速理解

导语: 人工智能(Artificial Intelligence,简称AI)的应用领域主要包括机器学习、概率推理、机器人技术、计算机视觉和自然语言处理。开发AI量化策略就是采用人工智能的相关技术和算法构建模型来处理市场海量数据之间的复杂关系。本文将带你走进人工智能量化投资的世界 我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观了解一下什么是机器学习,人类对新问题做出有...

bigquant的博客 5387

数据标注(label—stuidio工具)的基础使用方法。人人都能学会

数据标注工具的安装和使用 (快速)

WaKuWuku的博客 3万+

数据标注的黄金标准:如何为机器学习构建可靠标签?

数据标注的黄金标准:如何为机器学习构建可靠标签?

2501_91537435的博客 1782

机器学习0006 训练需要多少标注数据

机器学习0006 训练需要多少标注数据 之前我也不清楚究竟需要多少训练数据,觉得是越多越好。最近看过一篇文章,并不是自己试验出来的结论,我觉得这个结论比较靠谱。 1.一般情况下,每类给定5000标注样本,可以训练出可接受性能的模型。 2.至少有1000万标注数据的情况下,可以训练出与人类水平接近或超越人类水平的模型。

神码不是浮云 2477

TradingView-ML-GUI:量化交易者的机器学习策略可视化实验平台

机器学习通过算法从数据中自动学习规律,其核心原理在于构建模型以发现输入特征与目标变量之间的映射关系。在金融量化领域,这项技术的价值在于能够处理海量、高维的市场数据,挖掘人眼难以识别的非线性模式和微弱信号,从而为交易决策提供数据驱动的预测支持。其典型应用场景包括股价预测、波动率估计、资产定价和风险管理等。特征工程作为机器学习流程中的关键环节,负责将原始市场数据转化为模型可理解的有效特征,直接决定了模型的预测能力。而回测则是验证策略在历史数据上表现的核心手段,通过模拟交易来评估策略的盈利能力和风险水平。本文介绍

weixin_38166852的博客 360

CRISP-ML(Q):面向机器学习工程落地的量化闭环方法论

机器学习项目失败常源于流程脱离工程实践——CRISP-DM侧重模型交付,却忽视上线后持续有效这一核心目标。CRISP-ML(Q) 作为其演进版本,以‘量化(Quantified)’为内核,将业务目标、数据质量、模型稳定性、部署约束与监控反馈五大要素系统整合,构建可审计、可验证、可自动卡点的质量门禁体系。它强调用PSI、时间窗口F1标准差、特征重要性变异系数等指标形成从数据健康到业务影响的证据链,支撑预测性维护、金融反欺诈、智能质检等真实场景的稳健迭代。本文深入解析其六阶段设计逻辑与Q指标落地实践。

weixin_32349093的博客 360

机器学习——数据标注工具使用

LabelImg源码编译教程 LabelImg_github Windows_Linux打包软件使用方法Steps Click ‘Change default saved annotation folder’ in Menu/File Click ‘Open Dir’ Click ‘Create RectBox’ Click and release left mouse to select

xinyu3307的博客 1万+

开发AI量化策略所遇到的坑

AI只是工具,想要驾驭AI还得自身有点功底,不然反而会被工具所害,甚至从信仰AI变为抵制AI。本文简单介绍开发AI量化选股策略中所遇到的各种坑,希望大家有所收获,少走弯路

bigquant的博客 761

实用机器学习笔记(二):数据标注

文章目录数据标注1. 数据标注流程2. semi-supervised learning (SSL) : 半监督学习3. 数据标注的挑战 数据标注 1. 数据标注流程 Have enough data? 数据是否充足 improve label,data, or model? 标签、数据和模型哪个部分需要提升 enough label? 标签是否充足 semi-supervised learning 半监督学习 enough budget ? 预算是否充足 label via crowd s

Liu Feng's Blog 1354

电商知识图谱数据标注:为机器学习提供训练数据

1. 背景介绍 随着电子商务的蓬勃发展,商品信息和用户行为数据呈爆炸式增长。如何从海量数据中提取有价值的知识,理解用户需求,优化商品推荐,提升用户体验,成为电商平台面临的重大挑战。知识图谱作为一种语义网络,能够有效地组织和表示知识,为智能电商应用提供了强大的支持。然而,构建高质量的电商知识图谱需要大量的标注数据作为支撑。本文将深入探讨电商知识图谱数据

AI天才研究院 1329

[统计模型] 基于R的潜在剖面分析(LPA)

本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。 关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章: 潜在类别分析LCA \潜在剖面分析LPA介绍https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine 但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。 1. 什么是潜类别分.

bigstar863的博客 1万+

【量化交易】机器学习与量化投资的缘分

你是否曾经幻想过,能够像计算机那样“理性”地进行投资决策,而不受情绪和直觉的干扰?这就是量化投资的魅力所在。量化投资简单来说就是用数学、统计学和计算机技术来设计投资策略和模型。投资者们不再依赖直觉、经验或“坐在咖啡厅里讨论股票”这种传统方式,而是通过数据分析、算法模型来做决策。

在路上的专栏 1490

安信可TB蓝牙模组系列 实战Ble Mesh智能照明系统搭建

本文详细介绍了如何使用安信可TB蓝牙模组系列搭建Ble Mesh智能照明系统。从硬件准备、固件烧录到手机APP组网全流程,提供了实战步骤和优化建议,特别适合智能家居开发者入门。Ble Mesh的自组网能力解决了蓝牙传输距离限制,实现全屋灯光智能控制。

weixin_30856725的博客 352

Label Studio ML Backend深度解析:构建企业级AI标注平台的机器学习后端架构

Label Studio ML Backend是一个专为数据标注平台设计的机器学习后端SDK,它将机器学习模型无缝集成到标注工作流中,实现AI辅助标注的自动化与智能化。该项目通过标准化的Web服务接口,将各种机器学习框架(如YOLO、BERT、SAM等)包装为可扩展的推理服务,为数据科学家和开发团队提供了一套完整的模型服务化解决方案。 ## 1. 项目价值定位:机器学习模型服务化的技术优势 L

gitblog_00604的博客 486

yolov11使用记录(训练自己的数据集)

本文介绍了如何安装和使用Ultralytics YOLOv11进行目标检测。首先,通过Anaconda创建并激活虚拟环境,安装必要的依赖库如PyTorch和Ultralytics。接着,从GitHub下载YOLOv11源码,并在PyCharm中配置环境。下载预训练的YOLOv11模型后,通过编写简单的Python脚本进行图片检测,验证环境配置的正确性。最后,文章提到可以基于此环境训练自定义模型。整个过程涵盖了从环境搭建到模型应用的完整流程,适合初学者快速上手YOLOv11。

IT菜鸟 7548

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.5 RTC设备编写与实现

4. Linux kernel RTC子系统goldfish_rtc driver分析。电脑,会需要时间,还比如 我们的手机、平板,都需要时间;驱动基本就是应用层需要什么数据你给什么数据就行,基本必须实现的就是。3.2 Linux kernel RTC 设备描述符讲解。中看到他的具体实现,也可以根据他的寄存器描述直接在。5. 将驱动添加进kernel和测试RTC驱动。系统来说,时间是一个非常重要的功能;之类的函数接口,接下来我们就开始讲解如何写。,所以我们直接移植设备树即可。,他的寄存器很简单,你可以从。

DSMGUOGUO的博客 568

机器视觉自动数据标注方法

(半)自动数据标注的方法基本都是采用类似的思路,即通过少量标注数据进行训练后得到一个预训练模型,然后再次基础上对该网络的输出结果进行人工核验,并进一步地进行训练得到第二轮优化模型,往复循环,增加更多数据提高模型精度。 (强化)主动学习的加入是将人工核验的过程的工作量再进一步地降低,使网络具有一定的自主决策能力,即网络具有理解自己在数据预测上偏差的能力,可为用户提供标注需求进一步改善网络的输出分布。 全自动的数据标注方法目前仍未实现,标注过程均需要人工核验,对数据进行修正、反馈给网络和loss。

茄克不爱说话 1万+

使用Spring Cloud实现银行核心系统的案例示例

以下是一个基于Spring Cloud的银行核心业务系统实现方案,涵盖架构设计、关键模块实现与生产级部署方案。该系统设计满足金融级高可用、强一致性和监管合规要求。

银行信息系统应用架构详解 1173

Label Studio ML Backend:构建AI辅助标注系统的技术架构与实践

在数据驱动的AI时代,高质量标注数据是模型性能的基石,而传统人工标注流程面临效率瓶颈与成本压力。Label Studio ML Backend通过标准化SDK封装机器学习代码为Web服务,实现与Label Studio的无缝集成,为自动化标注提供了一套完整的技术解决方案。该框架支持BERT、YOLO、SAM等主流模型,涵盖文本分类、目标检测、图像分割等多样化任务,显著提升数据标注效率与模型迭代速度

gitblog_00120的博客 1006

Android Activity面试题最全解析(5万字长文)

Intent是Android中用于启动活动、服务或广播的一种消息对象。它包含了一系列键值对数据,用于描述操作的目的以及需要传递的信息。IntentString:字符串intfloatlong:基本数据类型Parcelable:实现了Parcelable接口的对象:实现了接口的对象示例代码如下:Java深色版本1// 创建Intent并传递数据");67// 启动新的Activity是一个XML标签,用于定义ActivityService或可以响应的Intent类型。它包含了。

大模型大数据攻城狮的专栏 803

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

机器学习项目的技术债管理:从数据债到模型债的识别与偿还策略

"技术债"在传统软件工程中是一个被充分讨论的概念,但在机器学习项目中,它的形态和影响机制有着本质差异。传统技术债主要体现为代码质量和架构设计问题,而ML技术债则扩展到数据、模型和实验三个额外维度——这些维度在传统软件项目中根本不存在。2015年Google的Sculley等人提出了ML技术债的经典分类:数据依赖债(Data Dependencies)、反馈回路债(Feedback Loops)、管道丛林(Pipeline Jungles)和配置债(Configuration Debt)。

lady_mumu的博客 5341

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

机器学习预测的「非主流标注法」,让策略赢在起跑线!

机器学习分类预测的趋势标注法

Edenfranx的博客 878

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

医疗数据主动学习策略优化与高效标注系统设计

医疗数据标注成本高昂且依赖专家资源,传统被动式标注方式效率低下。主动学习(Active Learning)通过智能选择高价值样本进行标注,可显著降低标注开销。系统已部署于某三甲医院放射科,实测标注效率提升3.2倍,误诊率下降19.7%。针对医疗图像的噪声特性,设计。

jaxzheng的博客 728

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

2024了,数据标注用哪些工具?

AI 技术的浪潮一浪高过一浪,数据标注工具也在这波涛汹涌中不断升级换代。在这个数字化的海洋里,精准且高质量的数据集就像是宝藏,是打造超级智能AI模型的黄金钥匙。所以说,选对数据标注工具,就好比是找到了打开AI宝库的钥匙。说到数据标注界的元老级人物,LabelMe 和Label Studio 这些大佬们依然仍屹立不倒。但”江山代有才人出“,一波又一波的新兴工具也不断涌现。带着更酷炫的交互界面和更牛掰的模型能力,像一匹匹黑马,冲进了数据标注的赛道,引领着行业的新潮流。

Dumplinglalala的博客 9618
上一篇: Don‘t fly solo! 量化之路,AI伴飞
下一篇: 新国九条下,低波动因子重要性提升!
量化风云
博客等级 码龄10年 1581粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值