Hi,
And thanks for the kind words, always nice to hear 
You want PPC back with the shape (16770, 50), right? Did you try not passing samples explicitly to sample_posterior_predictive? I think it’ll automatically default to the number of samples in the train set.
Also, I don’t think you need total_size=len(df) in your likelihood: since you’re passing observations, it should pick the shape up automatically.
Finally, note that since PyMC 3.9.0, you can replace:
corr_multi_packed = pm.LKJCholeskyCov(
'corr_multi',
n = cov_dims,
eta = 5.,
sd_dist = sigma_multi_effects
)
corr_multi_effects = pm.expand_packed_triangular(cov_dims, corr_multi_packed)
by the simple one-liner:
# PyMC >= 3.9 extracts the expanded Cholesky, stds and matrix of correlations automatically
corr_multi_effects, Rho, sigmas = pm.LKJCholeskyCov(
"corr_multi", n=cov_dims, eta=5, sd_dist=sigma_multi_effects, compute_corr=True
)
Hope this helps 