Le serie storiche sono sequenze di dati raccolti e ordinati nel tempo, di solito a intervalli regolari. Servono per osservare come un fenomeno evolve, individuare tendenze, cicli o cambiamenti e spesso permettono di fare previsioni basate sul comportamento passato.
Il bello delle serie storiche e’ che ci raccontano una storia.
Analisi
Le serie storiche possono essere analizzate in diversi modi, a seconda di ciò che vuoi capire dal fenomeno che stai osservando. Una serie conserva le seguenti caratteristiche:
- Trend: la direzione di lungo periodo (crescita, calo, stabilità).
- Stagionalità: pattern che si ripetono a intervalli regolari (es. vendite natalizie).
- Cicli: oscillazioni più lunghe e irregolari legate al contesto economico o sociale.
- Rumore: la parte casuale e imprevedibile.
Analizzeremo la nostra serie con una semplice classe python:
import numpy as np
class SerieStatistic:
def __init__(self, series):
if not isinstance(series, (list, tuple, np.ndarray)):
raise TypeError("Input must be a list, tuple, or numpy array of numbers.")
self.series = np.array(series, dtype=float)
self.n = len(self.series)
# Media
def mean(self):
return np.mean(self.series) if self.n else None
# Mediana
def median(self):
return np.median(self.series) if self.n else None
# Moda
def mode(self):
if self.n == 0:
return None
values, counts = np.unique(self.series, return_counts=True)
max_count = np.max(counts)
modes = values[counts == max_count]
return modes.tolist() if len(modes) > 1 else modes[0]
# Deviazione standard
def standard_deviation(self):
return np.std(self.series) if self.n else None
# Varianza
def variance(self):
return np.var(self.series) if self.n else None
def min(self):
return np.min(self.series) if self.n else None
def max(self):
return np.max(self.series) if self.n else None
# Range valori
def value_range(self):
return self.max() - self.min() if self.n else None
# Restituisce la frequenza per un determinato valore
def frequency(self, decimals=4):
if self.n == 0:
return {}
if np.issubdtype(self.series.dtype, np.floating):
rounded = np.round(self.series, decimals)
else:
rounded = self.series
unique, counts = np.unique(rounded, return_counts=True)
return dict(zip(unique.tolist(), counts.tolist()))
def summary(self):
return {
"mean": round(self.mean(), 6),
"median": round(self.median(), 6),
"mode": self.mode(),
"standard_deviation": round(self.standard_deviation(), 6),
"variance": round(self.variance(), 6),
"minimum": round(self.min(), 6),
"maximum": round(self.max(), 6),
"range": round(self.value_range(), 6),
"count": self.n
}
Ora che abbiamo la classe per studiare statisticamente una serie possiamo anche usarla richiamandola con codice Python:
from statistica import SerieStatistica
serie = [ 2, 5, 5, 2, 4, 1.2, 5, 6, 3, 4, 5 ]
statistica = SerieStatistics(serie)
print(statistica.summary())
Otterremo il risultato:
{'mean': 3.836364, 'median': 4.0, 'mode': 5.0, 'standard_deviation': 1.493789, 'variance': 2.231405, 'minimum': 1.2, 'maximum': 6.0, 'range': 4.8, 'count': 11}
Grafici
Forse non lo sai, ma le serie storiche sono dati spesso utilizzati nella realta’. Se una certa serie storica ha determinate caratterische, per un determinato tipo di evento (per esempio temperature, vendite, prezzi) allora si pensa che nel futuro queste caratteristiche si rivedranno (per esempio con dei cicli).
Se vogliamo rappresentare la serie storica attraverso dati statistici uscira’ sempre la classica campana di Gauss che usa la formula
Bastano solamente la media e la deviazione standard .

Ovviamente vi sono tantissime altre caratteristiche da studiare di una serie come cicli, la tendenza e la stagionalita‘.









Lascia un commento