TransWikia.com

Tweedie Loss for Keras

Data Science Asked by odyse on June 21, 2021

We are currently using XGBoost model with Tweedie loss for solving a regression problem which works very good, now I wanted to move our model to Keras and experience with neural networks, do anybody know how I can implement Tweedie loss for Keras? I only care about the instance when p=1.5 which gives us the best result in XGBoost.

Thanks

2 Answers

I end up implementing something like this:

def tweedieloss(y_true, y_pred):
    p=1.5
    dev = 2 * (K.pow(y_true, 2-p)/((1-p) * (2-p)) -
                   y_true * K.pow(y_pred, 1-p)/(1-p) +
                   K.pow(y_pred, 2-p)/(2-p))
    return K.mean(dev)

which I don't know how right it is, for now it seems to be working.

Correct answer by odyse on June 21, 2021

Hey thanks for sharing your solution, I was looking for this too! Quite frankly, I'm surprised that the Tweedie distribution isn't that popular since zero-inflated data is fairly common.

Just wanted to add a few comments on that, I'm submitting an "answer" because there is a strict character limit on the comments:

  1. Your solution is the Tweedie deviance which is the same as $-2LL$, which means that you can safely drop the multiplier 2 and minimize the negative log-likelihood instead (shouldn't affect your results)

  2. Technically there is a minor omission in your formula: in the first ratio instead of $frac{y^{2-p}}{(1-p)(2-p)}$, it should be $frac{max(y,0)^{2-p}}{(1-p)(2-p)}$ although I think in practice you'd be working with non-negative values only, so it shouldn't matter

  3. Lastly, I'd also like to note that this definition is only suitable for variance power values $p notin {0,1,2}$, for those special cases see the aforementioned link on Tweedie deviance

Answered by IVR on June 21, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP