Aangepaste verliesfunctie
Tot nu toe hebben we de mean squared error gebruikt als verliesfunctie. Dat werkt prima, maar bij het voorspellen van aandelenkoersen kan het nuttig zijn om een aangepaste verliesfunctie te implementeren. Een aangepaste verliesfunctie kan helpen om de prestaties van ons model te verbeteren op manieren die wij belangrijk vinden. We gaan bijvoorbeeld een aangepaste verliesfunctie maken met een zware straf voor het verkeerd voorspellen van de richting van de koersbeweging. Dit helpt ons netwerk om in elk geval de richting van de koersbeweging goed te leren voorspellen.
Daarvoor moeten we een functie schrijven die de argumenten (y_true, y_predicted) aanneemt. We gebruiken ook functionaliteit uit de backend van keras (met tensorflow) om gevallen te vinden waar de werkelijke waarde en de voorspelling een verschillend teken hebben, en straffen die gevallen vervolgens.
Deze oefening maakt deel uit van de cursus
Machine Learning voor finance in Python
Oefeninstructies
- Stel de argumenten van de functie
sign_penalty()in opy_trueeny_pred. - Vermenigvuldig de kwadratische fout (
tf.square(y_true - y_pred)) metpenaltywanneer de tekens vany_trueeny_predverschillend zijn. - Retourneer het gemiddelde van de variabele
lossvanuit de functie — dit is de mean squared error (met onze straf voor tegengestelde tekens van werkelijk vs. voorspellingen).
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
import keras.losses
import tensorflow as tf
# Create loss function
def sign_penalty(____, ____):
penalty = 100.
loss = tf.where(tf.less(y_true * y_pred, 0), \
____ * tf.square(y_true - y_pred), \
tf.square(y_true - y_pred))
return tf.reduce_mean(____, axis=-1)
keras.losses.sign_penalty = sign_penalty # enable use of loss with keras
print(keras.losses.sign_penalty)