Creare feature nel tempo

Machine Learning per dati di serie temporali in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Estrazione di feature con finestre

Machine Learning per dati di serie temporali in Python

Uso di .aggregate per estrarre feature

# Visualizza i dati grezzi
print(prices.head(3))
symbol            AIG        ABT
date                            
2010-01-04  29.889999  54.459951
2010-01-05  29.330000  54.019953
2010-01-06  29.139999  54.319953
# Calcola una finestra mobile ed estrai due feature
feats = prices.rolling(20).aggregate([np.std, np.max]).dropna()
print(feats.head(3))
                 AIG                  ABT           
                 std       amax       std       amax
date                                                
2010-02-01  2.051966  29.889999  0.868830  56.239949
2010-02-02  2.101032  29.629999  0.869197  56.239949
2010-02-03  2.157249  29.629999  0.852509  56.239949
Machine Learning per dati di serie temporali in Python

Controlla le proprietà delle tue feature!

Machine Learning per dati di serie temporali in Python

Usare partial() in Python

# Se calcoliamo solo la media, restituisce un singolo valore
a = np.array([[0, 1, 2], [0, 1, 2], [0, 1, 2]])
print(np.mean(a))
1.0
# Possiamo usare partial per inizializzare np.mean 
# con il parametro axis
from functools import partial
mean_over_first_axis = partial(np.mean, axis=0)

print(mean_over_first_axis(a))
[0. 1. 2.]
Machine Learning per dati di serie temporali in Python

I percentili riassumono i dati

  • I percentili sono utili per riassunti più fini dei dati (rispetto a np.mean).
  • Per un insieme di dati, l'ennesimo percentile è il valore sotto cui cade N% dei dati e sopra cui cade il restante 100−N%.
print(np.percentile(np.linspace(0, 200), q=20))
40.0
Machine Learning per dati di serie temporali in Python

Combinare np.percentile() con partial per calcolare più percentili

data = np.linspace(0, 100)

# Crea un elenco di funzioni con una list comprehension
percentile_funcs = [partial(np.percentile, q=ii) for ii in [20, 40, 60]]

# Calcola l'output di ciascuna funzione allo stesso modo
percentiles = [i_func(data) for i_func in percentile_funcs]
print(percentiles)
[20.0, 40.00000000000001, 60.0]
# Calcola più percentili su una finestra mobile
data.rolling(20).aggregate(percentiles)
Machine Learning per dati di serie temporali in Python

Calcolo di feature basate sulla data

  • Finora ci siamo concentrati su feature «statistiche»: proprietà dei dati come «media», «deviazione standard», ecc.
  • Ma non dimenticare che le serie temporali hanno anche feature più «umane», come giorno della settimana, festività, ecc.
  • Queste feature sono spesso utili quando i dati coprono più anni (per esempio l'andamento di un titolo nel tempo).
Machine Learning per dati di serie temporali in Python

Feature datetime con Pandas

# Assicura che l'indice sia datetime
prices.index = pd.to_datetime(prices.index)

# Estrai feature datetime
day_of_week_num = prices.index.weekday
print(day_of_week_num[:10])
Index([0 1 2 3 4 0 1 2 3 4], dtype='object')
day_of_week = prices.index.day_name()
print(day_of_week[:10])
Index(['Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Monday' 'Tuesday'
 'Wednesday' 'Thursday' 'Friday'], dtype='object')
Machine Learning per dati di serie temporali in Python

Esercitiamoci!

Machine Learning per dati di serie temporali in Python

Preparing Video For Download...