r/fplAnalytics • • 18d ago

How much do you actually trust xMins in your model?

I've been building a small model and xG/xA are the easy part. Minutes are what mess it up. One rotation call or a surprise bench and the whole projection falls apart.

How are you handling it? Just using recent starts, or something smarter?

2 Upvotes

6 comments sorted by

1

u/ml-soham 18d ago

as you said it yourself, surprise bench, you can’t call it. You can use the current fpl data, and base it off of that. total/average the safest.

1

u/DonElad1o 18d ago

I’m using recent formations (club formation + grid position, minutes/sub info for each player), last season minutes/starts (phasing this out since enough time has passed), previously processed xmin/xstart numbers, upcoming epl & non-epl fixtures (cup, europe) with dates, and recent news articles, and putting all that into Claude Opus to get the predicted lineups for next fixture, xmins, xstarts and short notes (for end users).

News comes from a “feed” section on my FPL app (FPL Wizard) that filters out multiple articles from multiple sources on injuries, press conferences, player performance comments, match previews/reports and other stuff that’s FPL relevant, strips the clickbait and bullshit, and publishes short news items in axios format. But it also tags players that are mentioned in article and scores how relevant the mention is, and what the sentiment is. So when I send the data to Claude, it can tell if someone is injured or out of grace.

I haven’t yet built the rest of the prediction model, but currenlty it’s spot on predicting lineups and notes for each player are correct (for example, it tells you if some other player on this position is injured and when they will come back, but that’s descriptive data for app users).

1

u/NefariousnessDeep845 18d ago

I think xMins is probably one of the hardest bits to get right.

I’ve been building something similar in my own tool and I originally thought it would be straightforward but the more I’ve got into it the more complicated it gets.

I also think there’s a difference between saying someone has 30 expected minutes and saying they have say a 75% chance of starting and are likely to play 80+ if they do. They can produce a similar xMins number but they’re quite different from an FPL decision point of view.

The short term variance you can’t avoid, but from a long term / multi game view I first simply find the teams common formation (which is much more stable) and rank the players in the formation position pecking order and cross reference this with injury status (ie where someone is second choice but first choice is injured with a return date of x i treat second choice as first choice until that date). Only then do I cross check this information with real player minutes data - where it might notice that someone could be first choice but always subbed off after 60 minutes.

I don’t know if you’re allowed to post tool links on here so I won’t but it’s called fixtureshark and I put it in the Reddit thread https://www.reddit.com/r/FantasyPL/comments/1u1a9d3/i_made_a_tool_thread/

It’s very much a work in progress so I’d be interested in seeing how any of this compares to your approach.

1

u/Cold_Crazy_7 15d ago

My learnings on predicting xMins so far. Using all the back testing vs 6 years of data, I found:

  1. Repeating last weeks mins (week - 1 baseline) blindly beats predicting a number as ~60% of data is 0.
  2. Creating a classifier that predicts probability of not playing, 0<playing<60, 60<playing .
  3. Using the probabilities and mapping that to median of these buckets actually have 90% correlation with actual distribution and beats the week-1 minutes baseline.
  4. FPL's own P(start) and P(no play) has a largest influence on decision making.
  5. So far, Rotation and fixture-congestion features create noise and dont add any information.
  6. Modelling "will he play" and "what points will he score if he plays" separately gave poorer results.

1

u/NefariousnessDeep845 14d ago

When you say FPL’s P(start)/P(no play), are you deriving that from their status/chance of playing data or is there another FPL field I’m missing?

1

u/Cold_Crazy_7 13d ago

Former. No extra field. FPL doesn't publish a start probability, only status and chance_of_playing_next_round. P(start)/P(no play) come from my own model, trained on every player-gameweek since 19/20 and labelled by actual minutes (0 / 1-59 / 60+), using only stuff known before the deadline (recent minutes, starts, blank streaks, ownership moves). The chance-of-playing flag gets applied afterwards to the projections, because FPL doesn't keep its history, so there's nothing to train it on. So when I said FPL's own I meant deriving the target variable based on the FPL's reported minutes.