# Two Proposals for Determining Invitees to the AKC Agility Invitational

06 Jan 2023

The AKC Agility Invitational (AGI) is held annually to celebrate all breeds who compete in AKC Dog Agility competitions.

The current formula by which attendees are chosen uses the count of “Double Qs” aka “QQs” (a qualifying score in Std and a qualifying score in JWW on the same day) and total MACH points (one point for each second in a qualifying run below the Standard Course Time aka SCT of each course) as inputs:

`score = (QQCount * 10) + totalPoints`

where:

- QQCount is the number of QQs earned in the qualifying period
- totalPoints is total seconds below SCT for all Qs in the qualifying period

The dogs invited to the invitational are those with the highest scores per breed.

For breeds with few dog agility competitors the number of points required to be invited can be low; double Qs are not required.

For breeds with many agility competitors, or a group of competitors who trial frequently, more than 5,000 points are currently required to have the top scores.
The vast majority of their points are from their `totalPoints`

rather than from QQs.
This has the downside that, for popular breeds, only competitors who have access to 100+ AKC trial dates can earn enough points to be invited.

I am proposing two formulas that “cap” the score achieved by any team based on a maximum of 25 QQs and then uses each team’s actual qualifying rate (and in Proposal 2 additionally their relative speed) to rank teams that exceed 25 QQs in the qualifying period.

Incorporating a team’s qualifying rate into the formulas for choosing invitees is a direct measurement of a team’s consistency that is not affected by a team’s ability to attend more trials than other teams. Furthermore, it should make the formulas better predictors of how well a team will perform at the AGI where teams have to complete four rounds of competition without any faults in order to be eligible for the finals round.

These proposed formulas do not impact breeds with few competitors.

## Proposal 1:

### Goals:

- like today, breeds with few competitors can earn invitations on Qs alone.
- focus on consistency

### Details:

- Only the first 25 Qs earn 10 points each.
- Only the first 25 QQs earn 20 points each.
- 25 Qs/QQs are not required.
- Total score is reduced by the overall Q rate in the qualifying period (all Std and JWW runs).
- Maximum possible score is 750 points.
- This formula is not dependent on SCT so it could be used to rank preferred dogs together with regular dogs without a bias toward either group. AKC could choose to take the top 5 dogs regardless of regular/preferred based solely on this score.

### Assumptions:

- AKC has NQ data and can calculate Q Rate (#Qs/total runs). Trial secretaries currently upload trial Q and NQ data to AKC.

### Discussion:

- 25 Q/QQs is a number I chose to exclude teams who “just do enough” to get an invitation. Of course, this number could be adjusted up or down. Clearly, if a team is earning 25 QQs in a qualifying period they are a dedicated AKC competitor. Furthermore, I would argue, including statistics for more than 25 Q/QQs doesn’t give any additional insight into a team’s abilities to be successful at the AGI. Rather, it reflects their access/ability to trial vs other competitors.
- Breeds with teams that compete frequently enough to earn 25 Qs and 25 QQs earn the maximum points.
- Multiplying total points by the team’s Q rate ranks teams by their Q rate. The higher the Q rate the higher the score.

### Formula:

`score = ((QCount * 10) + (QQCount * 20)) * QRate`

where:

- QCount is the number of Qs up to and including 25 Qs
- QQCount is the number of QQs up to and including 25 QQs
- QRate is the total number of Qs in the qualifying period divided by the total number of runs recorded in that qualifying period.

A pseudo code equation:

`score = (min(QCount, 25) * 10 + min(QQCount, 25) * 20) * QRate`

### Examples

Sparky: Earned two Qs in 20 attempts:

```
((min(2, 25) * 10) + (min(0, 25) * 20)) * 2/20
((2 * 10) + (0 * 20)) * 0.1
2 pts
```

Flyer: Maxed out Qs but not QQs: 50Qs, 10 QQs, 70 total Std/JWW runs:

```
((min(50, 25) * 10) + (min(10, 25) * 20)) * 50 / 70
((25 * 10) + (10 * 20)) * 0.71
(250 + 200) * 0.71
319.5 pts
```

Snap!: Maxed out Qs and QQs: 50Qs, 30 QQs, 70 total Std/JWW runs:

```
((min(50, 25) * 10) + (min(30, 25) * 20)) * 50 / 70
((25 * 10) + (25 * 20)) * 0.714
(250 + 500) * 0.71
532.5 pts
```

Meeker Maxed out Qs, QQs, higher Q rate: 50Qs, 30 QQs, 55 total Std/JWW runs:

```
((min(50, 25) * 10) + (min(30, 25) * 20)) * 50/55
((25 * 10) + (25 * 20)) * 0.91
(250 + 500) * 0.91
682.5 pts
```

## Proposal 2

### Goals:

- like today, breeds with few competitors can earn invitations on Qs alone.
- focus on consistency while giving some advantage to faster teams

### Details:

Two parts to the score: consistency and speed. Up to 750 points are achieved due to consistency. Up to 250 points are achieved due to speed. The two scores are added together. The highest scoring teams are then the most consistent and fastest.

Consistency Score:

- Only the first 25 Qs earn 10 points.
- Only the first 25 QQs earn 20 points.
- 25 Qs/QQs are not required.
- Total consistency score is reduced by the overall Q rate in the qualifying period (all Std/JWW runs).

Speed Score:

- Each team’s MACH points in the qualifying period are weighted against a theoretical maximum possible MACH points achievable for a run: 50 pts.
- The weighted MACH points are then multiplied by 250 to get the speed score.

### Assumptions:

- AKC has NQ data and can calculate Q Rate (#Qs/total runs)

### Discussion:

- Consistency score is the same as in Proposal 1.
- Adds in a speed component that is at most one quarter of the total score. Compute ratio of seconds below SCT (aka MACH points) to a theoretical maximum of 50 points (this number could be adjusted up/down) per qualifying run. Multiply that ratio by 250 points for number of speed points added to the consistency score. The choice of 50 is a guess of the theoretical max MACH points per run. The value just has to be large enough that no one could consistently earn 50 MACH points on every run.
- Because speed points are at most a quarter of the total score, consistent teams that qualify more than fast teams will always have higher scores. The current formula rewards teams who can accumulate MACH points even if they never earn QQs.

### Formula:

`score = consistencyScore + speedScore`

Where:

`consistencyScore = ((QCount * 10) + (QQCount * 20)) * QRate`

where:

- QCount is the number of Qs up to and including 25 Qs
- QQCount is the number of QQs up to and including 25 QQs
- QRate is the total number of Qs in the qualifying period divided by the total number of runs recorded in that qualifying period.

`speedScore = (totalPoints / (50 * totalQCount)) * 250`

where:

- totalPoints is total seconds below SCT for all Qs in the qualifying period
- totalQCount is the total number of Std/JWW Qs in the qualifying period

A pseudo code equation:

```
score = ((min(QCount, 25) * 10
+ min(QQCount, 25) * 20
) * QRate)
+
(
annualMachPoints /
(50 * QCount)
) * 250
```

### Examples

Sparky: Earned two Qs in 20 attempts, 0 MACH points:

```
(((min(2, 25) * 10) + (min(0, 25) * 20)) * 2/20) + (0 / (50 * 2)) * 250
(((2 * 10) + (0 * 20)) * 0.1) + (0 / 100)
((20 + 0) * 0.1) + 0
2 pts
```

Fluffy: Same as Sparky but 30 MACH points:

```
(((min(2, 25) * 10) + (min(0, 25) * 20)) * 2/20) + (30 / (50 * 2)) * 250
(((2 * 10) + (0 * 20)) * 0.1) + (30 / 100) * 250
((20 + 0) * 0.1) + 0.3 * 250
77 pts
```

Flyer: Maxed out Qs but not QQs: 50Qs, 10 QQs, 70 total Std/JWW runs, 1000 MACH points:

```
(((min(50, 25) * 10) + (min(10, 25) * 20)) * 50 / 70) + (1000 / (50 * 70)) * 250
(((25 * 10) + (10 * 20)) * 0.71) + (1000 / 3500) * 250
((250 + 200) * 0.71) + (0.29 * 250)
319.5 + 72.5 = 392 pts
```

Snap!: Maxed out Qs and QQs: 50Qs, 30 QQs, 70 total Std/JWW runs, 1500 MACH points:

```
(((min(50, 25) * 10) + (min(30, 25) * 20)) * 50 / 70) + (1500 / (50 * 70)) * 250
(((25 * 10) + (25 * 20)) * 0.714) + (1500 / 3500) * 250
(250 + 500) * 0.71 + (0.43 * 250)
532.5 pts + 107.5 = 640 pts
```

Meeker Maxed out Qs, QQs, higher Q rate: 50Qs, 30 QQs, 55 total Std/JWW runs, 1500 MACH points:

```
(((min(50, 25) * 10) + (min(30, 25) * 20)) * 50/55) + (1500 / (50 * 70)) * 250
(((25 * 10) + (25 * 20)) * 0.91) + (1500 / 3500) * 250
(250 + 500) * 0.91 + (0.43 * 250)
682.5 + 107.5 = 790 pts
```

Speedy Same as Meeker but more MACH points. 50Qs, 30 QQs, 55 total Std/JWW runs, 2000 MACH points:

```
(((min(50, 25) * 10) + (min(30, 25) * 20)) * 50/55) + (2000 / (50 * 70)) * 250
(((25 * 10) + (25 * 20)) * 0.91) + (2000 / 3500) * 250
(250 + 500) * 0.91 + (0.57 * 250)
682.5 + 142.5 = 825 pts
```

## Summary

I have forwarded this proposal to the AKC agility group for their review. There are many possible variations of how points for the AGI are calculated. I hope they consider incorporating a selection formula where the total points are capped and, if maxed out, the difference between teams is then determined by their qualifying rate and their relative speed. The AGI celebrates all breeds and the most consistent and fastest dogs should be invited, regardless of which teams can trial the most.

If you enjoyed this article won't you please: Thanks!