tfp.sts.Autoregressive

View source on GitHub

Formal representation of an autoregressive model.

Inherits From: StructuralTimeSeries

Used in the notebooks

Used in the tutorials

An autoregressive (AR) model posits a latent level whose value at each step is a noisy linear combination of previous steps:

level[t+1] = (sum(coefficients * levels[t:t-order:-1]) +
              Normal(0., level_scale))

The latent state is levels[t:t-order:-1]. We observe a noisy realization of the current level: f[t] = level[t] + Normal(0., observation_noise_scale) at each timestep.

If coefficients=[1.], the AR process is a simple random walk, equivalent to a LocalLevel model. However, a random walk's variance increases with time, while many AR processes (in particular, any first-order process with abs(coefficient) < 1) are stationary, i.e., they maintain a constant variance over time. This makes AR processes useful models of uncertainty.

See the Wikipedia article for details on stationarity and other mathematical properties of autoregressive processes.

order scalar Python positive int specifying the number of past timesteps to regress on.
coefficients_prior optional tfd.Distribution instance specifying a prior on the coefficients parameter. If None, a default standard normal (tfd.MultivariateNormalDiag(scale_diag=tf.ones([order]))) prior is used. Default value: None.
level_scale_prior optional tfd.Distribution instance specifying a prior on the level_scale parameter. If None, a heuristic default prior is constructed based on the provided observed_time_series. Default value: None.
initial_state_prior optional tfd.Distribution instance specifying a prior on the initial state, corresponding to the values of the process at a set of size order of imagined timesteps before the initial step. If None, a heuristic default prior is constructed based on the provided observed_time_series. Default value: None.
coefficient_constraining_bijector optional tfb.Bijector instance representing a constraining mapping for the autoregressive coefficients. For example, tfb.Tanh() constrains the coefficients to lie in (-1, 1), while tfb.Softplus() constrains them to be positive, and tfb.Identity() implies no constraint. If None, the default behavior constrains the coefficients to lie in (-1, 1) using a Tanh bijector. Default value: None.
observed_time_series optional float Tensor of shape batch_shape + [T, 1] (omitting the trailing unit dimension is also supported when T > 1), specifying an observed time series. Any priors not explicitly set will be given default values according to the scale of the observed time series (or batch of time series). May optionally be an instance of tfp.sts.MaskedTimeSeries, which includes a mask Tensor to specify timesteps with missing observations. Default value: None.
name the name of this model component. Default value: 'Autoregressive'.

batch_shape Static batch shape of models represented by this component.
initial_state_prior

latent_size Python int dimensionality of the latent space in this model.
name Name of this model component.
parameters List of Parameter(name, prior, bijector) namedtuples for this model.

Methods

batch_shape_tensor

View source

Runtime batch shape of models represented by this component.

Returns
batch_shape int Tensor giving the broadcast batch shape of all model parameters. This should match the batch shape of derived state space models, i.e., self.make_state_space_model(...).batch_shape_tensor().

joint_log_prob

View source

Build the joint density log p(params) + log p(y|params) as a callable.

Args
observed_time_series Observed Tensor trajectories of shape sample_shape + batch_shape + [num_timesteps, 1] (the trailing 1 dimension is optional if num_timesteps > 1), where batch_shape should match self.batch_shape (the broadcast batch shape of all priors on parameters for this structural time series model). May optionally be an instance of tfp.sts.MaskedTimeSeries, which includes a mask Tensor to specify timesteps with missing observations.

Returns
log_joint_fn A function taking a Tensor argument for each model parameter, in canonical order, and returning a Tensor log probability of shape batch_shape. Note that, unlike tfp.Distributions log_prob methods, the log_joint sums over the sample_shape from y, so that sample_shape does not appear in the output log_prob. This corresponds to viewing multiple samples in y as iid observations from a single model, which is typically the desired behavior for parameter inference.

make_state_space_model

View source

Instantiate this model as a Distribution over specified num_timesteps.

Args
num_timesteps Python int number of timesteps to model.
param_vals a list of Tensor parameter values in order corresponding to self.parameters, or a dict mapping from parameter names to values.
initial_state_prior an optional Distribution instance overriding the default prior on the model's initial state. This is used in forecasting ("today's prior is yesterday's posterior").
initial_step optional int specifying the initial timestep to model. This is relevant when the model contains time-varying components, e.g., holidays or seasonality.

Returns
dist a LinearGaussianStateSpaceModel Distribution object.

prior_sample

View source

Sample from the joint prior over model parameters and trajectories.

Args
num_timesteps Scalar int Tensor number of timesteps to model.
initial_step Optional scalar int Tensor specifying the starting timestep. Default value: 0.
params_sample_shape Number of possible worlds to sample iid from the parameter prior, or more generally, Tensor int shape to fill with iid samples. Default value: [] (i.e., draw a single sample and don't expand the shape).
trajectories_sample_shape For each sampled set of parameters, number of trajectories to sample, or more generally, Tensor int shape to fill with iid samples. Default value: [] (i.e., draw a single sample and don't expand the shape).
seed Python int random seed.

Returns
trajectories float Tensor of shape trajectories_sample_shape + params_sample_shape + [num_timesteps, 1] containing all sampled trajectories.
param_samples list of sampled parameter value Tensors, in order corresponding to self.parameters, each of shape params_sample_shape + prior.batch_shape + prior.event_shape.