The projections use machine learning to build a distribution of player performance in a range of metrics, and then a MonteCarlo/Markov Chain approach to ‘simulating’ each match 10,000 times. At the end of that, we have a distribution of the player’s fantasy scores.
We feed into the system a number of factors, including the player’s historic stats, and model the best way to project each statistic on a % of game played basis (e.g. the best predictor of future goals isn't past goals, but a combination of goals, behinds, touches of the ball, team expected winning margin, the opponents recent form and other factors). We then build a distribution of a player's expected performance across those statistics, simulate each game around 10,000 times, and our 'projection' is calculated using each scoring system and a slightly adjusted mean of those simulations.
We also store the results of each simulation, to allow us to show - for example - a projection based only on the games where Richmond win by at least 20. The advantage of this approach is if we want to adjust a guy from 80% playing time to 65% playing time, we can make a reasonable estimate more quickly than running all the simulations again, which would take almost a full 24 hours.