You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用训练好的Decision Tree Classifier预测数据集外的未来价格涨跌

问题解决方案

现有代码问题修正

你当前的代码存在3个影响运行的问题:

  • 未提前定义特征集X和标签Y,直接调用训练测试集拆分方法会报错
  • 时间序列场景不能用随机拆分训练测试集的逻辑,会出现数据泄露(用未来数据训练模型再预测过去),不符合实际预测场景
  • 涨跌标签逻辑写反:下一日收盘价高于当日收盘价应该标记为1(上涨),你当前代码标记为0,和需求相悖

修正后的可运行代码如下:

from sklearn.tree import DecisionTreeClassifier
import numpy as np
import pandas as pd

from google.colab import files
files.upload()

df = pd.read_csv('HistoricalPrices.csv')
df = df.set_index(pd.DatetimeIndex(df['Date'].values))
df.index.name = 'Date'

# 修正涨跌标签逻辑:下一日收盘>当日收盘标记为1(上涨),否则为0(下跌)
df['Price_Up'] = np.where(df[' Close'].shift(-1) > df[' Close'], 1, 0)
df = df.drop(columns=['Date'])
# 移除最后一行无下一日价格的无效数据
df = df.dropna()

# 定义特征集、标签集
X = df.drop(columns=['Price_Up'])
Y = df['Price_Up']

# 时间序列按先后顺序拆分训练/测试集,避免数据泄露
train_size = int(len(df) * 0.9)
X_train, X_test = X[:train_size], X[train_size:]
Y_train, Y_test = Y[:train_size], Y[train_size:]

# 训练模型,添加max_depth参数避免过拟合
tree = DecisionTreeClassifier(max_depth=5)
tree.fit(X_train, Y_train)
print('测试集准确率:', tree.score(X_test, Y_test))

未来日期走势预测实现

要预测不在原数据集内的未来日期涨跌,你需要先拿到该日期对应的特征值(和训练用的特征列顺序、数量完全一致,比如开盘价、最高价、最低价、收盘价等),再调用模型预测接口即可:

# 替换为你要预测的日期对应的实际特征值,顺序和X的列顺序完全一致
future_date_feature = np.array([[4520.1, 4536.7, 4512.3, 4530.5]])
pred_result = tree.predict(future_date_feature)
print('预测结果:', '上涨' if pred_result[0] == 1 else '下跌')

注意事项

  • 决策树模型对时间序列预测的泛化能力较弱,容易过拟合历史数据,建议调整max_depth、min_samples_leaf等正则化参数优化效果
  • 输入的预测特征必须和训练时的特征顺序、字段完全对应,否则会得到错误的预测结果

内容的提问来源于stack exchange,提问作者noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:12:02