def test_ar_forecast(self): """ using AR to extend X to be longer than Y so must train earlier """ cfg = TSConfig() cfg.register_dataset(TARGET_DF, 'y', 'target') cfg.register_dataset(TRAIN_DF, 'x', 'predictor') cfg.add_AR([2], dataset='x') cfg.stack() arex = Arex(model=mm, data_config=cfg) arex.forecast(t_plus=2, pred_start="2019-02-26", pred_end="2019-03-05", training="roll", window=2, t_known=False) log = arex.log assert to_ymd(log[0]['time']) == '2019-02-26' assert to_ymd(log[1]['time']) == '2019-03-05' info = log[0] assert to_ymd(info['X_train'][0]) == '2019-01-29' assert to_ymd(info['X_train'][1]) == '2019-02-05' assert to_ymd(info['y_train'][0]) == '2019-02-12' assert to_ymd(info['y_train'][1]) == '2019-02-19' assert to_ymd(info['X_pred']) == '2019-02-26' assert info['sizes'][0] == (2, 2) info = log[1] assert to_ymd(info['X_train'][0]) == '2019-01-29' assert to_ymd(info['X_train'][1]) == '2019-02-05' assert to_ymd(info['y_train'][0]) == '2019-02-12' assert to_ymd(info['y_train'][1]) == '2019-02-19' assert to_ymd(info['X_pred']) == '2019-03-05' assert info['sizes'][0] == (2, 2)
def test_t_known_expand_forecast(self): cfg = TSConfig() cfg.register_dataset(TARGET_DF, 'y', 'target') cfg.register_dataset(TRAIN_DF, 'x', 'predictor') cfg.stack() arex = Arex(model=mm, data_config=cfg) arex.forecast(t_plus=2, pred_start="2019-02-12", pred_end="2019-02-19", training="expand", window=2, t_known=True) log = arex.log assert to_ymd(log[0]['time']) == '2019-02-12' assert to_ymd(log[1]['time']) == '2019-02-19' info = log[0] assert to_ymd(info['X_train'][0]) == '2019-01-22' assert to_ymd(info['X_train'][1]) == '2019-01-29' assert to_ymd(info['y_train'][0]) == '2019-02-05' assert to_ymd(info['y_train'][1]) == '2019-02-12' assert to_ymd(info['X_pred']) == '2019-02-12' assert info['sizes'][0] == (2, 1) info = log[1] assert to_ymd(info['X_train'][0]) == '2019-01-22' assert to_ymd(info['X_train'][1]) == '2019-02-05' assert to_ymd(info['y_train'][0]) == '2019-02-05' assert to_ymd(info['y_train'][1]) == '2019-02-19' assert to_ymd(info['X_pred']) == '2019-02-19' assert info['sizes'][0] == (3, 1)
def test_simple_nowcast(self): cfg = TSConfig() cfg.register_dataset(TARGET_DF, 'y', 'target') cfg.register_dataset(TRAIN_DF, 'x', 'predictor') cfg.stack() arex = Arex(model=mm, data_config=cfg) arex.nowcast(pred_start="2019-02-12", pred_end="2019-02-19", training="roll", window=2) log = arex.log assert to_ymd(log[0]['time']) == '2019-02-12' assert to_ymd(log[1]['time']) == '2019-02-19' info = log[0] assert to_ymd(info['X_train'][0]) == '2019-01-29' assert to_ymd(info['X_train'][1]) == '2019-02-05' assert to_ymd(info['y_train'][0]) == '2019-01-29' assert to_ymd(info['y_train'][1]) == '2019-02-05' assert to_ymd(info['X_pred']) == '2019-02-12' assert info['sizes'][0] == (2, 1)
def test_window_too_big(self): cfg = TSConfig() cfg.register_dataset(TARGET_DF, 'y', 'target') cfg.register_dataset(TRAIN_DF, 'x', 'predictor') cfg.add_AR([2], dataset='x') cfg.stack() arex = Arex(model=mm, data_config=cfg) with pytest.raises(ValueError): arex.nowcast(pred_start="2019-02-19", pred_end="2019-03-05", training="expand", window=8) arex.nowcast(pred_start="2019-02-19", pred_end="2019-03-05", training="expand", window=7) log = arex.log assert to_ymd(log[0]['X_train'][0]) == '2019-01-01'
from nowcast.datasets import CDCLoader, gt_loader from nowcast.models import Argo from nowcast.utils.metrics import RMSE, Corr # load data cdcl = CDCLoader('./ILI_MA.csv', ili_version='unweighted') ili = cdcl.load_state('MA') gt = gt_loader('./GTdata_MA.csv') # configure data with 52 ILI lag terms dc = TSConfig() dc.register_dataset(ili, name='ILI', type='target') dc.register_dataset(gt, name='Trends', type='predictor') dc.add_AR(range(1, 53), dataset='ILI', var_names=['%ILI']) dc.stack() # use the standard ARGO model base_mod = Argo() arex = Arex(model=base_mod, data_config=dc) out = arex.nowcast(pred_start='2017-01-01', pred_end='2018-04-22', training='roll', window=104, pred_name='ARGO') predictions = pd.merge(ili, out) print(predictions) print('RMSE:', RMSE(predictions['%ILI'], predictions['ARGO'])) print('Correlation:', Corr(predictions['%ILI'], predictions['ARGO']))