Как реализовать интегрированный компонент тенденции случайного блуждания в вероятности Tensorflow

Я использую tensorflow 2.1 и tensorflow_probability 0.9. Я подобрал модель структурного временного ряда с сезонным компонентом.

Я хочу реализовать интегрированное случайное блуждание, чтобы сгладить компонент тренда, в соответствии с анализом временных рядов с помощью методов пространства состояний: второе издание, Durbin & Koopman. Интегрированное случайное блуждание достигается путем установки дисперсии компонента уровня равным 0.

Возможна ли реализация этого ограничения в Tensorflow Probability?

В дополнение к этому в Дурбине и Купмане обсуждаются случайные блуждания более высокого порядка. Можно ли это реализовать?

Спасибо заранее за ваше время.


person Andrew Doherty    schedule 12.02.2020    source источник
comment
Не стесняйтесь также спрашивать на [email protected], я спрашивал других, могут ли они ответить здесь.   -  person Brian Patton    schedule 14.02.2020
comment
Большое спасибо за ваше время Брайан. Ответ, который я получил, отличный.   -  person Andrew Doherty    schedule 15.02.2020


Ответы (1)


Если я правильно понимаю, интегрированное случайное блуждание — это просто частный случай LocalLinearTrend, в котором уровень просто интегрирует случайно развивающийся компонент наклона (т.е. он не имеет независимого источника вариаций). Вы можете исправить это, создав подкласс LocalLinearTrend и исправив level_scale = 0. в моделях, которые он создает:

class IntegratedRandomWalk(sts.LocalLinearTrend):

  def __init__(self,
               slope_scale_prior=None,
               initial_slope_prior=None,
               observed_time_series=None,
               name=None):
    super(IntegratedRandomWalk, self).__init__(
      slope_scale_prior=slope_scale_prior,
      initial_slope_prior=initial_slope_prior,
      observed_time_series=observed_time_series,
      name=None)
    # Remove 'level_scale' parameter from the model.
    del self._parameters[0]

  def _make_state_space_model(self,
                              num_timesteps,
                              param_map,
                              initial_state_prior=None,
                              initial_step=0):

    # Fix `level_scale` to zero, so that the level
    # cannot change except by integrating the
    # slope.
    param_map['level_scale'] = 0.

    return super(IntegratedRandomWalk, self)._make_state_space_model(
      num_timesteps=num_timesteps,
      param_map=param_map,
      initial_state_prior=initial_state_prior,
      initial_step=initial_step)

(было бы математически эквивалентно построить LocalLinearTrend с level_scale_prior, сосредоточенным на нуле, но это ограничение затрудняет вывод, поэтому обычно лучше просто игнорировать или полностью удалить параметр, как я сделал здесь).

Под случайными блужданиями более высокого порядка вы подразумеваете авторегрессионные модели? Если это так, sts.Autoregressive может иметь значение.

person Dave Moore    schedule 15.02.2020
comment
Блестящий Дэйв. Большое спасибо за ваше время. Увидеть пример того, как изменить реализацию с помощью подклассов, невероятно полезно. Один дополнительный вопрос, который я опубликовал, заключается в том, как мы можем разложить модель и визуализировать компонент наклона: -in-tensorflow-probability" title="как разложить и визуализировать компонент наклона в вероятности тензорного потока"> stackoverflow.com/questions/60237047/ Если у вас будет возможность ответить на этот вопрос, это будет потрясающе. Это фундамент моей исследовательской работы, которую я сейчас пишу. - person Andrew Doherty; 15.02.2020