diff options
-rw-r--r-- | doc/races.md (renamed from doc/races.txt) | 8 | ||||
-rw-r--r-- | doc/results.md (renamed from doc/results.txt) | 9 | ||||
-rw-r--r-- | doc/sources.md (renamed from doc/sources.txt) | 12 | ||||
-rw-r--r-- | doc/sql.md (renamed from doc/sql.txt) | 19 |
4 files changed, 41 insertions, 7 deletions
diff --git a/doc/races.txt b/doc/races.md index 2ca20da..e1966d2 100644 --- a/doc/races.txt +++ b/doc/races.md @@ -1,5 +1,8 @@ -== Race selection == +Race selection +============== + Races included in the standings: + * all World Championship of Drivers races run to Formula One regulations (so no Indianapolis 500 in the 50s) from 1950 to 1980 * all World Championship of Drivers races run to Formula Two regulations in 1952-53 * all Formula One World Championship races since 1981 @@ -9,14 +12,17 @@ Races included in the standings: * races with mixed formula entries (e.g. F1/F2 or F1/FLibre) are separated by class and only F1 class (and F2 class in 1952-53) is scored, apart from joined F1-F2 World Championship races (German Grands Prix from 50s and 60s and 1958 Moroccan GP) Race importance factor: + * WCoD and FOWC race importance constitutes 100% of base value * all other races get 50% of base value * qualifying sessions get 10% of the value for respective race * all races of the same category are scored identically, even if the race has been red-flagged before what would be full points situation Heats and aggregates: + * for multi-heat races with bracket-style heats and a final heats count as qualifying sessions and the final count as a race (except for Bologna Sprints, in which every heat from the full bracket get qualifying importance) * for multi-heat races with aggregate-style standings the initial grid counts as qualifying and the aggregate results count as a race Other remarks: + * all qualifying sessions are listed as held on the previous day relative to the race - simply to avoid chronology mix-ups and to minimize the chances of two ratings for a driver for one day diff --git a/doc/results.txt b/doc/results.md index 43dda5b..d819ac2 100644 --- a/doc/results.txt +++ b/doc/results.md @@ -1,9 +1,12 @@ -== Scoring rules == +Scoring rules +============= + Every race or ranked qualifying session results for each entry are handed ordinal numbers as "groups" in which the entry was classified. For qualifying, a group is simply the qualifying position (not applying any carryover/technical grid drop penalties, but applying disqualification/exclusion/grid penalties for offences during the ranked session). For races the following rules apply: + * race winning entry forms group "1" * among the drivers classified on the lead lap, other groups are as follows: 2-3 places are group "2", 4-5 places are group "3", 6-10 places are group "4", 11-15 places are group "5", etc. * for drivers classified outside the lead lap, the groups are formed by the drivers classified with the same numbers of completed laps (each distinct lap number as a separate group) @@ -17,6 +20,7 @@ After separating session results into groups, all entries from non-"0" groups fo All such duels are then treated as input for Elo rating algorithm. Specific rules regarding Elo implementation for this application's purposes: + * rankings are applied (evaluated) after each session (note: debug information for Bologna Sprints does not display correct "previous" ratings: ratings are applied after each heat, yeat debug info displays inital rating from before the event; this applies to any possible situation in which drivers take part in multiple sessions in one day) * no minimum rating limit for driver is enforced * drivers are rated from their first entry (there's no initial grace period, see: challenges.txt) @@ -24,16 +28,19 @@ Specific rules regarding Elo implementation for this application's purposes: * driver group disparity is varied to accommodate for dynamic shifts of relative performance within the F1 field (caused by technical changes) - see below Other than that, standard Elo rating conventions apply: + * drivers start with identical initial rating * duels between high-ranked drivers change their rankings by fewer points than duels between low-ranked drivers Field disparity change: + * higher disparity leads to more rating inflation - as disparity is a measure of rating difference that yields a certian probability of driver's victory, so higher disparity leads to more attribution for a victory to a driver (and less attribution to the shift of performance, e.g. car performance change) * higher rating deviation in the months prior to a race suggests a shift in relative performance (some drivers gain a lot, some divers lose a lot), so there's a need for damping further changes a bit - by lowering disparity * once the ratings are stabilized (meaning relative performance within the field had settled), disparity can be increased * this helps with the initial "rolling start" phase of the ranking (1946-1949 races) Specific parameters which are configurable: + * initial driver ranking * initial disparity factor (ranking difference which drops the possibility of lower-ranked driver's win by the factor of 10) * duel importance (base, i.e. for drivers ranked below importance thresholds) for all race types diff --git a/doc/sources.txt b/doc/sources.md index ee10bcd..a9512d9 100644 --- a/doc/sources.txt +++ b/doc/sources.md @@ -1,8 +1,20 @@ +Data sources: +============= + Championship races: +------------------- + 1950-1951 - wikipedia 1952-1953 - second-a-lap.blogspot.com 1954+ - ergast.com/mrd Non-championship races: +----------------------- 1950+ - www.silhouet.com/motorsport/archive/f1 1952-1953 - second-a-lap.blogspot.com +1954+ - chicanef1.com + +Qualifying: +----------- +2003+ - ergast.com/mrd +1954+ - chicanef1.com @@ -1,7 +1,9 @@ -Useful queries: +Useful queries for application database: +======================================= - - overall top rating progression + * overall top rating progression +``` CREATE OR REPLACE VIEW max_date_rankings AS SELECT MAX(ranking) max_ranking, rank_date max_rank_date @@ -18,9 +20,11 @@ WHERE max_ranking > ( SELECT MAX(mr.max_ranking) FROM max_date_rankings mr WHERE mr.max_rank_date < max_date_rankings.max_rank_date ); +``` - - overall top peak ratings + * overall top peak ratings +``` SELECT drivers.driver, rankings.ranking, rankings.rank_date @@ -32,9 +36,11 @@ INNER JOIN ( JOIN drivers ON rankings._driver = drivers.id GROUP BY rankings._driver ORDER BY rankings.ranking DESC; +``` - - highest exit ratings + * highest exit ratings +``` SELECT drivers.driver, rankings.ranking, rankings.rank_date @@ -45,9 +51,11 @@ INNER JOIN ( JOIN drivers ON rankings._driver = drivers.id WHERE rankings.rank_date < CURDATE() - INTERVAL 1 YEAR ORDER BY rankings.ranking DESC; +``` - - year-by-year rating inflation + * year-by-year rating inflation +``` SELECT YEAR(rank_date), MAX(ranking), MIN(ranking), @@ -57,3 +65,4 @@ SELECT YEAR(rank_date), FROM rankings GROUP BY YEAR(rank_date) ORDER BY YEAR(rank_date) ASC; +``` |