将时间序列转换为分类问题

news2024/11/28 6:47:11

本文将以股票交易作为示例。我们用 AI 模型预测股票第二天是涨还是跌。在此背景下,比较了分类算法 XGBoost、随机森林和逻辑分类器。文章的另外一个重点是数据准备。我们必须如何转换数据以便模型可以处理它。

在本文中,我们将遵循 CRISP-DM 流程模型,以便我们采用结构化方法来解决业务案例。CRISP-DM 特别适用于潜在分析,通常在行业中用于构建数据科学项目。

另外就是我们将使用 Python 包 openbb。这个包以包含了一些来自金融部门的数据源,我们可以方便的使用它。

首先就是安装必须的库:

  pip install pandas numpy “openbb[all]” swifter scikit-learn

业务理解

首先应该了解我们要解决的问题, 在我们的例子中,可以将问题定义如下:

  预测股票代码 AAPL 的股价第二天会上涨还是下跌。

然后就是应该考虑手头有什么样的机器学习模型的问题。我们想预测第二天股票是上涨还是下跌。所以这是一个分类问题(1:股票第二天上涨或 0:股票第二天下跌)。在分类问题中,我们预测一个类别。在我们的例子中,是一个 0 类和 1 类的二元分类。

数据理解和准备

数据理解阶段侧重于识别、收集和分析数据集。第一步,我们下载 Apple 股票数据。以下是如何使用 openbb 执行此操作:

 data = openbb.stocks.load(
     symbol = 'AAPL',
     start_date = '2023-01-01',
     end_date = '2023-04-01',
     monthly = False)
 data

该代码下载 2023-01-01 和 2023-04-01 之间的数据。下载的数据包含以下信息:

  • Open:美元每日开盘价
  • High:当日最高价(美元)
  • Low:当日最低价(美元)
  • Close:美元每日收盘价
  • Adj Close:与股息或股票分割相关的调整后收盘价
  • Volume:交易的股票数量
  • Dividends:已付股息
  • Stock Splits:股票分割执行

我们已经下载了数据,但是数据还不适合建模分类模型。所以仍然需要为建模准备数据。所以需要编写了一个函数来下载数据,然后对其进行转换以进行建模。以下代码显示了此功能:

 defget_training_data(symbol, start_date, end_date, monthly_bool=True, lookback=10):
     data=openbb.stocks.load(
         symbol=symbol,
         start_date=start_date,
         end_date=end_date,
         monthly=monthly_bool)
     data=get_label(data)
     data_up_down=data['up_down'].to_numpy()
     training_data=get_sequence_data(data_up_down, lookback)
     returntraining_data

这里面包含的第一个函数时get_label():

 defencoding(n):
     ifn>0:
         return1
     else:
         return0
 defget_label(data):
     data['Delta'] =data['Close'] -data['Open']
     data['up_down'] =data['Delta'].swifter.apply(lambdad: encoding(d))
     returndata

他的主要工作是:计算收盘价和开盘价之间的差值。然后我们用 1 标记股价上涨的所有日期,股价下跌的所有日期都标记为 0。另外的up_down列包含股票价格在特定日期是上涨还是下跌。这里使用 swifter.apply() 函数替代 pandas apply()是因为 swifter 提供多核支持。

第二个函数是get_sequence_data()。参数 lookback 指定预测中包含过去多少天。get_sequence_data()代码如下 :

 defget_sequence_data(data_up_down, lookback):
     shape= (data_up_down.shape[0] -lookback+1, lookback)
     strides=data_up_down.strides+ (data_up_down.strides[-1],)
     returnnp.lib.stride_tricks.as_strided(data_up_down, shape=shape, strides=strides)

这个函数有两个参数:data_up_down 和 lookback。它返回一个新的 NumPy 数组,该数组表示具有指定窗口大小的 data_up_down 数组的滑动窗口视图,该窗口大小由 lookback 参数确定。为了说明这个函数是如何工作的,我们看一个小例子。

 get_sequence_data(np.array([1, 2, 3, 4, 5, 6]), 3)

结果如下:

 array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])

在下文中,我们下载 Apple 股票的数据并对其进行转换以进行建模。我们使用 10 天的回溯期。

 data = get_training_data(symbol = 'AAPL', start_date = '2023-01-01', end_date = '2023-04-01', monthly_bool = False, lookback=10)
 pd.DataFrame(data).to_csv("data/data_aapl.csv")

数据已经准备完毕了,我们开始建模和评估模型。

建模

将数据读入数据并生成测试和训练数据。

 data = pandas.read_csv("./data/data_aapl.csv")
 X=data.iloc[:,:-1]
 Y=data.iloc[:,-1]
 X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=4284, stratify=Y)

逻辑回归:

该分类器是基于线性的模型,通常用作基线模型。我们使用scikit-learn的实现:

 model_lr = LogisticRegression(random_state = 42)
 model_lr.fit(X_train,y_train)
 y_pred = model_lr.predict(X_test)

XGBoost:

XGBoost 是为速度和性能而设计的梯度提升决策树的实现。它属于树提升算法,将许多弱树分类器依次连接。

 model_xgb = XGBClassifier(random_state = 42)
 model_xgb.fit(X_train, y_train)
 y_pred = model_xgb.predict(X_test)

随机森林:

随机森林构建多个决策树。这种方法称为集成学习,因为多个学习器是相互连接的,该算法属于bagging方法。首字母缩写词“bagging”代表引导聚合。 这里也使用scikit-learn的实现:

 model_rf = RandomForestClassifier(random_state = 42)
 model_rf.fit(X_train, y_train)
 y_pred = model_rf.predict(X_test)

评估

在对模型进行建模和训练之后,我们需要检查模型在测试数据上的性能。测量指标是 Recall、Precision 和 F1-Score。下表显示了结果。

可以看到逻辑分类器(逻辑回归)和随机森林取得了明显优于XGBoost模型的结果, 这是什么原因呢?这是因为数据比较简单,只有几个维度的特征,并且数据的长度也很小,我们所有的模型也没有进行调优。

总结

我们这篇文章的主要目的是介绍如何将股票价格的时间序列转换为分类问题,并且演示如何在数据处理时使用窗口函数将时间序列转换为一个序列,至于模型并没有太多的进行调优,所以对于效果评估来说越简单的模型表现得就越好。

https://avoid.overfit.cn/post/57a12ff0cf964fbebf1b27bc72fb2bbb

作者:Tinz Twins

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习强基计划8-4:流形学习等度量映射Isomap算法(附Python实现)

目录 0 写在前面1 什么是流形?2 什么是流形学习?3 等度量映射原理4 Python实现 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习…

【经验分享】Windows/Ubuntu上如何使用api下载kaggle上的数据集

1 下载kaggle的api 1.1 已经安装了Anaconda 打开cmd(Windows)/打开终端(Ubuntu) conda activate 你的conda环境名称 这里我的环境叫做Pytorch conda activate Pytorch然后执行pip install kaggle pip install kaggle如果你没…

沃尔玛、亚马逊影响listing的转化率4大因素,测评补单自养号解析

1、listing的相关性:前期我们在找词,收集词的时候,我们通过插件来协助我们去筛选词。我们把流量高,中,低的关键词都一一收集,然后我们再进行对收集得来的关键词进行分析,再进行挑词,…

云计算:优势与未来趋势

文章目录 前言一、云计算的优势1. 降低IT成本2. 提高工作效率3. 提高业务的可靠性和稳定性4. 提升安全性 二、未来发展趋势1. AI与云计算的融合2. 边缘计算的发展3. 多云的趋势4. 服务器和存储的创新 三、 行业应用案例1.金融行业2.医疗保健行业3.教育行业4.零售和物流行业 四、…

2.4 定点除法运算

学习目标: 学习如何实现一个基于余数查商法的定点除法运算,并能够正确地进行除法计算,包括处理舍入误差和溢出等问题。具体要求包括: 熟悉定点数的表示方法和定点数的基本运算法则,理解定点除法运算的基本概念和原理。…

逻辑回归评分系统(mimic数据集)

1.读取数据与数据处理 为什么不对数据进行标准化? 我们制作的评分卡,评分卡是要给医务人员们使用的基于病人的化验结果打分的一张卡片,而为了制作这张卡片,我们需要对我们的数据进行一个“分档”,比如说,…

大型Saas系统的权限体系设计(一)

X0 概述 在2B系统开发中,权限体系设计是绕不开的问题。最简单的当然是RBAC模型,只要通过用户、角色、权限几个有限的概念,就可以建立起一套基本可用的权限体系。再复杂一点,可以增加角色的层级概念,使得角色的配置更高…

验证回文串

题目:验证回文串 思路: 这段代码是一个判断字符串是否为回文的函数。它接受一个 string 类型的参数 s,并依次执行两个步骤: 首先对字符串进行预处理: 将大写字母转换成小写字母;移除非字母数字字符。 然…

平均10870元!2023一季度居民可支配收入公布(文末附最新招聘岗位)

今天是五一假期的第一天,暂别职场的打工人已经开始扎入人从众中放肆玩乐了,小编已经流下了羡慕的泪水。不过,今年的五一除了人流量上暴涨之外,出行成本也没被少吐槽,机票咱就不说了,酒店民宿的涨幅简直到了…

医院信息系统HIS源码——接口技术:RESTful API + WebSocket + WebService

云HIS系统采用SaaS软件应用服务模式,提供软件应用服务多租户机制,实现一中心部署多机构使用。相对传统HIS单机构应用模式,它可灵活应对区域医疗、医疗集团、医联体、连锁诊所、单体医院等应用场景,并提升区域内应用的标准化与规范…

fc坦克大战游戏完美复刻

文章目录 一、 介绍二、 制作基本物体三、 控制玩家坦克移动、转向四、 子弹脚本、爆炸脚本五、 敌人AI寻路算法六、 坦克生成点脚本七、 用链表实例化地图八、 玩家游戏控制器脚本九、 添加音效十、 资源包 一、 介绍 儿时经典游戏《坦克大战》完整复刻 发射子弹、生成敌人、…

「欧拉定理」[SDOI2008]仪仗队

[SDOI2008]仪仗队 https://ac.nowcoder.com/acm/problem/20313 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。 仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所…

Golang每日一练(leetDay0050)

目录 147. 对链表进行插入排序 Insertion Sort List 🌟🌟 148. 排序链表 Sort List 🌟🌟 149. 直线上最多的点数 Max Points On A Line 🌟🌟🌟 150. 逆波兰表达式求值 Evaluate Reverse …

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现 定义:DDS是指DDS信号发生器,采用直接数字频率合成技术。是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广…

服务运营| Healthcare Management Science 近期文章精选

作者:李舒湉 王畅 (一) Screening for preclinical Alzheimer’s disease: Deriving optimal policies using a partially observable Markov model nen Dumlu Z, Sayın S, Grvit İ H. Screening for preclinical Alzheimer’s disease: …

UG NX二次开发(C#)-显示-更改对象颜色

文章目录 1、前言2、UG NX中的更换对象颜色的功能3、采用UG NX二次开发实现颜色修改3.1 采用直接赋值对象颜色不能直接更改对象颜色3.2 采用NewDisplayModification的方法如下:1、前言 当一个三维模型展现在我们面前时,总会有颜色赋予三维模型的对象上,比如红色、蓝色、银灰…

工具链与其他-移动端网络优化的指标和策略

目录 网络指标 一个请求的时间消耗 页面加载 常见性能指标 网络优化策略 缓存 压缩 请求合并 离线包 预加载(前端大流量数据) 网络指标 一个请求的时间消耗 一个请求的发生到返回回来;有3部分时间 1.Scheduling(排队&…

初识C++之异常

目录 一、C中的常用处理错误方式 二、C异常的概念 1. throw 2. catch 3. try 三、异常的使用 1. 异常的抛出和捕获 1.1 异常的抛出和匹配原则 1.2 在函数调用链中异常栈展开匹配原则 四、异常体系 1. 自定义异常体系 2. C中的异常体系 五、 异常安全 六、异常规范…

Unity 热更新基础HybridCLR:Windows平台使用(HybridCLR手记二)

项目是根据官网的示例工程进行修改的,版本参数如下: unity:2021.2.20 wolong:v2.1.0 il2cpp_plus:v2021_2.1.0 ------------------------------------------------------------- 1、安装:参考:第一篇文章Unity 热…

pytest - Getting Start

前言 项目开发中有很多的功能,通常开发人员需要对自己编写的代码进行自测,除了借助postman等工具进行测试外,还需要编写单元测试对开发的代码进行测试,通过单元测试来判断代码是否能够实现需求,本文介绍的pytest模块是…