I think we’d need some more information on your current model to give you advice. The reasoning can be quite different depending on what kind of model your using. I only use neural nets, and I found when I first started I saw a similar pattern. For me at least I think it was because I was using mean square error as the primary component of my loss function, and of course, if you’re trying to predict a dataset as complicated as this, the model can do a lot better sitting around the mean than making extreme guesses and getting large penalties. If you’re using boosted trees/neural nets you could try a different loss function. My model no longer has this behaviour, I’m pretty sure it’s because my loss function is now mostly calculated from the correlation of the predictions with the ground-truths for each era, which of course makes training less sensitive to individual predictions.
Also bear in mind that scale doesn’t affect correlation, so if you scaled your current predictions to be between 0 and 1, you’d have the same correlation, so it isn’t necessarily terrible having them all packed tightly on the mean. I guess unless it’s happening because your model is struggling to learn anything useful, then it’s a problem. So I’d be more concerned about your performance and risk metrics than how tightly centred it is on the mean.
This explains nicely why scale isn’t important for correlation: