En finance quantitative,J'ai appris diverses techniques d'analyse de séries chronologiques et comment les utiliser.
En développant notre analyse de séries chronologiques (TSA) Combinaison de méthodes,Nous pouvons mieux comprendre ce qui s'est passé,Et oui.Faire mieux à l'avenir、Des prévisions plus favorables.Les exemples d'applications comprennent la prévision du rendement futur des actifs、Pertinence future/Covariance et volatilité future.
Avant de commencer,Importons notre Python Bibliothèque.
import pandas as pd
import numpy as np
UtilisonspandasLe sac passe. API .Obtenir quelques exemples de données.
# Prix de clôture initialement ajusté
daa = pdDatrme({sx(sm)for sm i syos})
# Rendement logarithmique
ls = log(dta/dat.sit(1)).dropa()
Connaissances de base
Une série chronologique est une série de points de données indexés dans l'ordre chronologique.—— Wikipedia
Pourquoi sommes - nous préoccupés par la stabilité?
“Par exemple, Si la séquence augmente avec le temps, ,La moyenne et la variance de l'échantillon augmentent avec la taille de l'échantillon,Et ils sous - estiment toujours la moyenne et la variance de la période à venir.Si la moyenne et la variance d'une séquence ne sont pas clairement définies, Il n'est donc pas lié à d'autres variables .”
Cela dit,, La plupart des choses que nous rencontrons en finance TS Pas stationnaire. .Donc,,TSA Une grande partie de cela implique de déterminer si la séquence que nous voulons prédire est stationnaire,Si ce n'est pas le cas,, Nous devons trouver un moyen de le convertir en stationnaire .(Plus tard)
Essentiellement, Quand nous modélisons les séries chronologiques, , Nous avons divisé la séquence en trois parties :Tendances、Saisonnalité/ Périodique et aléatoire . Les composantes aléatoires sont appelées résidus ou erreurs . C'est juste la différence entre nos prévisions et nos observations. . La corrélation des séquences fait référence à notre TS Résidus du modèle(Erreur) Interrelations .
Nous nous préoccupons de la corrélation des séquences Sexe, Parce qu'il est essentiel pour la validité de nos prévisions de modèle , Et est intrinsèquement lié à la stationnarité .Rappelle - toi.,Par définition,Stable.TS Résidus (Erreur)C'est continu.Sans objetDe!Si on n'en tient pas compte dans notre modèle, L'erreur type de nos coefficients est sous - estimée , Pour exagérer notre T Statistiques. Le résultat est trop 1 Erreur de classe , Même si l'hypothèse originale est vraie , Nous rejetons également l'hypothèse originale !En termes simples,Ignorer l'autocorrélation signifie que nos prédictions de modèle seront des conneries,Nous pouvons tirer des conclusions erronées sur l'effet des variables indépendantes dans le modèle.
Bruit blanc et Marche aléatoireLe bruit blanc est le premier modèle de séries chronologiques que nous devons comprendre(TSM).Par définition,Les séries chronologiques en tant que processus de bruit blanc ont des erreurs continues et non corrélées, La moyenne attendue de ces erreurs est égale à zéro . Une autre description des erreurs non corrélées continues est , Distribution indépendante et identique (i.i.d.).C'est important., Parce que si notre TSMC'est bien., Et a réussi à saisir les processus de base , Les résidus de notre modèle seront i.i.d., Similaire au processus de bruit blanc .Donc,,TSAUne partie d'une tentative d'adapter un modèle aux séries chronologiques, De sorte que la séquence résiduelle ne puisse pas être distinguée du bruit blanc .
Simulons un processus de bruit blanc et Regardons - le . Voici une fonction pratique , Utilisé pour dessiner des séries chronologiques et analyser visuellement les corrélations des séries .
Nous pouvons facilement modéliser le processus de bruit blanc et produire TS Inspection photographique .
np.random.seed(1)
# Tracer une courbe de bruit blanc discret
ads = radooral(size=1000)
plot(ads, lags=30)
Nous pouvons voir que le processus semble aléatoire et centré sur zéro.Autocorrélation (ACF) Et auto - corrélation partielle (PACF) La figure montre également qu'il n'y a pas de corrélation significative entre les séquences .N'oublie pas., Nous devrions voir dans le graphique d'autocorrélation 5% La signification de , Ceci est dû à la nature purement accidentelle de l'échantillonnage à partir d'une distribution normale. . Nous pouvons voir ci - dessous QQ Et cartes de probabilité ,Ils comparent notre distribution de données à une autre distribution théorique.Dans ce cas,, La distribution théorique est la distribution normale standard .Apparemment., Nos données sont distribuées au hasard , Et devrait suivre Gauss (Normal)Bruit blanc.
p("nmean: {:.3f}\{:.3f}\stde: {:.3f}"
.format(ademean(), nerva(), der.td()))
Le sens de la Marche aléatoire est qu'elle Non stationnaire , Parce que la covariance entre les observations est liée au temps . Si nous modélisons TS C'est une promenade aléatoire. , C'est imprévisible. .
Utilisons“random”Fonction échantillonnée à partir d'une distribution normale standard pour simuler une marche aléatoire.
# Marche aléatoire sans dérive
np.rao.sed(1)
n = 1000
x = w = np.aonral(size=n)
for t in rnge(_sples):
x[t] = x[t-1] + w[t]
splt(x, las=30)
Apparemment.,La nôtre. TS Pas stationnaire. .Voyons si le modèle randomisé de marche convient à nos données de simulation. Rappelez - vous, marcher au hasard est xt = xt-1 + wt. En utilisant l'algèbre, nous pouvons dire xt - xt-1 = wt.Donc,,La première différence de notre série randomisée de promenades devrait être égale au processus de bruit blanc, Nous pouvons TS Utilisation sur“ np.diff()” Fonctions, Pour voir si ça marche. .
# Première différence de marche aléatoire simulée
plt(p.dffx), las=30)
Notre définition est valable , Parce que ça ressemble exactement au processus du bruit blanc .Si nous avons raison SPY Que se passe - t - il lorsque la différence de premier ordre du prix se déplace au hasard? ?
# SPY Différence de premier ordre des prix
plt(diff(dt.PY), lag=30)
C'est très similaire au bruit blanc .Mais,Votre attention, s'il vous plaît. QQ Et la forme du graphique de probabilité . Ceci indique que le processus est proche de la distribution normale ,Mais avec“ Queue lourde ”. ACF Et PACF En retard 1、5?、16?、18 Et 21 Il semble également y avoir une corrélation significative entre les séquences .Cela signifie qu'il devrait y avoir de meilleurs modèles pour décrire le processus réel de variation des prix.
Modèle linéaireLe modèle linéaire est également appelé modèle de tendance , Représente un graphique linéaire TS. Son équation de base est .
Dans ce modèle,, La valeur de la variable dépendante est déterminée par β Coefficients et une seule variable indépendante -- Calendrier .Voici un exemple:,Les ventes d'une entreprise augmentent de la même quantité à chaque période. Regardons un exemple spécial . Dans cette simulation, , Nous supposons que ABC Les ventes de l'entreprise pour chaque période sont les suivantes: -50.00Yuan(β0 Ou un élément d'interception )Et+25.00Yuan(β1).
# Tendance linéaire simulée
# Exemple EntreprisesABC Par défaut -50Yuan, Chaque étape de temps est +25Yuan
w = n.anom.ann(100)
y = nppt_lke(w)
b0 = -50.
b1 = 25.
for t in rge(lnw)):
y[t] = b0 + b1*t + w[t]
plt(y, lags=ls)
Ici, nous pouvons voir que les résidus du modèle sont corrélés , Et réduit linéairement en fonction de l'hystérèse . Distribution presque normale . Avant d'utiliser ce modèle pour les prévisions ,Nous devons considérer et éliminer l'autocorrélation apparente qui existe dans la séquence.PACF En retard 1 La signification de Autoregressive Le modèle peut être approprié .
Modèle loglinéaireCes modèles sont similaires aux modèles linéaires , C'est juste que les points de données forment une fonction exponentielle , Représente un taux de variation constant par rapport à chaque étape du temps .Par exemple,ABC Les ventes de l'entreprise augmentent à chaque étape du temps X%. Lors du dessin des données de vente simulées , Vous obtenez une courbe qui ressemble à ceci .
# SimulationABC Croissance exponentielle
# Date
pdat_rge('2007-01-01', '2012-01-01', freq='M')
# Supposons que les ventes augmentent exponentiellement
ale = [exp( x/12 ) for x inage1, len(id)+1)]
# Créer un cadre de données et dessiner
df = d.ataame(sals, ix=x)
plt()
Nous pouvons ensuite convertir les données en utilisant le logarithme naturel des ventes. Les données sont maintenant ajustées par régression linéaire .
# ABC Ventes logarithmiques
indexid.plot()
Comme indiqué précédemment, Ces modèles ont un talon d'Achille . Ils supposent des erreurs continues et non corrélées , Comme nous l'avons vu dans l'exemple du modèle linéaire .Dans la vraie vie,TS Les données vont souvent à l'encontre de notre hypothèse stationnaire , Cela nous amène à un modèle autorégressif .
Modèle autorégressif - AR(p)Lorsque la variable dépendante régresse par rapport à une ou plusieurs de ses propres valeurs de décalage, Ce modèle est appelé modèle autorégressif .La formule est la suivante::
Lorsque vous décrivez Le modèle“Étapes”Heure, Par exemple, step “p”De AR Modèle, p Représente le nombre de variables d'hystérèse utilisées dans le modèle .Par exemple,AR(2) Modèle ouDeuxième ordre Le modèle autorégressif est le suivant: :
Ici.,alpha (a) Est le coefficient,omega (w) Est un bruit blanc .In AR Dans le modèle,Alpha Ça ne peut pas être égal à 0.Votre attention, s'il vous plaît.,alpha Set to 1 De AR(1) Le modèle estMarche aléatoire ,Donc pas stationnaire.
AR(1) Modèle,ALPHA = 1; Random Walk
Simulons un alpha Set to 0.6 De AR(1) Modèle
# Simuler unα=0.6DeAR(1)Processus
rndm.sed(1)
n_sams = int(1000)
a = 0.6
x = w = n.amma(siz=_apes)
for t in rane(n_saps):
x[t] = a*x[t-1] + w[t]
plot(x, gs=lgs)
Comme prévu, Nous avons simulé AR(1) La distribution du modèle est normale . Corrélation séquentielle significative entre les valeurs d'hystérèse , Surtout en retard 1 Division,Par exemple: PACF Comme le montre la figure.
Maintenant nous pouvons utiliser Python De statsmodels Ajustement AR(p) Modèle.Tout d'abord,,On va AR Le modèle s'adapte à nos données de simulation et à notre estimation des revenus. alpha Coefficient.Et nous utilisons statsmodels Fonctions“order()” Pour voir si le modèle d'ajustement sélectionne le bon décalage .Si AR Le modèle est correct,Estimation alpha Le coefficient sera proche de notre réalité alpha 0.6, L'ordre sélectionné est égal à 1.
# AjustementAR(p) Modèle à Simulation AR(1)Modèle,alpa=0.6
md = AR(x).itm=30, ic='aic', trnd='nc')
%time st_oer = mt.R(x).stor(
mxag=30, ic='aic', trnd='nc')
tuerer = 1
Il semble que nous puissions récupérer les paramètres de base des données de simulation .Utilisons alpha_1 = 0.666 Et alpha_2 = -0.333 Pour simuler AR(2) Processus.À cette fin,,Nous utilisons statsmodel De“generate_samples()”Fonctions. Cette fonction nous permet de simuler un ordre arbitraire AR Modèle.
# Simuler unAR(2)Processus
n = int(1000)
# Python Nous devons spécifier une valeur de décalage zéro ,C'est - à - dire:1
# Et attention,AR La lettre du modèle doit être négative
# PourAR(p)Modèle,Nous aussi.MADebetasSet to0
ar = nr_[1, -ahas]
ma = npr_[1, beas]
ar2 = smt.arme_pe(ar=ar, ma=a, nsale=n)
plot(ar2, lags=lags)
AR(2) Simulation ALPHA_1 = 0.666 Et ALPHA_2 = -0.333
Voyons si nous pouvons récupérer les bons paramètres .
# AjustementAR(p) Modèle pour simuler AR(2)Processus
max_lag = 10
est_rer = st.AR(r2)sennc')
tu_rder = 2
Voyons voir AR(p) Comment le modèle s'adaptera MSFT Gain logarithmique. C'est un gain. TS.
# SélectionnerMSFT Ordre de retard optimal du rendement
max_ag = 30
ml = smt.AR(ls.MSFT).fit(mam_lg, c='aic', tnc)
es_rr = tAR(rts.FT).secter(
maag=malag ic=aic', re=nc')
p(' Ordre d'hystérèse de la meilleure estimation = {}'.format(etoer))
Le meilleur ordre est 23 Décalages ou 23 !Il est peu probable qu'un modèle avec autant de paramètres soit utile dans la pratique.Apparemment.,La complexité du processus de retour est beaucoup plus complexe que ce modèle ne peut l'expliquer.
Modèle de moyenne mobile - MA(q)MA(q) Modèles et AR(p) Les modèles sont très similaires.La différence est que MA(q) Le modèle est une combinaison linéaire de termes d'erreur de bruit blanc passés ,Au lieu de AR(p) Une combinaison linéaire d'observations passées comme un modèle .MA Le but du modèle est d'observer directement le processus d'erreur en ajustant le modèle au terme d'erreur“Impact”.In AR(p) Dans le modèle,En utilisant ACF Ces chocs ont été observés indirectement à partir d'une série d'observations antérieures.MA(q) La formule du modèle est :
Omega (w) - Oui. E(wt) = 0 Et la variance est sigma Bruit blanc au carré .Utilisons beta=0.6 Et préciser AR(p) alpha égal à 0 Pour simuler ce processus.
# Simuler unMA(1)Processus
n = int(1000)
# ParamètresAR(p)Dealphaségal à0
alpas = npray([0.])
beas = np.ra([0.6])
# Ajouter zéro décalage
ar = np_[1, -alph]
ma = np_[1, beta]
a1 = st.m_gerse(ar=ar, ma=a, naple=n)
plot(ma1, lags=30)
ACF Décalage d'affichage de la fonction 1 C'est important,Ça veut dire MA(1) Les modèles peuvent s'appliquer à nos séquences de simulation .Quand ACF En retard seulement 1 Lorsque la visibilité est affichée à , Je ne sais pas comment expliquer le retard 2、3 Et 4 Afficher la visibilité PACF. Nous pouvons maintenant essayer MA(1) Le modèle s'adapte à nos données de simulation .On peut utiliser “ARMA()” Fonction pour spécifier l'ordre que nous choisissons .Nous l'appelons“fit()” Méthode de retour de la sortie du modèle .
# Oui.MA(1) Le modèle correspond aux séries chronologiques que nous avons simulées
# DésignationARMAModèle, L'ordre est (p,q).
maxlag = 30
st.RMa1, orer=(0,1)).fit
maag=maxg, ethod='e', tren='nc')
Le modèle peut estimer correctement le coefficient d'hystérèse ,Parce que 0.58 Près de nos valeurs réelles 0.6.Veuillez également noter,La nôtre. 95% L'intervalle de confiance contient des valeurs réelles . Essayons la simulation. MA(3) Processus, Et utiliser notre ARMA La fonction sera de troisième ordre MA Ajustement du modèle à la série , Voyons si nous pouvons récupérer le bon facteur d'hystérèse (β).Beta 1-3 égal à 0.6、0.4 Et 0.2.
# SimulationMA(3)Processus,betaPour0.6, 0.4, 0.2
n = nt(100)
ar = nr_[1, -ahas]
ma = np.r_[1, betas]
m3 = genrae_sle(ar=ar, ma=ma, sple=n)
plot(ma3, las=30)
BETAS = [0.6, 0.4, 0.2] Simulation de MA(3) Processus
# Oui.MA(3) Séries chronologiques des simulations d'ajustement des modèles
maxlg = 30
ARMA(ma3, order=(0, 3)).fit(
xla=mx_ag, mehd='le',tred=nc').summary
Le modèle peut estimer efficacement les coefficients réels .La nôtre. 95% L'intervalle de confiance contient également 0.6、0.4 Et 0.3 Valeur réelle du paramètre pour . Essayons maintenant MA(3) Ajustement du modèle à SPY Gain logarithmique de .N'oublie pas.,On ne sait pas.C'est vrai.Valeur du paramètre.
# Oui.MA(3)AvecSPY Ajustement des recettes
x_ag = 30
Y = lrsSY
ARMA(Y, ordr=(0, 3)).it(
mlg=m_lg, thd'le', rndn'.summry())
plot(md.rsd lgs=m_lg)
Regardons les résidus du modèle .
Pas mal..Quelques ACF Le décalage est un peu problématique ,Surtout quand 5、16 Et 18 Division. Il peut s'agir d'une erreur d'échantillonnage , Mais avec une queue lourde , Je ne pense pas que ce soit une prévision de l'avenir. SPY Le meilleur modèle de revenu .
Modèle de moyenne mobile Autoregressive - ARMA(p, q)ARMA Le modèle est juste AR(p) Et MA(q) Fusion entre modèles .Examinons ce que ces modèles signifient pour nous du point de vue de la finance quantitative:
“ Pour un groupe de produits dans une épicerie ,Le nombre d'activités de coupons valides lancées à différents moments constituera plusieurs‘Impact’, Ce qui a une incidence sur le prix du produit concerné .”
ARMA Le point faible de la plupart des séries chronologiques financières est qu'elle ignore Regroupement de la volatilité Effets.
La formule du modèle est :
Simulons un ARMA(2, 2) Processus, Et ensuite ajuster ARMA(2, 2) Modèle, Pour voir s'il peut estimer correctement ces paramètres .Paramètres alpha égal à [0.5,-0.25] Et beta égal à [0.5,-0.3].
# Simuler unARMA(2, 2)Modèle,alphas=[0.5,-0.25],betas=[0.5,-0.3]
max_lag = 30
n = int(5000) # Un grand nombre d'échantillons pour aider à estimer
burn = int(n/10) # Nombre d'échantillons à jeter avant ajustement
ar = np.r_[1, -alphas]
ma = np.r_[1, betas]
aa22 = aample(ar=ar, ma=ma,samle=n)
plt(rm2, lagsxla)
ARMA(arma22, order=(2, 2)).fit(
maxag=ma_lag, mtd='mle', ted='nc', brnn=brn).summry()
Nos paramètres réels sont inclus dans 95% Dans l'intervalle de confiance de .
Ensuite, nous allons simuler ARMA(3, 2) Modèle.Après, Nous recyclons p、q Combinaison de,Par ARMA Ajustement du modèle à notre séquence de simulation .Nous choisissons la meilleure combinaison en fonction du modèle qui produit la valeur la plus basse Akaike Information Criterion (AIC).
# Simuler unARMA(3, 2)Modèle,alphas=[0.5,-0.25,0.4],betas=[0.5,-0.3] .
maxg = 30
n = int(5000)
burn = 2000
alpas = nparay([0.5, -0.25, 0.4])
bets = np.ra([0.5, -0.3])
ar = np.r_[1, -alas]
ma = np.r_[1, betas]
arma32 = armasamp(ar=ar, ma=ma, nsple=n, rin=burn)
plot(ara32, lgs=mxlg)
# AdoptionAIC Sélectionner le meilleur ordre
# Le plus petitAIC Valeur optimale
for i in rn:
for j in rn:
try:
tmpl = ARMA(arma32, orde=(i, j)).fit(meod='mle', tend='nc')
aic = tp_ml.ac
if tmpaic < bstaic:
bst_ic = mp_aic
bestrder = (i, j)
bes_mdl = tmpdl
excpt: ctinue
L'ordre correct est restauré ci - dessus .Nous voyons ci - dessous les résultats de la simulation de séries chronologiques avant tout ajustement de modèle.
Simulation ARMA(3, 2) Série,Parmi eux Alpha = [0.5,-0.25,0.4] Et BETAS = [0.5,-0.3]
Nous avons vu que le bon ordre a été choisi et que le modèle a correctement estimé nos paramètres.Mais attention. MA.L1.y Coefficient;0.5 La valeur réelle de 95% En dehors de l'intervalle de confiance !
Examinons les résidus du modèle. . Apparemment, c'est un processus de bruit blanc. , Les meilleurs modèles ont donc été ajustés Explication Données.
ARMA(3, 2) Bruit blanc résiduel optimal du modèle
Et puis...,On va ARMA Ajustement du modèle à SPY Avantages. La figure suivante montre les séries chronologiques avant l'ajustement du modèle. .
SPYTaux de rendement
# Oui.ARMAModèles etSPY Ajustement du taux de rendement
rng = rng(5) # [0,1,2,3,4,5]
for i in rng:
for j in rng:
try:
tmp_mdl = ARMA('SPY', oder=(i, j))fit
tmp_ic = tp_dl.aic
if tp_ic < bes_aic:
bs_aic = mp_aic
es_der = (i j)
bst_mdl = t_mdl
exet: cntnue
Nous dessinons les résidus du modèle .
SPY Résidus optimaux du modèle ARMA(4, 4)
ACF Et PACF Aucune autocorrélation significative n'est affichée .QQ Et les graphiques de probabilité montrent des résidus presque normaux avec une queue lourde .Et pourtant, Les résidus de ce modèle ne ressemblent pas au bruit blanc , On peut voir une Hétéroscédasticité conditionnelle significative non saisie par le modèle. ( Volatilité conditionnelle ) Région surlignée de .
Modèle de moyenne mobile intégrée autorégressive - ARIMA(p, d, q)ARIMA- Oui.ARMA Extension naturelle des catégories de modèles .Comme indiqué précédemment,Beaucoup de nosTS Pas stationnaire. , Mais ils peuvent être stationnaires par différence . Nous avons vu un exemple , Quand nous prenons Guassian Première différence de marche aléatoire , Et prouve qu'il est égal au bruit blanc .En d'autres termes,, Nous avons pris une marche aléatoire non stationnaire , Et le convertit en bruit blanc stationnaire par la première différence .
Il n'est pas nécessaire d'étudier cette équation en profondeur ,Il suffit de le savoir. "d " Est le nombre de fois que nous faisons une différence dans une séquence .Au fait,InPythonMoyenne, Si nous devons faire plusieurs différences sur une séquence ,Nous devons utilisernp.diff()Fonctions.pandasFonctionsDataFrame.diff()/Series.diff() Ne traiter que les cadres de données / Première différence de séquence ,Non réaliséTSA Différence récursive requise dans .
Dans l'exemple suivant,Nous passons(p, d, q) La combinaison de quantités non significatives de l'ordre est itérée , Pour trouver l'ajustement SPY Meilleur rendement ARIMAModèle.Nous utilisonsAIC Pour évaluer chaque modèle .Le plus basAICGagner.
# Oui.ARIMA(p, d, q) Le modèle s'applique SPYAvantages
# SelonAIC Choisir le meilleur ordre et le modèle final
for i in prng:
for d in rng:
for j in prng:
try:
tp_dl = ARIMAfit(lrs, orer=(i,d,j))
if tpaic < betaic:
bestic = tmp_ic
bes_orer = (i, d, j)
bestl = tpmdl
# ARIMA Carte résiduelle du modèle
plot(resid, lags=30)
La différence entre les meilleurs modèles est 0 Ce n'est pas surprenant.Rappelle - toi.,Nous avons utilisé la première différence du prix logarithmique pour calculer le rendement des actions.En bas, J'ai tracé les résidus du modèle . Les résultats correspondent à ceux que nous avons ajustés ci - dessus ARMA(4, 4) Le modèle est essentiellement le même .Apparemment.,C'est ARIMA Le modèle n'explique pas non plus les fluctuations conditionnelles dans la séquence !
Maintenant, nous avons accumulé au moins assez de connaissances pour faire des prédictions simples des avantages futurs. Ici, nous utilisons notre modèle predict() Méthodes.Comme paramètre, Le nombre d'étapes de temps à prévoir nécessite un entier ,alpha Le paramètre nécessite une décimale pour spécifier l'intervalle de confiance .Par défaut à 95% Degré de confiance.Pour 99%,Paramètres alpha égal à 0.01.
# Créer un95%、99%CIDe21Oh, mon Dieu.SPY Prévisions de recettes
n_steps = 21
fc9 =atFae(ncolmack([c99])
inx=clus=['wr_ci99', upr_ci_99')
fc_ll.head(
# Dessiner21Oh, mon Dieu.SPY Tableau des prévisions de recettes
ilc[-500:].cpy()
# Dans la prévision de l'échantillon
prdct(side[0], t.id[-1])
plt(ax=x, stye=styes)
21 Oh, mon Dieu.SPY Prévisions de recettes - ARIMA(4,0,4)
Modèle d'Hétéroscédasticité conditionnelle autorégressive - ARCH(p)ARCH(p) Le modèle peut être simplement considéré comme appliqué à la variance des séries chronologiques AR(p) Modèle. Une autre façon de penser est , Nos séries chronologiques À l'heure t La variance de .
Supposons que la moyenne de la série soit nulle , Nous pouvons exprimer le modèle comme suit: :
# SimulationARCH(1)Séquence
# Var(yt) = a_0 + a_1*y{t-1}**2
# Sia_1In0Et1Entre,Alorsyt C'est du bruit blanc.
Y = np.epy_lik
for t in rng(ln()):
Y[t] = w[t * sqrt((a0 + a1*y[t-1**2)
# AnalogiqueARCH(1)Séquence, On dirait du bruit blanc.
plot(Y, lags=30)
Votre attention, s'il vous plaît. ACF Et PACF On dirait qu'il est à la traîne. 1 Afficher la visibilité à , Montrant la variance AR(1) Le modèle peut être approprié .
Modèle généralisé d'Hétéroscédasticité conditionnelle Autoregressive - GARCH(p,q)En termes simples,GARCH(p, q) Est une application à la variance des séries chronologiques ARMA Modèle, C'est - à - dire qu'il a un terme autoregressif et un terme moyen mobile .AR(p) Variance des résidus (Erreur carrée) Ou simplement modéliser nos carrés de séries chronologiques .MA(q) Modélisation partielle de la variance du processus .Basic GARCH(1, 1) La formule est::
Omega (w) C'est du bruit blanc. ,alpha Et beta Est un paramètre du modèle .En outre alpha_1 + beta_1 Doit être inférieur à 1, Sinon, le modèle est instable . Nous pouvons simuler un GARCH(1, 1) Processus.
# Simuler unGARCH(1, 1)Processus
n = 10000
w = rnom.ral(sze=n)
eps = np.er_ike(w)
gsq =pzslie(w)
for i in rne1, n):
sis[i] = a+ a1*(eps[i-1]**2) + b1*siq[i-1]
es[i] = w[i] * srt(sisq[i])
Encore une fois, , Dans l'ensemble, ce processus est très similaire au bruit blanc , Mais quand on regarde le carré, epsTemps de séquence, Regardez, s'il vous plaît. .
Il y a évidemment une autocorrélation ,ACFEtPACF L'importance de l'hystérèse indique que notre modèle a besoin AREtMA. Voyons si on peut l'utiliser. GARCH(1, 1) Modèle pour restaurer nos paramètres de processus .Ici, nous utilisonsARCHDans le sacarch_modelFonctions.
# Oui.GARCH(1, 1) Modèles et simulations EPS Correspondance des séquences
# Nous utilisonsarchFonctions
am = arch(ps)
fit(dae_freq=5)
summary())
Maintenant, faisons un usage SPY Exemples de gains .La procédure est la suivante:
Veuillez également noter,J'ai choisi une période précise pour mieux mettre en évidence les points clés.Et pourtant, Selon la période d'étude , Les résultats seront différents .
for i in pq_g:
for d in d_ng:
for j in p_ng:
try:
tpml = ARIMA(T,order(i,d,j).fi
if tmp_aic < best_aic:
best_ic =mpac
best_oder = (i, d, j)
best_ml =tm_ml
# Notez que j'ai choisi une période spécifique pour effectuer cette analyse
bstmoel(TS)
On dirait du bruit blanc. .
Autocorrélation de l'affichage des résidus carrés . Faisons un ajustement GARCH Modèle.
# Maintenant nous pouvons utiliser le meilleur arima Paramètres du modèle pour l'ajustement archModèle
p_ = bst_dr
o= st_orde
q = bst_er
# Utilisation des élèves T La distribution fournit généralement un meilleur ajustement
arcd(TS, p=p_, o=o_, q=q_, 'StdensT')
fit(uat_eq=5, sp='ff')
summary
Lors du traitement de très petits nombres , Avertissement de convergence .Si nécessaire, Multiplier le nombre par 10 Facteur de multiplication pour augmenter l'amplitude , Ça peut aider. , Mais pour cette démonstration, , Ce n'est pas nécessaire. . Voici les résidus du modèle .
On dirait du bruit blanc. . Maintenant regardons le carré résiduel ACF Et PACF.
Nous avons réalisé un bon ajustement du modèle , Parce que les résidus carrés n'ont pas d'autocorrélation significative .