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


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

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

本文将按照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 = '2025-01-01',end_date = '2025-04-01',monthly = False) data

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

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

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

def get_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) return training_data

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

def encoding(n): if n > 0: return 1 else: return 0 def get_label(data): data['Delta'] = data['Close'] - data['Open'] data['up_down'] = data['Delta'].swifter.apply(lambda d: encoding(d)) return data

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

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

def get_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],) return np.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 = '2025-01-01', end_date = '2025-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模型的结果, 这是什么原因呢?这是因为数据比较简单,只有几个维度的特征,并且数据的长度也很小,我们所有的模型也没有进行调优。

总结

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


# 人工智能  # Python  # scikit-learn  # numpy  # pandas  # 算法  # 第二天  # 的是  # 多个  # 多核  # 转换为  # 值为  # 当日  # 是一个  # 几个  # 是因为 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 文心一言辅助进行中文播客脚本起草教程  ChatGPT怎么写工作汇报 职场办公效率提升与周报生成方法  文本分类:生成模型与朴素贝叶斯算法的全面指南  豆包AI怎么评价回答的好坏_点赞与反馈功能使用教程  YOU.com AI搜索引擎:Python代码示例及使用指南  Gemini怎样写细节型提示词_Gemini细节提示词编写【步骤】  揭秘颜值真相:社交实验的背后,你是几分?  tofai官网入口网站 tofai官网入口网页版  数据迁移测试指南:策略、技术与挑战全解析  CanvaAI抠图如何换背景_CanvaAI背景替换与设计模板结合【攻略】  摆脱情歌魔咒:告别心碎,拥抱新生的情感之旅  AI简历生成器:提升求职效率的智能工具  AI赋能音频转录:SovereignAudio自托管解决方案  提升Fortnite OG游戏性能:NVIDIA控制面板最佳设置  机器学习赋能AI生产力工具:提升效率与智能决策  生成式AI革新客户服务:提升效率与个性化体验  Veribix Demo Analytics: 优化呼叫录音分析,提升客服效率  打破平庸:激发你的内在动力,重塑卓越人生  AI赋能项目管理:5个实用技巧提升效率  文本分类与聚类:网络安全中的自然语言处理应用  AI驱动的自动化工作流:Zapier、Perplexity和Claude集成指南  如何通过 DeepSeek 进行深度神经网络超参数搜索  通义千问网页版怎么用模板_通义千问模板使用方法【方法】  Feelin网页版在线玩 Feelin角色扮演网页版入口  AI复古风照片编辑教程:Gemini AI轻松打造复古时尚  AI驱动的潜在客户挖掘:15分钟搭建营销机构并获利  AI|直播|话术生成工具有哪些_一键生成带货话术的AI工具推荐  老电脑焕新:i5-2400搭配FirePro V5900 打造复古游戏利器  如何用AI帮你快速理解API文档?开发者必备高效技巧  百度输入法蓝色图标怎么关 百度输入法ai图标消除  Artist.ly AI Image Designer: 终极指南  乐高积木重现约拿的故事:圣经故事趣味解读  标准渣打银行电子账单下载完全指南:轻松管理财务  Artspace.ai: AI驱动的创意设计平台,提升小企业营销效率  AI写作工具检测:学生如何避免学术不端行为  AI 编码助手大比拼:Gemini、Tabnine 和 Cline 的深度测评  Xcode 26 Beta 新功能:集成 ChatGPT 代码助手全面测评  AI赋能抵押贷款:Total Expert AI 销售助理深度解析  豆包AI里的智能体有什么用_不同类型智能体使用场景介绍  AI测试面试准备:提升你的面试技巧与知识储备  智行ai抢票能否跨站抢票_智行ai抢票跨站抢票开启与规则【教程】  AI内容审查:谷歌搜索结果是否受到人为干预?  文心一言怎么一键生成会议纪要_文心一言纪要生成与重点提取【指南】  TechInternPath.ai:AI驱动的实习之路,助你梦想成真  冷邮件营销新策略:工作坊模式助力B2B销售增长  小米汽车OTA冬季大版本升级:新增和优化共计9项功能  Google AI Studio文本转语音教程:零成本创作高质量音频  Voice AI:下一代AI语音助手,重塑人机交互  播客数据深度分析:用户地域分布及增长策略探讨  ChatGPT官方网页端入口 ChatGPT官网快速登录方法 

 2023-05-18

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.