Monday, September 30, 2019

Week 4: The week of low scores.

I eventually plan on going back and getting every score in our league history for the charts page, but that won't be for a while.  Part of the reason I want to do that is I want to know where this week ranks in the history of average scores.  It feels like this is one of the lower-scoring average weeks in league history.  I have no data to back this up, but I am of the belief that if you score 120, you will be competitive and should have a chance to win a given week.  This week we only had three people get over 120.  The first week we had nine people do it, and weeks two and three had six people each time who did it.  I suppose this week is to help balance out the first week, but still, it was an ugly week.

Also, as an interesting note, each division went 2-2 this week -- so no division can claim dominance off of record just yet.

Skyler vs Ren:  Thanks to some poor QB and Flex play from Ren's team, Skyler squeaked out with a win.  This game had a differential of less than 10 and was only the second closest game of the week.  It feels odd to say that Ren was let down by his leading scorer, but if Davante Adams didn't get hurt, Ren probably would have won.

Tommy vs Trevor: Tommy's over-reliance on the panthers this week came back to bite him.  It turns out McCaffrey can't carry Tommy's team on his back while he also carries the Panthers to victory.  Trevor was carried to victory by Aaron Rodgers best game all season, as well as another outstanding performance by Ekeler.

Brandon vs TJ: The Monday Night-mare continues for TJ, who needed about 12.5 points from Andy Dalton to get the win, and instead only gets a little over 3.5 from him. Brandon got Gurley's best week of the season and a surprising 14 points from his kicker.  Only 6 kickers all year have scored more than 14 points.  This was the closest game of the week and would have been closer if Andy Dalton wasn't so awful. This was the nailbiter of the night because of the close score and the chance to be decided late and it was also the battle of ineptitude because of the low scores.

Brady vs Jordan: What started out as a very close game at the beginning of Monday night ended up being the biggest blowout of the week. Joe Mixon needed to outscore James Conner and the Steelers DST for Brady to have a shot, and instead, Brady lost by 40.  It wasn't pretty.

Matt vs Tyler: Early on, this looked like a game that would be defined by QB play (Mahomes vs Watson) but instead came down to Nick Chubb and Cooper Kupp for Tyler, and the players (Ridley and Graham) on Matt's bench.  With 91.10 points on the bench, Matt let Tyler slip through his fingers.  Talk about a bunch of luck.  That puts him on the shortlist of luckiest teams of the week for sure.  This has the highest combined score of the week.  I'm still trying to find a decent name, so if anyone has suggestions, I'm all ears.

Rob vs Kyle: In the Battle of the Cousins, Kyle was killed so Rob is mafia?  Robert Woods had his best game of the short season, and the Patriots pulled their weight yet again.  They scored 25 points for a defense, which was great -- except it's almost 20 points less than their best week.  I don't know when their run will end, but they are giving Rob a nice boost for sure.  So far this season, defenses have scored 21 or more points 10 times -- and the Pats have done it three times (the Bears have done it twice -- I wonder what lucky team they play for?).  Kyle actually had solid performances by most of his players, and a great week by Gallman,  but was let down by the Jags DST and by Juju.

Awards Season

High Scorer of the Week:  Jordan comes in at the last minute and wins this award.  Plenty of people seemed to celebrate it and come to his defense on the group chat, so I can only assume he bested some villain in this category.  Getting over 1/3 of your points in one night from an RB and DST will certainly do wonders for your team.

Low Scorer of the Week: Tommy wins the award this week.  I thought this was his second time because he had scored in the 80's another week as well, but turns out he wasn't the low scorer that week.  Tommy's team confuses me.  In week one, he was the third-highest scorer, then week two he was the second-lowest scorer, then week three he was the second-highest scorer and then this week he was the lowest scorer.  If this pattern holds, look for him to be the highest scorer next week. 

Luckiest Team of the Week:  Tyler definitely got really lucky this week with Matt sitting 90 points on his bench (and only scoring 117), and Brandon got really lucky this week because there were only 4 people who scored lower than he did, and he still won, but Skyler is the alleged luckiest team of the week.  Just because there were only 5 teams he could have beaten, or because Ren's QB ended up with negative points, and his best player got hurt in the 3rd quarter, or because Ren left 96.40 points on his bench (his starters had 99.18) doesn't mean he is lucky.  But this award is for the people, and there was a grassroots campaign by people wanting to deflect from their own luck to make sure Skyler got this award.  As the commissioner, I am only here to serve.

MVP(s) of the Week: This will be split between James Conner and his defense.  They combined for 52+ points and made Jordan the High Scorer of the Week on the last night of the week.  I'm sure they are very honored to win this award.

LVP(s) of the Week: Case Keenum (-0.52), Nels0n Agh0l0r, Matt Bryant (4), Kyle Allen (3.28), Greg Olsen (2.5), the Packers DST (0), Delanie Walker (1.4), the Ravens DST (-5), the Rams DST (5), Stephen Gostkowski (4), Vernon Davis (1.5), Phillip Dorsett (3.9), Brett Maher (4), Zane Gonzalez (4), Marlon Mack (3.9), OBJ (4), Justin Tucker (5), Adam Thielen (2.6), Ka'imi Fairbairn (4), Juju Smith-Schuster (4.5), The Jaguars DST (3).

Game Previews

Skyler (3) vs Trevor (9): Skyler has one starter on Thursday night and no players in primetime. He has no players on bye.  Trevor has no starters on Thursday night and he may have a player in primetime depending on TY Hilton's health.  He has no players on bye.

Ren (8) vs Tommy (6): Ren has no players on Thursday night and no players in primetime.  He has one player on bye.  Tommy has no players on Thursday night and no players in primetime.  He has two players on bye.

Jordan (2) vs Brandon (7): Jordan has no players on Thursday night and has no players in primetime (barring a very quick recovery from Tyreek Hill).  He has two players on bye. Brandon has three starters on Thursday night and one starter on primetime.  He has no players on bye.

TJ (11) vs Brady (10): TJ has one starter on Thursday night and has two players in primetime.  He has two players on bye.  Brady has two starters on Thursday night and has one starter in primetime.  He has no players on bye.  This has the potential to be the battle of ineptitude base on their combined rankings.

Kyle (12) vs Matt (8): Kyle has one player on Thursday night and has three players in primetime.  He has one player on bye.  Matt has two starters on Thursday night and has one starter in primetime.  He has no players on bye.  This has the potential to be the battle of ineptitude base on their combined rankings.

Tyler (1) vs Rob (4): Tyler has one starter on Thursday night and three starters in primetime.  He has no players on bye. Rob has no players on Thursday night and potentially three starters in primetime.  He has no players on bye. This has the potential to be the game of the week based on their combined rankings and the nailbiter of the night with that many players going in primetime.

That is all for this week.  I likely won't update the charts tonight.  Best of luck to everyone next week except Trevor.

Monday, September 23, 2019

Fantasy Football Charts

Just a rough draft of charts I find interesting.  I will change it throughout the season.

Week 3: Blowouts will continue until morale improves

Like last week, this week featured a decent number of blowouts.  Only one game was close on Monday evening, and some of us were only following along to see if history would be made in the highest-scoring week of all-time record book.

Skyler vs Brady: In the battle of the cousins, Skyler came out victorious by about 30 points.  In a rare display of big-picture thinking, they agreed to a trade earlier in the week, even though they were playing each other.  Skyler acquired Dak Prescott, who had his worst game of the season (but was still a large improvement over prior QB play), and Brady acquired Brandin Cooks (sat on the bench) and Raheem Moster (traded to Rob).  The trade didn't seem to make a big difference this week, but we'll have to see what it looks like going forward.

Tommy vs Brandon:  Tommy scored 173 points this week, beat Brandon by almost 60, and somehow had a terrible week.  And by that I mean he was only the 3rd highest scorer this week, and he traded away Fournette for a very injured Saquon Barkley.  Outside of his kicker, everyone scored double digits for Tommy and 5 of his players scored 20+.  Brandon got the loss, but he got off the Antonio Brown roller right before it crashed into a big ball of flames -- so it wasn't the worst week ever for him.

Matt vs Trevor: In the battle of ineptitude, Matt is this weeks winner -- and by that I mean he lost in a very low scoring matchup.  Matt was the low scorer of the week, in part because he lost Barkley, and Trevor was only 12 points better.  But still, a win is a win, and this was the upset win of the week since Matt was 2-0 and Trevor was 0-2.  All is not lost though as Matt traded Barkley for Fournette.  I can't make fun of Tommy too much for it because even I texted Matt about Saquon and almost gave him a great deal. Trevor has a decent amount of depth, but it often leads him to starting the wrong players.  If he can get those issues worked out, he would have a scary team.

Rob vs Ren: Rob scored 135 points this week, which was better than average the last two weeks, but unfortunately for him this week it was a below-average score, and he got blown out by 60.  Ren took an early lead for highest-scoring week of the year as his team bounced back in a major way after last week.  Winston, Kamara,  and Hooper scored more this week than their first 2 weeks combined, and Allen, Freeman and, Agholor nearly did the same thing (they combined for 5 fewer points this week than their first two weeks combined).  Ren's team has been all over the place this season, so it's hard to tell if this is his team turning a page, or just the upswing in the pendulum.

TJ vs Kyle:  In the nailbiter of the night,  TJ hangs on to win by 2.04 points -- aka 2 passing yards and an INT from Jared Goff lost Kyle the game.  I know one Monday Night victory doesn't change everything for TJ, but it's the first step to getting this monkey off of his back.  This was the projected Battle of Ineptitude this week since both teams were 0-2, and they nearly had that distinction by both being 0-2, but Kyle scored just enough tonight to keep them out of that dubious (and new) honor.  When I have free time this week, I will have to look up how many teams have made the playoffs after going 0-3.

Jordan vs Tyler: This game was the highest combined score of the week (thinking of calling that a bonanza, but I'm not sold on that), but it was still a 60 point blowout.  This game was sadly more about Tyler vs History than Tyler vs Jordan.  The record for highest-scoring week is 217 points (Ren back in 2013), and for a while tonight, Tyler was ahead of that record.  Instead of being otherworldly, the bears were simply exceptional with 22 points tonight.  This was the game of the week as both teams were 2-0 leading into the matchup, and it looked to be promising when Jordan and the Ravens got off to a hot start.  Sadly, the rest of his team didn't care, and Tyler ended up getting the win sometime during Sunday Night Football.

Awards Season

High Scorer of the Week:  Tyler gets it done this week, and flirts with history before he comes back down to reality -- and that reality is only the 3rd team every to break 200, with Ren doing it in 2013, and Brady in 2018.  Brady won the championship the year he broke 200, and Ren lost in the semi-finals (to Tyler) the year he set the record. Both finished as the #2 team during the regular season, so it seems safe to say Tyler isn't a fluke this year, and barring injury will contend for the championship.

Low Scorer of the Week: Matt acquired Saquon this week, and had the lowest score of the week.  Matt didn't wait to finish the week before dealing him.  So maybe Saquon was his bad luck charm?

Luckiest team of the week: TJ won this week, yet he only outscored 3 people this week.  He was just lucky enough to play one of them.  He was also lucky enough to survive Monday night and win by a narrow margin.

Unluckiest team of the week:  Jordan lost this week, yet he was only outscored by 3 people this week.  He ran into Tyler on a historic night, and will now try and recover.  And by recover, I mean he was 2-0 before this week, and while he is technically in 5th, he is 10 points out of second place.  So he's not really hurting too bad.

MVP(s) of the Week: I usually split this award, but this week was a unanimous decision for Mike Evans.  He was less than half a point away from being the highest scorer of the week, and he was the highest-scoring player on the highest-scoring team, which was only the 3rd team to cross 200 points.

LVP(s) of the Week (Points<=5): Stefon Diggs, Mark Andrews, Emmanuel Sanders, Eagles DST, Will Lutz, Todd Gurley, John Ross, Chris Carson, Josh Jacobs, Vance McDonald, Ka'imi Fairbairn, Calvin Ridley, Titans DST, Kenny Golladay, and Justin Tucker.  Interesting fact, 4 of those players were traded this past week.

Game Previews

Out of division play gets underway this week, so division bragging rights will begin in earnest.

Skyler (4) vs Ren (3): Skyler has one starter on Thursday night and one starter in primetime (Sunday).  He has two starters on bye.  Ren has two starters on Thursday night and one starter in primetime (Sunday).  He has no players on bye.  This has the potential to be the game of the week (combined score of 7).

Tommy (2) vs Trevor (9): Tommy has two starters on Thursday night and two starters in primetime (both Sunday).  He has no players on bye.  Trevor has one starter on Thursday night and two starters in primetime (one Sunday, one Monday).  He has no players on bye.

Brandon (8) vs TJ (11): Brandon has no starters on Thursday night and two starters in primetime (one Sunday, one Monday) He has no players on bye.  TJ has no starters on Thursday night and has one starter in primetime (Sunday).  He has no players on bye. This has the potential to be the battle of ineptitude (combined score of 19).

Brady (10) vs Jordan (5): Brady has one starter Thursday night and one starter in primetime (Monday).  He has one starter on bye. Jordan has no starters on Thursday night and three starters in primetime (two Sunday, one Monday).  He has no players on bye.  This has the potential for the nailbiter of the night.

Matt (6) vs Tyler (1): Matt has no starters on Thursday night and one starter in primetime (Monday).  He has no players on bye. Tyler has no starters on Thursday night and no starters in primetime.  He has two bench players on bye. This has the potential to be the game of the week (combined score of 7).

Rob (7) vs Kyle (12): This is another battle of the cousins.  One of them most likely killed the other in mafia while I was doing the writeup.  Rob has one starter on Thursday night and one starter in primetime (Sunday). He has two bench players on bye.  Kyle has one starter on Thursday night and one starter in primetime (Monday).  He has one starter and one bench player on bye. This has the potential to be the battle of ineptitude (combined score of 19).

That is all for this week, good luck to everyone next week -- except Ren.

Wednesday, September 18, 2019

UHSAA Rankings Review part 2

It took me longer than I would have liked, but I finished my review and got my model to (mostly) match the official rankings.  Here is the link to part one if you need a refresher.  Below are some of the changes made, and how things will be slightly different going forward.  

If you don't want to read the whole process or the details the TL;DR is that I got it to mostly match (link to UHSAA and the link to my model output so you can compare the two), but there are some inconsistencies and errors in the OOWP section that gave me a headache to try and figure out how to manually override, and I won't be doing that again going forward.

UHSAA/MaxPreps Logic Mistakes My misunderstanding of the classification down scenario (WP):
After reading the section that I posted another 10 times, I came to the conclusion that the sentence "This modifier only comes into play when a team wins" is strictly referring to losing a portion of the win, and not getting the first lower classification opponent to count as a regular opponent.  I thought the win portion meant that the higher classified team would be guaranteed that their first win would count the same, but that is clearly not the case in the dataset.  So I changed the logic in my model to accommodate for that.  After taking care of that error, I got the WP to match between my model and the official data.

OWP:
This feels odd to say, but I don't remember having to do much to fix OWP.  Once I solved the WP problem from the previous section and made sure to round the numbers to 6 digits, everything matched pretty quickly and easily.

OOWP:
This was the section that took most of my time and made me want to give up. I consulted this section on the FAQ several times to make sure I wasn't misunderstanding anything.



I was worried about the head-to-head matchup part in OOWP, and wondered if it would mean removing region data (or data from common opponents).  For example, I was thinking that it meant when calculating Dixie's OOWP from Desert Hills, that I would have to strip out Dixie's games from Desert Hills other opponents (all of region 9), and that I would have to get Pine Views record excluding Desert Hills and Dixie games.  That would have been rather difficult and would have required comparing two lists and pulling out information.

I tried testing that out by hand and was getting nowhere.  So I went to my best friend who got me through my programming classes and asked for help.  His name is Google.com and he knows a lot of stuff.  I eventually found this site https://www.kaggle.com/c/march-machine-learning-mania-2014/discussion/6769 and about 2/5 of the way down it mentions OOWP.



I decided to try this approach used in traditional RPI calculations instead of worrying about removing head-to-head matchups like the UHSAA site says.  Once I fixed that formula, it solved about 90% of the errors I was seeing in OOWP.  There were only a handful of problem teams left at this point, and I could tell they were all teams who had out of state opponents - though not all teams with out of state opponents had errors, which matters later.  Unfortunately, out of state teams are a very manual process.  I recalculated the different winning percentages to remove the head-to-head issues that I fixed before, but I found that it made the errors bigger, and it created errors with all the teams who had out of state opponents instead of half of them like I had originally seen.

I reverted back to the original calculation and had to tackle each team/error individually.  Fortunately, there were enough teams who had out of state opponents and everything was calculated correctly that served as a template and let me know I was on the right track (I never thought I would say something nice about Snow Canyon, but thank you for being one of the correct schools with an out of state opponent -- you saved my sanity).  Some of the issues were my own problems (calculating OOWP for Hawaii and California schools) where I accidentally made things more complicated and it was a quick fix.

In the end, I had to fudge the numbers for 6 out of state schools to make the model match. One or two of the situations made sense (they hadn't played 2 other teams besides the Utah team, so their data can be tricky to feed-forward), but there were a couple of more schools that for some reason opponents were not being counted.  For example, American Fork was giving me an error and had one out of state opponent, Arbor View, that I needed to look at.  Arbor View has played 3 non-Utah teams: Basic, Hamilton, and Legacy  I got their winning percentages (excluding when they played Arbor View the percentages are 50%, 100%, and 33% respectively), and then averaged the data.  Having done this enough times, I looked at the size of the error and realized the issue was with Legacy.  Once I deleted Legacy's value from the equation, the numbers matched up between my model and the UHSAA information.  Legacy has played 2 other teams (besides Arbor View), which should be enough information to be included, but for some reason, it wasn't.

Future Plans for the Model:
I was never able to figure out Canyon View's problem (I tried the same steps in the previous paragraph), so they are the only school that doesn't match between my model and the UHSAA data.  Going forward, I will not fudge the numbers in my model, and I will include all of the data that is on MaxPreps once I start updating my model this weekend.  Perhaps the UHSAA formula requires 3 opponents before the data is included, or maybe they require a certified score from a coach instead of a fan before the games are included, or maybe the data wasn't in MaxPreps when they ran their calculation.  Whatever the reason is, something isn't totally right, and I'm not sure why.  Maybe it's an issue of me misunderstanding the FAQ (WP), or of UHSAA not following their explanation (OOWP), but we will just have to wait and see what happens.  I will continue to publish my model because of the discrepancies between the two.

Monday, September 16, 2019

Week 2: The makings of a Bell Curve -- or Maybe an Inverted Mobius Strip?

After two weeks, we have three teams at 2-0, six teams at 1-1, and three teams at 0-2.  It's a real sad bell curve, but it is still a bell curve.  Speaking of bells and curves, Bell was trying to get Kyle back in the game until that curveball of a fumble showed up -- I'll see myself out.  Time for the game recaps.

Skyler vs Brandon: The highest-scoring team in the league took on the highest-scoring of the first week losers.  What ended up happening was a proper 40 point whooping in the opposite direction.  Skyler only had one player who didn't score in double digits, and two of his players had 25+ points each.  Brandon had some solid performances, but no breakout players.  His QB getting hurt early certainly dashed his dreams of starting 2-0.

Tommy vs Brady:  The 3rd place team took on the last-place team, and the last place team pulled an upset and took a knee at the end to rub it in.  Brady didn't know who to drop for his defense, but he didn't need to end up dropping anyone to beat Tommy by 40.  Tommy's major letdowns were McCaffrey, Jackson, and Hockenson.  Brady's team was led by the Matt Ryan and Julio Jones stack, with Emmanuel Sanders as a 3rd wheel.  In fact, those 3 alone had 78 points and would have almost beat Tommy by themselves (86 points).

Ren vs Matt: This was the 3rd 40 point beatdown of the night.  In a battle of undefeated teams, Matt walks away victorious with Mahomes doing Mahomes things, and Boyd and Godwin coming along for the ride.  Technically, Matt played with 9 people, but with 0J H0ward, he essentially beat Ren with 8 guys.  Ren was let down by Alsh0n, and only 3 people total scored double digits for him.

Rob vs Trevor: These guys didn't get the memo about 40 point wins, and instead it was a relative nail biter with a 30 point margin.  Trevor actually had a decent week, but just had a bad matchup. Rob had some good players, some great players in Jones and Kelce, and then an otherworldly performance from the Patriots defense with 44 points.  The only person who has been started in the last two weeks that outscored the Patriots defense was Watkins last week.  Trevor had some really good performances but ended up being let down by 3 guys who got single digits, and unfortunately, in the battle of 0-1 teams, he drops to 0-2.

Tyler vs TJ:  To make up for the last game not being a 40 point win, this game went for the 60 point margin.  Tyler had one great performance from OBJ, and some really good performances from the rest of his team.  TJ, on the other hand, was all about Murphy's Law this week.  TJ had 68 points, from 9 people, so the average was single digits for everyone.  Yet, that was with 22.5 points from Saquon.  Nj0ku didn't do TJ any favors, and Brees had negative points before he was taken out of the game.  That's probably the worst part for TJ's team -- knowing that his starting QB is out, and his starting TE is in the concussion protocol.

Jordan vs Kyle:  The game of the week came down to 2.4 points until Bell fumbled about 5 yards from the goal line.  After the fumble, Jordan ended up winning by less than 5 points.  I'm sure it was quite intense for them up until the end.  They both had their ups and downs with good scorers and poor scorers, but the combo of Lamar Jackson and Kenny G and some scrubs were enough to overcome the quality combo of Goff, Bell, and some other scrubs.

Awards Season

High Scorer of the Week: Rob gets the nod this week after scoring 156 points -- 12 points more than the next highest player.

Low Scorer of the Week: TJ and his crater of a week take this spot for the week.

Luckiest Team of the Week:  Jordan puts in double the work this week to lock down this award.  He was the lowest-scoring team to win this week (7th leading scorer), and because he survived a late scare from Bell.

Unluckiest Team of the Week:  This award came down to the finalists of Trevor and Kyle -- Trevor because he was the highest score to lose, and Kyle because he was so close, and yet so far. In the end, I will give the award to Trevor because had Kyle won, it would have been Jordan down here with Trevor.  So with Trevor being the constant, he gets the win.

MVP(s) of the Week: The Patriots DST as the highest scorer of the highest-scoring team, and Lamar Jackson for scoring 31% of Jordan's points, and giving him just enough of a cushion to hold onto the win.

LVP(s) of the Week:  TJ's team (except Saquon), Desean Jacks0n, TJ Hockenson (1.7)[TJ seem's to be a theme this week], Alsh0n Jeffery, 0J H0ward, Sam Ficken (3), Duke Johnson (3.1), The0d0re Gin Juni0r, Matt Prater (1), Cowboys (5), Jared Cook (4.5) Harrison Butker (4), and Broncos (5).

Game Previews

Skyler vs Brady: In a battle of 1-1 teams who just made a big trade, this game will only have one primetime matchup -- which is Brandin Cooks, he was just traded, on Sunday night.  I'm already seeing a revenge game for a late win.

Tommy vs Brandon: In another battle of 1-1 teams, the game starts with a couple of Thursday night players, and then wraps up with 2 primetime players for Brandon.

Matt vs Trevor: 2-0 takes on 0-2.  If Matt wins this game, he will be the lone undefeated team in the South division. As of this moment, Matt has no primetime players, and Trevor could start the week early on Thursday with his TE, and he could end the week with a primetime player.  Though to be fair, those two players could easily be replaced with bench/waiver players.

Rob vs Ren:  In yet another matchup of 1-1 teams, it looks like Rob is the lone team with a primetime player.  The winner has an outside shot of ending the week as the division leader.  Early projections don't look kind to Rob, but I believe they update them Tuesday morning, so it doesn't really matter.

TJ vs Kyle:  This is a "loser leaves town" situation as they are both 0-2 after a bad week for each of them.  TJ has two guys on Sunday night primetime, and Kyle has 3 primetime players -- 1 of them on Monday night, AKA TJ's kryptonite.  Sunday night will be a big night for them.  It should be a fun game for everyone involved.

Jordan vs Tyler: This looks to be the early choice for the game of the week as both teams are 2-0 and looking to take an early lead in the division race.  Jordan has no primetime players, but Tyler has 4.  Look for Jordan to take an early lead and for Tyler to try and make a furious comeback.  3 of Tyler's 4 players will also be on Sunday night.

Sunday is looking to be a big night for everyone -- unless there are some major substitutes, every game will be affected by someone going on Sunday night.

Best of luck to everyone this week except for Brady.


UHSAA Rankings Review

Today is the day that UHSAA published their RPI Rankings.  As I was going through, most of it didn't match my model, but it was all very close.  Once I saw they were close, I knew my model was on the right path, and I was confident I could find the problems.  So here are the problems that I found, what I fixed, and what UHSAA/MaxPreps need to fix.

Typos/Personal Mistakes:
This list was longer than I wanted.  I found roughly 5 schools I had screwed up on their data.  Usually, I gave teams losses instead of wins, so most of the teams actually had a better score than my model said.  The two exceptions were Layton Christian Academy and Juan Diego.  I gave LCA an extra win on accident, so their score dropped significantly.  With Juan Diego, they were supposed to play Emery, but Emery forfeited that game.  I wasn't sure how that would be counted in the formula, or if it would be counted at all.  It turns out that a forfeit is counted as a regular win or loss -- it's not treated like an exhibition or a non-varsity opponent.  Fortunately, the mistakes were made a few weeks ago when I was trying to automate some of the data entry, and some of them were made as I will still refining my process for entering data.  This shouldn't be a problem going forward as I now have a routine/system for entering the data.

My Logic Mistakes:
I misunderstood the table found under the "cross-classification" question on the FAQ page.  I thought the bottom two lines of the table were related to figuring out the number of classifications in the opponents' state and getting the average.  In reality, that average applies to every out of state opponent, and the difference relates to the sport.  Football is a 5 classification sport, and every out of state opponent gets the same score from the "5 sport" line.  I think it's a bit of a flaw that Bishop Gorman is worth the same as Virgin Valley, but UHSAA isn't in the business of ranking Nevada teams.

UHSAA/MaxPreps Logic Mistakes:
The only bug I have been able to find in the official data is when teams play down.  From the UHSAA site: There is a one-time exception for a team playing down. That means, when a 3A team plays a 2A or 1A opponent for the first time on their schedule, that 2A or 1A opponent will count as a 3A team. Subsequent games against teams from lower classifications will count as their true classification. This modifier only comes into play when a team wins. Under the modified RPI system, each game is assigned a value based on that team's classification. Again, there is a 15 percent difference between them. So, for example, a 5A team will always have a game value of 1.749, regardless of who they're playing. The value of the win changes according to their opponent (unless the exemption comes into play). The result gives us a modified winning percentage. This is the number that will be used throughout the formula, including for their opponents, and the opponents of their opponents. So a team that goes undefeated but plays multiple teams below their classification may end up with a winning percentage of less than 100%.
What is currently happening is that if a team plays down twice, and loses the first one, the second opponent is counted as their true classification.  This has dropped a handful of teams .03 points on their winning percentage.  It's not a lot, but it matters, as my next point goes in-depth about rounding.

Rounding:
I noticed that the WP data wasn't matching after 6 decimal places, but everything was really close.  The OWP data was off after 2 decimals, but it was close enough that I knew I could find the error.  It turns out, the extra decimals with the WP data was feeding forward into OWP and compounding into bigger errors.  Once I changed my excel model to round to only 6 decimal places, it fixed most of the OWP errors.  The only remaining OWP differences relate to the previous point of the playing down modifier.  Once that gets fixed, it should solve the errors with WP, and OWP.

The data is still far enough off on OOWP that I won't' be able to test that until MaxPreps fixes their data, but I suspect it will be resolved with correct data and rounding.  I also know I have one other forfeit error for an out of state opponent that I need to go back and fix.  That will require me to manually go through and check everything until I find where that happened.

The last issue I have with how the rounding is done on the official data is that it will favor one team or hurt another.  I can't know for certain until the data is fixed, but I believe Millard and Beaver would swap places if they didn't do the rounding until the very end.  I'm sure issues like that will resolve themselves once teams keep playing and have more data points, but it will be interesting to see if there are close scores around bye-weeks/home-field advantage.

Final Thoughts:
Overall, everything looks good, and once I get the data matched up, I will continue publishing the data once UHSAA stops (October 11th I believe).  I have tweeted at UHSAA to fix their bug, and hopefully, they will soon.  I will try and find an email in the meantime to make sure it does get fixed.

Wednesday, September 11, 2019

UHSAA Week 5 Predictions

After going 74% last week, it looks like RPI is a solid predictor of how games featuring two Utah teams will end.  Of course, that is only one week, so let's see how RPI does for week 5.  Below are the matchups (Utah teams only), and the predictions, as well as 3 groups of upsets to watch out for.


Away Team Away RPI Home Team Home RPI RPI Predicted Winner
Lehi 0.56639619 Timpanogos 0.44445791 Lehi
Duchesne 0.76400714 North Summit 0.50790059 Duchesne
Rich 0.4575 Gunnison Valley 0.48468571 Gunnison Valley
Kanab 0.55168069 Parowan 0.65870511 Parowan
Milford 0.82105066 Beaver 0.74830604 Milford
North Sevier 0.54092751 Enterprise 0.57995992 Enterprise
Clearfield 0.2751087 Fremont 0.44197858 Fremont
Davis 0.41277778 Layton 0.46222222 Layton
Syracuse 0.58093014 Roy 0.58027778 Syracuse
Weber 0.44888889 Northridge 0.37916667 Weber
Hunter 0.5028744 Granger 0.3943116 Hunter
Taylorsville 0.42128018 Cyprus 0.26009662 Taylorsville
West Jordan 0.3809058 West 0.49594202 West
Bountiful 0.43192452 Woods Cross 0.71012502 Woods Cross
Farmington 0.6756092 Box Elder 0.51303183 Farmington
Viewmont 0.41762501 Bonneville 0.47644971 Bonneville
Cottonwood 0.30262549 Murray 0.44689658 Murray
Hillcrest 0.27913044 Skyline 0.4315625 Skyline
Olympus 0.59738959 Brighton 0.63444446 Brighton
Timpview 0.54970461 Mountain Ridge 0.41158382 Timpview
Maple Mountain 0.52645773 Payson 0.52975128 Payson
Provo 0.57618209 Springville 0.74030314 Springville
Wasatch 0.52491666 Spanish Fork 0.37284282 Wasatch
Cedar 0.42893054 Canyon View 0.32051608 Cedar
Hurricane 0.24292574 Desert Hills 0.39459612 Desert Hills
Pine View 0.46281944 Crimson Cliffs 0.39411309 Pine View
Snow Canyon 0.26589289 Dixie 0.69469002 Dixie
Ben Lomond 0.357235 Cedar Valley 0.26849162 Ben Lomond
Mountain View 0.65094985 Uintah 0.4379887 Mountain View
Park City 0.70363886 Ogden 0.54435264 Park City
Tooele 0.55365318 Stansbury 0.54454897 Tooele
Bear River 0.38045924 Ridgeline 0.46999957 Ridgeline
Green Canyon 0.76528158 Sky View 0.6456428 Green Canyon
Logan 0.50412686 Mountain Crest 0.31370986 Logan
American Fork 0.67284769 Herriman 0.70361111 Herriman
American Leadership Academy 0.57268785 Judge Memorial 0.43256032 American Leadership Academy
Corner Canyon 0.79702494 Alta 0.46048065 Corner Canyon
Grand County 0.5112037 North Sanpete 0.66445482 North Sanpete
Grantsville 0.66360918 San Juan 0.67507824 San Juan
Juab 0.47120181 Emery 0.47053769 Juab
Juan Diego 0.30647503 Copper Hills 0.48933977 Copper Hills
Monticello 0.63544523 Millard 0.71093647 Millard
Richfield 0.57311111 Manti 0.77035664 Manti
Riverton 0.54523982 Kearns 0.65601276 Kearns
Salem Hills 0.56423258 Highland 0.58317315 Highland
Skyridge 0.66462378 Orem 0.66075591 Skyridge
South Sevier 0.37742143 Delta 0.61067455 Delta
Union 0.43347964 Carbon 0.48660771 Carbon
Westlake 0.54021782 Bingham 0.61254428 Bingham
*I apologize for any formatting.  Formatting from excel doesn't always copy over to blogger.*

.05 Home Underdogs (These are the home teams who are underdogs by .05 RPI difference or less):
Roy, Stansbury, Emery, and Orem (more about Orem later)

.1 Home Underdogs (These are the home teams who are underdogs by .1 RPI difference or less):
All of the above teams in addition to Beaver, Northridge, Crimson Cliffs, and Cedar Valley.  I believe these upsets will be less likely as the season goes on and the RPI scores become less volatile, but for now, I will include this section.

Matchups involving different classifications, but close RPI scores:
The only game involving teams from two different classifications where the RPI is close is 6A Skyridge at 5A Orem.  Skyridge is favored by less than 0.004 in RPI differential, and Orem is at home.  If they were in the same classification, I would feel more comfortable saying watch out of the Orem upset.

My final note is that I haven't seen any correlation between RPI difference and score differential.  Usually the higher the spread, the more the favored team wins by, but I haven't been closely monitoring it since RPI doesn't take the score into account.  I will start tracking it this week going forward (and will check last week) and  I'll report any findings.

Monday, September 9, 2019

Week 1: Fantasy Football is Back...

...and all is right in the world.  My evenings have been all football since Thursday night, and I couldn't be happier about it.  Let's get straight to the breakdowns.

Skyler vs Tommy: Tommy started out with a solid week with only one player not getting double digits.  The Carolina/Rams game was crucial for this matchup (and Tommy's sanity as a Panther's fan).  Unfortunately for Skyler, his two players from this game added up to around 10 points, and Tommy's two players from this game added up to around 50 points.  McCaffrey looks like he will carry Tommy a long way this year.  If the rest of Tommy's team can stay consistent, he will have a great year.  Skyler's top two running backs look solid, but he will need to surround them with better talent.

Brandon vs Brady: Remember when Brandon lost his best WR for the week because of his crazy antics, and you wouldn't blame him if he had a bad week?  Those were good times.  Emphasis on the "were" because Brandon was the high scorer of the week.  Derrick Henry looked solid (yes, I watched the whole game), Hopkins did Hopkins things, and with Tyreek Hill likely to miss several weeks, Sammy Watkins has a chance to be amazing.  Oh, and Antonio Brown will have Tom Brady throwing to him starting next week.  I am hoping this is just beginners luck.  Brady looks like he will be set at QB for the season, Kittle should be better (he had two TD's called back), and his RB's can only go up from here.

Matt vs Rob: This ended up being the fantasy football game of the week.  It was tied at 117.22 at halftime of the last game of the week, but Matt was able to come up with the win thanks to Jacobs (who looks like he will be a workhorse).  For Matt, Mahomes was still Mahomes, and Carson looked like he is the real deal -- especially with the receptions added in -- and he has a lot of WR depth that will probably be a hassle to try and deal with every week, but if they all keep hitting 10-15 points a week, it's a good problem to have.  Rob may have the best RB on the Rams, and his name isn't Gurley.  In reality,  I doubt Brown keeps vulturing the TD's, but to pair him with Wentz, Thomas, and Kelce gives him a well-rounded team.

Ren vs Trevor: This one was the closest game of the week,  but Tyrelle Williams wasn't enough Monday night to lift Trevor over Ren (it wasn't expected to happen).  Ren got a win this week, even with his first-round pick (Davante Adams) being awful.  Assuming Adams steps up the rest of the season, Ren will have a solid core of Kamara, Adams, and Keenan Allen.  Going forward, Trevor should be better.  A Rog won't play the Bears every week, and Trevor can start Hilton, Fitzgerald, and Walker (who combined for 75 points on the bench) with Zeke, and a good looking Ekeler.

TJ vs Jordan: This wasn't the biggest whooping of the week, but it was a solid win for Jordan. Jordan went all-in on the Ravens this week -- and by that I mean 1/3 of his team were Ravens and they finished with around 83 points, which was 57% of Jordan's points for the week.  Jordan is set at QB for this year with Lamar Jackson and Tom Brady, and Ingram looks like a steal -- Jordan will need all the help he can get to ride out the Tyreek Hill injury. Despite the loss this week, TJ has a solid core of Barkley and Brees -- and if this week is any indication, he shouldn't worry about Williams production on the Chiefs.

Tyler vs Kyle: Tyler was the second-highest scorer of the week.  He had a great Monday night with Watson going crazy.  He also had great weeks out of Mack and Engram.  Of the two, I think Engram is a little more sustainable, but Mack (and the Colts) look like they will be fine without Luck.  If Evans, Beckham, and Chubb turn it around, Tyler will have a great year.  Kyle's team had a lot of players with solid to good games, but only Le'Veon Bell had a game that Kyle was probably happy about.  Gurley didn't get the TD's, Goff looked a little iffy (though that's his thing on the road), and Juju didn't get a lot of points even though the Steelers were down the whole game -- that should all change during the season.  He should be happy about the targets Allen Robinson got and should get going forward.

Now to some awards.

High Scorer of the Week: Brandon edged out Tyler by scoring 163.64 on the week.  I'm afraid we will see him in this spot several times throughout the year.

Low Scorer of the Week:  Brady's team really brought their F games this week.  Four of his starters scored in the single digits.

Luckiest Team of the Week: Matt for waiting so long to get the win, and Ren for winning by less than 3.  The top 6 teams all won, so there wasn't bad team that got lucky this week.

Unluckiest Team of the Week: Rob for losing it late, and Trevor for getting so close, but not having Tyrell Williams pull through.

MVP(s) of the Week:  Watkins as the high scorer on the best team, and Josh Jacobs for getting Matt the win.

LVP(s) of the Week: The Jags D (-5), Dante Pettis (1.7), Sony Michel (1.4), Matt Bryant (0), the Browns D (1), and the Broncos D (1) because they were all starters who scored 2 or fewer points.

Looking forward to next week.

Skyler vs Brandon: Two of Brandon's players will play in primetime games (Sunday or Monday night.  Thursday nights don't count because they usually have poor results) this week, while Skyler has none.

Tommy vs Brady: Brady has two players in primetime, while Tommy has zero.  This game is projected to be within 6 points.

Ren vs Matt: Ren has four players in primetime and Matt has none.  Important games for this matchup are Car/TB Thursday night (four total players) and Atl/Phi Sunday night (four total players). This game is projected to be within 4 points.

Rob vs Trevor: They each have one player playing in primetime.

Tyler vs TJ: They have a combined three players (two for Tyler, one for TJ) in one primetime game.  That primetime game is Monday night, which usually doesn't end well for TJ.  History suggests Tyler gets the win late next week. This game is projected to be within 4 points.

Jordan vs Kyle: As of right now, Kyle is the only one with a primetime player.

That's all for this week.  Good luck next week to everyone except Brandon.  **And please forgive my 15 edits.  That's what happens when I write it before the games go final.**

Saturday, September 7, 2019

UHSAA Week 4 RPI

The Bishop Gorman game is still ongoing but based on their score and time remaining, I am comfortable giving them the win.  If they manage to lose the game, Orem's ranking and any of Orem's opponents will get a slight downgrade.

In case you didn't see my tweet earlier yesterday, using strictly RPI as a way to predict games between Utah schools resulted in correctly predicting the winner 74% of the time.  There is only one game that I definitely disagreed with, and that was predicting a 6A team losing to a 5A team while the 5A team had less than a .1 lead in RPI.  I plan on altering the formula if there are any more non-region, cross-classification games. About half of the state was playing region games last week, and I imagine the majority of the other half will start this next week, and it won't be much of an issue going forward.

For the rankings this week, I added some color coding to the table.  Green means bye week, red means won't make the playoffs, and yellow means you have a bye, but so does your first-round opponent.

6A

Ranking Team MWP OWP OOWP RPI
1 Corner Canyon 0.4 0.26666667 0.13035828 0.79702494
2 Lone Peak 0.35949244 0.23833334 0.14495592 0.74278169
3 Herriman 0.3 0.3 0.10361111 0.70361111
4 Pleasant Grove 0.38695652 0.205 0.08663847 0.67859499
5 American Fork 0.28695652 0.23858803 0.14730315 0.67284769
6 Skyridge 0.33695193 0.20174593 0.12592593 0.66462378
7 Kearns 0.37391303 0.16731885 0.11478088 0.65601276
8 Bingham 0.26666667 0.22222222 0.12365539 0.61254428
9 Syracuse 0.3 0.16666667 0.11426347 0.58093014
10 Roy 0.3 0.16666667 0.11361111 0.58027778
11 Riverton 0.3 0.12898551 0.11625431 0.54523982
12 Westlake 0.1 0.33833334 0.10188448 0.54021782
13 Jordan 0 0.38214965 0.14333333 0.52548299
14 East 0.17709957 0.2463069 0.09363414 0.5170406
15 Hunter 0.3 0.09565218 0.10722222 0.5028744
16 West 0.3 0.10499999 0.09094203 0.49594202
17 Copper Hills 0.38260869 0 0.10673108 0.48933977
18 Layton 0.1 0.27166667 0.09055556 0.46222222
19 Weber 0.2 0.15 0.09888889 0.44888889
20 Fremont 0.1 0.23833334 0.10364524 0.44197858
21 Taylorsville 0 0.3397826 0.08149759 0.42128018
22 Davis 0.2 0.1 0.11277778 0.41277778
23 Granger 0 0.29565218 0.09865942 0.3943116
24 West Jordan 0.1 0.2 0.0809058 0.3809058
25 Northridge 0.1 0.17666667 0.1025 0.37916667
26 Clearfield 0 0.2 0.0751087 0.2751087
27 Cyprus 0 0.19565218 0.06444444 0.26009662


5A

Ranking Team MWP OWP OOWP RPI
1 Springville 0.4 0.27741666 0.06288647 0.74030314
2 Woods Cross 0.43000001 0.17666667 0.10345833 0.71012502
3 Farmington 0.31500001 0.26826197 0.09234722 0.6756092
4 Orem 0.2 0.3 0.16075591 0.66075591
5 Brighton 0.33000001 0.21 0.09444444 0.63444446
6 Olympus 0.31500001 0.19630435 0.08608523 0.59738959
7 Highland 0.40195654 0.1 0.08121661 0.58317315
8 Provo 0.31500001 0.13898806 0.12219402 0.57618209
9 Lehi 0.28866451 0.19565217 0.0820795 0.56639619
10 Salem Hills 0.31500001 0.16853813 0.08069444 0.56423258
11 Timpview 0.1 0.33316415 0.11654046 0.54970461
12 Payson 0.17561438 0.24583334 0.10830357 0.52975128
13 Maple Mountain 0.2 0.19565217 0.13080556 0.52645773
14 Wasatch 0.2 0.24908333 0.07583333 0.52491666
15 Box Elder 0.18695653 0.22963767 0.09643763 0.51303183
16 Bonneville 0.18695653 0.20499999 0.08449318 0.47644971
17 Alta 0.13333333 0.19069818 0.13644913 0.46048065
18 Murray 0.30195654 0.07166667 0.07327337 0.44689658
19 Timpanogos 0 0.32575 0.11870791 0.44445791
20 Bountiful 0.1 0.21 0.12192452 0.43192452
21 Skyline 0.2 0.1 0.1315625 0.4315625
22 Viewmont 0.11500001 0.2 0.102625 0.41762501
23 Mountain Ridge 0 0.29687368 0.11471015 0.41158382
24 Spanish Fork 0.21500001 0.07166667 0.08617615 0.37284282
25 Cottonwood 0 0.23333333 0.06929215 0.30262549
26 Hillcrest 0 0.19413044 0.085 0.27913044

4A
Ranking Team MWP OWP OOWP RPI
1 Green Canyon 0.42999997 0.25862575 0.07665586 0.76528158
2 Park City 0.44724997 0.21666667 0.03972222 0.70363886
3 Dixie 0.33224999 0.27166666 0.09077337 0.69469002
4 Mountain View 0.44724997 0.07166667 0.13203321 0.65094985
5 Sky View 0.30392834 0.25521645 0.08649801 0.6456428
6 Tooele 0.20196417 0.24333332 0.10835569 0.55365318
7 Stansbury 0.2 0.21196416 0.13258481 0.54454897
8 Ogden 0.1 0.36408332 0.08026931 0.54435264
9 Logan 0.10196417 0.305 0.09716268 0.50412686
10 Ridgeline 0.23224999 0.13833334 0.09941625 0.46999957
11 Pine View 0.2 0.18741666 0.07540278 0.46281944
12 Uintah 0.13333333 0.19877776 0.1058776 0.4379887
13 Cedar 0.11499998 0.22075 0.09318056 0.42893054
14 Desert Hills 0.1 0.2120569 0.08253922 0.39459612
15 Crimson Cliffs 0.1 0.17901316 0.11509993 0.39411309
16 Bear River 0.1 0.16797102 0.11248822 0.38045924
17 Ben Lomond 0 0.23585952 0.12137549 0.357235
18 Canyon View 0 0.19333333 0.12718275 0.32051608
19 Mountain Crest 0 0.17166667 0.14204319 0.31370986
20 Cedar Valley 0 0.17666667 0.09182495 0.26849162
21 Snow Canyon 0.10196417 0.02569986 0.13822887 0.26589289
22 Hurricane 0 0.17297357 0.06995217 0.24292574

3A

Ranking Team MWP OWP OOWP RPI
1 Manti 0.46299997 0.21805083 0.08930583 0.77035664
2 San Juan 0.3172588 0.28241666 0.07540278 0.67507824
3 North Sanpete 0.4 0.13833333 0.12612149 0.66445482
4 Grantsville 0.215 0.32427971 0.12432946 0.66360918
5 Morgan 0.445 0.11666667 0.09090231 0.65256898
6 South Summit 0.2 0.35391667 0.09832487 0.65224153
7 Delta 0.1 0.36983627 0.14083828 0.61067455
8 Summit Academy 0.23224998 0.21075293 0.145125 0.58812791
9 Richfield 0.2 0.27333333 0.09977778 0.57311111
10 American Leadership Academy 0.315 0.1224196 0.13526825 0.57268785
11 Grand County 0.13333333 0.24888889 0.12898148 0.5112037
12 Carbon 0.13333333 0.22888889 0.12438548 0.48660771
13 Juab 0.23 0.14333333 0.09786848 0.47120181
14 Emery 0 0.37555556 0.09498213 0.47053769
15 Union 0.115 0.20983332 0.10864632 0.43347964
16 Judge Memorial 0.1 0.18828254 0.14427778 0.43256032
17 South Sevier 0 0.25494921 0.12247222 0.37742143
18 Juan Diego 0 0.19877776 0.10769726 0.30647503

Not sure why the formatting is crazy here, but the bottom two teams won't make the playoffs, according to the bracket here https://www.maxpreps.com/tournament/jUHFpUZzEemA0ZFtwg1OMQ/jUHGEkZzEemA0ZFtwg1OMQ/football-fall-19/2019-uhsaa-state-football-championships-class-3a.htm

2A

Ranking Team MWP OWP OOWP RPI
1 Milford 0.44725 0.205 0.16880066 0.82105066
2 Duchesne 0.315 0.34903254 0.0999746 0.76400714
3 Beaver 0.46225 0.17166667 0.11438938 0.74830604
4 Millard 0.445 0.16666667 0.0992698 0.71093647
5 Parowan 0.26666667 0.26653122 0.12550723 0.65870511
6 Monticello 0.46969523 0 0.16575 0.63544523
7 Enterprise 0.24984762 0.22166667 0.10844563 0.57995992
8 Kanab 0.26666667 0.15333333 0.13168069 0.55168069
9 North Sevier 0.215 0.2315 0.09442751 0.54092751
10 North Summit 0.23225 0.14994921 0.12570139 0.50790059
11 Layton Christian 0.23484762 0.19408333 0.06901508 0.49794603
12 Gunnison Valley 0 0.40079682 0.08388889 0.48468571
13 Rich 0 0.3 0.1575 0.4575
14 Altamont 0 0 0 0

Again, sorry for the formatting, but if you read last week's post, you saw that it appears Altamont dropped varsity football, so they won't be in the playoffs.


I will release the predictions later this week.  Also, the official RPI will be out on the 16th.  I will try to post my results on the 15th so that way my model can be tested against RPI.  I will use the official numbers to find any errors and make any of the minor changes needed to fix it.  I won't publish my results while the official RPI is live, but once it is taken offline on October 11th, I will go back to publishing the results from my model.