Prophet: Fit error "B[1] is -nan, but most not be nan!"

Created on 22 Jun 2019  路  5Comments  路  Source: facebook/prophet

From @humphreyapplebee:

I was able to find another example of a series that exhibits this behaviour:

from fbprophet import Prophet
import pandas as pd

y = [800, 5700, 8200, 5413, 19035, 14841, 12935, 18518, 28402, 73898, 125483, 11353, 135, 650, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 502, 377, 125, 984, 851, 127, 2914, 1073, 1339, 3468, 4813, 203, 0, 0, 0]
periods = len(y)
dates = pd.date_range(start='2018-02-05', freq='W-MON', periods=periods)
floor = [0] * periods
cap = [484.6442413330078] * periods
df = pd.DataFrame({
    "ds": dates,
    "y": y,
    "floor": floor,
    "cap": cap
})
model = Prophet(
    daily_seasonality=False,
    weekly_seasonality=True,
    yearly_seasonality=True,
    seasonality_mode="multiplicative",
    changepoint_prior_scale=0.05,
    growth="logistic"
)

With LBGFS (i.e. model.fit(df, algorithm='LBFGS')), the training stalls as described above. Interestingly, training no longer stalls when I modify the number of changepoints (either adding more or less) or perturb the training data even very slightly (e.g. by dropping a significant figure from one of the dates).

With Newton (i.e. model.fit(df, algorithm='Newton')), I receive the following exception:
```
WARNING:fbprophet:Optimization terminated abnormally. Falling back to Newton.
...
vendor/local/lib/python2.7/site-packages/pystan/model.pyc in optimizing(self, data, seed, init, sample_file, algorithm, verbose, as_vector, **kwargs)
548 stan_args = pystan.misc._get_valid_stan_args(stan_args)
549
--> 550 ret, sample = fit._call_sampler(stan_args)
551 pars = pystan.misc._par_vector2dict(sample['par'], m_pars, p_dims)
552 if not as_vector:

stanfit4anon_model_861b75c6337e237650a61ae58c4385ef_8369643458939391769.pyx in stanfit4anon_model_861b75c6337e237650a61ae58c4385ef_8369643458939391769.StanFit4Model._call_sampler()

stanfit4anon_model_861b75c6337e237650a61ae58c4385ef_8369643458939391769.pyx in stanfit4anon_model_861b75c6337e237650a61ae58c4385ef_8369643458939391769._call_sampler()

RuntimeError: Exception: Exception: multiply: B[1] is -nan, but must not be nan!
````

_Originally posted by @humphreyapplebee in https://github.com/facebook/prophet/issues/842#issuecomment-504472349_

bug

Most helpful comment

I just ran into the same error and found a fix/workaround. My target y-values are generally between 1 and 20 in any given time period and I sent them to the log-scale to achieve data compression. When in the log scale, the handful of values that were < 1 are now negative. After pounding my head a bit, I added 1 to my initial y's before applying the log so that all transformed values, on which the model is trained, are always positive. Poof! Model was fit and I undid the transform at the end with np.exp(yhat)-1.

I know this is not a fix for the numerical stability issue at hand in pystan but I thought it would be useful if you really need a workaround.

All 5 comments

My money is on that long sequence of zeros. These tend to make STAN鈥檚 estimates numerically unstable and subject to small changes in values.

If someone is passing in a lot of zeros it鈥檚 likely because they鈥檙e missing data.

I just ran into the same error and found a fix/workaround. My target y-values are generally between 1 and 20 in any given time period and I sent them to the log-scale to achieve data compression. When in the log scale, the handful of values that were < 1 are now negative. After pounding my head a bit, I added 1 to my initial y's before applying the log so that all transformed values, on which the model is trained, are always positive. Poof! Model was fit and I undid the transform at the end with np.exp(yhat)-1.

I know this is not a fix for the numerical stability issue at hand in pystan but I thought it would be useful if you really need a workaround.

Also just got this issue. Sorry, don't have time to write out a description, but I've been getting this as well.

Here too. I changed "floor" from 3 to 1 and it worked.

Same here with growth="logistic", removed "yearly_seasonality=False, weekly_seasonality=False, daily_seasonality=False" no errors, but yhat is NaN, it happens because my carrying capacity is so high... any problem with it?

Was this page helpful?
0 / 5 - 0 ratings