Feature Engineering aus dem Volumen
Wir werden nichtlineare Modelle einsetzen, um genauere Vorhersagen zu treffen. Bei linearen Modellen müssen Features linear mit dem Ziel korreliert sein. Andere Machine-Learning-Modelle können Features auf nichtlineare Weise kombinieren. Beispiel: Was ist, wenn der Preis steigt, wenn der gleitende Durchschnitt des Preises steigt, während der gleitende Durchschnitt des Volumens fällt? Solche Wechselwirkungen lassen sich nur erfassen, indem man die Features multipliziert oder einen Algorithmus verwendet, der Nichtlinearität abbilden kann (z. B. Random Forests).
Um mehr Informationen einzubeziehen, die mit anderen Features interagieren könnten, können wir schwach korrelierte Features hinzufügen. Zuerst fügen wir Volumendaten hinzu, die wir in lng_df in der Spalte Adj_Volume haben.
Bevor du beginnst, denk daran: Für TA-Lib-Funktionen (wie SMA()) musst du Numpy-Arrays und nicht pandas-Objekte übergeben. Du kannst das Attribut .values einer pandas Series oder eines DataFrame verwenden, um es als Numpy-Array zurückzugeben.
Diese Übung ist Teil des Kurses
<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>Übungsanweisungen
- Erstelle eine 1-Tages-Prozentänderung des Volumens (verwende
pct_change()aus pandas) und weise sie der SpalteAdj_Volume_1d_changeinlng_dfzu. - Erstelle einen 5-Tages-Gleitenden Durchschnitt der 1-Tages-Prozentänderung des Volumens und weise ihn der Spalte
Adj_Volume_1d_change_SMAinlng_dfzu. - Zeichne Histogramme dieser beiden neuen Features, die wir mit der Liste
new_featureserstellt haben.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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()