diff --git a/pyFTS/common/Transformations.py b/pyFTS/common/Transformations.py index 2f56e14..aa18b71 100644 --- a/pyFTS/common/Transformations.py +++ b/pyFTS/common/Transformations.py @@ -250,9 +250,7 @@ class ROI(Transformation): return modified def inverse(self, data, param=None, **kwargs): - modified = [param[0]] - for i in np.arange(1, len(data)): - modified.append((modified[i - 1] * data[i]) + modified[i - 1]) + modified = [(param[i - 1] * data[i]) + param[i - 1] for i in np.arange(1, len(data))] return modified diff --git a/pyFTS/tests/transformations.py b/pyFTS/tests/transformations.py index a7049e6..35ad8e0 100644 --- a/pyFTS/tests/transformations.py +++ b/pyFTS/tests/transformations.py @@ -53,7 +53,7 @@ detrend = trend.apply(data) plt.plot(trend.inverse(detrend, data, date_offset=pd.DateOffset(months=1))) ''' - +''' data = Enrollments.get_dataframe() trend = Transformations.LinearTrend(data_field='Enrollments', index_field='Year') @@ -67,8 +67,64 @@ plt.plot(trend.trend(data)) #) detrend = trend.apply(data) plt.plot(trend.inverse(detrend, data)) +''' + +dataset = pd.read_csv('https://query.data.world/s/nxst4hzhjrqld4bxhbpn6twmjbwqk7') +dataset['data'] = pd.to_datetime([str(y)+'-'+str(m) for y,m in zip(dataset['Ano'].values, dataset['Mes'].values)], + format='%Y-%m') +roi = Transformations.ROI() + + +train = dataset['Total'].values[:30] +test = dataset['Total'].values[30:] + +fs = Grid.GridPartitioner(data=train, npart=5, transformation=roi) + +from pyFTS.models import hofts, pwfts + +model = pwfts.ProbabilisticWeightedFTS(partitioner=fs, order=2) +#model = hofts.WeightedHighOrderFTS(partitioner=fs, order=1) +model.append_transformation(roi) + + +model.fit(train) + +fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[10,5]) +ax.plot(test) + +''' +train = dataset.iloc[:30] +test = dataset.iloc[30:] + +from pyFTS.models.multivariate import common, variable, mvfts, wmvfts +from pyFTS.partitioners import Grid, Entropy +from pyFTS.models.seasonal.common import DateTime +from pyFTS.models.seasonal import partitioner as seasonal +sp = {'seasonality': DateTime.month , 'names': ['Jan','Fev','Mar','Abr','Mai','Jun','Jul', 'Ago','Set','Out','Nov','Dez']} + +vmonth = variable.Variable("Month", data_label="data", partitioner=seasonal.TimeGridPartitioner, npart=12, + data=train, partitioner_specific=sp) + +vtur = variable.Variable("Turistas", data_label="Total", alias='tur', + partitioner=Grid.GridPartitioner, npart=10, transformation=roi, + data=train) + +model = wmvfts.WeightedMVFTS(explanatory_variables=[vmonth, vtur], target_variable=vtur) +model.fit(train) + +fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[10,5]) + +ax.plot(test['Total'].values) +''' + +forecast = model.predict(test) + +for k in np.arange(model.order): + forecast.insert(0,None) + +ax.plot(forecast) plt.show() -print(data) +print(dataset)