Aangepaste verliesfuncties

Machine Learning voor finance in Python

Nathan George

Data Science Professor

richting komt niet overeen

Machine Learning voor finance in Python

MSE met richtingsstraf

Als de richting van voorspelling en target overeenkomt:

  • $ \sum(y - \hat{y})^2$

Zo niet:

  • $\sum (y - (\hat{y}))^2 * \text{penalty} $
Machine Learning voor finance in Python

Aangepaste verliesfuncties implementeren

import tensorflow as tf
Machine Learning voor finance in Python

Een functie maken

import tensorflow as tf

# create loss function def mean_squared_error(y_true, y_pred):
Machine Learning voor finance in Python

Mean squared error-verlies

import tensorflow as tf

# create loss function
def mean_squared_error(y_true, y_pred):

loss = tf.square(y_true - y_pred) return tf.reduce_mean(loss, axis=-1)
Machine Learning voor finance in Python

Aangepaste verliesfunctie aan keras toevoegen

import tensorflow as tf

# create loss function
def mean_squared_error(y_true, y_pred):
    loss = tf.square(y_true - y_pred)
    return tf.reduce_mean(loss, axis=-1)

# enable use of loss with keras import keras.losses keras.losses.mean_squared_error = mean_squared_error
# fit the model with our mse loss function
model.compile(optimizer='adam', loss=mean_squared_error)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Machine Learning voor finance in Python

Controleren op juiste richting

tf.less(y_true * y_pred, 0)

Juiste richting:

  • neg * neg = pos
  • pos * pos = pos

Verkeerde richting:

  • neg * pos = neg
  • pos * neg = neg
Machine Learning voor finance in Python

tf.where() gebruiken

# create loss function
def sign_penalty(y_true, y_pred):
    penalty = 10.
    loss = tf.where(tf.less(y_true * y_pred, 0), 
                    penalty * tf.square(y_true - y_pred), 
                    tf.square(y_true - y_pred))
Machine Learning voor finance in Python

Alles samenbrengen

# create loss function
def sign_penalty(y_true, y_pred):
    penalty = 100.
    loss = tf.where(tf.less(y_true * y_pred, 0),
                    penalty * tf.square(y_true - y_pred), 
                    tf.square(y_true - y_pred))

    return tf.reduce_mean(loss, axis=-1)

# enable use of loss with keras keras.losses.sign_penalty = sign_penalty
Machine Learning voor finance in Python

De aangepaste verliesfunctie gebruiken

# create the model
model = Sequential()
model.add(Dense(50,
                input_dim=scaled_train_features.shape[1],
                activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='linear'))
# fit the model with our custom 'sign_penalty' loss function
model.compile(optimizer='adam', loss=sign_penalty)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Machine Learning voor finance in Python

De vlinderdas-vorm

train_preds = model.predict(scaled_train_features)
# scatter the predictions vs actual
plt.scatter(train_preds, train_targets)
plt.xlabel('predictions')
plt.ylabel('actual')
plt.show()

vlinderdas-plot

Machine Learning voor finance in Python

Maak je eigen verliesfunctie!

Machine Learning voor finance in Python

Preparing Video For Download...