Siamo sicuri che questo titolo sia mean-reverting?
Nel capitolo precedente hai visto che l’autocorrelazione dei rendimenti settimanali di MSFT era -0,16. Sembra un valore elevato, ma è statisticamente significativo? In altre parole, puoi dire che c’è meno del 5% di probabilità di osservare un’autocorrelazione negativa così grande se la vera autocorrelazione fosse in realtà zero? E ci sono autocorrelazioni ad altri ritardi che sono significativamente diverse da zero?
Anche se le vere autocorrelazioni fossero zero a tutti i ritardi, in un campione finito di rendimenti le stime delle autocorrelazioni non saranno esattamente zero. Infatti, la deviazione standard dell’autocorrelazione campionaria è \(\small 1/\sqrt{N}\) dove \(\small N\) è il numero di osservazioni; quindi, se ad esempio \(\small N=100\), la deviazione standard dell’ACF è 0,1 e, poiché il 95% di una curva normale è compreso tra +1,96 e -1,96 deviazioni standard dalla media, l’intervallo di confidenza al 95% è \(\small \pm 1.96/\sqrt{N}\). Questa approssimazione vale solo quando le vere autocorrelazioni sono tutte pari a zero.
Calcolerai l’intervallo di confidenza effettivo e quello approssimato per l’ACF e lo confronterai con l’autocorrelazione al primo ritardo di -0,16 del capitolo precedente. I rendimenti settimanali di Microsoft sono già caricati in un DataFrame chiamato returns.
Questo esercizio fa parte del corso
Analisi delle serie temporali in Python
Istruzioni dell'esercizio
- Ricalcola l’autocorrelazione dei rendimenti settimanali nella Series
'Adj Close'del DataFramereturns. - Trova il numero di osservazioni nel DataFrame
returnsusando la funzionelen(). - Approssima l’intervallo di confidenza al 95% dell’autocorrelazione stimata. La funzione matematica
sqrt()è stata importata e può essere usata. - Traccia la funzione di autocorrelazione di
returnsusandoplot_acfimportata da statsmodels. Impostaalpha=0.05per gli intervalli di confidenza (è il valore predefinito) elags=20.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Import the plot_acf module from statsmodels and sqrt from math
from statsmodels.graphics.tsaplots import plot_acf
from math import sqrt
# Compute and print the autocorrelation of MSFT weekly returns
autocorrelation = returns['Adj Close'].___
print("The autocorrelation of weekly MSFT returns is %4.2f" %(autocorrelation))
# Find the number of observations by taking the length of the returns DataFrame
nobs = ___
# Compute the approximate confidence interval
conf = 1.96/___
print("The approximate confidence interval is +/- %4.2f" %(conf))
# Plot the autocorrelation function with 95% confidence intervals and 20 lags using plot_acf
plot_acf(___, alpha=0.05, ___)
plt.show()