Previsione di serie storiche -...
Transcript of Previsione di serie storiche -...
09/11/2019
1
Previsione di serie storiche− elementi introduttivi –
Vittorio Maniezzo
Univ. Bologna
2
Everything Should Be
Made as Simple as
Possible, But Not
SimplerPrediction is very
difficult, especially
about the future
09/11/2019
2
Analitica previsionalePrevisioni
• Obiettivo primario è predire il futuro utilizzando i dati (serie
storiche o altro) disponibili adesso
Analitica
• Le previsioni sono alla base di decisioni che si prendono adesso
Esempi (in area gestionale)
• Previsione della domanda di beni e servizi
• Previsione della disponibilità o il fabbisogno di forza lavoro
• Previsione delle necessità di materiale e della disponibilità a
magazzino
• Previsione di ricavi, profitti e debiti per definire gli investimenti
Previsioni nella pianificazione
A breve termine (giorni, settimane)• Richieste di risorse
• Calendario turni
• Vendite dettaglio
A medio termine (settimane, mesi)• Vendite per tipologia di prodotto
• Necessità forza lavoro
• Richieste di risorse
A lungo termine (mesi, anni)• Trend di crescita
• Esigenze di stoccaggio
• Pattern di vendita, andamento di mercato
09/11/2019
3
Previsioni, caratteristiche
Normalmente sono sbagliate.
Una buona previsione non fornisce solo un numero:
• Specifica valori medi e dispersione
• Specifica l’intervallo di affidabilità
Normalmente le previsioni di dati aggregati sono più affidabili di
quelle specifiche.
Normalmente l’accuratezza cala progredendo nel futuro.
Le previsioni dovrebbero comunque essere integrate con dati
aggiuntivi, qualora disponibili.
Modelli previsionaliMolti modelli che permettono di fare previsioni
Previsioni
Oggettive
Modelli causali
Serie temporali
Giudizio esperti
Stazionarie
Trend
…
Delphi
Soggettive
Ricerche di
mercato
…
Econometrici
09/11/2019
4
Metodi soggettivi
Molto vari, includono:
• Sales Force Composite: aggregazione delle stime degli
agenti commerciali
• Sondaggi dei clienti
• Opinioni dei dirigenti
• Il metodo Delfi: posta la domanda, si raccolgono varie
opinioni individuali, e le si condivide in forma anonima al
gruppo. Poi, si ri-pone la domanda e si ripete tutto il
procedimento finché non si raggiunge un consenso nel gruppo.
Metodi oggettivi
I metodi oggettivi sono basati su modelli matematici. Si
richiedono le seguenti attività ad alto livello:
• Identificazione del modello (model specification) è il processo
di selezione della tecnica previsionale da utilizzare.
• Identificazione parametrica (model fitting) dato il modello
stima i parametri in modo da rendere i risultati compatibili
con i dati sperimentali.
• Validazione del modello (model diagnosis) determina quanto il
modello sia coerente con i dati sperimentali e quindi quanto
le assunzioni fatte siano soddisfatte.
09/11/2019
5
Previsioni, definizioni
• Orizzonte previsionale si riferisce al numero di
periodi futuri coperti dalla previsione.
• Periodo previsionale è l'unità di tempo per cui si
fanno le previsioni.
• Intervallo previsionale è la frequenza con cui si
effettuano nuove previsioni.
Vittorio Maniezzo - University of Bologna 9
Serie storiche
Una serie storica (o serie temporale) è semplicemente
un insieme di valori ordinati rispetto al tempo, esprime
la dinamica di un certo fenomeno nel tempo.
Modellisticamente, si suppone che esistano n
osservazioni provenienti da altrettante variabili casuali
dipendenti.
Obiettivo dello studio delle serie storiche è
l'individuazione di schemi nei dati passati, che si
ipotizzano ripetersi anche nel futuro.
09/11/2019
6
Serie storiche, esempiRilevanti in ogni settore economico. Esempi
Vittorio Maniezzo - University of Bologna 11
Organizzazione Serie
Commerciante Vendite giornaliere, settimanali, mensili, …
Azienda manufatt. Costo del lavoro mensile (ore o euro)
Azienda manufatt. Vendite trimestrali (unità o euro)
Amministrazione loc. Tasse (mensili)
Amministrazione loc. Permessi edilizi settimanali
Parrocchia Partecipazione alle messe, settimanali
Università Num. studenti iscritti (assoluto, percentuale)
Banca Mutui concessi settimanale (numero, euro)
Azienda agricola Produzione per ettaro, annuale
Azienda ospedaliera Giorni-uomo di degenza, mensile
Famiglia Costi telefonici, bimestrale
Serie storicheUn diagramma temporale (time-series plot) è un grafico
bidimensionale della serie storica.
L'asse verticale rappresenta la variabile e quello
orizzontale i periodi temporali.
Es.
http://www.tylervigen.com/spurious-correlations
09/11/2019
7
Serie storiche e previsione
La previsione di una serie storica cerca di predire I valori
che assumerà in futuro.
Due tipi di previsione:
• Previsione univariata: usa solo i valori precedenti
della stessa serie per predire i valori futuri.
• Previsione multivariata: usa dei predittori esterni alla
serie (variabili esogene) per la previsione.
Vittorio Maniezzo - University of Bologna 13
Previsione e regressioneSpesso si dice “previsione” se univariata e “regressione” se
multivariata (!).
Previsione usa dati passati (es. vendite passate) per predire i valori
futuri di dati omogenei (es. vendite future),
Regressione usa dati esogeni (es. gli attributi di una transazione)
per predire le vendite.
Nella regressione gli attributi esogeni della transizioni future
devono essere noti.
• Se si hanno dati indipendenti di eventi futuri, allora può
convenire la regressione.
• Se la situazione future è completamente sconosciuta, es. la
temperatura in un certo giorno, allora la previsione è l’unica
possibilità.
Vittorio Maniezzo - University of Bologna 14
09/11/2019
8
Previsione e regressione
Altra differenza fondamentale è il tempo.
La regressione può usare i dati storici per fare le previsioni, non è
richiesto. In regressione non è neanche necessario ordinare i dati
in ingresso dal passato al futuro.
La previsione richiede il tempo e la storia come componenti
indispensabili.
1. La regressione prevede un valore numerico in uno scenario
futuro ipotetico.
2. La previsione usa una sequenza temporizzata di dati per dire
come continuerà nei periodi successivi.
Vittorio Maniezzo - University of Bologna 15
LA serie storica
International airline passengers: monthly totals in
thousands. Jan 49 – Dec 60 (G.E.P. Box, G.M. Jenkins,
1976).
Vittorio Maniezzo - University of Bologna 16
09/11/2019
9
Un'altra serie storica
Vendite settore gioielli, USA (milioni di $).
Vittorio Maniezzo - University of Bologna 17
Dow Jones e arte
Vittorio Maniezzo - University of Bologna 18
Crisi del 2008
09/11/2019
10
Il nostro esempio (fil rouge)Daily tv sales
t anno trim. sales1 2004 1 1282 2 1813 3 874 4 2195 2005 1 4076 2 2267 3 2148 4 3839 2006 1 50510 2 38711 3 27812 4 52313 2007 1 57214 2 35415 3 40416 4 67317 2008 1 75218 2 46819 3 41920 4 725
Vittorio Maniezzo - University of Bologna 19
Componenti di serie storicheLa scomposizione di serie storiche identifica nella serie vari
componenti, ciascuno dei quali rappresenta una categoria di
contributi.
Una scomposizione comune prevede i componenti:
• Trend
• Stagionale
• Ciclico
• Casuale
• (occasionale)
Un modello comune è STL (seasonal decomposition of time series
by Loess, dove Loess sta per Local Regression), che scompone la
serie nei componenti stagionale, trend e irregolare. Il componente
ciclico è incluso nel trend.
Vittorio Maniezzo - University of Bologna 20
09/11/2019
11
Componenti serie storiche• Componente tendenziale (trend) è una crescita o diminuzione a
lungo termine della serie, in cui il tasso di variazione è
relativamente costante. Tipicamente rappresentata con un
modello lineare, quadratico o esponenziale.
• Componente stagionale contiene pattern ripetitivi , ad es.
associati a variazioni climatiche o calendariali, individuabili su
periodi annuali, mensili, settimanali, ecc.
• Componente ciclica fluttuazioni congiunturali non spiegate da
effetti di stagionalità, tipicamente dovute a variazioni delle
condizioni economiche (recessioni, espansioni).
• Componente casuale (accidentale), piccole oscillazioni dovute
ad eventi casuali.
• Componente occasionale, raro, dovuto a eventi bellici,
importanti innovazioni tecnologiche, crisi politiche etc. Vittorio Maniezzo - University of Bologna 21
09/11/2019
12
Vendite camper, USA
Vittorio Maniezzo - University of Bologna 23
Stagionalità
Qtr 4 minore di qtr 3
Qtr 3 maggiore di qtr 2
Qtr 2 maggiore di qtr 1
Qtr 1 maggiore di qtr 4
Trend a lungo termine
Ciclicità economica
Recessioni anni 80 e 90
Decomposizione, pythonimport os
import pandas as pd
from matplotlib import pyplot as plot
from statsmodels.tsa.seasonal import seasonal_decompose
os.chdir('c:\\AAAToBackup\\didattica\\Data analytics\\forecast')
plot.rcParams['figure.figsize'] = (10.0, 6.0)
series = pd.read_csv('BoxJenkins.csv',usecols=['Passengers'], header=0)
result = seasonal_decompose(series, model='multiplicative',freq=12)
result.plot()
plot.show()
Vittorio Maniezzo - University of Bologna 24
09/11/2019
13
Modelli di serie storiche Si fa l'ipotesi che i valori osservati �� nella serie storica siano il
risultato della combinazione di componenti di natura diversa.
• Andamento tendenziale di lungo periodo ��• Andamento stagionale �� (con periodo L)
• Andamento dovuto ai cicli economici ��• Residuo casuale, imprevedibile ��.
Relativamente al modo in cui le componenti si combinano si
distinguono modelli additivi e moltiplicativi (e misti).
Modelli additivi: �� � �� � �� � �� � ��Modelli moltiplicativi: �� � �� �� �� ��Modelli misti: �� � �� �� �� � ��
Vittorio Maniezzo - University of Bologna 25
Serie stazionarie
Condizioni di stazionarietà. Una serie storica si dice stazionaria se:
1. La sua media è costante nel tempo (stazionarietà in media);
2. La sua varianza è costante nel tempo (stazionarietà in
varianza);
3. Il rapporto tra valori distanti k periodi è influenzato solo da k,
non dal punto della serie in cui viene calcolata (stazionarietà in
covarianza).
In sostanza, una serie è stazionaria se la sua distribuzione è
invariante rispetto a traslazioni nel tempo.
Vittorio Maniezzo - University of Bologna 26
09/11/2019
14
Processo stazionario
Non ha nessun trend (stazionaria in media e varianza).
Non ha neanche stagionalità o cicli.
Vittorio Maniezzo - University of Bologna 27
0
10
20
30
40
50
60
70
80
Daily total female births in California, 1959
Stazionario con stagionalita
Questo è stazionario in media ma ha una stagionalità.
Vittorio Maniezzo - University of Bologna 28
0
2000
4000
6000
8000
10000
12000
19
73
-01
19
73
-03
19
73
-05
19
73
-07
19
73
-09
19
73
-11
19
74
-01
19
74
-03
19
74
-05
19
74
-07
19
74
-09
19
74
-11
19
75
-01
19
75
-03
19
75
-05
19
75
-07
19
75
-09
19
75
-11
19
76
-01
19
76
-03
19
76
-05
19
76
-07
19
76
-09
19
76
-11
19
77
-01
19
77
-03
19
77
-05
19
77
-07
19
77
-09
19
77
-11
19
78
-01
19
78
-03
19
78
-05
19
78
-07
19
78
-09
19
78
-11
Morti accidentali negli U.S.A.
09/11/2019
15
DiscontinuitàPIL Italia dal 1861
Vittorio Maniezzo - University of Bologna 29
Serve una variazione di modello.
Componente occasionale.
Train−Test SplitE’ necessario scomporre il dataset in training e testing set.
Il modello va definito sul set di training ma le previsioni vanno
fatte e valutate sul set di test.
La scomposizione viene fatta selezionando un punto di taglio
arbitrario nella lista delle osservazioni e creando due nuovi
dataset. A seconda della quantità di dati disponibili, si possono
fare scomposizioni 50-50, 70-30 e 90-10.
Vittorio Maniezzo - University of Bologna 30
import pandas as pd, osfrom matplotlib import pyplotos.chdir('/AAAToBackup/didattica/SistemiSupportoDecisioni/forecast/serie storiche')series = pd.read_csv('BoxJenkins.csv', header=0,usecols=['Passengers'])X = series.valuestrain_size = int(len(X) * 0.66)train, test = X[0:train_size], X[train_size:len(X)]print('Observations: %d' % (len(X)))print('Training Observations: %d' % (len(train)))print('Testing Observations: %d' % (len(test)))pyplot.plot(train); pyplot.plot([None for i in train] + [x for x in test])pyplot.show()
09/11/2019
16
Momenti fondamentali
Data una serie storica � � ���, … , ���, la descrizione
statistica si basa su tre momenti principali:
• media: �� � ����;
• varianza: ��� � � � � �� �
• autocovarianza: ��,� � ���� � ����� � ����(correla i valori al tempo t con i valori al tempo s = t-
i, i=1, …, k. Rappresentata da autocorrelogrammi, v.
dopo)
Vittorio Maniezzo - University of Bologna 31
PreprocessingLa serie storica più facile da prevedere.
Si cercherà di ricondursi a questo caso con pre-
elaborazioni sui dati.
Vittorio Maniezzo - University of Bologna 32
09/11/2019
17
DifferenziazioneUna serie viene resa stazionaria in media mediante
differenziazione (del primo ordine) sottraendo al valore
corrente il valore assunto dalla serie al tempo
precedente:
��� � �� � ����Se la serie �� ha un trend lineare, la serie risultante ��� è
stazionaria in media.
Differenziazione del secondo ordine:
���� � ��� � ����� � �� � 2���� � ����Differenziazione stagionale: si sottrae al dato quello
corrispondente nella stagione precedente
��� � �� � ����Vittorio Maniezzo - University of Bologna 33
Fil rouge, differenziazione
Vittorio Maniezzo - University of Bologna 34
t yt
differenz
1 128
2 181 53
3 87 -94
4 219 132
5 407 188
6 226 -181
7 214 -12
8 383 169
9 505 122
10 387 -118
11 278 -109
12 523 245
13 572 49
14 354 -218
15 404 50
16 673 269
17 752 79
18 468 -284
19 419 -49
20 725 306
Annullato il
trend lineare!
09/11/2019
18
Log transformUna trasformazione logaritmica può rendere stazionaria la serie
sia in varianza che, combinata al diff, in media.
Vittorio Maniezzo - University of Bologna 35
La funzione y = ln(x) nel punto (1,0) è
tangente alla retta y = x-1.
Quindi ln(1+r) ≈ r quando r è piccolo
rispetto a 1 (es. 1 ± 0.2).
Se x cresce percentualmente di poco, es.
5%, cambia da x a x(1+r), con r = 0.05. si
ha che:
ln(x(1+r)) = ln(x) + ln(1+r) ≈ ln(x) + r
Se x cresce del 5% il log di x cresce da
ln(x) a ln(x) + 0.05.
Aumentare x del 5% corrisponde (circa)
ad aggiungere 0.05 a ln(x).
Una variazione percentuale nella serie al periodo t è definita
come (yt-yt-1)/yt-1, che è circa uguale a ln(yt) - ln(yt-1)
Log transform, esempio
Vittorio Maniezzo - University of Bologna 36
09/11/2019
19
Trend line, pythonCalcolo di trend quadratico (dati in colonna, da trasporre, come
da esempio precedente)
plt.plot(train);
plt.plot([None for i in train] + [x for x in test])
y = X.transpose()[0]
x = np.arange(len(y))
z = np.polyfit(x, y, 2) # qui quandratico (1 lineare)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
plt.show()
Oppure:import seaborn as sns
sns.regplot(x=np.arange(len(series['Passengers'])),y='Passengers',data=series, fit_reg=True)
Vittorio Maniezzo - University of Bologna 37
Fil rouge, log transform
Vittorio Maniezzo - University of Bologna 38
Annullato il trend
sulla varianza!
t yt
log log-diff
1 128 4.85
2 181 5.20 0.35
3 87 4.47 -0.73
4 219 5.39 0.92
5 407 6.01 0.62
6 226 5.42 -0.59
7 214 5.37 -0.05
8 383 5.95 0.58
9 505 6.22 0.28
10 387 5.96 -0.27
11 278 5.63 -0.33
12 523 6.26 0.63
13 572 6.35 0.09
14 354 5.87 -0.48
15 404 6.00 0.13
16 673 6.51 0.51
17 752 6.62 0.11
18 468 6.15 -0.47
19 419 6.04 -0.11
20 725 6.59 0.55
Annullato il trend su
media e varianza!
09/11/2019
20
Log transform• Linearizzazione di crescite esponenziali (e inflazione): ln(xy) =
ln(x) + ln(y), quindi il log trasforma relazioni moltiplicative in
additive e trend esponenziali in lineari. Si possono utilizzare
modelli lineari per processi moltiplicativi.
• Trend misurati in unità logaritmiche ≈ crescite percentuali: la
pendenza di un trend calcolato su dati log è uguale alla crescita
percentuale media della serie originale.
• Errori misurati su dati log ≈ errori percentuali: gli errori nelle
previsioni su dati log sono interpretabili come errori
percentuali sulle serie originali.
Vittorio Maniezzo - University of Bologna 39
CMA, centered MA
Vittorio Maniezzo - University of Bologna 40
anno trimestre hits
2001 1 267
2 108
3 109
4 216
2002 1 414
2 279
3 207
4 417
Medie mobili su 4 trimestri. Vanno inserite al centro del
periodo calcolato
MA(4) va
inserita
qui, riga
2.5. Non
si può,
metto in
riga 3.
175.00
211.75
254.50
279.00
329.25
In riga 3
metto la
media
fra riga
2.5 e riga
3.5 e va
tutto a
posto
193.38
233.13
266.75
304.13
09/11/2019
21
Fil rouge, con CMA(4)
Vittorio Maniezzo - University of Bologna 41
Chiamata anche
Baseline
anno trim. sales MA(4) CMA(4)
2004 1 128
2 181
3 87 153.75 188.625
4 219 223.5 229.125
2005 1 407 234.75 250.625
2 226 266.5 287
3 214 307.5 319.75
4 383 332 352.125
2006 1 505 372.25 380.25
2 387 388.25 405.75
3 278 423.25 431.625
4 523 440 435.875
2007 1 572 431.75 447.5
2 354 463.25 482
3 404 500.75 523.25
4 673 545.75 560
2008 1 752 574.25 576.125
2 468 578 584.5
3 419 591
4 725
CorrelogrammiUn correlogramma, o autocorrelogramma, è un grafico che
rappresenta la autocorrelazione di una serie storica in funzione
del ritardo con cui la autocorrelazione è calcolata.
Per costruire un correlogramma, si esaminano le correlazioni tra
la serie storica e più serie ritardate di k periodi;
Ad esempio, data Y = (y1, ... , yn) si costruisce la tabella sotto e si
esaminano le K correlazioni tra la colonna yt e ciascuna delle K
colonne yt-k
Vittorio Maniezzo - University of Bologna 42
09/11/2019
22
CorrelogrammiSi parte sempre dalla (K+1)-esima riga, in modo da confrontare
sempre serie di uguale lunghezza
Si calcola un valore di �� facendo variare k da 1 a K e rilevando la
correlazione �� tra la colonna � , di media �� , e la colonna della
variabile ritardata ���:
�� � ∑ � � �� ��� � �� �!�"�∑ � � �� � �!�"�
Le coppie di valori (k, ��) sono presentate in un grafico
cartesiano, con i ritardi sulle ascisse e le corrispondenti
correlazioni sulle ordinate:
Vittorio Maniezzo - University of Bologna 43
Correlogramma
I correlogrammi possono presentare gli andamenti più
disparati, ma si hanno le seguenti tre situazioni tipiche:
Vittorio Maniezzo - University of Bologna 44
09/11/2019
23
Fil rouge, correlogramma
Vittorio Maniezzo - University of Bologna 45
yt yt-1 yt-2 yt-3 yt-4 yt-5 yt-6 yt-7 yt-8
1 128
2 181 128
3 87 181 128
4 219 87 181 128
5 407 219 87 181 128
6 226 407 219 87 181 128
7 214 226 407 219 87 181 128
8 383 214 226 407 219 87 181 128
9 505 383 214 226 407 219 87 181 128
10 387 505 383 214 226 407 219 87 181
11 278 387 505 383 214 226 407 219 87
12 523 278 387 505 383 214 226 407 219
13 572 523 278 387 505 383 214 226 407
14 354 572 523 278 387 505 383 214 226
15 404 354 572 523 278 387 505 383 214
16 673 404 354 572 523 278 387 505 383
17 752 673 404 354 572 523 278 387 505
18 468 752 673 404 354 572 523 278 387
19 419 468 752 673 404 354 572 523 278
20 725 419 468 752 673 404 354 572 523
r 0.13 -0.38 0.37 0.91 0.14 -0.27 0.56 0.84
Stagionalità su 4
import os
import numpy as np, pandas as pd, matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# Import data
os.chdir('c:\\AAAToBackup\\didattica\\Data analytics\\forecast\python')
df = pd.read_csv('..\\rawAirlinesPassengers.csv', usecols=[0], names=['value'], engine='python', header=0)
# Original Series
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.value); axes[0, 0].set_title('Original Series')
plot_acf(df.value, ax=axes[0, 1])
# 1st Differencing
axes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.value.diff().dropna(), ax=axes[1, 1])
plt.show()
Python, ACF
Vittorio Maniezzo - University of Bologna 46
09/11/2019
24
Fil rouge, destagionalizzazioneAssumiamo un modello moltiplicativo senza componenti cicliche:
�� � �� �� ��Baseline: �� � �� ����⁄
Vittorio Maniezzo - University of Bologna 47
Il 3 trim. del 2004 era
al 46% della baseline
(54% sotto)
Il 1 trim. del 2007 era
al 118% della baseline
(18% sopra)
yt yt/CMA
t anno trim. sales MA(4) baseline st rt
1 2004 1 128
2 2 181
3 3 87 153.75 188.63 0.46
4 4 219 223.50 229.13 0.96
5 2005 1 407 234.75 250.63 1.62
6 2 226 266.50 287.00 0.79
7 3 214 307.50 319.75 0.67
8 4 383 332.00 352.13 1.09
9 2006 1 505 372.25 380.25 1.33
10 2 387 388.25 405.75 0.95
11 3 278 423.25 431.63 0.64
12 4 523 440.00 435.88 1.20
13 2007 1 572 431.75 447.50 1.28
14 2 354 463.25 482.00 0.73
15 3 404 500.75 523.25 0.77
16 4 673 545.75 560.00 1.20
17 2008 1 752 574.25 576.13 1.31
18 2 468 578.00 584.50 0.80
19 3 419 591.00
20 4 725
Fil rouge, destagionalizzazioneQui stagionalità di 4 periodi. Per individuare st da strt si mediano i
dati corrispondenti e si riportano le medie in tutte le righe.
Vittorio Maniezzo - University of Bologna 48
st
1.38
0.82
0.64
1.11
1.38
0.82
0.64
1.11
1.38
0.82
0.64
1.11
1.38
0.82
0.64
1.11
1.38
0.82
0.64
1.11
media copia
yt yt/CMA
t anno trim. sales st rt
1 2004 1 128
2 2 181
3 3 87 0.46
4 4 219 0.96
5 2005 1 407 1.62
6 2 226 0.79
7 3 214 0.67
8 4 383 1.09
9 2006 1 505 1.33
10 2 387 0.95
11 3 278 0.64
12 4 523 1.20
13 2007 1 572 1.28
14 2 354 0.73
15 3 404 0.77
16 4 673 1.20
17 2008 1 752 1.31
18 2 468 0.80
19 3 419
20 4 725
t st
1 1.38
2 0.82
3 0.64
4 1.11
09/11/2019
25
Fil rouge, destagionalizzazionePer eliminare l’effetto di st, basta dividere per st.
Restano componenti di trend e casuale.
Vittorio Maniezzo - University of Bologna 49
t yt
st
destag.
1 128 1.38 92.49
2 181 0.82 220.98
3 87 0.64 136.65
4 219 1.11 197.07
5 407 1.38 294.10
6 226 0.82 275.92
7 214 0.64 336.12
8 383 1.11 344.64
9 505 1.38 364.92
10 387 0.82 472.47
11 278 0.64 436.65
12 523 1.11 470.62
13 572 1.38 413.33
14 354 0.82 432.19
15 404 0.64 634.55
16 673 1.11 605.60
17 752 1.38 543.40
18 468 0.82 571.36
19 419 0.64 658.11
20 725 1.11 652.39
Coefficienti
Errore
standard Stat t
Intercetta 115.2272 23.33137 4.938724
Variabile X 1 27.85254 1.947665 14.30048
Fil rouge, derandomizzazioneCol metodo minimi quadrati (LMS) si individua la retta di
regressione dei dati della serie, per trend lineare.
Es., con Analisi dati -> regressione.
Vittorio Maniezzo - University of Bologna 50
Il trend c’è!
t yt
destag. Tt
1 128 92.49 143.08
2 181 220.98 170.93
3 87 136.65 198.78
4 219 197.07 226.64
5 407 294.10 254.49
6 226 275.92 282.34
7 214 336.12 310.19
8 383 344.64 338.05
9 505 364.92 365.90
10 387 472.47 393.75
11 278 436.65 421.61
12 523 470.62 449.46
13 572 413.33 477.31
14 354 432.19 505.16
15 404 634.55 533.02
16 673 605.60 560.87
17 752 543.40 588.72
18 468 571.36 616.57
19 419 658.11 644.43
20 725 652.39 672.28
09/11/2019
26
Minimi quadratiSi cerca la retta interpolante y = ax + b che ne minimizza lo scarto
quadratico medio con le osservazioni (xi, yi).
Si vuole minimizzare
$ %& , �& � %& , '%& � ( �)
)Coefficienti:
( � * ⋅ ∑ %&�&)) � ∑ %& ⋅ ∑ �&))))* ⋅ ∑ %&�)) � ∑ %&)) �
Quindi, avendo i valori medi %̅ e �-:
' � �- � ( ⋅ %̅
Vittorio Maniezzo - University of Bologna 51
Fil rouge, derandomizzazioneSi elimina il rumore, calcolando �� � �� �� (qui .� ��)
Vittorio Maniezzo - University of Bologna 52
t yt
st Tt st Tt
1 128 1.38 143.08 198.00
2 181 0.82 170.93 140.01
3 87 0.64 198.78 126.56
4 219 1.11 226.64 251.86
5 407 1.38 254.49 352.18
6 226 0.82 282.34 231.26
7 214 0.64 310.19 197.49
8 383 1.11 338.05 375.67
9 505 1.38 365.90 506.36
10 387 0.82 393.75 322.52
11 278 0.64 421.61 268.42
12 523 1.11 449.46 499.48
13 572 1.38 477.31 660.54
14 354 0.82 505.16 413.78
15 404 0.64 533.02 339.35
16 673 1.11 560.87 623.29
17 752 1.38 588.72 814.72
18 468 0.82 616.57 505.03
19 419 0.64 644.43 410.29
20 725 1.11 672.28 747.10
09/11/2019
27
Fil rouge, previsione (empirica)
Avendo i coefficienti delle componenti di trend e stagionale, si
può proiettare il modello su periodi futuri.
Vittorio Maniezzo - University of Bologna 53
t yt st Tt st Tt Forecast
1 128 1.38 143.08 198.00
2 181 0.82 170.93 140.01
3 87 0.64 198.78 126.56
4 219 1.11 226.64 251.86
5 407 1.38 254.49 352.18
6 226 0.82 282.34 231.26
7 214 0.64 310.19 197.49
8 383 1.11 338.05 375.67
9 505 1.38 365.90 506.36
10 387 0.82 393.75 322.52
11 278 0.64 421.61 268.42
12 523 1.11 449.46 499.48
13 572 1.38 477.31 660.54
14 354 0.82 505.16 413.78
15 404 0.64 533.02 339.35
16 673 1.11 560.87 623.29
17 752 1.38 588.72 814.72
18 468 0.82 616.57 505.03
19 419 0.64 644.43 410.29
20 725 1.11 672.28 747.10 747.10
968.89
596.29
481.22
870.91
La varianza cresce troppo.
Un preprocessing con log
transform era utile.
Misure accuratezza previsione/ � �%�, … , %��, dati osservati, 0 � �1�, … , 1�� dati previsti
• BIAS:
media aritmetica degli errori 2345 � ∑ 78�98:8;<�
• MAD (Mean Absolute Deviation):
media degli errori assoluti =4> � ∑ 78�98:8;<�
• MSE (Mean Squared Error)
media degli errori quadratici =5� � ∑ 78�98 ?:8;<�
• Standard Error: =5�)
• MAPE (Mean Absolute Percent Error)
media degli errori assoluti in percentuale: =4@� � ∑ A8BC8
C8∗�EE:8;<
�
09/11/2019
28
Python, metriche accuratezzaimport os, numpy as np, pandas as pd, matplotlib.pyplot as plt
from statsmodels.tsa.stattools import acf
# Import data
os.chdir('c:\\AAAToBackup\\didattica\\Data analytics\\forecast\python')
df = pd.read_csv('..\\rawAirlinesPassengers.csv', usecols=[0], names=['value'], engine='python', header=0)
# Accuracy metrics
def forecast_accuracy(forecast, actual):
mape = np.mean(np.abs(forecast - actual)/np.abs(actual)) # MAPE
me = np.mean(forecast - actual) # ME
mae = np.mean(np.abs(forecast - actual)) # MAE
mpe = np.mean((forecast - actual)/actual) # MPE
rmse = np.mean((forecast - actual)**2)**.5 # RMSE
corr = np.corrcoef(forecast, actual)[0,1] # corr
mins = np.amin(np.hstack([forecast[:,None], actual[:,None]]), axis=1)
maxs = np.amax(np.hstack([forecast[:,None], actual[:,None]]), axis=1)
minmax = 1 - np.mean(mins/maxs) # minmax
acf1 = acf(forecast-actual)[1] # ACF1
return({'mape':mape, 'me':me, 'mae': mae,
'mpe': mpe, 'rmse':rmse, 'acf1':acf1,
'corr':corr, 'minmax':minmax})
print( forecast_accuracy(forecast_values, test.values) )
Vittorio Maniezzo - University of Bologna 55