The parameterization np.exp(elo_diffs[i] * alpha1) is a little nonstandard because a product inside the exponentiation can lead to some very abrupt behavior. What if you parameterized as elo_diffs[i] + alpha1 instead? Is there a process-based reason that you want to use the multiplication?