Extension tedat: Python Prediction and Analysis of Stock Market return time series Using Arima and GARCH Models

Lico9e 2021-10-29 16:17:41
extension tedat python prediction analysis

Préface

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
  • 1.
  • 2.
  • 3.

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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Connaissances de base

Qu'est - ce qu'une série chronologique?

Une série chronologique est une série de points de données indexés dans l'ordre chronologique.——​ ​Wikipedia​

Stationnarité

Pourquoi sommes - nous préoccupés par la stabilité? 

  • Séries chronologiques stationnaires (TS) Facile à prévoir,Parce que nous pouvons supposer que les attributs statistiques futurs sont identiques ou proportionnels aux attributs statistiques actuels.
  • On est là. TSA La plupart des modèles utilisés dans Covariance stationnaire .Cela signifie Statistiques descriptives prévues par ces modèles ( Par exemple, moyenne 、 Variance et corrélation )Seulement si TS C'est fiable quand c'est stable. ,Sinon, il est invalide..

“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)

Autocorrélation

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 . 

Pourquoi nous préoccupons - nous de la corrélation des séquences? ​​Sexe? 

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éatoire

Le 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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA

Bruit blanc gaussien

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()))

  • 1.
  • 2.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_02

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_03

Marche aléatoire sans dérive

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)
  • 1.
  • 2.
  • 3.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_04

Différence de premier ordre pour la Marche aléatoire

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)
  • 1.
  • 2.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_05

Ajustement d'un modèle de marche aléatoire à ETFPrix

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éaire

Le modèle linéaire est également appelé modèle de tendance , Représente un graphique linéaire TS. Son équation de base est .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_06

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_07

Simulation du modèle de tendance linéaire

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éaire

Ces 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()

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_08

Fonction exponentielle analogique

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()
  • 1.
  • 2.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_09

Logarithme naturel de la fonction exponentielle

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::

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_10

AR (P) Modèle

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: :

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_11

AR (2) Modèle

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. 

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_12

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_13

AR(1) Modèle,ALPHA = 0.6

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_14

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_15

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_16

Voyons voir AR(p) Comment le modèle s'adaptera MSFT Gain logarithmique. C'est un gain. TS.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_17

MSFT Séries chronologiques des rendements logarithmiques

# 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))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_18

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 :

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_19

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_20

BETA=0.6 Simulation de MA(1) Processus

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')
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_21

MA(1) Résumé du modèle

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_22

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_23

MA(3) Résumé du modèle

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_24

SPY MA (3) Résumé du modèle

Regardons les résidus du modèle .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_25

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: 

  • AR(p) Le modèle tente de saisir (Explication)Les effets de régression de l'impulsion et de la moyenne, souvent observés sur les marchés des changes.
  • MA(q) Le modèle tente de saisir (Explication) Effets d'impact observés dans les termes de bruit blanc .Ces effets de choc peuvent être considérés comme des événements imprévus affectant le processus d'observation, Par exemple, les gains exceptionnels 、Attaques terroristes, etc..

“ 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é .”

- ​ ​AM207: Pavlos Protopapas, Harvard University​

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 :

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_26

ARMA(P, Q) Équation

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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_27

Simulation ARMA(2, 2) Processus

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_28

ARMA(2, 2) Résumé du modèle

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


  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_29

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.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_30

Simulation ARMA(3, 2) Série,Parmi eux Alpha = [0.5,-0.25,0.4] Et BETAS = [0.5,-0.3]

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_31

ARMA(3, 2) Résumé du meilleur modèle

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.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_32

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. .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_33

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


  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_34

Nous dessinons les résidus du modèle .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_35

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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

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 ! 

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_36

AjustementSPYRevenu ARIMA Modèle

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(
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_37

# 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)

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_38

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 .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_39

ARCH(1) Formule du modèle

Supposons que la moyenne de la série soit nulle , Nous pouvons exprimer le modèle comme suit: :

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_40

Moyenne nulle ARCH(1) Modèle

# 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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_41

SimulationARCH(1)Processus

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_42

SimulationARCH(1)**2 Processus

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::

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_43

 GARCH(1, 1) Formule

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])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_44

Simulation GARCH(1, 1) Processus

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. .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_45

Simulation GARCH(1, 1) Carré du processus

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())
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _Langues de développement_46

GARCH Résumé de l'ajustement du modèle

Maintenant, faisons un usage SPY Exemples de gains .La procédure est la suivante:

  • Itération ARIMA(p, d, q) Une combinaison de modèles pour adapter nos séries chronologiques .
  • Selon AIC Le plus bas ARIMA Sélection du modèle GARCH Ordre du modèle .
  • Oui. GARCH(p, q) Modèles adaptés à nos séries chronologiques .
  • Vérifier l'autocorrélation entre les résidus du modèle et le carré des résidus

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)


  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_47

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_48

AjustementSPYRevenu ARIMA(3,0,2) Résidus du modèle

On dirait du bruit blanc. . 

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_49

AjustementSPYRevenu ARIMA(3,0,2) Résidus carrés du modèle

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_50

GARCH(3, 2) Ajustement du modèleSPYAvantages

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 .

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _python_51

AjustementSPYRevenu GARCH(3, 2) Modèle résiduel

On dirait du bruit blanc. . Maintenant regardons le carré résiduel ACF Et PACF.

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_52

Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _garch_53

Nous avons réalisé un bon ajustement du modèle , Parce que les résidus carrés n'ont pas d'autocorrélation significative .



Extensiontecdat:Python AvecARIMA、GARCH Prévision du modèle analyse des séries chronologiques de rendement du marché boursier _ARIMA_54

版权声明
本文为[Lico9e]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211029160949021d.html

  1. Inverse un entier de 3 bits (implémentation Python)
  2. Compared with Excel, it is easy to learn Python report automation practice!
  3. 7 excellent open source libraries for learning Python Programming
  4. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  5. Use of Python pandas!!!!! Explain in detail
  6. 2n行输入,Python,判断字母个数
  7. Notes de Python (XV): dérivation de liste
  8. Notes sur Python (XVI): générateur et Itérateur
  9. Notes de Python (18): décorateur
  10. 2n entrée de ligne, Python, nombre de lettres de jugement
  11. Notes Python (17): fermetures
  12. Notes sur Python (20): fonctions d'ordre supérieur intégrées
  13. 想问问这个Python编程咋做呀?
  14. 想問問這個Python編程咋做呀?
  15. Vous voulez savoir ce que fait cette programmation python?
  16. 11.5K Star,一个开源的 Python 静态类型检查库
  17. Sweetviz:让你只需三行代码实现Python探索性数据分析
  18. Sweetviz:讓你只需三行代碼實現Python探索性數據分析
  19. Sweetviz: vous permet d'effectuer une analyse exploratoire des données python avec seulement trois lignes de code
  20. 11.5k Star, une bibliothèque de vérification de type statique Python Open Source
  21. 刚学Python,想让大大给我解释一下代码
  22. 剛學Python,想讓大大給我解釋一下代碼
  23. Je viens d'apprendre Python et je veux que tu m'expliques le Code.
  24. Python QT GUI Design: qmainwindow, QWidget and qdialog window classes (Fundamentals - 10)
  25. Python爬虫项目实战:快手网页版滑块captchaSession分析
  26. python计算时间十二小时制
  27. Temps de calcul Python 12 heures
  28. Python crawler Project actual Fighting: faster Web Version Slider CAPTCHA session Analysis
  29. Python要学习多久可以掌握?多久可以精通?
  30. Combien de temps Python va - t - il apprendre à maîtriser? Combien de temps faut - il pour maîtriser?
  31. 从官网上下载的python安装包安装不了
  32. 深度学习项目:如何使用Python和OpenCV进行人脸识别
  33. python编辑语言如内容所示
  34. La langue d'édition Python est affichée dans le contenu
  35. 有谁知道这怎么回事嘛(Python的简单代码)
  36. 有誰知道這怎麼回事嘛(Python的簡單代碼)
  37. Qui sait ce qui se passe?
  38. Python求某个数的因数【因数是指能被这个数整除的数。例如6的因数有:1、2、3、6; 7的因数有:1、7; 8的因数有:1、2、4、8】。
  39. Python calcule les facteurs d'un nombre [les facteurs sont des nombres qui peuvent être divisés par ce nombre. Par exemple, les facteurs de 6 sont: 1, 2, 3, 6; les facteurs de 7 sont: 1, 7; et les facteurs de 8 sont: 1, 2, 4, 8].
  40. 请问这个实验如何做(用python3.x的环境)
  41. 如何创建一个python程序来模拟电影院的座位预订
  42. [algorithm learning] 1486. Array XOR operation (Java / C / C + + / Python / go / trust)
  43. Comment créer un programme Python pour simuler la réservation de sièges dans un cinéma
  44. Comment faire cette expérience (en utilisant l'environnement Python 3.x)
  45. Python之绘制多角星
  46. Pandas的SettingWithCopyWarning报警怎么解决
  47. Comment résoudre l'alarme de réglage avec copywarning de pandas
  48. 使用 Python 进行数据可视化之Matplotlib
  49. Python 常见问题 - 使用 poetry build 打包构建失败,报 ModuleOrPackageNotFound No file/folder found for package
  50. 万圣节奇妙夜,不给糖就捣蛋—Python带你点击解锁恐怖新道具(南瓜头、骷髅、蝙蝠、糖......)
  51. 【算法学习】1221. 分割平衡字符串(java / c / c++ / python / go / rust)
  52. 教你用Python 编写 Hadoop MapReduce 程序
  53. Je t'ai appris à écrire Hadoop mapreduce en Python.
  54. Pandas下载最新版和python不匹配
  55. python tkinter GUI编程如何实现一个时钟,无论主线程怎么卡住,都不影响时钟正常进行走时间。
  56. python tkinter GUI編程如何實現一個時鐘,無論主線程怎麼卡住,都不影響時鐘正常進行走時間。
  57. La programmation de l'interface graphique Python tkinter pour implémenter une horloge n'affecte pas le temps de fonctionnement normal de l'horloge, peu importe comment le fil principal est coincé.
  58. Pandas télécharger la dernière version ne correspond pas à Python
  59. Make a cool music player with Python [V3.0 including source code and packaged exe]
  60. 编写一个函数,可以传入两个实参或三个实参。如果传入两个实参,返回求和。如果传入三个实参,返回的话。前两个实参的和对第三个实参求余的结果Python