TimeSeries: Using Tensorflow for time series modelling and forecasting
Jump to navigation
Jump to search
This is a quick example on using TensorFlow to learn about a time series and perform forecasting. This can be used as an entry point for detecting anomalies.
Module import
import numpy as np import tensorflow as tf from tensorflow.contrib.timeseries.python.timeseries import NumpyReader tf.logging.set_verbosity(tf.logging.WARN) tf.__version__
1.4.0
Plots customisation
%matplotlib inline import matplotlib import matplotlib.pyplot as plt import seaborn as sns sns.set() sns.set_context("notebook", font_scale=1.2, rc={"lines.linewidth": 1.5})
Create time series
In this section we create the time series that we are going to use for training, fitting and prediction.
steps = 200 x = np.array(range(steps)) noise = np.random.uniform(-0.25, 0.25, steps) y = np.sin(np.pi * x / 10) + np.cos(np.pi * x / 10) + x / 200. + noise plt.figure(figsize=(12,6)) plt.xlabel('time step') plt.ylabel('f') _ = plt.plot(x, y)
Example image Train network
data = { tf.contrib.timeseries.TrainEvalFeatures.TIMES: x, tf.contrib.timeseries.TrainEvalFeatures.VALUES: y } reader = NumpyReader(data) train_input_fn = tf.contrib.timeseries.RandomWindowInputFn( reader, batch_size=20, window_size=30) ar = tf.contrib.timeseries.ARRegressor( periodicities=20, input_window_size=20, output_window_size=10, num_features=1, loss=tf.contrib.timeseries.ARModel.NORMAL_LIKELIHOOD_LOSS)
_ = ar.train(input_fn=train_input_fn, steps=600)
Evaluate network
evaluation_input_fn = tf.contrib.timeseries.WholeDatasetInputFn(reader) evaluation = ar.evaluate(input_fn=evaluation_input_fn, steps=10)
Predictions
(predictions,) = tuple(ar.predict( input_fn=tf.contrib.timeseries.predict_continuation_input_fn( evaluation, steps=40)))
Plotting
plt.figure(figsize=(12,6)) x = data['times'].reshape(-1) y = data['values'].reshape(-1) plt.plot(x, data['values'].reshape(-1), ':', label='origin') x = evaluation['times'].reshape(-1) y = evaluation['mean'].reshape(-1) s = np.sqrt(evaluation['covariance'].reshape(-1)) plt.plot(x, evaluation['mean'].reshape(-1), label='evaluation', color='green') plt.fill_between(x, y-5*s,y+5*s, alpha=0.1, color='blue') plt.fill_between(x, y-3*s,y+3*s, alpha=0.1, color='blue') x = predictions['times'].reshape(-1) y = predictions['mean'].reshape(-1) s = np.sqrt(predictions['covariance'].reshape(-1)) plt.plot(x, y, label='prediction',color='orange') plt.fill_between(x, y-5*s,y+5*s, alpha=0.1, color='orange') plt.fill_between(x, y-3*s,y+3*s, alpha=0.1, color='orange') plt.xlabel('time_step') plt.ylabel('values') _ = plt.legend()
Example image