def pmd_exog_compare(f, k=1): from timemachines.skatertools.evaluation.evaluators import evaluate_mean_absolute_error from timemachines.skatertools.evaluation.evaluators import hospital_with_exog y, a = hospital_with_exog(k=k) y0 = [yi[0] for yi in y] r = 0.1 # Doesn't matter? err1 = evaluate_mean_absolute_error(f=f, k=k, y=y0, r=r, n_burn=250) err2 = evaluate_mean_absolute_error(f=f, k=k, y=y, r=r, n_burn=250) err3 = evaluate_mean_absolute_error(f=f, k=k, y=y, r=r, a=a, n_burn=250) errlv = evaluate_mean_absolute_error(f=empirical_last_value, k=k, y=y, r=r, a=a, n_burn=250) print('----------------') print("Error w/o exogenous = " + str(err1)) print("Error w exogenous = " + str(err2)) print("Error w exo + known = " + str(err3)) print("Error last val cache = " + str(errlv)) if __name__ == '__main__': f = pmd_exogenous if True: prior_plot_exogenous(f=f, k=1, n=200) if True: prior_plot(f=f, k=1, n=200)
param_names = ['changepoint_prior_scale', 'seasonality_prior_scale'] return fbprophet_hyperparam_skater_factory(y=y0, s=s, k=k, a=None, t=t, e=e, r=r, param_names=param_names, recursive=False) PROPHET_R2_SKATERS = [ fbprophet_exogenous_r2, fbprophet_known_r2, fbprophet_univariate_r2, fbprophet_recursive_r2 ] else: PROPHET_SKATERS_SINGULAR = [] PROPHET_R2_SKATERS = [] if __name__ == '__main__': from timemachines.skatertools.data import hospital_with_exog from timemachines.skatertools.visualization.priorplot import prior_plot import matplotlib.pyplot as plt k = 1 y, a = hospital_with_exog(k=k, n=450, offset=True) f = fbprophet_exogenous err2 = prior_plot(f=f, k=k, y=y, n=450, n_plot=50) print(err2) plt.show() pass
if not s: s = dict(y=[]) if y0 is None: return None, None, s # Ignore suggestion to fit offline # Update buffer s['y'].append(y0) if len(s['y']) > max_buffer_len + 1000: s['y'] = s['y'][-max_buffer_len:] # Fit and predict, if warm, or just last value if len(s['y']) < max(n_warm, MIN_N_WARM): return [y0] * k, [abs(y0)] * k, s else: with no_stdout_stderr(): kwargs = deepcopy(DIVINE_MODEL) if model_params: kwargs.update(**model_params) model = dv.divinity(forecast_length=k, **kwargs) model.fit(np.array(s['y'])) x = list(model.predict()) x_std = [1.0] * k # TODO: fixme return x, x_std, s if __name__ == '__main__': err = prior_plot(f=divinity_univariate_factory, k=5, n=500) pass