Topic: Modello ARIMA per la previsione delle serie temporali  (Letto 191 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Maurantz

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Modello ARIMA per la previsione delle serie temporali
« il: Gennaio 02, 2021, 17:08 »
Buondi, ho un problema sulla parte finale del seguente codice:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.arima.model import ARIMA

am = pd.read_csv ('TSLA.csv')
print (am)

#Valutazione andamento del prezzo negli anni
plt.figure (figsize=(8,6))
plt.plot(am["Date"], am["Close"])
plt.xticks (np.arange (0,2500,300), am['Date'][0:2500:300])
plt.title(" Prezzo dell'azione nel periodo di riferimento")
plt.xlabel ("Tempo")
plt.xlabel ("Prezzo")
plt.show()

#Definire una serie stazionaria
def get_stationarity (serie):

# rolling statistics
rolling_mean = serie.rolling(window=30).mean()
rolling_std = serie.rolling(window=30).std()

# rolling statistics plot
original = plt.plot(serie, color='blue', label = 'Original')
mean = plt.plot(rolling_mean, color ='red', label='Rolling Mean')
std = plt.plot(rolling_std, color='black', label= 'Rolling Std')
plt.legend(loc='best')
plt.title ('Rolling Mean & Standard Deviation')
plt.show (block=False)

# Dickey-Fuller test:
result = adfuller(serie, autolag = 'AIC' )
print ('ADF Statistic: {}'.format(result[0]))
print('p-value:{}'.format(result[1]))
print('Lag utilizzati:{}'.format(result[2]))
print('Numero osservazioni:{}'.format(result[3]))
print('Clitical Values:')
for key, value in result [4].items():
    print('\t{}:{}'.format(key,value))
test1= am["Close"]
get_stationarity(test1)

shift = am["Close"] - am["Close"].shift()
shift.dropna(inplace=True)
get_stationarity(shift)

#Grafico ACF
plt.rc("figure", figsize=(8,6))
plot_acf(shift)

#Grafico PACF
plot_pacf(shift)

#Modello Arima
model = ARIMA(am["Close"], order=(1,1,1))
results = model.fit(disp=-1)
print(results.summary())

Valutare le previsioni passate
predictions_ARIMA_diff = pd.Series(results.fittedvalues, copy=True)
predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
predictions_ARIMA = pd.Series(am["Close"].iloc[0], index=am.index)
predictions_ARIMA = predictions_ARIMA.add(predictions_ARIMA_diff_cumsum,
fill_value=0)

plt.plot(am["Close"])
plt.plot(predictions_ARIMA)

results.plot_predict(1220,1300, dynamic=False, alpha = 0.05)


L'errore si presenta su questa ultima stringa ed è spiegato  di seguito
----------------------------------------------------------------------------------------------------------

results.plot_predict(1220,2510, dynamic=False, alpha = 0.05)

AttributeError Traceback (most recent call last)
in
----> 1 results.plot_predict(1220,2510, dynamic=False, alpha = 0.05)

c:\users\lota di\appdata\local\programs\python\python39\lib\site-packages\statsmodels\base\wrapper.py in getattribute(self, attr)
32 pass
33
---> 34 obj = getattr(results, attr)
35 data = results.model.data
36 how = self._wrap_attrs.get(attr)

AttributeError: 'ARIMAResults' object has no attribute 'plot_predict'


Qualcuno può dirmi dove sbaglio?
Il file csv utilizzato lo trovavate qua: https://query1.finance.yahoo.com/v7/finance/download/TSLA?period1=1577981687&period2=1609604087&interval=1d&events=history&includeAdjustedClose=true
« Ultima modifica: Gennaio 02, 2021, 17:15 da Maurantz »

Offline caronte

  • python erectus
  • ***
  • Post: 244
  • Punti reputazione: 0
    • Mostra profilo
Re:Modello ARIMA per la previsione delle serie temporali
« Risposta #1 il: Gennaio 03, 2021, 16:06 »
aggiorna la libreria  "statsmodels"

Offline Maurantz

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:Modello ARIMA per la previsione delle serie temporali
« Risposta #2 il: Gennaio 03, 2021, 23:55 »
aggiorna la libreria  "statsmodels"

La versione è già aggiornata a 0.12.1, altre idee in mente?

Offline caronte

  • python erectus
  • ***
  • Post: 244
  • Punti reputazione: 0
    • Mostra profilo
Re:Modello ARIMA per la previsione delle serie temporali
« Risposta #3 il: Gennaio 04, 2021, 15:37 »
l'idea che mi viene in mente e' che non usando questa libreria mi sono andato a guardare la relativa doc nonche' all'occorrzenza il sorgente della classe imputata;
cosa che chi usa un linguaggio dovrebbe fare e dovrebbe saper fare, altrimenti ti impantani inutilmente ad ogni piccolo imprevisto;
il traceback ti indirizza sul fatto che quell'istanza della classe ARIMAResults non ha quell'attributo; invece effettivamente dovrebbe averlo implementato, dalla doc...
queste cose accadono quando ci sono discrepanze tra codice e releases delle librerie; probabilmente hai seguito un tutorial non recente e hai invece chiamato ARIMA con l'ultima release;
quindi ti vai a dare questo sguardo alla doc cercando la classe di interesse e ci trovi due versioni di import della stessa;
l'attuale e la precedente (deprecata) ;
allora provi ad importare la precedente , magari...ed e' quella che ti restituisce un oggetto capace di invocare plot_predict ma te lo dice chiaramente che e' deprecata;
cmq anche se con i dovuti warnings ti funge:

from statsmodels.tsa.arima_model import ARIMA (tu importavi con  statsmodels.tsa.arima.model...) --> vedi la doc
model = ARIMA(am["Close"], order=(1,1,1)).fit(....)

model.plot_predict.....