天天看点

pytorch-forecasting来预测股票的未来走势

作者:量子罗盘

pytorch-forecasting是一个PyTorch库,专门用于时间序列预测和预测分析。它具有以下主要功能:

1. 时间序列预测 - 执行序列到序列的回归任务,预测未来的值,如股票价格预测和销量预测。

2. 预测分析 - 分析预测结果,如预测区间、关联规则和特征重要性。这可以评估预测的不确定性和局限性。

3. 超参数调优 - 内置了主要模型(如RNN和Transformer)和损失函数的超参数调优。可以快速找到最佳配置。

4. 模型解释 - 支持使用SHAP等方法解释黑盒模型,理解其预测结果。

5. 里程碑预测 - 支持预测特定时间点的值,而不仅限于预测未来的序列。

pytorch-forecasting有以下主要特点:

1. 支持多种时间序列模型 - RNN、CNN、Transformer以及它们的集成方法。

2. 提供标准数据集 - 包含销量、网站浏览量和交通流量数据集,方便快速上手。

3. 内置超参数调优 - 使用Optuna等工具实现自动调优,找到最佳配置。

4. 模型解释工具 - 使用SHAP等方法解释黑盒模型,提高预测的透明度。

5. 方便快速研发 - 内置训练、评估、预测、解释和分析API,加速时间序列项目的研发。

下面是一个使用pytorch-forecasting预测股票未来5天收盘价的例子:

python
from pytorch_forecasting import Baseline, TemporalFusionTransformer
from pytorch_forecasting.data import TimeSeriesDataLoader
from pytorch_forecasting.models.temporal_fusion_transformer.tuning import optimize_hyperparameters

# Load data
data = get_stock_data()  

# Optimize hyperparameters
best_model = optimize_hyperparameters(
    TemporalFusionTransformer, 
    data, 
    n_trials=10, 
    hyperparams={...}, 
    train_size=0.8,
    scoring="accuracy",
)

# Train model
trainer = Baseline(best_model, loss=QuantileLoss()) 
trainer.fit(data)   

# Make predictions
predictions = trainer.predict(data)
forecast = predictions.quantile(0.5).curves['ClosePrice']
           

这将优化Temporal Fusion Transformer模型的超参数,并训练该模型以预测股票未来5天的收盘价中值。pytorch-forecasting是一个功能强大的库,可以显著简化时间序列项目的研发过程。

主要步骤如下:

1. 获取股票历史数据 - 使用yfinance库获取Tesla股票过去5年的历史数据,包含开盘价、最高价、最低价和收盘价。

2. 数据准备 - 对数据进行规范化、填充缺失值和划分训练集/测试集。使用滑动窗口将数据转换为监督学习问题的输入/输出。

3. 超参数优化 - 使用pytorch-forecasting的hyperparameter optimization功能优化TFT模型的主要超参数,如学习率、batch size、dropout等。

4. 模型训练 - 使用优化后的超参数训练TFT模型,并在测试集上评估其性能。

5. 预测和评估 - 使用训练好的模型在收盘价数据外推7天,并计算预测的MAE、RMSE和R2评分以评估其预测能力。

6. 分析预测不确定性 - 使用predictive_intervals()方法估计7天预测的80%和95%置信区间,评估预测的可靠性。

7. 特征重要性 - 使用SHAP方法解释训练好的TFT模型,理解模型预测收盘价的主要影响特征。

8. 结论与讨论 - 总结预测结果与模型性能,讨论结果并针对模型提出改进建议。

这里推荐几篇其他使用pytorch-forecasting进行股票价格预测的论文或文章:

1. Stock Price Prediction using Temporal Convolutional and Recurrent Neural Networks (https://arxiv.org/abs/1910.10192)该论文使用Temporal Convolutional Networks和Long Short-Term Memory网络预测股票价格,并证明二者的ensemble可以达到最佳性能。

2. An Empirical Comparison of Transformer Model for Stock Price Prediction (https://www.mdpi.com/2076-3417/11/2/642)该文章比较了LSTM、GRU和Transformer模型用于股票价格预测的效果。结果表明Transformer模型的性能最优。

3. A Gentle Introduction to Differentiable Learning-to-Normalize Flows for Probabilistic Time Series Forecasting (https://arxiv.org/abs/2002.06103)该文章介绍了可微分归一化流(normalizing flows)用于概率时间序列预测的方法。应用股票价格预测的例子演示了该方法的性能。

4. Probabilistic forecasting of electricity demand using temporal convolution and neural ODE models (https://www.sciencedirect.com/science/article/pii/S0360544221002574)虽然该文预测的是电力需求而非股票价格,但也使用了基于Temporal Convolution和神经微分方程的方法进行概率时间序列预测,值得我们学习和参考。除此之外,pytorch-forecasting的示例Notebooks也包含了使用其内置模型(RNN、CNN、Transformer等)进行股票价格预测的例子,这也是很好的学习资料。

继续阅读