Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

debate/results-statistics

Repository files navigation

Scoring System

This document outlines all team and judge scoring formulas used across the platform, and which files implement them.


File Tree (Scoring-Related Files)

results-statistics/
├── packages/database/prisma/
│ └── schema.prisma # Data models: TeamRanking, TeamTournamentResult, JudgeRanking, etc.
│
├── apps/web/src/
│ ├── utils/
│ │ ├── get-statistics.ts # CORE: Deflator, OTR aggregation, PWP, EWP, TWP, break %
│ │ ├── get-expected-wp.ts # CORE: Head-to-head expected win probability formula
│ │ ├── get-clutch-factor.ts # CORE: Clutch factor (upset/choke weighting)
│ │ └── get-percentile.ts # Percentile helper
│ │
│ ├── server/routers/
│ │ ├── team.ts # Team summary queries, circuit rankings (RANK() OVER otr DESC)
│ │ ├── dataset.ts # Leaderboards, school avg OTR, bid stats
│ │ ├── judge.ts # Judge summary, index rankings
│ │ ├── scraping.ts # Threats/strikes OTR-based analysis
│ │ └── landing-page.ts # Homepage OTR data
│ │
│ ├── components/charts/
│ │ ├── TeamCharts.tsx # OTR, PWP, TWP, prelim percentile visualizations
│ │ └── JudgeCharts.tsx # Judge index, speaks, side-bias charts
│ │
│ ├── components/tables/
│ │ ├── dataset/
│ │ │ ├── LeaderboardTable.tsx # Team OTR leaderboard
│ │ │ └── SchoolTable.tsx # School avg OTR rankings
│ │ └── radar/
│ │ ├── ThreatTable.tsx # OTR-based threat analysis
│ │ └── HeadToHeadRoundTable.tsx # Round-level head-to-head data
│ │
│ └── pages/
│ ├── teams/[id].tsx # Team detail page
│ ├── judges/[id].tsx # Judge detail page
│ ├── dataset.tsx # Leaderboard page
│ ├── x-ray/head-to-head.tsx # Expected win probability page
│ └── radar/threats.tsx # OTR histogram / threat scouting
│
└── apps/api/src/routes/v1/rankings/
 ├── team.router.ts # REST API for team rankings
 └── judge.router.ts # REST API for judge rankings

Formulas

1. OTR (Overall Team Rating)

OTR is the primary team rating metric. Each tournament produces an otrComp (OTR component) stored in team_tournament_results. The overall OTR is computed as:

×ばつ mean(otrComp1, otrComp2, ..., otrCompn)">
OTR = deflator(n) ×ばつ mean(otrComp1, otrComp2, ..., otrCompn)

where n = number of tournaments attended.

Deflator (logistic growth curve):

×ばつ e^(-K ×ばつ n) + 1)">
deflator(n) = N / ((N/Y0 - 1) ×ばつ e^(-K ×ばつ n) + 1)
Parameter Value Meaning
N 1 Asymptotic maximum (caps at 1.0)
Y0 0.15 Initial value (15% at 0 tournaments)
K 1.3 Growth rate

Effect: Teams with few tournaments have their OTR heavily discounted. After ~4-5 tournaments the deflator approaches 1.0.

Source: get-statistics.ts:44-52


2. PWP (Prelim Win Percentage)

PWP = prelimBallotsWon / (prelimBallotsWon + prelimBallotsLost)

Aggregated across all tournaments.

Source: get-statistics.ts:107


3. EWP (Elim Win Percentage)

EWP = elimWins / (elimWins + elimLosses)

Aggregated across all tournaments.

Source: get-statistics.ts:108


4. TWP (Total Win Percentage)

×ばつ 0.1">
TWP = (prelimBallotsWon + elimWins) / (totalPrelimBallots + totalElimBallots) + EWP ×ばつ 0.1

Capped at 1.0. The + EWP ×ばつ 0.1 bonus rewards teams that win in elimination rounds (harder opponents, higher stakes).

Source: get-statistics.ts:110-111


5. Break Percentage

Break% = (# tournaments where team made elims) / (# tournaments with elim rounds)

Only counts tournaments that have elimination rounds.

Source: get-statistics.ts:81-89, 114


6. OpWpM (Opponent Win Percentage Margin)

Average of per-tournament opWpM values. Measures strength of schedule — higher means the team faced tougher opponents.

Source: get-statistics.ts:117


7. Expected Win Probability (Head-to-Head)

Given two teams with OTR values and optionally a judge panel's average index:

×ばつ |ΔOTR|^0.8094 ×ばつ (1 / (4 ×ばつ avgOTR))) / (1 + 2^(-(judgeIndex - 6))) + 0.5">
EWP = (1.47 ×ばつ |ΔOTR|^0.8094 ×ばつ (1 / (4 ×ばつ avgOTR))) / (1 + 2^(-(judgeIndex - 6))) + 0.5
Component Meaning
1.47 ×ばつ |ΔOTR|^0.8094 Non-linear impact of OTR gap (diminishing returns)
1 / (4 ×ばつ avgOTR) Scales down when both teams are strong
1 + 2^(-(judgeIndex - 6)) Judge quality adjustment (default index = 10)
+ 0.5 Baseline: equal teams have 50% win probability

Returns the probability that the higher-OTR team wins.

Source: get-expected-wp.ts


8. Clutch Factor

Measures performance under pressure relative to expectations:

×ばつ udRounds ×ばつ 7 - udLosses ×ばつ udRounds ×ばつ 0.5 + favWins ×ばつ favRounds ×ばつ 2 - favLosses ×ばつ favRounds ×ばつ 6) / ((favRounds + udRounds) ×ばつ 4)">
ClutchFactor = (udWins ×ばつ udRounds ×ばつ 7 - udLosses ×ばつ udRounds ×ばつ 0.5
 + favWins ×ばつ favRounds ×ばつ 2 - favLosses ×ばつ favRounds ×ばつ 6)
 / ((favRounds + udRounds) ×ばつ 4)
Scenario Weight Rationale
Underdog win (beat higher-OTR) +7 Highest reward — clutch performance
Favored win (beat lower-OTR) +2 Expected outcome, modest credit
Underdog loss (lost to higher-OTR) −0.5 Expected outcome, minimal penalty
Favored loss (lost to lower-OTR) −6 Choke — heavy penalty

Output is clamped to [0, 10].

A team's rounds are classified as "favored" or "underdog" by comparing their OTR to their opponent's OTR.

Source: get-clutch-factor.ts


9. Prelim Pool Percentile

×ばつ 100">
Percentile = 100 - (prelimPos / prelimPoolSize) ×ばつ 100

Per-tournament metric shown in charts.

Source: TeamCharts.tsx


10. Judge Index

Stored in judge_rankings.index. Analogous to team OTR but for judges. Judges are ranked by index per circuit/season. Associated per-tournament stats include:

  • avgRawPoints / avgAdjPoints — average speaker points awarded
  • stdDevPoints — consistency of point distribution
  • numSquirrels — unexpected decisions
  • numPrelimScrews — prelim judging errors
  • Side bias — pro/aff vs con/neg vote frequency

Data Flow

Tabroom.com scraping
 ↓
 TeamTournamentResult (otrComp, opWpM, prelim/elim records)
 JudgeTournamentResult (points, squirrels, screws)
 ↓
 team_rankings / judge_rankings (aggregated OTR / index per circuit+season)
 ↓
 tRPC routers (team.ts, dataset.ts, judge.ts)
 ↓
 Frontend pages + charts (TeamCharts, LeaderboardTable, HeadToHead, etc.)

About

Best teams in policy, LD, PF, Congress, college

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • TypeScript 97.7%
  • CSS 1.3%
  • Other 1.0%

AltStyle によって変換されたページ (->オリジナル) /