Ingineria caracteristicilor din date de volum
Vom folosi modele neliniare pentru a obține predicții mai precise. În cazul modelelor liniare, caracteristicile trebuie să fie corelate liniar cu variabila țintă. Alte modele de învățare automată pot combina caracteristicile în moduri neliniare. De exemplu, ce se întâmplă dacă prețul crește atunci când media mobilă a prețului este în creștere, iar media mobilă a volumului este în scădere? Singura modalitate de a surprinde aceste interacțiuni este fie să înmulțești caracteristicile, fie să folosești un algoritm de învățare automată care gestionează neliniaritatatea (de exemplu, păduri aleatoare).
Pentru a include mai multe informații care pot interacționa cu alte caracteristici, putem adăuga caracteristici slab corelate. Mai întâi vom adăuga date de volum, pe care le avem în lng_df ca și coloana Adj_Volume.
Înainte de a începe, reține că funcțiile din TA-Lib (precum SMA()) necesită array-uri NumPy, nu obiecte pandas. Poți folosi atributul .values al unui obiect de tip Series sau DataFrame din pandas pentru a-l converti într-un array NumPy.
Acest exercițiu face parte din cursul
Machine Learning pentru finanțe în Python
Instrucțiuni pentru exercițiu
- Calculează variația procentuală zilnică (pe 1 zi) a volumului (folosește
pct_change()din pandas) și atribuie rezultatul coloaneiAdj_Volume_1d_changedinlng_df. - Calculează media mobilă pe 5 zile a variației procentuale zilnice a volumului și atribuie rezultatul coloanei
Adj_Volume_1d_change_SMAdinlng_df. - Trasează histogramele celor două noi caracteristici create, folosind lista
new_features.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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()