Función de pérdida personalizada
Hasta ahora hemos usado el error cuadrático medio como función de pérdida. Esto funciona bien, pero para predecir precios de acciones puede ser útil implementar una función de pérdida personalizada. Una función de pérdida personalizada puede ayudar a mejorar el rendimiento de nuestro modelo en aspectos concretos que elijamos. Por ejemplo, vamos a crear una función de pérdida con una penalización grande por predecir el movimiento del precio en la dirección equivocada. Esto ayudará a que nuestra red aprenda al menos a predecir el movimiento del precio en la dirección correcta.
Para ello, necesitamos escribir una función que reciba los argumentos (y_true, y_predicted). También usaremos funcionalidad del backend de keras (usando tensorflow) para encontrar los casos en los que el valor real y la predicción tienen signos distintos, y penalizar esos casos.
Este ejercicio forma parte del curso
Machine Learning para finanzas con Python
Instrucciones del ejercicio
- Define los argumentos de la función
sign_penalty()comoy_trueyy_pred. - Multiplica el error cuadrático (
tf.square(y_true - y_pred)) porpenaltycuando los signos dey_trueyy_predsean diferentes. - Devuelve la media de la variable
lossdesde la función; esto es el error cuadrático medio (con nuestra penalización por signos opuestos entre el valor real y la predicción).
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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)