The world’s leading publication for data science, AI, and ML professionals.

EPL Fantasy GW2 Recap and GW3 Algo Picks

Our Moneyball approach to the Fantasy EPL (team_id: 2122122)

If this is the first time you land on one of my Fantasy EPL Blogs, you might want to check out some of our original EPL blogs in my Medium archives to get familiar with how this project started and the improvements we’ve made over time.

Top 100 FPL Team Stats for GW2

Most of the Top 100 players in the world from GW2 scored above 125pts. Let’s look at the most selected players on their teams by position and the most preferred team formations.

Most Selected Goalkeepers by Top100

Most Selected Defenders by Top100

Most Selected Midfielders by Top100

Most Selected Strikers by Top100

We used this data to create the team below which is a blend of the most selected players by Top100:

Most selected Team Formation by Top 100 Fantasy Users

These stats make sense as most of the top players are trying to capitalize on offensive midfielders and strikers with 4–4–2 or 3–4–3 formations.

GW2 Team Performance Recap and Overall Stats

We had all of our teams score above average, with the highest team getting 66pts. Every week, we will post a picture of our Top2 performing teams. Unfortunately, we didn’t pick good captains. We picked Bruno Fernandez because we expected there to be a penalty at the MUN-CRY game given these two teams have some of the highest stats of penalties given to them over last 5 seasons. Well, we were right about the penalty, but unfortunately for us it was for CRY and not for MUN 🙂 And with Jorginho missing the penalty against LIV, our penalty luck was very bad last week.

We also participate in the FanTeam version of the FPL, where we had our best performing team of the week. Again, not the best captain choice – Leicester scored 4 goals and Vardy was somehow not involved even in one of them. So, I’d say our luck was quite poor last week overall, but somehow we still managed to do OK.

Useful Stats to Inform our GW3 Picks

Since we added a lot of new stats to our Algorithm this year, this Blog will evolve to have more stats and graphs and less text over time. Let’s start with the Fixture Difficulty Rating (FDR) for the next three game-weeks below:

Looks like Arsenal, Villa, Leeds, and Newcastle have some tough games coming up, so our Algorithm might not be picking players from those teams. Wolves, Chelsea, Fulham, Man Utd and Sheffield Utd seem to have more easy schedules over the next three weeks.

Bookie Odds

We will try to stack up on players from teams that have a higher than 50 % chance of winning such as MUN, CHE, WOL, LIV, TOT, MCI, and EVE. We should try not to have too many defensive players from LEI, WBA, NEW, ARS, BHA, CRY, WBA, WHU, or BUR.

Teams with higher probability to draw, especially when the game is combined with high odds for Under 2.5, might be good for selecting defensive players because if the game ends 0:0, that will result in lots of bonus points. Combined with the Under/Over Graph below, we can identify the following games with higher probability of at least one clean sheet – WHU-WOL, BUR-SOU, FUL-AVL, and SHU-LEE.

Inversely, we might want to have more attacking players from games with high odds for Over 2.5 such as MCI vs. LEI, LIV vs. ARS, WBA vs. CHE, and TOT vs. NEW. Again, the odds from last week played out pretty well as most games predicted had over 2.5 goals!

Referee Stats

From the stats below it appears that there is a higher chance for penalty given in games: CRY-EVE, WBA-CHE, TOT-NEW, MCI-LEI and LIV-ARS, so we recommend having penalty takers for some of these teams. Looks, like the games CRY-EVE and SHU-LEE have refs that like to give a lot of cards, so expect to lose some points there from yellow cards, but hopefully no red…

Set Piece Takers

To help your choice of set piece takers please see the list below which is more or less up-to-date with a couple of doubtful predictions:

Projected Starting Lineups

Before we run our final team selector, let’s take into account the predicted starting 11 for each team.

Pay attention to the doubtful player names on the right and also the the most recent injury news updates below:

Predictive Models (Player Stats)

It’s time for the crown jewel of this year’s improved Algorithm – the predicted player stats. After we layer in all the FDR, bookie coefficient, ref starts, projected lineups and injuries, there are two major metrics that we take into consideration when tuning our Team Optimizer for the next n-gameweeks team selection— predicted total points and expected value (ROI). Below are the stats for each metric, also broken down by position.

Projected Total Points – Top 25 Players

Projected Expected Value (ROI) – Top 25 Players

Projected Points – Top Goalkeepers

Projected Points – Top Defenders

Projected Points – Top Midfielders

Projected Points – Top Strikers

As you can see there is a large number of options we can choose from for each position, so we will be plugging a lot of the stats above into an Optimization Function in Python, which will output the team with the highest expected total points, given our budget constraints and other metrics that go into our decision making process. Some of the preliminary filters, applied before the Team Selector Code kicks in, include:

  1. Exclude Injured or Suspended players
  2. Exclude Players from teams with high FDR
  3. Exclude Players from Teams without Fixtures in GW1
  4. Cannot have more than 3 players from the same team
  5. Must have 15 players total (GK=2, DF=5, MD=5, ST=3)

Ex. Optimize Budget for a 3–5–2 formation with filler subs

As you can see below, the model first looks at parameters that tells it if it should optimize towards full squad of 15 players, or towards a specific formation with 11 key players and 4 cheap fillers. For the fillers, it first looks at preferred formation and uses that to decide how many fillers to get per position. The model then subtracts the total amount spent on the 4 fillers from our initial budget and spends the leftover budget on the key 11 players, given the optimization function and model constraints.

We used the output of the Optimizer Algorithm to build the team below:

We pretty much made just one change and that was trading Auba for KDB. This year we will be trying to get very few -4pts from extra transfers, since our algorithm is meant to invest in players that you can keep at least for 3–4 gameweeks, so we should not be doing lots of transfers each week. It was hard to select a captain, but given Son’s recent form and Newcastle’s shaky defense, we’re hoping it will pay off. But we also think that KDB, Salah and Fernandes are not bad captain choices either since there is a higher chance of penalties in all of these team’s games.

Conclusion

We still have some work to do with our transfers to get rid of Saliba and get a more consistent GK than Areola, but that might take a few game weeks to work out, so, for now, we’re sticking with our long term investment in our current squad, and giving the players at least 3–4 weeks to realize their expected potential. Some of them such as Son, Salah, and KDB are already paying off decent dividends 🙂 Enjoy watching the games this weekend and good luck with selecting the right captain as we all got reminded just how important that is by Son and Kane last weekend 🙂


Related Articles