split train predict + fixes
Browse files- src/model.py +25 -9
src/model.py
CHANGED
|
@@ -7,6 +7,7 @@ from darts.dataprocessing.transformers import Scaler
|
|
| 7 |
import matplotlib.pyplot as plt
|
| 8 |
import numpy as np
|
| 9 |
import pandas as pd
|
|
|
|
| 10 |
|
| 11 |
def load_ILINetDataset():
|
| 12 |
"""
|
|
@@ -41,7 +42,7 @@ def load_ILINetDataset():
|
|
| 41 |
|
| 42 |
def preprocess_data(ilidata):
|
| 43 |
ilitotal = ilidata['ILITOTAL']
|
| 44 |
-
covariates = ilidata.drop_columns(col_names='ILITOTAL')
|
| 45 |
|
| 46 |
# Apply logaritmic transformation
|
| 47 |
log_ili = ilitotal.map(np.log)
|
|
@@ -69,14 +70,27 @@ def scale_train(train_ili):
|
|
| 69 |
return train_ili_scaled, scaler
|
| 70 |
|
| 71 |
|
| 72 |
-
def
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
| 77 |
# print('Exponential Smoothing mape:', mape(val_ili, scaler.inverse_transform(exp_preds)))
|
| 78 |
|
| 79 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
|
| 82 |
def inverse_scale_predictions(scaled_preds, scaler):
|
|
@@ -85,11 +99,13 @@ def inverse_scale_predictions(scaled_preds, scaler):
|
|
| 85 |
return preds
|
| 86 |
|
| 87 |
|
| 88 |
-
def plot_results(train_ili, val_ili,
|
|
|
|
| 89 |
train_ili.plot(label='train')
|
| 90 |
val_ili.plot(label='val')
|
| 91 |
-
|
| 92 |
-
|
|
|
|
| 93 |
|
| 94 |
|
| 95 |
|
|
|
|
| 7 |
import matplotlib.pyplot as plt
|
| 8 |
import numpy as np
|
| 9 |
import pandas as pd
|
| 10 |
+
import os
|
| 11 |
|
| 12 |
def load_ILINetDataset():
|
| 13 |
"""
|
|
|
|
| 42 |
|
| 43 |
def preprocess_data(ilidata):
|
| 44 |
ilitotal = ilidata['ILITOTAL']
|
| 45 |
+
covariates = ilidata.drop_columns(col_names='ILITOTAL') # TODO perform predictions with covariates time series
|
| 46 |
|
| 47 |
# Apply logaritmic transformation
|
| 48 |
log_ili = ilitotal.map(np.log)
|
|
|
|
| 70 |
return train_ili_scaled, scaler
|
| 71 |
|
| 72 |
|
| 73 |
+
def train_(train_ili_scaled, val_ili, save_model_path='./models'):
|
| 74 |
+
model = ExponentialSmoothing()
|
| 75 |
+
model.fit(train_ili_scaled)
|
| 76 |
+
|
| 77 |
+
model_name = str(model).split('(')[0]
|
| 78 |
+
path = f'{save_model_path}/{model_name}.pkl'
|
| 79 |
+
if not os.path.exists(path=path):
|
| 80 |
+
os.makedirs(path)
|
| 81 |
+
model.save(path)
|
| 82 |
+
else:
|
| 83 |
+
model = ExponentialSmoothing.load(path)
|
| 84 |
|
| 85 |
# print('Exponential Smoothing mape:', mape(val_ili, scaler.inverse_transform(exp_preds)))
|
| 86 |
|
| 87 |
+
return model
|
| 88 |
+
|
| 89 |
+
|
| 90 |
+
def predict(model, val_ili):
|
| 91 |
+
preds = model.predict(len(val_ili))
|
| 92 |
+
|
| 93 |
+
return preds
|
| 94 |
|
| 95 |
|
| 96 |
def inverse_scale_predictions(scaled_preds, scaler):
|
|
|
|
| 99 |
return preds
|
| 100 |
|
| 101 |
|
| 102 |
+
def plot_results(train_ili, val_ili, preds):
|
| 103 |
+
fig, _ = plt.subplots()
|
| 104 |
train_ili.plot(label='train')
|
| 105 |
val_ili.plot(label='val')
|
| 106 |
+
preds.plot(label='preds')
|
| 107 |
+
|
| 108 |
+
return fig
|
| 109 |
|
| 110 |
|
| 111 |
|