Пример #1
0
    def test_scaleX(self):
        c = get_preproc_config(use_exog=True)
        d = prepare_data(c)

        # train
        self.assertEqual(0, int(d.trainX[0][0]))
        self.assertEqual(1, int(d.trainX[-1][1]))
Пример #2
0
    def test_input_and_output_shapes(self):
        c = get_preproc_config(deseason=False)
        df = get_df3()
        d = data.Data2d(df, c)

        y2 = d._deseasonalize(df['dep_var'], 4)
        self.assertEqual(df['dep_var'].shape, y2.shape)
Пример #3
0
    def test_2d_feature_importances_(self):
        pc = get_preproc_config(lags=3, horizon=1)
        d = prepare_data(pc)
        mockConfigSVR = get_mock_svr(d, pc)

        r = run_config([d, mockConfigSVR, 'val'])
        self.assertEqual(len(r.feature_scores), 3)
        self.assertEqual(r.feature_scores[0], ('lag1', 2))
Пример #4
0
    def test_scaleX(self):
        c = get_preproc_config(use_exog=True)
        d = prepare_data(c)
        d = prepare_data(c, dim="3d")

        # train
        self.assertAlmostEqual(0.0, d.trainX[0][0][0], 2)
        self.assertAlmostEqual(1.0, d.trainX[-1][-1][-1], 2)
Пример #5
0
 def test_scaleYref(self):
     # assert original Y's are not changed after scaling
     c = get_preproc_config(use_exog=True, horizon=1)
     d = prepare_data(c)
     self.assertEqual(52.0, d.trainYref[0])
     self.assertEqual(242.0, d.trainYref[-1])
     self.assertEqual(292.0, d.valYref[0])
     self.assertEqual(322.0, d.valYref[-1])
     self.assertEqual(372.0, d.testYref[0])
     self.assertEqual(402.0, d.testYref[-1])
Пример #6
0
 def test_get_data_with_exog__intent2(self):
     c = get_preproc_config(lags=3, use_exog=True, intent_distance=2)
     d = prepare_data(c)
     # 12, 22, 32 are endogs, 2 and 21 are exogs at distance=2
     self.assertEqual(d.trainX[0].tolist(), [12, 22, 32, 20, 21])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(), [252, 262, 272, 260, 261])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(), [332, 342, 352, 340, 341])
     self.assertEqual(d.testY[0], 362)
Пример #7
0
 def test_get_data_with_exog__intent2(self):
     c = get_preproc_config(lags=3, use_exog=True, intent_distance=2)
     d = prepare_data(c, dim="3d")
     self.assertEqual(d.trainX[0].tolist(),
                      [[10, 11, 32], [20, 21, 42], [30, 31, 52]])
     self.assertEqual(d.trainY[0], 62)
     self.assertEqual(d.valX[0].tolist(),
                      [[250, 251, 272], [260, 261, 282], [270, 271, 292]])
     self.assertEqual(d.valY[0], 302)
     self.assertEqual(d.testX[0].tolist(),
                      [[330, 331, 352], [340, 341, 362], [350, 351, 372]])
     self.assertEqual(d.testY[0], 382)
Пример #8
0
    def test_deseasonalized_reference_values(self):
        c = get_preproc_config(deseason=True,
                               seasonal_period=4,
                               horizon=1,
                               lags=1)
        df = get_df3()
        d = data.Data2d(df, c)

        # all deseasonalized values equal to 10.0
        self.assertTrue(np.array_equal(d.trainYref, [10.0] * 11))
        self.assertTrue(np.array_equal(d.valYref, [10.0] * 3))
        self.assertTrue(np.array_equal(d.testYref, [10.0] * 3))
Пример #9
0
 def get_forecast(self, config, config_dict):
     pc = get_preproc_config(lags=3,
                             use_exog=True,
                             horizon=1,
                             feature_selection=0.5,
                             rfe_step=1,
                             random_state=1)
     d = prepare_data(pc)
     c = config(config_dict, pc)
     model = c.train(d)
     yhat = c.forecast(model, np.array([d.testX[0]]))
     return yhat
Пример #10
0
 def test_get_data__no_exog(self):
     c = get_preproc_config(lags=3)
     d = prepare_data(c)
     self.assertEqual(d.trainX.shape, (21, 3))
     self.assertEqual(d.valX.shape, (5, 3))
     self.assertEqual(d.testX.shape, (5, 3))
     self.assertEqual(d.trainX[0].tolist(), [12, 22, 32])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(), [252, 262, 272])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(), [332, 342, 352])
     self.assertEqual(d.testY[0], 362)
Пример #11
0
 def test_get_data_with_exog__intent0(self):
     c = get_preproc_config(lags=3, use_exog=True)
     d = prepare_data(c)
     self.assertEqual(d.trainX.shape, (21, 5))
     self.assertEqual(d.valX.shape, (5, 5))
     self.assertEqual(d.testX.shape, (5, 5))
     self.assertEqual(d.trainX[0].tolist(), [12, 22, 32, 40, 41])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(), [252, 262, 272, 280, 281])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(), [332, 342, 352, 360, 361])
     self.assertEqual(d.testY[0], 362)
Пример #12
0
 def test_sets(self):
     c = get_preproc_config(lags=3)
     d_ml = prepare_data(c)
     d_lstm = prepare_data(c, dim="3d")
     # same shapes
     self.assertEqual(d_ml.trainY.shape[0], d_lstm.trainY.shape[0])
     self.assertEqual(d_ml.valY.shape[0], d_lstm.valY.shape[0])
     self.assertEqual(d_ml.testY.shape[0], d_lstm.testY.shape[0])
     # same values
     self.assertEqual(d_ml.trainY[0], d_lstm.trainY[0])
     self.assertEqual(d_ml.valY[0], d_lstm.valY[0])
     self.assertEqual(d_ml.testY[0], d_lstm.testY[0])
Пример #13
0
 def test_get_data__no_exog(self):
     c = get_preproc_config(lags=3)
     d = prepare_data(c, dim="3d")
     self.assertEqual(d.trainX.shape, (21, 3, 1))
     self.assertEqual(d.valX.shape, (5, 3, 1))
     self.assertEqual(d.testX.shape, (5, 3, 1))
     self.assertEqual(d.trainX[0].tolist(), [[12], [22], [32]])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(), [[252], [262], [272]])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(), [[332], [342], [352]])
     self.assertEqual(d.testY[0], 362)
Пример #14
0
    def test_scoring(self):
        c = get_preproc_config(lags=2,
                               use_exog=True,
                               feature_selection=0.5,
                               random_state=1)
        d = prepare_data(c)

        # ensure that the lags + most informative exogs are kept
        self.assertEqual(tuple(d.trainX[0].tolist()), (100, 20, 20, 100))

        # ensure relevant feature_names is left
        self.assertEqual(tuple(d.feature_names),
                         ('lag2', 'lag1', 'dim1_0', 'dim1_1'))
Пример #15
0
    def test_select_features(self):
        c = get_preproc_config(lags=2,
                               use_exog=True,
                               feature_selection=0.5,
                               random_state=1)
        d = prepare_data(c)

        # keeping 4 features after selection: 2 original lags and 2 exogs
        self.assertEqual(d.trainX.shape[1], 4)
        self.assertEqual(d.valX.shape[1], 4)
        self.assertEqual(d.testX.shape[1], 4)

        # ensure that feature_names is updated too
        self.assertEqual(len(d.feature_names), 4)
Пример #16
0
    def test_3d_test_mode(self):
        pc = get_preproc_config(lags=3, horizon=1)
        d = prepare_data(pc, dim="3d")
        mockConfigLSTM = get_mock_lstm(d, pc)

        r = run_config([d, mockConfigLSTM, 'test'])

        self.assertTrue(r.train_mse > 0.0)
        self.assertTrue(r.test_mse > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        # yhat are scaled
        self.assertTrue(r.yhat_is[0] <= 1.0)
        self.assertTrue(r.yhat_oos[0] <= 1.0)
Пример #17
0
    def test_2d_val_mode(self):
        pc = get_preproc_config(lags=3, horizon=1)
        d = prepare_data(pc)
        mockConfigSVR = get_mock_svr(d, pc)

        r = run_config([d, mockConfigSVR, 'val'])

        self.assertTrue(r.train_mse > 0.0)
        self.assertTrue(r.test_mse > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        # yhat are scaled
        self.assertTrue(r.yhat_is[0] <= 1.0)
        self.assertTrue(r.yhat_oos[0] <= 1.0)
Пример #18
0
 def test_get_data_with_exog__intent0(self):
     c = get_preproc_config(lags=3, use_exog=True)
     d = prepare_data(c, dim="3d")
     self.assertEqual(d.trainX.shape, (21, 3, 3))
     self.assertEqual(d.valX.shape, (5, 3, 3))
     self.assertEqual(d.testX.shape, (5, 3, 3))
     self.assertEqual(d.trainX[0].tolist(),
                      [[10, 11, 12], [20, 21, 22], [30, 31, 32]])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(),
                      [[250, 251, 252], [260, 261, 262], [270, 271, 272]])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(),
                      [[330, 331, 332], [340, 341, 342], [350, 351, 352]])
     self.assertEqual(d.testY[0], 362)
Пример #19
0
 def test_get_data_with_exog__all_exog_lags(self):
     c = get_preproc_config(lags=3, use_exog=True)
     d = prepare_data(c)
     self.assertEqual(d.trainX.shape, (21, 9))
     self.assertEqual(d.valX.shape, (5, 9))
     self.assertEqual(d.testX.shape, (5, 9))
     self.assertEqual(d.trainX[0].tolist(),
                      [12, 22, 32, 10, 11, 20, 21, 30, 31])
     self.assertEqual(d.trainY[0], 42)
     self.assertEqual(d.valX[0].tolist(),
                      [252, 262, 272, 250, 251, 260, 261, 270, 271])
     self.assertEqual(d.valY[0], 282)
     self.assertEqual(d.testX[0].tolist(),
                      [332, 342, 352, 330, 331, 340, 341, 350, 351])
     self.assertEqual(d.testY[0], 362)
Пример #20
0
    def test_scaleY(self):
        # ensure scaling works
        c = get_preproc_config(use_exog=True, horizon=1)
        d = prepare_data(c)

        # train
        self.assertEqual(0.0, d.trainY[0])
        self.assertEqual(1.0, d.trainY[-1])

        # val
        self.assertTrue(d.valY[c['horizon'] - 1] != d.valYref[0])
        self.assertTrue(d.valY[-1] != d.valYref[-1])

        # test
        self.assertTrue(d.testY[c['horizon'] - 1] != d.testYref[0])
        self.assertTrue(d.testY[-1] != d.testYref[-1])
Пример #21
0
    def test_3d_val_mode(self):
        pc = get_preproc_config(lags=3, horizon=1)
        d = prepare_data(pc, dim="3d")
        mockConfigLSTM = get_mock_lstm(d, pc)

        print(mockConfigLSTM.__class__.__dict__.keys())

        r = run_config([d, mockConfigLSTM, 'val'])

        self.assertTrue(r.train_mse > 0.0)
        self.assertTrue(r.test_mse > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        self.assertTrue(r.train_mae > 0.0)
        # yhat are scaled
        self.assertTrue(r.yhat_is[0] <= 1.0)
        self.assertTrue(r.yhat_oos[0] <= 1.0)
Пример #22
0
    def test_horizon(self):
        model = Mock()
        model.predict = Mock(return_value=[1.])
        testX = np.array([
                [1, 2, 3, 4, 5, 20, 21],
                [2, 3, 4, 5, 6, 20, 22],
                [3, 4, 5, 6, 7, 20, 23],
                [4, 5, 6, 7, 8, 20, 24],
                [5, 6, 7, 8, 9, 20, 25],
                [6, 7, 8, 9, 10, 20, 26]
            ])

        pc = get_preproc_config(lags=3, horizon=5)
        c = ConfigLSVR({'c': 1., 'eps': 1.}, pc)

        yhat = c.forecast(model, testX)
        self.assertEqual(yhat.tolist(), [[1], [1]])
Пример #23
0
    def test_instances(self):
        """Ensure predictions are inserted in the right places for
        new instances
        """
        model = Mock()
        model.predict = Mock(return_value=[[1.0]])
        # the first col is exogenous vars, the last col is endogenous
        testX = np.array([
                [[0.0, 0.1, 1.5], [0.0, 0.2, 1.6]],
                [[0.0, 0.2, 1.6], [0.0, 0.3, 1.7]],
                [[0.0, 0.3, 1.7], [0.0, 0.4, 1.8]],
                [[0.0, 0.4, 1.8], [0.0, 0.5, 1.9]],
                [[0.0, 0.5, 1.9], [0.0, 0.6, 2.0]],
                [[0.0, 0.6, 2.0], [0.0, 0.7, 2.1]],
            ])
        pc = get_preproc_config(lags=2, horizon=2)
        adict= {"bidirectional": False, "topology": [3, 4], "epochs": 100,
            "batch_size": 10, "activation": None, "dropout_rate": 0.,
            "optimizer": None, "kernel_regularizer": (0.0, 0.0),
            "bias_regularization": (0.0, 0.0), "early_stopping": None,
            "stateful": False}
        c = ConfigLSTM(adict, pc)

        yhat = c.forecast(model, testX)
        calls = model.predict.call_args_list
        self.assertEqual(get_call_args(calls[0][0]), [[0., 0.1, 1.5], [0., 0.2, 1.6]])
        self.assertEqual(get_call_args(calls[1][0]), [[0., 0.2, 1.6], [0., 0.3, 1.]])

        self.assertEqual(get_call_args(calls[2][0]), [[0., 0.2, 1.6], [0., 0.3, 1.7]])
        self.assertEqual(get_call_args(calls[3][0]), [[0., 0.3, 1.7], [0., 0.4, 1.]])

        self.assertEqual(get_call_args(calls[4][0]), [[0., 0.3, 1.7], [0., 0.4, 1.8]])
        self.assertEqual(get_call_args(calls[5][0]), [[0., 0.4, 1.8], [0., 0.5, 1.]])

        self.assertEqual(get_call_args(calls[6][0]), [[0., 0.4, 1.8], [0., 0.5, 1.9]])
        self.assertEqual(get_call_args(calls[7][0]), [[0., 0.5, 1.9], [0., 0.6, 1.]])

        self.assertEqual(get_call_args(calls[8][0]), [[0., 0.5, 1.9], [0., 0.6, 2.]])
        self.assertEqual(get_call_args(calls[9][0]), [[0., 0.6, 2.], [0., 0.7, 1.]])
Пример #24
0
    def test_general_case(self):
        model = Mock()
        model.predict = Mock(return_value=[[1.0]])
        testX = np.array([
                [[0.0, 0.1, 1.5], [0.0, 0.2, 1.6]],
                [[0.0, 0.2, 1.6], [0.0, 0.3, 1.7]],
                [[0.0, 0.3, 1.7], [0.0, 0.4, 1.8]],
                [[0.0, 0.4, 1.8], [0.0, 0.5, 1.9]],
                [[0.0, 0.5, 1.9], [0.0, 0.6, 2.0]],
                [[0.0, 0.6, 2.0], [0.0, 0.7, 2.1]]
            ])

        pc = get_preproc_config(lags=2, horizon=1)
        adict= {"bidirectional": False, "topology": [3, 4], "epochs": 100,
            "batch_size": 10, "activation": None, "dropout_rate": 0.,
            "optimizer": None, "kernel_regularizer": (0.0, 0.0),
            "bias_regularization": (0.0, 0.0), "early_stopping": None,
            "stateful": False}
        c = ConfigLSTM(adict, pc)

        yhat = c.forecast(model, testX)
        self.assertEqual(yhat.tolist(), [[1], [1], [1], [1], [1], [1]])
Пример #25
0
    def test_instances(self):
        """Ensure predictions are inserted in the right places for
        new instances
        """
        model = Mock()
        model.predict = Mock(return_value=[1.])
        # the first 3 cols are endogenous vars (from earlier to later),
        # the last col is exogenous
        testX = np.array([
                [.1, .2, .3, 1.5],
                [.2, .3, .4, 1.6],
                [.3, .4, .5, 1.7],
                [.4, .5, .6, 1.8],
                [.5, .6, .7, 1.9],
                [.6, .7, .8, 2.],
            ])

        pc = get_preproc_config(lags=3, horizon=2, use_exog=True)
        c = ConfigLSVR({'c': 1., 'eps': 1.}, pc)

        yhat = c.forecast(model, testX)
        calls = model.predict.call_args_list
        self.assertEqual(get_call_args(calls[0][0]), [0.1, 0.2, 0.3, 1.5])
        self.assertEqual(get_call_args(calls[1][0]), [0.2, 0.3, 1, 1.6])

        self.assertEqual(get_call_args(calls[2][0]), [0.2, 0.3, 0.4, 1.6])
        self.assertEqual(get_call_args(calls[3][0]), [0.3, 0.4, 1, 1.7])

        self.assertEqual(get_call_args(calls[4][0]), [0.3, 0.4, 0.5, 1.7])
        self.assertEqual(get_call_args(calls[5][0]), [0.4, 0.5, 1, 1.8])

        self.assertEqual(get_call_args(calls[6][0]), [0.4, 0.5, 0.6, 1.8])
        self.assertEqual(get_call_args(calls[7][0]), [0.5, 0.6, 1, 1.9])

        self.assertEqual(get_call_args(calls[8][0]), [0.5, 0.6, 0.7, 1.9])
        self.assertEqual(get_call_args(calls[9][0]), [0.6, 0.7, 1, 2.0])
Пример #26
0
 def test_Yref(self):
     c = get_preproc_config(lags=3, horizon=1)
     d = prepare_data(c, dim="3d")
     self.assertEqual(d.trainY[c['horizon'] - 1], d.trainYref[0])
     self.assertEqual(d.valY[c['horizon'] - 1], d.valYref[0])
     self.assertEqual(d.testY[c['horizon'] - 1], d.testYref[0])
Пример #27
0
 def test_scale_revert(self):
     c = get_preproc_config(use_exog=True)
     d = prepare_data(c)
     d = prepare_data(c, dim="3d")
     self.assertTrue(d.revert(d.trainY)[5], d.trainYref[5])
Пример #28
0
 def test_scale_revert(self):
     c = get_preproc_config(use_exog=True)
     d = prepare_data(c)
     self.assertAlmostEqual(d.revert(d.trainY)[5 + c['horizon'] - 1],
                            d.trainYref[5],
                            delta=0.9)