Feature engineering op basis van volume
We gaan niet-lineaire modellen gebruiken om nauwkeurigere voorspellingen te maken. Bij lineaire modellen moeten features lineair gecorreleerd zijn met de target. Andere Machine Learning-modellen kunnen features op niet-lineaire manieren combineren. Stel bijvoorbeeld dat de prijs stijgt wanneer het voortschrijdend gemiddelde van de prijs stijgt, en het voortschrijdend gemiddelde van het volume daalt. De enige manier om die interacties te vangen is door de features met elkaar te vermenigvuldigen, of een Machine Learning-algoritme te gebruiken dat met niet-lineariteit overweg kan (bijv. random forests).
Om meer informatie toe te voegen die met andere features kan interageren, kunnen we zwak gecorreleerde features toevoegen. We beginnen met volumedata, die we in lng_df hebben als de kolom Adj_Volume.
Voordat je begint: voor TA-Lib-functies (zoals SMA()) moet je Numpy-arrays aanleveren, niet pandas-objecten. Je kunt het .values-attribuut van een pandas Series of DataFrame gebruiken om dit als een Numpy-array te krijgen.
Deze oefening maakt deel uit van de cursus
Machine Learning voor finance in Python
Oefeninstructies
- Maak een percentuele volumeverandering over 1 dag (gebruik
pct_change()uit pandas) en zet die in de kolomAdj_Volume_1d_changeinlng_df. - Maak een 5-daags voortschrijdend gemiddelde van de 1-daagse procentuele volumeverandering en zet die in de kolom
Adj_Volume_1d_change_SMAinlng_df. - Plot histogrammen van deze twee nieuwe features die we hebben gemaakt met behulp van de lijst
new_features.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# Create 2 new volume features, 1-day % change and 5-day SMA of the % change
new_features = ['Adj_Volume_1d_change', 'Adj_Volume_1d_change_SMA']
feature_names.extend(new_features)
lng_df[____] = lng_df['Adj_Volume'].____
lng_df[____] = talib.SMA(____[____].____,
timeperiod=____)
# Plot histogram of volume % change data
lng_df[____].plot(kind='hist', sharex=False, bins=50)
plt.show()