사용자 정의 손실 함수
지금까지는 평균제곱오차(mean squared error)를 손실 함수로 사용했어요. 이 방법도 괜찮지만, 주가 예측에서는 사용자 정의 손실 함수를 구현하면 유용할 때가 있습니다. 사용자 정의 손실 함수는 우리가 선택한 특정 방식으로 모델의 성능을 개선하는 데 도움이 됩니다. 예를 들어, 이번에는 가격 변동 방향을 잘못 예측했을 때 큰 패널티를 주는 사용자 정의 손실 함수를 만들어 보겠습니다. 이렇게 하면 최소한 방향은 올바르게 예측하도록 네트워크가 학습하는 데 도움이 돼요.
이를 위해 (y_true, y_predicted)를 인수로 받는 함수를 작성해야 합니다. 또한 백엔드 keras(내부적으로 tensorflow 사용)의 기능을 활용해 실제 값과 예측 값의 부호가 일치하지 않는 경우를 찾아 그 사례에 패널티를 줄 것입니다.
이 연습은 강의의 일부입니다
Python으로 배우는 금융 분야 Machine Learning
연습 안내
sign_penalty()함수의 인수를y_true와y_pred로 설정하세요.y_true와y_pred의 부호가 다를 때 제곱 오차(tf.square(y_true - y_pred))에penalty를 곱하세요.- 함수에서
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)