My old churn model measured how surprising a user’s silence was against their own history. That’s a real question with a real answer, but it isn’t churn risk: it flagged regulars who took a week off and ignored light users who’d quietly stopped. It passed every backtest for two years; a confused user in a focus group is what caught it. The replacement is the table banks use for late accounts – bin users by how long they’ve been gone and how much they normally use the product, count who came back – with the same empirical Bayes shrinkage as before, pointed at the right quantity this time.
Wen et al. show two forecasters with identical marginal predictions can make arbitrarily different decisions. A disjoint contextual bandit (one model per arm) is exactly their independence forecaster. In conjugate linear models the joint is exact and free, and partial pooling through a shared component gets it back.
If you’re running a Bayesian model in a non-stationary environment, you need to forget old data. The obvious approach – scale the precision matrix by a constant – has a failure mode called covariance windup. This post works through three forgetting rules, ending with one borrowed from adaptive control that dominates the others.
I probably overuse the normal-inverse-gamma posterior. Every time I build a bandit system, every time I need uncertainty quantification for sequential decisions, I end up back at conjugate linear regression.
Suppose you’re choosing a continuous value x and observing a noisy reward y. The reward depends on x through some unknown function f(x), and you’re making decisions repeatedly—learning as you go. This post explores how to build scalable Bayesian models for this problem using principled approximations.
A Motivating Example
We were studying how microglia affect neuronal networks using a standard imaging experiment: 3 mice, 3 coverslips per condition, about 20 neurons measured per coverslip. Our question: Does LPS activation significantly increase PNA signal?