Use TensorFlow for forecasting

Le notebook de référence pour ce tutoriel est TimeSeries.

Lorsqu’on a créé un dataset pour les time series – comme ci-dessous :

def windowed_dataset(series, window_size, batch_size, shuffle_buffer):
  dataset = tf.data.Dataset.from_tensor_slices(series)
  dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)
  dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))
  dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))
  dataset = dataset.batch(batch_size).prefetch(1)
  return dataset

et un modèle :

dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)
print(dataset)
l0 = tf.keras.layers.Dense(1, input_shape=[window_size])
model = tf.keras.models.Sequential([l0])
 
 
model.compile(loss="mse", optimizer=tf.keras.optimizers.SGD(lr=1e-6, momentum=0.9))
model.fit(dataset,epochs=100,verbose=0)
1
model.summary()

Ici le modèle est des plus simples puisque c’est un modèle linéaire.

model.fit(dataset,epochs=100,verbose=0)

On peut ensuite effectuer des prévisions (forecasts) :

forecast = []
 
for time in range(len(series) - window_size):
  forecast.append(model.predict(series[time:time + window_size][np.newaxis]))
 
forecast = forecast[split_time-window_size:]
results = np.array(forecast)[:, 0, 0]
 
 
plt.figure(figsize=(10, 6))
 
plot_series(time_valid, x_valid)
plot_series(time_valid, results)

On utilise model.predict pour calculer les prévisions et plot_series pour afficher les résultats comparés.

Ensuite on calcule la métrique, MAE le plus souvent.

tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()