カスタム損失関数
ここまでは、損失関数として平均二乗誤差を使用してきました。これは問題なく機能しますが、株価予測では、カスタム損失関数を実装すると有効な場合があります。カスタム損失関数を使うことで、目的に応じた方法でモデルの性能を向上させることができます。たとえば、今回は価格の変動方向を誤って予測した場合に大きなペナルティを与えるカスタム損失関数を作成します。これにより、ニューラルネットワークが少なくとも価格変動の方向を正しく予測できるよう学習を促します。
そのためには、(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)