Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务

用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输出准确率

代码

import os
import sys
import pandas as pd
import akshare as ak
# try:
#     import akshare as ak
# except ImportError:
#     print("请先运行: pip install akshare")
#     sys.exit(1)def fetch_stock_data(stock_code="000001", start_date="20150101", end_date=None):"""获取股票历史行情数据,兼容不同akshare接口"""print(f"DEBUG: akshare version: {ak.__version__}")print(f"DEBUG: fetch_stock_data params: symbol={stock_code}, start_date={start_date}, end_date={end_date}")try:# 优先尝试 stock_zh_a_dailydf = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq")print("DEBUG: 使用 ak.stock_zh_a_daily 成功")print("DEBUG: Columns before rename:", df.columns.tolist())print("DEBUG: Head before rename:\n", df.head())# 若有 start_date/end_date,筛选if "date" in df.columns:df["date"] = pd.to_datetime(df["date"])if start_date:df = df[df["date"] >= pd.to_datetime(start_date)]if end_date:df = df[df["date"] <= pd.to_datetime(end_date)]df = df.sort_values("date").reset_index(drop=True)except Exception as e:print("ERROR: ak.stock_zh_a_daily() 调用异常,尝试 fallback 原接口")print(f"Exception: {e}")try:df = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date=start_date, end_date=end_date, adjust="qfq")print("DEBUG: 使用 ak.stock_zh_a_hist 成功")print("DEBUG: Columns before rename:", df.columns.tolist())print("DEBUG: Head before rename:\n", df.head())except Exception as e2:print("ERROR: Exception occurred while fetching stock data by both interfaces!")print(f"Exception: {e2}")return pd.DataFrame()if df.empty:print("ERROR: Fetched DataFrame is empty! Check stock code, date range, or network/API issues.")return df# 兼容列名rename_map = {"日期": "date","开盘": "open","收盘": "close","最高": "high","最低": "low","成交量": "volume","成交额": "amount","振幅": "amplitude","涨跌幅": "pct_chg","涨跌额": "chg","换手率": "turnover"}for k in list(rename_map.keys()):if k not in df.columns:rename_map.pop(k)df = df.rename(columns=rename_map)if "date" in df.columns:df["date"] = pd.to_datetime(df["date"])df = df.sort_values("date").reset_index(drop=True)# 自动补充pct_chg列(涨跌幅),百分比格式if "pct_chg" not in df.columns and "close" in df.columns:df["pct_chg"] = df["close"].pct_change() * 100return dfdef create_features_and_labels(df, n_past=5, n_future=3):"""构造特征和标签,标签为未来3日涨跌(1=涨,0=跌/平)"""feats = []labels = []for idx in range(n_past, len(df) - n_future):past_slice = df.iloc[idx-n_past:idx]# 特征: 过去n_past日的收盘价、涨跌幅、成交量feature = []feature += list(past_slice["close"].values)feature += list(past_slice["pct_chg"].values)feature += list(past_slice["volume"].values)# 未来n_future日的收盘价均值future_close_mean = df.iloc[idx:idx+n_future]["close"].mean()curr_close = df.iloc[idx-1]["close"]# 涨跌标签: 未来3日均值 > 当前收盘价 => 1,否则0label = 1 if future_close_mean > curr_close else 0feats.append(feature)labels.append(label)feats_df = pd.DataFrame(feats, columns=[f"close_t-{i}" for i in range(n_past,0,-1)] + [f"pct_chg_t-{i}" for i in range(n_past,0,-1)] + [f"volume_t-{i}" for i in range(n_past,0,-1)])feats_df["label"] = labelsreturn feats_dfdef save_for_tabpfn(df, out_csv):"""保存为TabPFN模型可读取的csv格式"""df.to_csv(out_csv, index=False)print(f"已保存至: {out_csv}")print(df.head())def main():# 拉取A股代码表,打印前10条,辅助判断symbol格式print("尝试拉取A股代码表,辅助symbol格式判断...")try:code_df = ak.stock_info_a_code_name()print("A股代码表前10条:")print(code_df.head(10))print("平安银行相关行:")print(code_df[code_df["code"].str.contains("000001")])except Exception as e:print(f"拉取A股代码表失败: {e}")stock_code = "sz000001"  # 平安银行start_date = "20150101"print("正在获取股票数据...")df = fetch_stock_data(stock_code, start_date)print("正在生成特征与标签...")processed = create_features_and_labels(df, n_past=5, n_future=3)# out_csv = os.path.join(os.path.dirname(__file__), f"{stock_code}_tabpfn.csv")out_csv =  f"{stock_code}_tabpfn.csv"print("正在保存为TabPFN格式...")save_for_tabpfn(processed, out_csv)print("预处理完成。")if __name__ == "__main__":main()

预测

import os
# 临时绕过 /dev/null 权限问题
os.devnull = "/tmp/null"
if not os.path.exists("/tmp/null"):with open("/tmp/null", "w") as f:passimport sys
import numpy as np
import pandas as pd# 自动安装tabpfn(如未安装)
try:from tabpfn import TabPFNClassifier
except ImportError:import subprocesssubprocess.check_call([sys.executable, "-m", "pip", "install", "tabpfn"])from tabpfn import TabPFNClassifier# 读取数据
# DATA_PATH = os.path.join(os.path.dirname(__file__), "sz000001_tabpfn.csv")
DATA_PATH = "sz000001_tabpfn.csv"
data = pd.read_csv(DATA_PATH, header=None)
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values# 按时间顺序划分(前80%训练,后20%测试)
split_idx = int(0.8 * len(X))
X_train, X_test = X[:split_idx], X[split_idx:]
y_train, y_test = y[:split_idx], y[split_idx:]# TabPFN训练与预测
# clf = TabPFNClassifier(device='cpu')
clf = TabPFNClassifier(device='cuda')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy = np.mean(y_pred == y_test)print(f"Test Accuracy: {accuracy:.4f}")

最后生成的准确率:

Test Accuracy: 0.4812

这个准确率低于50%,反而可能证明程序是对的。

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

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

相关文章

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…

crackme006

crackme006 名称值软件名称aLoNg3x.1.exe加壳方式无保护方式Serial编译语言Delphi调试环境Win10 64位使用工具x32dbg,ida pro,PEid,DarkDe4破解日期2025-06-05 脱壳 1. 先用PEid查壳 查到无壳 寻找Serial 查询到编程语言为Delphi 导出Delphi符号表信息到x32dbg&#xff0c…

Conda 创建新环境时报错 HTTP 502,如何解决?

Conda 创建新环境时报错 HTTP 502&#xff0c;如何解决&#xff1f; 最近在用 Conda 创建新环境时&#xff0c;突然遇到这样一个错误&#xff1a; CondaHTTPError: HTTP 502 BAD GATEWAY for url <https://mirrors.westlake.edu.cn/ANACONDA/cloud/conda-forge/linux-64/r…

2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required

随着 TS 在工作中使用的越来越广泛&#xff0c;面试的时候面试官也都会加上一两个 TS 的问题来了解候选人对于 TS 的熟悉程度&#xff0c;其中就有不少手写题目&#xff0c;比如笔者在字节的一次二面&#xff0c;面试官就问到了我如何实现一个 Pick&#xff0c;在小红书的一面&…

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…

LLMs之StructuredOutput:大模型结构化输出的简介、常用方案、前沿框架之详细攻略

LLMs之StructuredOutput&#xff1a;大模型结构化输出的简介、常用方案、前沿框架之详细攻略 目录 大模型结构化输出的简介 1、特点与难点 大模型结构化输出的常用方案及对比 1、前沿框架&#xff1a;vLLM 与 XGrammar 大模型结构化输出的案例应用 大模型结构化输出的简介…

Linux中shell流程控制语句

一、if条件控制 1.1 语法解读 单路决策 - 单分支if语句样式&#xff1a;if [ 条件 ]then指令fi特点&#xff1a;单一条件&#xff0c;只有一个输出 双路决策 - 双分支if语句样式&#xff1a;if [ 条件 ]then指令1else指令2fi特点&#xff1a;单一条件&#xff0c;两个输出 …

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…

数据结构-文件

文件是性质相同的记录的集合。 记录是文件中存取的基本单位&#xff0c;数据项是文件可使用的最小单位。 操作系统研究的文件是一维的无结构连续字符序列&#xff0c;数据库中研究的文件是带有结构的记录集合。 文件在外存上的4种基本组织方式&#xff1a;顺序、索引、散列、链…

前端开发面试题总结-CSS篇

文章目录 CSS面试高频问答1、CSS选择器的优先级2、CSS3新特性3、如何垂直水平居中盒子4、什么是重绘和重排5、px/em/rem/vw有什么区别6、rem布局的原理7、如何设置比12px还要小的字体8、CSS中隐藏元素的方式有哪些 CSS面试高频问答 1、CSS选择器的优先级 2、CSS3新特性 3、如何…

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…

解决ubuntu20.04无法唤醒的问题的一种方法

解决ubuntu20.04无法唤醒的问题的一种方法 我更改了三个个地方&#xff0c;目前不清楚是哪个地方起的作用&#xff0c;也可能都起作用了 修改的第一个地方 步骤 1: 获取 Swap 分区的 UUID 首先&#xff0c;你需要知道你的 swap 分区的 UUID。你可以使用以下命令来查找它&am…

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …

使用osqp求解简单二次规划问题

文章目录 一、问题描述二、数学推导1. 目标函数处理2. 约束条件处理 三、代码编写 一、问题描述 已知&#xff1a; m i n ( x 1 − 1 ) 2 ( x 2 − 2 ) 2 s . t . 0 ⩽ x 1 ⩽ 1.5 , 1 ⩽ x 2 ⩽ 2.5 min(x_1-1)^2(x_2-2)^2 \qquad s.t. \ \ 0 \leqslant x_1 \leqslant 1.5,…

pe文件结构(TLS)

TLS 什么是TLS? TLS是 Thread Local Storage 的缩写&#xff0c;线程局部存储。主要是为了解决多线程中变量同步的问题 如果需要要一个线程内部的各个函数调用都能访问&#xff0c;但其它线程不能访问的变量&#xff08;被称为static memory local to a thread 线程局部静态变…

Electron简介(附电子书学习资料)

一、什么是Electron&#xff1f; Electron 是一个由 GitHub 开发的 开源框架&#xff0c;允许开发者使用 Web技术&#xff08;HTML、CSS、JavaScript&#xff09; 构建跨平台的桌面应用程序&#xff08;Windows、macOS、Linux&#xff09;。它将 Chromium浏览器内核 和 Node.j…

如何使用DeepSeek帮助自己的工作?(Java开发)

如何使用DeepSeek帮助自己的工作&#xff1f; 作为Java开发者&#xff0c;你可以通过以下方式高效利用DeepSeek提升工作效率&#xff08;附具体操作示例&#xff09;&#xff1a; 一、日常编码加速 1. 代码生成与补全 // 输入需求描述&#xff1a; "生成SpringBoot分页…

Uniapp 二维码生成与解析完整教程

前言 使用Uniapp开发多平台应用&#xff0c;二维码生成采用uQRCode插件&#xff0c;非常nice&#x1f601;&#xff01; Coding 原理 使用canvas绘制 生成二维码数据 绘制到canvas上 使用 <uqrcoderef"uqrcodeRef"canvas-id"qrcode":value"qr…

Vue ⑤-自定义指令 || 插槽

自定义指令 自定义指令&#xff1a;自己定义的指令, 可以封装一些 dom 操作&#xff0c; 扩展额外功能。 全局注册 语法&#xff1a; Vue.directive(指令名, {"inserted" (el) {// 可以对 el 标签&#xff0c;扩展额外功能el.focus()} })局部注册 语法&#xff…