Моделирование пуассоновского RV с неизвестным числом структурных изменений
У меня есть некоторые данные для взаимодействия с пользователем за последние 365 дней. У меня есть основания полагать, что произошло несколько событий, которые изменяют частоту взаимодействия пользователей. Модель выглядит следующим образом:
Предположения
- Данные суточного счета (локально) взяты из распределения Пуассона с параметром
lambda
- Есть между
0
а такжеn<365
структурные изменения, т.е.lambda
изменения - Эти изменения могут произойти в любое время в течение 365 дней
Желаемые ответы
- Сколько раз происходили вероятные структурные изменения?
- Когда произошли эти изменения?
Я хотел бы создать экземпляр этой модели с tensorflow_probability
, Модель, описанная в конце этой главы, кажется хорошей отправной точкой. Однако количество структурных изменений жестко запрограммировано в 1. Как я могу расширить эту модель для обработки неизвестного количества изменений?
РЕДАКТИРОВАТЬ
Следующий код может создать тензор случайной длины, который содержит выборки из экспоненциального распределения. Я беспокоюсь о последних двух строках, потому что не знаю, sample()
Функция совместима с методами Монте-Карло.
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp
tfd = tfp.distributions
# probability of a structural change occurring on a given day
change_prob = np.array(10./365., np.float32)
# total number of stuctural changes
nchanges_prior = tfd.Geometric(probs=change_prob, name='nchanges_prior')
# rate of user-interactions
alpha = np.array(1. / 50., np.float32)
lambda_prior = tfd.Exponential(rate=alpha, name='lambda_prior')
nchanges = tf.to_int32(nchanges_prior.sample()) # <<< Concerned
lambdas = lambda_prior.sample(nchanges) # Concerned
1 ответ
Вы совершенно правы, что модели со случайным числом скрытых переменных сложно написать в большинстве существующих инструментов, включая TFP, потому что они требуют, чтобы форма вычисления вывода изменялась динамически во время вывода: набор выводов сам по себе один из количеств, которые вы делаете вывод. Это (легко) не вписывается в стандартные рамки графов вычислений.
Обычное решение - переписать модель, чтобы использовать фиксированное число переменных. Например, если вы думаете, что будет не более 20 структурных изменений, вы можете написать модель с 20 точками изменения, где некоторые могут быть "фиктивными" точками изменения (например, происходящими за пределами длины наблюдаемого сигнала), так что только подмножество действительно активно.
Связанный подход заключается в том, чтобы рассматривать структурную неопределенность как проблему выбора байесовской модели: вместо того, чтобы подгонять модель с неопределенной структурой, вы рассматриваете несколько моделей, каждая из которых имеет различное количество переменных, и сравниваете их с использованием предельной вероятности.
К сожалению, я не знаю каких-либо конкретных примеров применения этих подходов конкретно к моделям точек изменения - может быть, у других будут лучшие ссылки?