如何使用训练好的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
相关产品推荐
相关产品推荐

