Skip to main content
4 of 5
added 136 characters in body
Sycorax
  • 94.1k
  • 23
  • 236
  • 390

This is what I would focus on.

  • Limitations on max_depth might cause terminal nodes to group together observations with very small probabilities with other observations where probabilities aren't that small, so the effect is to move the leaf weights away from extreme values. Likewise, something similar with large probability observations. Try increasing max_depth.
  • lambda penalizes the absolute value of the weights. You want weights with large absolute value, so try setting this smaller.
  • Column subsampling could omit the important features (time left in the game sounds important), so I wouldn't use it.
  • Increasing the maximum number of trees dramatically and using early stopping could help.
  • Tuning the learning rate alongside these parameters is important.

Since your question is basically about calibration of probabilities, something to know is that XGBoost is notorious for producing poorly-calibrated predicted probabilities. It's unclear if this is the culprit in your case; usually, the poor calibration arises from predictions that are too close to 0 or 1, but you have the opposite finding here. This is why I think you might be able to close the gap using different hyper-parameters.


I wonder if an XGBoost model is the best approach, because your data are arranged sequentially in time (60, 50, ... 10 minutes remaining, etc.). I would investigate alternative models that can account for this temporal dependency.

If you think about each game as a sequence, the probability of Team A winning should have a wide band around it at the start of the game, and then that band should narrow as the clock runs out. I don't know how to model that, but intuitively, that seems like what you're looking for.

Sycorax
  • 94.1k
  • 23
  • 236
  • 390