金融领域的深度学习应用:NeuralProphet实战
立即解锁
发布时间: 2025-09-01 00:33:38 阅读量: 4 订阅数: 18 AIGC 

### 金融领域的深度学习应用:NeuralProphet实战
#### 1. 相关性分布可视化
为了更好地理解相关性的分布,我们可以绘制其直方图。以下是相应的代码:
```python
plt.hist(corr_matrix[corr_matrix < 1].numpy())
```
执行上述代码片段会生成一个展示提取的相关性分布的直方图。需要注意的是,由于我们是基于相关矩阵创建的直方图,实际上每个值都被计算了两次。
#### 2. NeuralProphet算法概述
NeuralProphet是对Prophet算法的扩展,它保留了Prophet算法性能良好、可解释性强和易于使用的优点,同时增加了一些新组件,提高了准确性和可扩展性。以下是NeuralProphet的主要新增特性:
- **引入自回归项**:通过自回归网络(AR - Net)实现,AR - Net是一个经过训练以模拟时间序列信号中自回归过程的神经网络,相比传统AR模型,它能在更大规模上运行。
- **使用PyTorch作为后端**:与Prophet算法使用的Stan不同,这使得训练速度更快,并带来其他好处。
- **滞后回归因子建模**:使用前馈神经网络对滞后回归因子(特征)进行建模。
- **支持自定义损失和指标**:算法可以使用自定义的损失函数和评估指标。
- **广泛使用正则化**:可以将正则化应用于模型的大多数组件,如趋势、季节性、节假日、AR项等,对于AR项,正则化可以让我们使用更多滞后值而不用担心训练时间的快速增加。
NeuralProphet支持以下几种AR项配置:
| AR项配置 | 描述 | 优点 | 缺点 |
| ---- | ---- | ---- | ---- |
| 线性AR | 无偏置项或激活函数的单层神经网络,将特定滞后回归到特定预测步骤 | 易于解释 | 预测准确性可能较低 |
| 深度AR | 使用具有指定数量隐藏层和ReLU激活函数的全连接神经网络对AR项进行建模 | 预测准确性较高 | 复杂度增加、训练时间长、可解释性降低 |
| 稀疏AR | 结合高阶AR(包含更多先前时间步的值)和正则化项 | 可平衡复杂度和准确性 | - |
NeuralProphet由以下组件构成:
- 趋势
- 季节性
- 节假日和特殊事件
- 自回归
- 滞后回归:使用前馈神经网络对协变量的滞后值进行内部建模
- 未来回归:类似于事件/节假日,是我们已知未来值的回归因子的值
#### 3. 使用NeuralProphet对S&P 500每日价格时间序列进行拟合
以下是使用NeuralProphet对2010 - 2021年S&P 500每日价格时间序列进行拟合的详细步骤:
```mermaid
graph LR
A[导入库] --> B[下载数据并准备DataFrame]
B --> C[创建训练/测试集]
C --> D[训练默认模型并绘制评估指标]
D --> E[计算预测并绘制拟合图]
E --> F[添加AR组件]
F --> G[添加AR - Net]
G --> H[绘制模型组件和参数]
```
1. **导入库**
```python
import yfinance as yf
import pandas as pd
from neuralprophet import NeuralProphet
from neuralprophet.utils import set_random_seed
```
2. **下载S&P 500指数的历史价格并准备用于NeuralProphet建模的DataFrame**
```python
df = yf.download("^GSPC",
start="2010-01-01",
end="2021-12-31")
df = df[["Adj Close"]].reset_index(drop=False)
df.columns = ["ds", "y"]
```
3. **创建训练/测试集**
```python
TEST_LENGTH = 60
df_train = df.iloc[:-TEST_LENGTH]
df_test = df.iloc[-TEST_LENGTH:]
```
4. **训练默认的Prophet模型并绘制评估指标**
```python
set_random_seed(42)
model = NeuralProphet(changepoints_range=0.95)
metrics = model.fit(df_train, freq="B")
(
metrics
.drop(columns=["RegLoss"])
.plot(title="Evaluation
```
0
0
复制全文
相关推荐








