<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><h1 id="基于lstm与garch族混合模型预测股票波动率的python操作代码">基于LSTM与GARCH族混合模型预测股票波动率的Python操作代码</h1>
<blockquote>
<p>LSTM; GARCH; 股票波动率; Python</p>
</blockquote>
<p>学习了金融数据分析这门课,对<strong>Python</strong>这个工具又有了新的认识,真是太强大了!本小白的报告是基于哈工大硕士论文田晓丹《基于LSTM与多GARCH型混合模型的股价波动性预测的实证分析》的方法,研究预测时间序列中证500指数价格波动率最优的模型,在GARCH模型基础上结合神经网络LSTM算法,对解释变量及GARCH得到的参数进行多次训练得到损失函数RMSE和MAE最小的混合模型。做完此实验能让我们对GARCH族模型的原理有更好的理解,也为在金融中应用算法提供思路,大家快来学习一下吧!</p>
<h2 id="garch族模型">GARCH族模型</h2>
<p>GARCH(1,1)模型;EGARCH(1,1)模型;TGARCH(1,1)模型。这三个模型递进地改进了杠杆效应即对称效应,就是利空和利好消息对金融市场的冲击不同。通过Eviews对中证500指数收益率总样本的10%进行样本外预测,并根据损失函数RMSE和MAE大小,得到最小的损失模型为TGARCH,得到各参数的列估计值,具体可通过Eviews里面生成的模型残差和方差来计算得到各参数的列估计值。</p>
<h2 id="lstm算法">LSTM算法</h2>
<p>LSTM 神经网络属于时间递归神经网络。基于对循环神经网络的优化,LSTM神经网络能够解决循环神经网络的梯度缺陷。LSTM神经网络包括存储器块(记忆单元Cell)和三个自适应乘法门,即输入门(Input Gate)、输出门(Output Gate)和遗忘门(Forget Gate)[10]。LSTM的训练过程也是复杂的,简单来说是其输入门的输入值由三部分组成,即输入层中神经元的输出向量,前一个隐含层中的记忆单元的输出向量,前一时刻记忆单元的历史存储信息。</p>
<h2 id="基于lstm与garch族混合模型的python代码">基于LSTM与GARCH族混合模型的Python代码</h2>
<p>通过上述GARCH族模型的回归和LSTM神经网络学习算法的了解,查找相关资料进行代码编写,主要的参数维度需要根据自己的数据来.下面列出一些需要注意的地方。</p>
<pre class=" language-python"><code class="prism language-python"><span class="token keyword">def</span> <span class="token function">create_dataset</span><span class="token punctuation">(</span>dataset<span class="token punctuation">,</span> look_back<span class="token punctuation">)</span><span class="token punctuation">:</span>
dataX<span class="token punctuation">,</span> dataY <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token comment">#这里的look_back与timestep相同 </span>
<span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token builtin">len</span><span class="token punctuation">(</span>dataset<span class="token punctuation">)</span><span class="token operator">-</span>look_back<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
a <span class="token operator">=</span> dataset<span class="token punctuation">[</span>i<span class="token punctuation">:</span><span class="token punctuation">(</span>i<span class="token operator">+</span>look_back<span class="token punctuation">)</span><span class="token punctuation">]</span>
dataX<span class="token punctuation">.</span>append<span class="token punctuation">(</span>a<span class="token punctuation">)</span>
dataY<span class="token punctuation">.</span>append<span class="token punctuation">(</span>dataset<span class="token punctuation">[</span>i <span class="token operator">+</span> look_back<span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>dataX<span class="token punctuation">)</span><span class="token punctuation">,</span>np<span class="token punctuation">.</span>array<span class="token punctuation">(</span>dataY<span class="token punctuation">)</span>
<span class="token comment">#训练数据太少 look_back并不能过大</span>
<span class="token comment">#建模 </span>
n_features <span class="token operator">=</span> data<span class="token punctuation">.</span>shape<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">-</span> <span class="token number">1</span>
model <span class="token operator">=</span> Sequential<span class="token punctuation">(</span><span class="token punctuation">)</span>
model<span class="token punctuation">.</span>add<span class="token punctuation">(</span>LSTM<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span>activation <span class="token operator">=</span> <span class="token string">'relu'</span><span class="token punctuation">,</span>return_sequences <span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span>input_shape<span class="token operator">=</span><span class="token punctuation">(</span>n_features<span class="token punctuation">,</span>time_stamp<span class="token punctuation">,</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
model<span class="token punctuation">.</span>add<span class="token punctuation">(</span>Dropout<span class="token punctuation">(</span><span class="token number">0.2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">#防止过拟合 </span>
model<span class="token punctuation">.</span>add<span class="token punctuation">(</span>Dense<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">#输出维度和y一样 </span>
start <span class="token operator">=</span> time<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token comment">#编译模型 </span>
model<span class="token punctuation">.</span><span class="token builtin">compile</span><span class="token punctuation">(</span>loss<span class="token operator">=</span><span class="token string">'mean_squared_error'</span><span class="token punctuation">,</span> optimizer<span class="token operator">=</span><span class="token string">'Adam'</span><span class="token punctuation">)</span>
</code></pre>
<h2 id="结论">结论</h2>
<p>报告研究了金融市场中时间序列波动率预测问题,从GARCH族模型和LSTM神经网络理论出发,应用Eviews对GARCH模型进行回归,找到预测精度最优的模型,再运用得到的参数估计值作为LSTM训练集的输入,训练得到预测损失最小的GARCH和LSTM混合模型。对GARCH和LSTM模型有更深入的理解,也能用更精确的方法来预测股价波动率,也学习了很多Python知识,受益颇深。</p>
<p><strong>参考文献</strong><br>
[1] 田晓丹. 基于LSTM与多GARCH型混合模型的股价波动性预测的实证分析[D].哈尔滨工业大学,2019.<br>
[2] CSDN,人大经济论坛各种资料.</p>
</div>
</div>