Пользовательская функция потерь
До сих пор мы использовали среднеквадратичную ошибку в качестве функции потерь. Это вполне рабочий подход, однако при прогнозировании цен акций бывает полезно реализовать собственную функцию потерь. Она позволяет улучшить качество модели именно в тех аспектах, которые важны для нас. Например, мы создадим пользовательскую функцию потерь с большим штрафом за предсказание движения цены в неверном направлении. Это поможет нейронной сети научиться правильно определять направление изменения цены.
Для этого нужно написать функцию, принимающую аргументы (y_true, y_predicted). Мы также воспользуемся функциональностью бэкенда keras (через tensorflow), чтобы находить случаи, когда знаки истинного значения и предсказания не совпадают, и штрафовать за них.
Это упражнение является частью курса
Машинное обучение для финансов на Python
Инструкции к упражнению
- Задайте аргументы функции
sign_penalty():y_trueиy_pred. - Умножьте квадрат ошибки (
tf.square(y_true - y_pred)) наpenaltyв тех случаях, когда знакиy_trueиy_predразличаются. - Верните из функции среднее значение переменной
loss— это среднеквадратичная ошибка с учётом штрафа за несовпадение знаков реальных и предсказанных значений.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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)