PyMC3 моделирование данных клиентов

Я столкнулся со следующей ситуацией. Два типа клиентов приходят на сайт, чтобы купить продукты. Продукты ранжируются в списке. Предполагается, что есть два типа клиентов, постоянные и случайные. Оба типа будут покупать продукты, перечисленные на сайте. Продукты с более низким рейтингом реже покупаются обоими типами клиентов. Тем не менее, лояльные покупатели с большей вероятностью приобретут товар данного ранга, чем случайный покупатель. Чтобы смоделировать это, я делаю следующие предположения

  • Процент пользователей лояльных (но пока неизвестно)
  • Лояльные покупатели (и случайные покупатели) с большей вероятностью будут покупать товары более высокого ранга, но лояльные покупатели с большей вероятностью. Вероятность покупки как функция ранга моделируется как y_i = alpha_0 + alpha_1*(1/Rank).

У нас есть только наблюдаемые оценки и сигнал "да / нет" о том, покупал ли клиент продукт. Как можно использовать вероятностное программирование с PyMC3, чтобы вернуться к параметрам модели? Вот что я так далеко.

Функция для симуляции клиентов для создания фиктивных данных.

def draw_customers(p1, p2, p3, p4, beta, n):
x = []
y = []
for i in range(n):
    rank = np.random.randint(1, 5, 1)[0]
    x.append(rank)
    if np.random.rand() < beta:
        if p1 + p2/rank < 0.06:
            y.append(1)
        else:
            y.append(0)
    else:
        if p3 + p4/rank < 0.06:
            y.append(1)
        else:
            y.append(0)
return x, y

Фактическая модель выглядит следующим образом

with pm.Model():
    b = Uniform('b', 0, 1)
    p = Normal('p', mu=0, sd=1, shape=4)
    def logp(x):
        return (b*(p[0] + p[1]/x_obs) + (1 - b)*(p[2] + p[3]/x_obs)).sum()
    click_prob = pm.DensityDist('click_prob', logp, observed = y_obs)
    step = pm.Metropolis()
    trace = pm.sample(10000, step=step, progressbar=True)

pm.summary(trace, vars=['p', 'b'])

Однако, когда я запускаю эту модель, я получаю следующие результаты. п:

Средняя ошибка SD MC 95% интервал HPD


189.000 36.928 3.685 [91.969, 203.460] 491.203 101.231 10.112 [212.274, 525.501] 2.058 7.882 0.771 [-4.004, 14.968] -0.576 2.876 0.248 [-9.079, 3.181]

Задние квантили: 2,5 25 50 75 97,5 | -------------- | ============== | =========== === | -------------- |

38.316 199.001 199.872 200.587 201.975 93.135 520.955 521.808 522.551 524.000 -1.944 -0.591 0.162 0.960 36.604 -10.925 -0.876 -0.104 0,717 2,188

б:

Средняя ошибка SD MC 95% интервал HPD


1.0000,016 0,000 [1.000, 1.000]

Задние квантили: 2,5 25 50 75 97,5 | -------------- | ============== | =========== === | -------------- |

1.000 1.000 1.000 1.000 1.000

который, кажется, показывает, что параметры моделируемой модели не восстанавливаются. Может кто-то указать, что я делаю не так? Похоже, это довольно простой пример. заранее спасибо

0 ответов

Другие вопросы по тегам