R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
原文鏈接:http://tecdat.cn/?p=11878
Nelson-Siegel- [Svensson]模型是擬合收益曲線的常用方法。它的優(yōu)點(diǎn)是其參數(shù)的經(jīng)濟(jì)可解釋性,被銀行廣泛使用。但它不一定在所有情況下都有效:模型參數(shù)有時(shí)非常不穩(wěn)定,無法收斂。
在之前的文章中,我們提供了Nelson-Siegel模型收斂失敗的示例,我們已經(jīng)展示了它的一些缺陷。
蒙特卡洛模擬幫助我們理解:
for(j in 1:N_SIMULATIONS)
{
????npo = c(newYields, oldYields)
????plot(MATURITY_BASES, oldYields, ylim=c(min(npo), max(npo)))
????lines(MATURITY_BASES, oldYields)
????points(MATURITY_BASES, newYields, col="red", pch=4)
????points(newMATs, newNsYields, col="blue")
????lines(newMATs, newNsYields, col="blue")

我們要做的是:從一些收益率曲線開始,然后逐步地隨機(jī)修改收益率,最后嘗試NS模型擬合新的收益。因此我們對此進(jìn)行了模擬。
對于Nelson-Siegel模型,此Monte-Carlo模擬盡管假定前一步的收益(舊收益率)? ?與NS曲線完全匹配。但是,即使如此也無法完全避免麻煩。我們?nèi)绾伟l(fā)現(xiàn)這些麻煩?在每一步中,我們計(jì)算兩條相鄰曲線之間的最大距離(supremum-norm):
maxDistanceArray[j] = max( abs(oldYieldsArray[j,] - newNsYieldsArray[j,]) )
最后,我們找到到上一條曲線的最大距離的步驟,這就是收斂失敗的示例。
maxDistanceArray的概率密度? ?如下所示:

分布尾部在0.08處減小,但對于收益率曲線而言,每天偏移8個(gè)點(diǎn)并不罕見。因此,盡管我們進(jìn)行了1e5 = 10000蒙特卡洛模擬,但只有極少數(shù)情況,我們可以將其標(biāo)記為不良。訓(xùn)練神經(jīng)網(wǎng)絡(luò)絕對是不夠的。而且,兩條Nelson-Siegel曲線可能彼此非常接近,但其參數(shù)卻彼此遠(yuǎn)離。由于模型是線性的, 因此可以假設(shè)beta的極大變化(例如,超過95分位數(shù))是異常值,并將其標(biāo)記為不良。

idx = intersect(intersect(which(b0 < q_b0), which(b1 < q_b1)), which(b2 < q_b2))
par(mfrow=c(3,3))
plot(density(log(b0)))
plot(density(log(b1)))
plot(density(log(b2)))
plot(density(log(b0[idx])))
plot(density(log(b1[idx])))
plot(density(log(b2[idx])))
plot(density(b0[idx]))
plot(density(b1[idx]))
plot(density(b2[idx]))
b0 = b0-mean(b0)
b1 = b1-mean(b1)
b2 = b2-mean(b2)
#訓(xùn)練神經(jīng)網(wǎng)絡(luò)
X = cbind(b0, b1, b2)
Y = array(0, dim=(N_SIMULATIONS-1))
Y[idx] = 1
?

然后我們可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)
SPLT = 0.8
library(keras)
b = floor(SPLT*(N_SIMULATIONS-1))
plot(history)
model %>% evaluate(x_test, y_test)
?

神經(jīng)網(wǎng)絡(luò)不僅在樣本而且在驗(yàn)證集上都提供了高精度。
如果模擬新數(shù)據(jù)集,對模型進(jìn)行修改? :例如修改VOLAs = 0.005*sqrt(MATURITY_BASES)
?到??VOLAs = 0.05*sqrt(MATURITY_BASES)
?將無法識別新數(shù)據(jù)集上的不良情況。
不足與展望:盡管我們在兩種情況下均對數(shù)據(jù)進(jìn)行了歸一化和平均化,但是模型波動(dòng)性的線性變化對尾部分位數(shù)具有很高的非線性影響。
那么,我們是否需要一個(gè)更復(fù)雜的AI模型?

最受歡迎的見解
1.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
2.Python中利用長短期記憶模型LSTM進(jìn)行時(shí)間序列預(yù)測分析 – 預(yù)測電力消耗數(shù)據(jù)
3.python在Keras中使用LSTM解決序列問題
4.Python中用PyTorch機(jī)器學(xué)習(xí)分類預(yù)測銀行客戶流失模型
5.R語言多元Copula GARCH 模型時(shí)間序列預(yù)測
6.在r語言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析
7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測時(shí)間序列數(shù)
8.R語言估計(jì)時(shí)變VAR模型時(shí)間序列的實(shí)證研究分析案例
9.用廣義加性模型GAM進(jìn)行時(shí)間序列分析
?