Showing posts with label sports. Show all posts
Showing posts with label sports. Show all posts

Sunday, 21 August 2016

It seemed like there were more women's sports in this Olympics. Is that because they did better?

First up, it's entirely possible that this feeling is just because I never really watch any sports, and the news tends to focus on men's sports (with the possible exception of soccer).  Therefore, against that background, seeing any women's sports might just feel like an improvement.

However, given that NBC tape delayed everything, they had a large amount of leeway to tune what they programmed based on the results they already knew.  In this case, making events where the US won a medal more prominent might help increase ratings.

Conveniently, wikipedia lists all the results, and has a nice set of tables about how the US did.  So the question is: did the women's events produce more medals per participant than the men's events did?

To get a reasonable answer, I simply counted the number of medals won (split by type) per sport category, and divided by the number of participants in that category.  There are some complications with this method.  First, team events produce a higher fraction, so doing well in team events helps.  I've included each team member as a separate medal, and after some minor research, include the team members who didn't participate in the final.  I had them excluded on the first pass, but looking around it seems like those team members do get a medal as well.  This doesn't change the final numbers by much (mostly it just bumps swimming up even more).  Second, this ignores the Biles/Ledecky/Phelps effect, where one person dominates a sport heavily.  Still, normalizing by total participants ensures that it's not just a case of flooding a sport with lots of people, and winning that way.

So the results are:
Full sample average at 44.6%.

Full sample average at 51%.
Obviously there's lots of scatter.  Also obvious is that there is no good angle to rotate the labels to prevent overlaps.  In any case, all those nights of swimming, gymnastics and volleyball make sense, as those are sports that the women do well in.  Same for men's diving, although men's gymnastics might have been slightly over represented.

I also don't remember seeing any basketball, but that might have been sent to one of the other channels, and not the main NBC.  It's also possible based on the score differentials, that NBC just decided that those would be very boring games to watch, and skipped them for that reason.

Sunday, 27 March 2016

Final final four

Today's also the last day I update the sports stuff for this year.  Here's the table for the rest of the tournament:

#BracketN_R1PP_R1Nwrong_R1P_R1S_R1N_R2PP_R2Nwrong_R1P_R2S_R2
Mine321626.995162450.998
Heart-of-the-cards3211022.656162838.320
Julie3211022.656162642.738
BHO321923.823162643.820
538321824.928162742.738
Rank3211319.129162639.424
#BracketN_R3PP_R3Nwrong_R3P_R3S_R3N_R4PP_R4Nwrong_R4P_R4
Mine84370.99890348378
Heart-of-the-cards84646.04448446
Julie84458.61048458
BHO84459.67448367
53884266.95548282
Rank84263.87548371
#BracketN_R3PP_R3Nwrong_R3P_R3N_R4PP_R4Nwrong_R4P_R4
Mine216278132178
Heart-of-the-cards216246132146
Julie216258132158
BHO2161+67+132167+
538216282132182
Rank216271132171

If the President gets his pick correct in the next round, then he'll win with an 83.  Otherwise, 538 wins based on only getting two wrong in round 4.  Everything else is locked in now, so there's nothing really to update anymore.

Friday, 25 March 2016

Round 3

Since it's the weekend, it's sports time.  First up, my picks for this round of things:
One that I was doomed to get wrong.

And the other doomed one.  But a new mistake!

Texas A&M:
29.687500       14.062500       3.125000                3       6       3       Texas A&M
28.125000       18.750000       21.875000               3       8       2       Oklahoma

First up, I think my analysis notes have been wrong on the previous posts.  The file I'm pulling these numbers from is in 2016/2015/2014/group/game/rank/name format, not 2014/2015/2016 format.  This changes the analysis for some of my previous mistakes, but I'm too lazy to go correct those.  In any case, using this new, correct information, it looks like I thought (from the 2016 ratings) that Texas A&M should be slightly better than Oklahoma.  Folding in previous years could have potentially altered that choice.

I was thinking a bit about adding some score-based information in as well.  The idea being that each team scores a given median number of points across all their games, and have a given median number of points scored against them.  By comparing how well a given score ranks in all their games, and against their opponent's, it should be possible to construct offense and defense ratings.  This might be useful to say, "Team X is generally better, but they only are a +1 in offense, and they're playing a +4 defense, so they might not win."  The other benefit would be to add two new metrics, which could then be used across the full multi-year dual-gender score set to determine which relative weights each should be assigned to a more complete prediction model.

I think the first step that I should do, though, is to dump all of that data into a database, instead of using horrible fixed-width formatted files to manage things.  That's largely a consequence of not really caring a lot about the project.


In any case, here's the comparison table for round three:

#BracketN_R1PP_R1Nwrong_R1P_R1S_R1N_R2PP_R2Nwrong_R1P_R2S_R2
Mine321626.995162450.998
Heart-of-the-cards3211022.656162838.320
Julie3211022.656162642.738
BHO321923.823162643.820
538321824.928162742.738
Rank3211319.129162639.424
#BracketN_R3PP_R3Nwrong_R3P_R3S_R3N_R4PP_R4Nwrong_R4P_R4S_R4
Mine84370.99890348
Heart-of-the-cards84646.04448
Julie84458.61048
BHO84459.67448
53884266.95548
Rank84263.87548

This now has the added columns of S_RX.   These are my simulated CDF values based on the Yahoo selection pick fractions given for each team.  This is another piece of kind-of garbage code that I threw together earlier in the week.  I think it's doing everything correctly, but I don't see any simulated results that get a total score above 83, and yahoo does list some in their leader list.  Maybe 1e6 simulations isn't sufficient to fully probe things?  Maybe I'm truncating or rounding something odd?  The main idea behind this calculation is to see how well a given set of picks should rank.

Plots for individual rounds and the total after three.  In general, the mean drops (because past mistakes have continuing consequences) and the variance increases (because there's the 2^N point scaling thing and because the number of individual games is falling as well).

Sunday, 20 March 2016

Round 2

today was the end of round two of the sports thing.  I also need to go back and update posts with the new label I've decided is probably useful, "sports".  So I updated everything before the final game was over, and then had to double check nothing went wrong:

Copying from 538.  Two of those I didn't care about anymore due to prior choices, one of them I kind of knew was going to be the case, one of them I wasn't expecting to take two overtimes to come to my result, one apparently fell apart in the last two seconds, and the final one had me frowning at it until it decided not to make me re-edit all my stuff.
 Results for this time:


Again, three of my four mistakes this time around were caused by my winning choice being eliminated in the previous round.  For the last one:

Xavier:
12.500000       42.187500       29.687500               2       7       7       Wisconsin
34.375000       12.500000       14.062500               2       8       2       Xavier

Why did I choose Xavier?  Did I get confused and use the 2014 rankings instead of the 2016 ones?  This looks like me being dumb.  Maybe I took the #2 ranking too seriously?  I should probably write down logic notes next time, so I can point to the error directly.

What does the scoring comparison look like?

#BracketN_R1PP_R1Nwrong_R1P_R1N_R2PP_R2Nwrong_R1P_R2
Mine321626162450
Heart-of-the-cards3211022162838
Julie3211022162642
BHO321923162643
538321824162742
Rank3211319162639

Again the "rank" method is garbage, and shouldn't be used.  Nate Silver had a tweet earlier about how this is apparently because it's based on RPI too much.  Looking at wikipedia, it looks like RPI is an incomplete version of my LAM method.  ¯\_(ツ)_/¯  This also shows the point where HotC totally falls apart, becoming the worst method.  Everyone else is pretty well clumped together.  I'm a bit surprised that 538 isn't doing better, given the "we included scores, and at-home values, and distances to the games, and the number of cats each player owns, and the SAT scores of each player."

This also makes me think I should have actually entered my selections into some pool.  Maybe I should hone the method a bit more, and see how it works over a few more years.  Or, alternatively, I could do the reasonably easy thing and apply the method to the historical data, and see if this consistently matches reality.  Maybe next weekend, since I think it's a long one.  This will also make me fix my master Makefile to put things into logical directories, and not just dump the outputs into a common directory.

Friday, 18 March 2016

Round one

Statistics results.

Ok, that West Virginia loss is going to hit the later rounds.

As is Purdue.  Not as bad as Michigan State, obviously.
Let's look at the comparison table:

#BracketN_R1PP_R1Nwrong_R1P_R1
Mine321626
Heart-of-the-cards3211022
Julie3211022
BHO321923
538321824
Rank3211319

The columns are the bracket identifier, the number of games in the round, the points per correct selection in the round, the number wrong, and the total points.  The brackets are mine above, the "Heart of the Cards" bracket taken by simply selecting teams based on the 2016 ranking I calculated, Julie's bracket, President Obama's, the 538 bracket taken by assuming constant composite rankings from their pre-tournament predictions, and a dummy bracket constructed by selecting teams based solely on their "sport rank" thing.  That's actually working out a lot better than I expected.  I was correct in shaking up the straight HotC numbers with a bit of historical data.  Looking at the mistakes:

Arizona:
26.562500       43.750000       40.625000               1       5       6       Arizona
25.000000       37.500000       53.125000               5       1       11      Wichita St

I didn't believe the numbers, given the #11 ranking.  From above, I should ignore the ranking in the future, because it's pretty crappy.  The problem is that my numbers suggest that Wichita State is the best team in the entire thing, which doesn't seem like it's right.

West Virginia:
28.125000       21.875000       1.562500                2       6       3       West Virginia
34.375000       39.062500       45.312500               2       6       14      SF Austin

Ditto.  My numbers predict that SF Austin is the second best team.  I guess if either of them come out winning, I can say that I predicted it, and then tossed it in the trash.

Baylor:
17.187500       23.437500       20.312500               3       3       5       Baylor
25.000000       18.750000       7.812500                3       3       12      Yale

No clue, but it sounds like everyone was surprised by this one.

Purdue:
29.687500       14.062500       -3.125000               4       3       5       Purdue
37.500000       -7.812500       -3.125000               4       3       12      Ark Little Rock

My numbers say they both suck, so I went with last year's numbers to break the tie.  I could have added in the 2014 values, but this was a #12 ranking, and I didn't believe those.

Dayton:
28.125000       26.562500       20.312500               4       7       7       Dayton
9.375000        7.812500        34.375000               4       7       10      Syracuse

This one I should have gotten right.  I folded the two previous years in, and that said that I should trust consistency over a sudden jump.  Maybe Syracuse has some new great player.

Michigan State:
35.937500       18.750000       28.125000               4       8       2       Michigan St
23.437500       3.125000        23.437500               4       8       15      MTSU

Again, this one seemed like it was a surprise to everyone.  There are only three values of my ranking between these two values, so that kind of suggests they're within ~5% of each other in terms of skill.  Oh well.

Tuesday, 15 March 2016

I didn't really do any of the improvements I discussed two years ago.

Basketball

Basically my solution this time was:

  1. Check with Julie that no team went undefeated this year.  That was my big problem last time.
  2. Run the 2016, 2015, and 2014 game solutions to determine the relative rankings for all of the teams in each of those years.
  3. Rank things based on the 2016 solution, letting 2015 solutions break ties.  Also use this information (and the 2014) for solutions to:
  4. Anytime a #12 sport-ranked team is ranked substantially above a 1-4 sport-ranked team, assume something is off with the model, because I have a lot of #12 ranked teams ranked really high for some reason.
So the result table is:


#2014.score     2015.score      2016.score    group   game  sport-rank  2016.score      Team.name
23.437500       28.125000       40.625000       1       1       1       40.625000       Kansas
-9.375000       -21.875000      1.562500        1       1       16      1.562500        Austin Peay
18.750000       -3.125000       17.187500       1       2       8       17.187500       Colorado
29.687500       7.812500        20.312500       1       2       9       20.312500       Connecticut
3.125000        32.812500       26.562500       1       3       5       26.562500       Maryland
9.375000        20.312500       29.687500       1       3       12      29.687500       S Dakota St
10.937500       4.687500        20.312500       1       4       4       20.312500       California
14.062500       14.062500       34.375000       1       4       13      34.375000       Hawaii
40.625000       43.750000       26.562500       1       5       6       26.562500       Arizona
NAN     NAN     NAN     1       5       11      NAN     VAN/WICH
1.562500        18.750000       28.125000       1       6       3       28.125000       Miami FL
14.062500       21.875000       9.375000        1       6       14      9.375000        Buffalo
12.500000       15.625000       17.187500       1       7       7       17.187500       Iowa
-20.312500      23.437500       15.625000       1       7       10      15.625000       Temple
37.500000       46.875000       37.500000       1       8       2       37.500000       Villanova
3.125000        -1.562500       17.187500       1       8       15      17.187500       UNC Asheville
21.875000       20.312500       34.375000       2       1       1       34.375000       North Carolina
NAN     NAN     NAN     2       1       16      NAN     FGCU/FDU
-15.625000      -12.500000      14.062500       2       2       8       14.062500       USC
18.750000       17.187500       20.312500       2       2       9       20.312500       Providence
3.125000        10.937500       28.125000       2       3       5       28.125000       Indiana
4.687500        18.750000       37.500000       2       3       12      37.500000       Chattanooga
20.312500       53.125000       26.562500       2       4       4       26.562500       Kentucky
18.750000       17.187500       31.250000       2       4       13      31.250000       Stony Brook
-3.125000       37.500000       15.625000       2       5       6       15.625000       Notre Dame
NAN     NAN     NAN     2       5       11      NAN     MICH/TULSA
1.562500        21.875000       28.125000       2       6       3       28.125000       West Virginia
45.312500       39.062500       34.375000       2       6       14      34.375000       SF Austin
29.687500       42.187500       12.500000       2       7       7       12.500000       Wisconsin
25.000000       6.250000        15.625000       2       7       10      15.625000       Pittsburgh
14.062500       12.500000       34.375000       2       8       2       34.375000       Xavier
12.500000       -6.250000       26.562500       2       8       15      26.562500       Weber St
21.875000       25.000000       34.375000       3       1       1       34.375000       Oregon
NAN     NAN     NAN     3       1       16      NAN     HC/SOUTH
23.437500       -7.812500       29.687500       3       2       8       29.687500       St Joseph's PA
32.812500       18.750000       18.750000       3       2       9       18.750000       Cincinnati
20.312500       23.437500       17.187500       3       3       5       17.187500       Baylor
7.812500        18.750000       25.000000       3       3       12      25.000000       Yale
28.125000       40.625000       20.312500       3       4       4       20.312500       Duke
-21.875000      6.250000        28.125000       3       4       13      28.125000       UNC Wilmington
20.312500       10.937500       12.500000       3       5       6       12.500000       Texas
1.562500        42.187500       15.625000       3       5       11      15.625000       Northern Iowa
3.125000        14.062500       29.687500       3       6       3       29.687500       Texas A&M
26.562500       23.437500       17.187500       3       6       14      17.187500       WI Green Bay
0.000000        4.687500        10.937500       3       7       7       10.937500       Oregon St
28.125000       26.562500       23.437500       3       7       10      23.437500       VA Commonwealth
21.875000       18.750000       28.125000       3       8       2       28.125000       Oklahoma
-9.375000       -7.812500       25.000000       3       8       15      25.000000       CS Bakersfield
34.375000       40.625000       29.687500       4       1       1       29.687500       Virginia
7.812500        -1.562500       17.187500       4       1       16      17.187500       Hampton
-6.250000       -9.375000       10.937500       4       2       8       10.937500       Texas Tech
-4.687500       18.750000       17.187500       4       2       9       17.187500       Butler
-3.125000       14.062500       29.687500       4       3       5       29.687500       Purdue
-3.125000       -7.812500       37.500000       4       3       12      37.500000       Ark Little Rock
29.687500       26.562500       15.625000       4       4       4       15.625000       Iowa St
17.187500       26.562500       18.750000       4       4       13      18.750000       Iona
0.000000        1.562500        26.562500       4       5       6       26.562500       Seton Hall
34.375000       46.875000       29.687500       4       5       11      29.687500       Gonzaga
14.062500       25.000000       28.125000       4       6       3       28.125000       Utah
4.687500        -3.125000       25.000000       4       6       14      25.000000       Fresno St
20.312500       26.562500       28.125000       4       7       7       28.125000       Dayton
34.375000       7.812500        9.375000        4       7       10      9.375000        Syracuse
28.125000       18.750000       35.937500       4       8       2       35.937500       Michigan St
23.437500       3.125000        23.437500       4       8       15      23.437500       MTSU
-1.562500       10.937500       9.375000        5       1       11      9.375000        Vanderbilt
53.125000       37.500000       25.000000       5       1       11      25.000000       Wichita St
14.062500       17.187500       10.937500       5       2       16      10.937500       FL Gulf Coast
-17.187500      -20.312500      6.250000        5       2       16      6.250000        F Dickinson
26.562500       0.000000        15.625000       5       3       11      15.625000       Michigan
14.062500       18.750000       14.062500       5       3       11      14.062500       Tulsa
9.375000        -3.125000       -7.812500       5       4       16      -7.812500       Holy Cross
9.375000        1.562500        15.625000       5       4       16      15.625000       Southern Univ

So, using this, I can answer the following questions I saw while doing the research of "figuring out what FLGU means".

  1. I saw a thing asking if Holy Cross was underrated.  My analysis says "no," and concludes with a "holy crap, no."
  2. Kansas is probably going to win it all.
  3. Julie was right, Michigan State should have been ranked higher than Virginia.
  4. I've already scored the two group 5 games that have played correctly.

Using the espn clicky thing to use these rules (I bent rule #4 to also apply to 13-ranked teams as well):

Group 1 and 2.

Group 3 and 4.

Final stuff.  I don't know how to call the score thing.  They're separated by ~4 points in the scores, or about 10%.  So maybe 10 points, since basketball is a "log10(score) ~ 2" kind of game?

For the remaining pre-game things, I have Michigan and Southern University winning those (in addition to the correctly called Wichita State and Florida Gulf Coast).

Saturday, 12 April 2014

I was going to talk about statistics, but instead I'm going to talk about sports.

No, not really.  Mostly it's statistics, just stapled onto a sports frame.

Firstly,

Sports.

I don't generally care about sports.

However, there was that Warren Buffett billion dollar thing, so it became slightly less annoying than it usually would be.  The important thing to remember was to not actually watch any of the games, because they really don't matter.

"Huh?"

Yeah.  Here's the secret: sports teams are just random number generators, and if they come up with a bigger number than their opponent, they win.

"But teams are made up of people..."

More RNGs. (Theorem left unproved due to obviousness: The output of the sum of multiple RNGs is itself a RNG.)

"that have different capabilities that influence how the game ends."

So you're telling me they're biased RNGs.

"And you have to incorporate details about how they're doing, and think about how pumped up they are for a given game, and all sorts of other things that influence the outcome!"

Got it.  Teams are biased RNGs, and if they come up with a bigger number, then they win.  Some RNGs have a built in bias, signifying that they're "a better team."

A Model.

The nice thing is that this is kind of already a solved problem.  Latent ability models.  Given a dataset representing the outcomes of many games, you can assign a score that represents how good a team is.  This "ability" is "latent" because you don't know what value it has, or even what determines the value in terms of real-world qualities.  But you can look at the data you have, and use it to decide if in a future match up, team A or team B would win.  Here's a plot:

Once you've assigned abilities, then you expect the probability of a victory to be related to the difference of the abilities for the two teams.  You use this logistic function to model that probability to ensure that you don't get absolute probabilities for most situations.

"But what about teams that don't play each other?"

Since the ability of team A is based on the differences in ability with all of the teams they did play.  This means you don't need to know the full matrix of team A vs everyone else, you can use the teams A did play, and compare the scores.  In other words, if A is better than B, and B is better than C, odds are good that A is better than C, even if you've never seen A and C compete.

There is some concern about the connectivity of the dataset that can cause problems.  If the dataset is poorly connected, you can get scores where one subset is poorly scaled to the other subsets, as you don't have enough overlap to determine a good solution.  So, what's the connectivity of my dataset look like?
The logistic shape is largely coincidental.  Mathematically motivated, but not important now.  This is also a realization for a single team (team 790), because I didn't care to trace out the full connectivity statistics.
The teams team A plays are a tiny fraction (about 1-2% of the full set of teams).  However, the teams those teams play connects about 25% of the set.  Three steps yield 95%.  Four doesn't quite get to 100%, but I stopped caring at that point.

So since the data is reasonably well connected, you'll probably get a decent solution to the latent ability scores.  The final check (that I totally did when I was developing things, thus proving validity, and not at all just ten minutes ago when I realized I should include this) was to compare the ability scores that I came up with the official "seeds," which is a dumb name for "ranking priors."
Noisy but fairly linear.


My Results.

That's all nice and all, but how does it work?  First, the caveats:  I wrote the LAM code and pushed some tests through in January, and then completely forgot about this whole thing until the day before the tournament started.  This means I basically had to accept the simple LAM solutions, and go with it.  I did a full year solution, and also broke the games down by month, using those solutions to look for trends (if the abilities were improving or decreasing).  Finally, I used the scientific method of "which of these are bigger?" to choose who would win.

A side note unrelated to the statistics:  dancing around team name strings was by far the most annoying part of this project.  Everyone should use clear and concise integer team ids, like I did.  It's the superior solution than inconsistent abbreviations.

Here's who I chose.
Not bad, as I even picked up a few of the upsets.  Things fell apart a bit with the later games, but 38/63 isn't bad, right?

Donking Sports.

At least I beat Julie, which was really what my goal was, if I couldn't win a billion dollars.
One of the things that I probably should have researched is the fact that people who do sports all the time are dumb.  Therefore, later games magically get more points than early games, so you aren't just trying to have more correct picks than the other people.  I suspect this is due to someone getting pissed off that they chose the winner correct, but donked up everything else, and decided that they should win instead of someone who got most of the first round correct.  I can't come up with any other logic for it (if you get round 1 picks wrong, you automatically lose out on any subsequent round outcomes that are based on that incorrect pick.  Why add extra penalties?).

In any case, you can see that I really wasn't too far back in terms of number correct.  You'll also note that I am actually #12, not #13, unless there's some other dumb tie-breaker rule that says that even though 12 and I have the same number of points, and I have more correct picks, I don't win because sports.

I also checked earlier in the week, and I didn't beat Barack Obama, regardless of whether you do number correct or this stupid point system.  I don't remember the values I got.  Like 40 correct and 68 points, maybe?  Whatever, I'm losing interest in this post anyway.

How Can This Be Improved?

As I mentioned above, I kind of rushed at the last minute, and spent more time dancing strings around than I wanted.  This means the theory time and development was more rushed than I would have wanted.  In any case, here are the obvious ways to improve things.

  1. Wichita State.  After determining everything, I later heard on NPR that WS was undefeated in the regular season.  "Great?"  Nope.  Because they never lost, the LAM had no reason not to rank them higher than everyone else.  Basically, no matter how high a score some other team got, WS would always rank higher.
  2. Time evolution.  My month-by-month breakout is way too chunky, and I'm pretty sure it didn't equally distribute the data.  Equal game count bins would be better, and that can be tuned to yield the minimum size that still provides a connected data set.
  3. Game quality.  The dataset I have contains scores for each game.  It's easy to imagine a LAM extension in which the distribution of score differences by ability differences tells you something about the distribution of that teams ability.  The other option would be to use that score difference to amplify a given win.  If the victory was by 1000 points, you can probably assume that the winner is "more better" than the loser than if they'd only won by 1 point.
  4. Field advantage.  It also contains home/away status.  This might have a similar effect, where you don't weight home victories as much as away or something.
  5. Inter-year convolution.  I have lots of years.  Teams are comprised of players, and players are not new each year.  Therefore, you could convolve previous and subsequent year abilities with this year's, and see what that gives you.
  6. Data.  I have lots of years.  I should really have been applying the algorithm to all the years, and checking the results against what really happened.  Beyond just this one tournament, women's sports are identical, so that's another set of years with data and results that can be used to train the algorithm.