Features over tijd maken

Machine Learning voor tijdreeksgegevens in Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Features extraheren met vensters

Machine Learning voor tijdreeksgegevens in Python

Features extraheren met .aggregate

# Visualize the raw data
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
# Calculate a rolling window, then extract two features
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 voor tijdreeksgegevens in Python

Controleer de eigenschappen van je features!

Machine Learning voor tijdreeksgegevens in Python

partial() gebruiken in Python

# If we just take the mean, it returns a single value
a = np.array([[0, 1, 2], [0, 1, 2], [0, 1, 2]])
print(np.mean(a))
1.0
# We can use the partial function to initialize np.mean 
# with an axis parameter
from functools import partial
mean_over_first_axis = partial(np.mean, axis=0)

print(mean_over_first_axis(a))
[0. 1. 2.]
Machine Learning voor tijdreeksgegevens in Python

Percentielen vatten je data samen

  • Percentielen geven een fijnmaziger samenvatting van je data (in plaats van np.mean)
  • Voor een gegevensset is het Nde percentiel de waarde waarbij N% van de data lager is en 100-N% hoger.
print(np.percentile(np.linspace(0, 200), q=20))
40.0
Machine Learning voor tijdreeksgegevens in Python

np.percentile() combineren met partial-functies om een reeks percentielen te berekenen

data = np.linspace(0, 100)

# Maak met een list-comprehension een lijst met functies
percentile_funcs = [partial(np.percentile, q=ii) for ii in [20, 40, 60]]

# Bereken de output van elke functie op dezelfde manier
percentiles = [i_func(data) for i_func in percentile_funcs]
print(percentiles)
[20.0, 40.00000000000001, 60.0]
# Bereken meerdere percentielen over een rolling window
data.rolling(20).aggregate(percentiles)
Machine Learning voor tijdreeksgegevens in Python

"Datumgebaseerde" features berekenen

  • Tot nu toe focusten we op "statistische" features: die horen bij statistische eigenschappen van data, zoals "gemiddelde", "standaarddeviatie", enz.
  • Vergeet niet dat tijdreeksen ook meer "menselijke" features hebben, zoals weekdagen, feestdagen, enz.
  • Deze features zijn vaak nuttig bij tijdreeksen over meerdere jaren (zoals aandelenkoersen door de tijd)
Machine Learning voor tijdreeksgegevens in Python

datetime-features met Pandas

# Zorg dat onze index datetime is
prices.index = pd.to_datetime(prices.index)

# Haal datetime-features uit de index
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 voor tijdreeksgegevens in Python

Laten we oefenen!

Machine Learning voor tijdreeksgegevens in Python

Preparing Video For Download...