Função de loss personalizada
Até agora, usamos o erro quadrático médio como função de loss. Isso funciona bem, mas, para prever preços de ações, pode ser útil implementar uma função de loss personalizada. Uma função de loss personalizada pode ajudar a melhorar o desempenho do nosso modelo de maneiras específicas que escolhemos. Por exemplo, vamos criar uma função de loss com uma penalidade alta para previsões que erram a direção do movimento do preço. Isso vai ajudar nossa rede a, pelo menos, prever a direção correta dos movimentos de preço.
Para isso, precisamos escrever uma função que receba os argumentos (y_true, y_predicted). Também vamos usar recursos do backend do keras (com tensorflow) para encontrar os casos em que o valor real e a previsão têm sinais diferentes e, então, penalizar esses casos.
Este exercicio faz parte do curso
Machine Learning para Finanças em Python
Instruções do exercicio
- Defina os argumentos da função
sign_penalty()comoy_trueey_pred. - Multiplique o erro quadrático (
tf.square(y_true - y_pred)) porpenaltyquando os sinais dey_trueey_predforem diferentes. - Retorne a média da variável
lossna função — isso é o erro quadrático médio (com nossa penalidade para sinais opostos entre o valor real e as previsões).
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
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)