tfp.sts.Autoregressive

Class `Autoregressive`

Formal representation of an autoregressive model.

Inherits From: `StructuralTimeSeries`

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.

`__init__`

View source

``````__init__(
order,
coefficients_prior=None,
level_scale_prior=None,
initial_state_prior=None,
coefficient_constraining_bijector=None,
observed_time_series=None,
name=None
)
``````

Specify an autoregressive model.

Args:

• `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'.

Properties

`batch_shape`

Static batch shape of models represented by this component.

Returns:

• `batch_shape`: A `tf.TensorShape` 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`. It may be partially defined or unknown.

`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

``````batch_shape_tensor()
``````

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

``````joint_log_prob(observed_time_series)
``````

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

``````make_state_space_model(
num_timesteps,
param_vals=None,
initial_state_prior=None,
initial_step=0
)
``````

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

``````prior_sample(
num_timesteps,
initial_step=0,
params_sample_shape=(),
trajectories_sample_shape=(),
seed=None
)
``````

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: .
• `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: .
• `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 `Tensor`s, in order corresponding to `self.parameters`, each of shape `params_sample_shape + prior.batch_shape + prior.event_shape`.