Feature engineering à partir du volume
Nous allons utiliser des modèles non linéaires pour obtenir des prédictions plus précises. Avec les modèles linéaires, les features doivent être linéairement corrélées à la cible. D'autres modèles de machine learning peuvent combiner les features de manière non linéaire. Par exemple, et si le prix augmente lorsque la moyenne mobile du prix augmente, mais que la moyenne mobile du volume diminue ? La seule façon de capturer ces interactions est soit de multiplier les features, soit d'utiliser un algorithme de machine learning capable de gérer la non-linéarité (par exemple des random forests).
Pour intégrer davantage d'informations susceptibles d'interagir avec d'autres features, nous pouvons ajouter des features faiblement corrélées. Nous allons d'abord ajouter les données de volume, disponibles dans lng_df sous forme de colonne Adj_Volume.
Avant de commencer, rappelez-vous que pour les fonctions de TA-Lib (comme SMA()), vous devez fournir des tableaux Numpy, et non des objets pandas. Vous pouvez utiliser l'attribut .values d'une Series ou d'un DataFrame pandas pour les convertir en tableau Numpy.
Cet exercice fait partie du cours
<cours>Machine Learning pour la finance en Python</cours>Instructions de l’exercice
- Créez la variation en pourcentage du volume sur 1 jour (utilisez
pct_change()de pandas) et affectez-la à la colonneAdj_Volume_1d_changedelng_df. - Créez une moyenne mobile sur 5 jours de cette variation en pourcentage sur 1 jour du volume, et affectez-la à la colonne
Adj_Volume_1d_change_SMAdelng_df. - Tracez les histogrammes de ces deux nouvelles features à l'aide de la liste
new_features.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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()