Methodology · Picks Terminal
How our analysis is built, checked, and graded
This page documents exactly what Picks Terminal does with data, what it publishes, what it refuses to publish, and how it holds its own forecasts to account. It describes the system as it is actually implemented today. Where a limitation exists, it is stated rather than smoothed over.
What we analyse — and what we do not do
Picks Terminal covers UFC cards: the full fight card for each event, fighter-versus-fighter physical and statistical comparisons, a written matchup breakdown, a stated win probability, and for a growing subset of bouts a long-form analysis article. Historical events remain online at permanent URLs after the card has taken place.
We do not accept, place, transmit, or facilitate wagers. We do not operate a sportsbook, exchange, or affiliate funnel, and we do not publish American moneylines, sportsbook links, or wagering-value framing such as "best bet" or "live underdog". Our output is editorial and analytical. It is intended for readers aged 18 and over.
Data inputs
Every page is rendered from stored records rather than assembled live at request time. For each event we store the name, date, venue and city. For each bout we store the two fighters, the weight class, its position on the card, whether it is a title fight, and — once the result is official — the winner, method, round and time.
For each fighter we store a professional record, division and rank where one exists, stance, height and reach, age, and the striking and grappling rates published in public fight statistics: significant strikes landed and absorbed per minute, striking accuracy and defence, takedown volume, takedown accuracy and takedown defence, submission attempts, average fight time, finish rate, and the breakdown of significant strikes by position (standing, clinch, ground) and by target (head, body, leg). Those figures drive the comparison grids, the strike-distribution profiles, and the combat signature and archetype labels shown on fight pages.
Fighter photography is used only where we hold a rights-clean source; where we do not, the page falls back to initials rather than borrowing an image. Attribution is listed on our image credits page.
How to read a win probability
A win probability is an estimate of how often a fighter would be expected to win if the same bout were contested repeatedly under the same conditions. It is not a prediction of certainty, and a favourite losing is not by itself evidence that the estimate was wrong. A fighter rated at 70% is expected to lose close to three fights in ten.
The only meaningful test of a probability is calibration across many fights, which is why we publish our record rather than asking readers to take it on trust. See model accuracy.
Missing data policy: unknown stays unknown
Debutants, regional signings and short-notice replacements often have no usable statistical sample. When a value is unknown we store and display it as unknown. We never substitute zero for a missing measurement. A zero is a real claim — it asserts that a fighter lands nothing, defends nothing, or attempts nothing — and treating absence as zero would systematically bias every derived comparison against the least-documented fighters.
In practice this means some fight pages show no strike-distribution chart at all, or show one for a single fighter. That is the honest state of the record. The same principle applies to results: a bout without an official outcome is not scored, and a scheduled fight is never presented as decided.
Long-form articles and the gates they must pass
Our long-form fight articles are drafted by a large language model working strictly from the stored event, fighter and analysis payload for that single bout. The model is not given web access and is not asked to research; its job is to structure and explain data we already hold.
Publication is not automatic. Each draft is scored against deterministic gates before it can reach a public URL, and a draft that fails any of them stays unpublished:
- Minimum depth. A draft must reach a minimum word count and a minimum number of distinct sections; thin, one-note pieces are rejected.
- Unsupported-number rejection. Every numeric figure in the prose is checked against the source payload for that fight. A statistic the model invented, rounded into existence, or derived on its own causes rejection rather than a quiet correction.
- Repetition checks. Drafts are compared against their own other sections and against articles for other fights. Excessive overlap — the signature of name-swapped boilerplate — fails the gate.
- Banned framing. Wagering language, odds and sportsbook references, guarantees, and provider or model name-dropping are blocked by an explicit banned-phrase list.
- Malformed output retry. If the model returns output we cannot parse, generation is retried once with an explicit correction instruction; a second failure is recorded as a failure, not published.
- Exact-language publication. An article's published status is recorded per language. An English article never makes a Spanish URL count as published content.
Each article also stores a hash of the source data it was written from, so a regeneration against unchanged inputs is idempotent and does not churn the published record for no reason.
Why a rejected draft stays a draft
A failed draft remains in draft state and its fight page is marked noindex. We do not override a gate to increase page count. Deliberately publishing content we have already flagged as unverifiable would defeat the purpose of running the check, so a fight without a passing article simply keeps its data-driven page and stays out of our sitemap until an article passes.
Update lifecycle and permanent URLs
Card data is refreshed manually ahead of each event; refreshes preserve the permanent slug of every event and bout, so a URL published weeks in advance is the same URL that carries the result afterwards. Superseded or cancelled bouts are marked rather than deleted. News headlines and a public-sentiment feed update on their own schedules and are clearly separated from our own analysis.
Completed events move to an archive view on the schedule and keep their pages indefinitely.
Accuracy tracking: snapshots, Brier score, calibration
Before an event begins we capture an immutable snapshot of every published win probability. Those rows are protected against modification at the database level, which means our historical forecasts cannot be edited after the fact to look better than they were.
Once official results are recorded, each snapshot is graded with the Brier score, the standard measure of probabilistic accuracy, where lower is better and a coin-flip forecast scores 0.25. Forecasts are also bucketed by confidence band so readers can check calibration directly: if our 60–70% picks do not win roughly two-thirds of the time, the table will say so. The full public ledger, wins and losses alike, is on model accuracy.
Corrections and contact
If a figure, name, result or claim on this site is wrong, we want to fix it. Email hello@picksterminal.com with the URL and the specific error. Data errors are corrected in the stored record so every page that reads it updates together; a substantive change to a published article is regenerated through the same gates rather than patched by hand.
Independence
Picks Terminal is operated by PAC LOGISTICS LLC and funded by display advertising and clearly labelled sponsored newsletter placements. Advertisers have no input into which fights we cover, what our analysis says, or which probabilities we publish. We are not affiliated with UFC, Zuffa LLC, or any league or sportsbook. More operator detail is on our about and terms pages.