diff --git a/data/input/test_time_series.xlsx b/data/input/test_time_series.xlsx index d9b3d0b..395be64 100644 Binary files a/data/input/test_time_series.xlsx and b/data/input/test_time_series.xlsx differ diff --git a/logs/cov.out b/logs/cov.out index 345a9de..c53241a 100644 --- a/logs/cov.out +++ b/logs/cov.out @@ -6,7 +6,7 @@ Name Stmts Miss Co /media/ph33r/Data/Project/CodeLib/Git/mllib/lib/knn.py 70 0 100% /media/ph33r/Data/Project/CodeLib/Git/mllib/lib/model.py 44 0 100% /media/ph33r/Data/Project/CodeLib/Git/mllib/lib/opt.py 157 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/timeseries.py 61 0 100% +/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/timeseries.py 62 0 100% /media/ph33r/Data/Project/CodeLib/Git/mllib/lib/tree.py 79 0 100% --------------------------------------------------------------------------------------------- -TOTAL 528 0 100% +TOTAL 529 0 100% diff --git a/logs/pylint/lib-timeseries-py.out b/logs/pylint/lib-timeseries-py.out index ec79001..255eb0b 100644 --- a/logs/pylint/lib-timeseries-py.out +++ b/logs/pylint/lib-timeseries-py.out @@ -1,8 +1,8 @@ ************* Module mllib.lib.timeseries -timeseries.py:208:41: I1101: Module 'metrics' has no 'rsq' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -timeseries.py:209:41: I1101: Module 'metrics' has no 'mae' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -timeseries.py:210:42: I1101: Module 'metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -timeseries.py:211:42: I1101: Module 'metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +timeseries.py:209:41: I1101: Module 'metrics' has no 'rsq' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +timeseries.py:210:41: I1101: Module 'metrics' has no 'mae' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +timeseries.py:211:42: I1101: Module 'metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +timeseries.py:212:42: I1101: Module 'metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-whitelist if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) diff --git a/mllib/lib/timeseries.py b/mllib/lib/timeseries.py index 372d3ca..9e29393 100644 --- a/mllib/lib/timeseries.py +++ b/mllib/lib/timeseries.py @@ -204,7 +204,8 @@ def _compute_metrics(self) -> Dict[str, float]: y_hat = list(self.model.predict_in_sample(start=d, end=len(self.df))) else: - y_hat = list(self.predict(self.df[self.x_var])[self.y_var].values) + exog = self.df[self.x_var] + y_hat = list(self.model.predict(n_periods=len(exog), X=exog)) model_summary = {"rsq": np.round(metrics.rsq(y, y_hat), 3), "mae": np.round(metrics.mae(y, y_hat), 3), "mape": np.round(metrics.mape(y, y_hat), 3), @@ -251,5 +252,5 @@ def predict(self, df_pred = pd.concat([df_pred, x_predict.reset_index(drop=True)], axis=1, ignore_index=True) - df_pred.columns = list(self.y_var) + self.x_var + df_pred.columns = [self.y_var] + self.x_var return df_pred diff --git a/requirements.txt b/requirements.txt index 0fb8a4c..cf109e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ pandas==1.0.1 -statsmodels==0.11.0 xlrd==1.2.0 -numpy==1.18.1 +PuLP==1.6.8 pmdarima==1.8.0 -xgboost==1.5.0 +numpy==1.18.1 Cython==0.29.15 -PuLP==1.6.8 +statsmodels==0.11.0 +xgboost==1.5.0 scikit_learn==1.0.2 diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index e46fbfe..35964f6 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -69,11 +69,17 @@ def test_multivariate(self): df_ip = pd.read_excel(path + "test_time_series.xlsx", sheet_name="exog") df_ip = df_ip.set_index("ts") - mod = AutoArima(df=df_ip, y_var="y", x_var=["cost"]) - op = mod.metrics + y_var = "y" + x_var = ["cost"] + mod = AutoArima(df=df_ip, y_var=y_var, x_var=x_var) + metrics = mod.metrics + X = pd.DataFrame(df_ip.iloc[-1]).T + op = mod.predict(x_predict=X[x_var])[y_var][0] + exp_op = X[y_var][0] self.assertEqual(mod.opt_params["order"], (0, 1, 1)) - self.assertAlmostEqual(1.0, op["rsq"], places=1) - self.assertLessEqual(op["mape"], 0.1) + self.assertAlmostEqual(1.0, metrics["rsq"], places=1) + self.assertLessEqual(metrics["mape"], 0.1) + self.assertAlmostEqual(op, exp_op, places=0) def test_univariate(self): """TimeSeries: Test for univariate"""