Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Maak een percentuele volumeverandering over 1 dag (gebruik pct_change() uit pandas) en zet die in de kolom Adj_Volume_1d_change in lng_df.
  • Maak een 5-daags voortschrijdend gemiddelde van de 1-daagse procentuele volumeverandering en zet die in de kolom Adj_Volume_1d_change_SMA in lng_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()
Code bewerken en uitvoeren