Fonction de perte personnalisée
Jusqu'ici, nous avons utilisé l'erreur quadratique moyenne comme fonction de perte. Cela fonctionne bien, mais pour la prédiction de cours boursiers, il peut être utile d'implémenter une fonction de perte personnalisée. Une fonction de perte personnalisée peut aider à améliorer les performances de notre modèle de façon ciblée. Par exemple, nous allons créer une fonction de perte qui applique une forte pénalité lorsque le modèle se trompe de direction sur le mouvement du prix. Cela aidera notre réseau à apprendre au moins à prédire le bon sens du mouvement.
Pour cela, nous devons écrire une fonction qui prend pour arguments (y_true, y_predicted). Nous utiliserons aussi des fonctionnalités du backend keras (avec tensorflow) pour repérer les cas où la valeur réelle et la prédiction n'ont pas le même signe, puis pénaliser ces cas.
Cet exercice fait partie du cours
<cours>Machine Learning pour la finance en Python</cours>Instructions de l’exercice
- Définissez les arguments de la fonction
sign_penalty()commey_trueety_pred. - Multipliez l'erreur quadratique (
tf.square(y_true - y_pred)) parpenaltylorsque les signes dey_trueety_predsont différents. - Retournez la moyenne de la variable
lossdepuis la fonction — c'est l'erreur quadratique moyenne (avec notre pénalité lorsque le signe de la valeur réelle et celui de la prédiction sont opposés).
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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)