keemy
Regular
To sum of the following message how should an avg of 100 be defined (or any avg of n) in such a way that will be consistent throughout the community and in timers? (for more details read quoted text)
jfly said:Hey guys,
I would like to take this opportunity to formally apologize for the day I wrote the piece of cct that computes what I deemed to call a "session average". This definition is flawed (see explanation below). I would like to take this opportunity to atone for this grave mistake by asking you guys to come up with a new definition for me. I've spent (wasted) a not inconsiderable amount of my (and Leyan, Andy, and Patricia's) time researching this. To hopefully inspire new ideas and introduce you to the common pitfalls of a potential definition of "session average", what follows are the various ideas people have had and the flaws associated with them. If we can agree on a good statistic to use when talking about large numbers of times, then I'm sure that between Michael and I, we can force the whole cubing community to start using it. As thing stands right now, I have no idea what someone means when they say they got a XX.YY average of 100.
If you didn't already know, cct defines a session average as the average of all finite (non-dnf) times in your session. This encourages users to DNF times slower than whatever average they're shooting for! I've done this myself. When I was just barely sub15, I distinctly remember DNFing times >17 as I neared 100 solves in order to keep the session average under 15. SO BAD.
qqTimer has a session ave and a session mean. A qqTmer session *mean* is a cct session average. This is flawed exactly as cct's session average is. A qqTimer session average is a trimmed average of all the times in your session. This means your average will quickly turn into a DNF if you are used to the pampered world of cct. The only possible flaw with this statistic is that it is just *too* harsh. It may be reasonable to only allow 1 DNF in 100 solves. But the same restriction is ridiculous if you want to talk about ave 1000 (which qqTimer *does* support). Or even 10,000 solves. At some point, the number of DNFs we allow just has to scale with the number of solves.
This thought of scaling the number of trimmed solves with the number of solves is very appealing to me. To state this precisely, I want a function trimmed(n) = the # of trimmed solves out of n solves. Obviously, trimmed(n) is always even. The WCA has already defined trimmed(5) = 2, and by convention, trimmed(12) = 2. qqTimer's session average also defines trimmed(100) = 2. We don't have to fit all of these data points, although it would be nice to preserve the definition of Ra 5 and Ra 12.
Here are a two possible definitions of trimmed(n):
* trimmed(n) = 2. This is precisely qqTimer's session average. As previously discussed, this works, but it's just too harsh.
* trimmed(n) = 2*ceil(n/10). This gives us trimmed(5) = 2, trimmed(12) = 2, and trimmed(100) = 20. This is nice because it's easy for a human to compute (just remove the 1's place and multiply by 2). Does this just seem too damn arbitrary? Or perhaps it grows too fast?
* trimmed(n) = 2*ceil(log10(n)). This gives trimmed(5) = 2, trimmed(12) = 2, and trimmed(100) = 4. This grows a bit slower, which is nice. But it probably grows just too slow. If you do 1 million solves, you trim all of 12 solves, big whoop.
A while back, Leyan proposed the idea of looking at session medians. I jumped at the idea, because it's a well defined concept that *just works* even in the presence of infinite times. After doing a couple of averages of 100 and looking at the session median, I noticed that it was consistently a good bit (0.3-0.5) seconds better than my session average. Apparently I **** up only occasionally but when I do, the **** really hits the fan. It so happens that session median is just a special case of trimmed averages, where trimmed(n) = floor(n/2) + 1. In plain English, a session median is a session average where you trim as many times as possible until you have exactly 1 or 2 times remaining. This just seems too lenient to me.
Curious about where the trimmed average of 12 convention came from, I asked Lars Petrus. He said Jessica Fridrich and Mirek Goljan first started talking about it, and everyone (including the WCA) adopted it. Lars's suggestion for defining a session average that scales to n solves is to cut off exactly 1 of your best times for each DNF. To use the notation I've used so far, that would be trimmed(n) = max (# of DNFs in those n solves)*2. I suppose this doesn't deal with the case that >= half of your solves are DNFs, so to be terribly precise, you could do something like trimmed(n) = min(# of DNFs in those n solves, floor(n/2) + 1)). I really liked this idea at first, since it seems to just do a regular average if there are no DNFs, and if there are, it penalizes you by removing your corresponding best times. However, if you allow the user to go back and change times to DNFs, they can always force this to be a median. Or something in between. Basically, it's like letting the user choose how many solves to trim. You could no allow users to change times after they've entered them, but I don't like that from a usability standpoint. I also fear that it would train users to learn when to DNF times efficiently. Knowing when to DNF a time because it will help your average is not a speedcubing skill.
If this all comes across as just a little ridiculous an amount of effort for what is essentially an arbitrary number that doesn't *really* mean anything, then I agree with you. If you think this email has gotten comically long, then I also agree with you. I just hope you can see the appeal of having some well defined statistic without any of the flaws of what I've discussed above.
Ideas? Cubing times are a very odd set of data. Nothing I've thought of seems to match it. Sometimes you get luck and skip a step that normally takes 2 seconds (PLL skip), sometimes you **** up and don't even solve the thing (DNF), sometimes you get penalized by 2 seconds, and most of the time you are still jumping around your "average" (whatever that means) by quite a bit. Running a mile is running a mile is running a mile. Sometimes you may get disqualified or break your leg, but you never skip the last 100 meters. And I'm not sure that anyone does averages of 100 1 mile times. Maybe this would be better suited to a forum, but I am awful about checking speedsolving.com, and I'm not sure how good you guys are about it. I wanted to make sure that at least each of you saw this. Does anyone know if this has been discussed before? If so, I'd love to see the results of that discussion.
If you actually bothered to read this, then I'd love to hear your thoughts!
Thanks,
Jeremy