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)
return x, x_std, s def dlm_set_exog_hyperparams(s, r: R_TYPE): # Univariate model with autoregressive components # This uses the discounting method of H/W so doesn't need to be fit as often period_choices = [3, 5, 7, 10, 12, 16, 24, 32] s['auto_degree'], s['trend_degree'], period_choice = to_int_log_space( r, bounds=[ (0.5, 3.2), # auto-reg degree. 1 means linear trend, 2 quadratic (0.1, 3.4), # seasonality degree (0, len(period_choices)) # seasonality period ]) s['discount'] = 1 - ( r % 0.05) # Shouldn't matter too much as these get tuned eventually s['period'] = period_choices[period_choice] s['n_burn'] = 100 s['n_fit'] = 500 # How often to tune discounts subsequently return s if __name__ == '__main__': err = prior_plot_exogenous(f=dlm_exogenous_r3, k=1, n=1000, r=np.random.rand()) plt.figure() print('done') pass
s: dict, k: int = 1, a: A_TYPE = None, t: T_TYPE = None, e: E_TYPE = None) -> ([float], Any, Any): """ Precision weight moving averages """ from timemachines.skaters.simple.movingaverage import EMA_SKATERS fs = TSA_CONSTANT_SKATERS return precision_weighted_ensemble_factory(fs=fs, y=y, s=s, k=k, a=a, t=t, e=e, r=0.5) TSA_ENSEMBLE_SKATERS = [ tsa_aggressive_ensemble, tsa_balanced_ensemble, tsa_precise_ensemble ] TSA_SKATERS = TSA_ENSEMBLE_SKATERS + TSA_CONSTANT_SKATERS if __name__ == '__main__': prior_plot_exogenous(f=tsa_aggressive_ensemble, k=5, n=TSA_META['n_warm'] + 25, n_plot=50)
x = list(x_mean) x_std = [math.sqrt(v) for v in x_var] return x, x_std, s def dlm_set_univariate_params(s, r: R_TYPE): period_choices = [3, 5, 7, 10, 12, 16, 24, 32] s['auto_degree'], s['trend_degree'], period_choice = to_int_log_space( r, bounds=[ (0.5, 3.2), # auto-reg degree. 1 means linear trend, 2 quadratic (0.1, 3.4), # seasonality degree (0, len(period_choices)) # seasonality period ]) s['discount'] = 1 - ( r % 0.05) # Shouldn't matter too much as these get tuned eventually s['period'] = period_choices[period_choice] s['n_warm'] = 100 s['n_fit'] = 500 # How often to tune discounts subsequently return s if __name__ == '__main__': err = prior_plot_exogenous(f=dlm_univariate_r3, k=2, n=500, r=np.random.rand()) plt.figure() print('done') pass
:returns: x, s', w """ if s is None: s = dict() s = flux_hyperparams(s=s,r=r) s = initialize_buffers(s=s,y=y) if y is not None: # Process observation and return prediction assert isinstance(y, float) or len(y) == s['dim'], ' Cannot change dimension of input in flight ' y0, exog = split_exogenous(y=y, dim=s['dim']) s = update_buffers(s=s, a=a, exog=exog, y0=y0) if True: # Always fit prior to prediction none_, s, _ = flux_auto(y=None, s=s, k=k, a=a, t=t, e=e, r=r) # Fit the model assert none_ is None return flux_or_last_value(s=s,k=k,exog=exog,y0=y0) if y is None: if len(s.get('buffer'))<s['n_burn']: s['model'] = None else: data = pd.DataFrame(columns=['y'], data=s.get('buffer')) s['model'] = pf.ARIMA(data=data, ar=s['ar'], ma=s['ma'], target='y', family=s['family']) _ = s['model'].fit("MLE") return None, s, None # Acknowledge that a fit was requested by returning x=None, w=None if __name__ == '__main__': err = prior_plot_exogenous(f=flux_auto, k=1, n=200, r=0.05) pass
s: dict, k: int = 1, a: A_TYPE = None, t: T_TYPE = None, e: E_TYPE = None) -> ([float], Any, Any): """ Precision weight moving averages """ from timemachines.skaters.simple.movingaverage import EMA_SKATERS fs = TSA_CONSTANT_SKATERS return precision_weighted_ensemble_factory(fs=fs, y=y, s=s, k=k, a=a, t=t, e=e, r=0.5) TSA_ENSEMBLE_SKATERS = [ tsa_aggressive_ensemble, tsa_balanced_ensemble, tsa_precise_ensemble ] TSA_SKATERS = TSA_ENSEMBLE_SKATERS + TSA_CONSTANT_SKATERS if __name__ == '__main__': prior_plot_exogenous(f=tsa_p1_d0_q1, k=5, n=TSA_META['n_warm'] + 25, n_plot=50)
def hospital_prior_plot_exogenous(f, k=None, x0=np.nan, n=150, n_plot=25): y, a = hospital_with_exog(k=k, n=450, offset=True) err = prior_plot_exogenous(f=f, k=k, y=y, a=a, n=450, n_plot=50)