Что такое probabilistic programming (PyMC, Stan, NumPyro)?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
Probabilistic programming — это способ описывать модель как набор вероятностных допущений, а не как жёсткую формулу. Вместо одного ответа система оценивает распределение возможных значений и неопределённость. Это особенно полезно, когда важно не только предсказать, но и понять доверие к прогнозу.
Определение:
Probabilistic programming — это подход к моделированию, в котором случайные величины, априорные знания и наблюдения задаются в виде программы, а затем с помощью методов вывода вычисляется апостериорное распределение параметров и скрытых переменных.
Такие фреймворки, как PyMC, Stan и NumPyro, позволяют:
- задавать вероятностную модель декларативно;
- автоматически строить вывод по MCMC, variational inference или их вариациям;
- работать с неопределённостью, иерархическими структурами и латентными переменными.
Пример использования:
Например, нужно оценить эффект новой версии продукта на конверсию, когда данных мало и выборки несбалансированы. Вместо одной точечной оценки можно задать байесовскую модель для конверсии и получить распределение эффекта, чтобы понять вероятность улучшения и риск ухудшения.
import pymc as pm
with pm.Model() as model:
p_control = pm.Beta("p_control", alpha=1, beta=1)
p_treat = pm.Beta("p_treat", alpha=1, beta=1)
y_control = pm.Binomial("y_control", n=1000, p=p_control, observed=120)
y_treat = pm.Binomial("y_treat", n=980, p=p_treat, observed=140)
diff = pm.Deterministic("diff", p_treat - p_control)
trace = pm.sample(1000, tune=1000, chains=4)
Пояснение кода:
В этом примере код строит простую байесовскую модель двух конверсий.
p_controlиp_treat— неизвестные вероятности конверсии для контрольной и тестовой групп.Beta(1, 1)задаёт слабый априор: до наблюдений все значения вероятности считаются одинаково возможными.Binomial(...)связывает скрытые вероятности с наблюдаемыми данными: сколько успешных действий было при заданном числе пользователей.diffхранит разницу между конверсиями как производную величину, которую удобно анализировать.pm.sample(...)запускает MCMC-вывод и строит выборку из апостериорного распределения, а не одну точку.
После этого можно оценить:
- среднюю разницу конверсий;
- вероятность, что
p_treat > p_control; - интервалы неопределённости для эффекта.
Ключевые моменты:
- Probabilistic programming описывает не только модель, но и неопределённость в ней.
- Главная цель — получить апостериорное распределение, а не одну оценку параметра.
- PyMC и NumPyro чаще используют Python-экосистему, Stan — отдельный DSL с сильным inference engine.
- Подход особенно полезен для байесовских моделей, иерархий, latent variables, A/B-тестов, GP и Bayesian optimization.
- Основная цена — вычислительная сложность и необходимость понимать, как работает inference.
- На практике важно уметь выбирать между MCMC, variational inference и более простыми приближениями.