A variance-accounting study, not a price index.
Basis is a public-data study measuring how fungible GPU compute really is across cloud providers. It collects quoted prices, normalizes them into a canonical schema, and decomposes observed price variance into observable factors and a residual. The residual is the headline finding.
If a benchmark designer can’t tell you which adjustments produced the headline number, the headline number is doing the wrong job.
Show me how
The entire pipeline is rule-based and traceable. Every attribution can be regenerated from the original provider response, and every adjustment is small enough to argue with. Interpretability is not a polish — it is the claim.
Three numbers carry the study: how far apart quoted prices sit on a given day, how much of that spread named factors account for, and what is left over. The last one is the Residualthe share of price differences left over after accounting for everything sellers publicly disclose., and every page here exists to keep it honest.
Five providers, twice daily, JSONB forever.
Vast.ai (REST), RunPod (GraphQL), AWS EC2 Spot (boto3), and the Azure and GCP list catalogs are collected on a fixed 2× / day cadence. TensorDock was retired 2026-06-12. Lambda Labs was considered but dropped — its free API key now requires a payment method on file, which violates the study's zero-data-cost constraint.
Show me how
Every collector writes its full provider response to raw_observations as a JSONB blob. Raw rows are immutable — never updated, never deleted — so the normalized layer can always be regenerated from source truth.
Two runs a day is a deliberate floor, not a limit: it is often enough to catch a repricing, and slow enough that every quote in the corpus can be traced back to a single recorded response.
Conservative normalization preserves the residual.
The normalization layer projects each raw observation into a canonical_offer row with standardized fields. Unknown values stay unknown.
Show me how
Each canonical row carries a canonical GPU SKU (for example h100_sxm_80gb), a canonical commitment type (on_demand, Spotdiscounted capacity the provider can take back at any time., or reserved_*), country / state / city region, and the bundled vCPU/RAM/storage that travelled with the offer.
Unknown GPU names are skipped and logged, not guessed. Missing factor values remain a distinct UNKNOWN group rather than being imputed away. Conservative normalization preserves the residual instead of laundering ambiguity into “region” or “bundle.”
Median and IQR, market-wide and per provider.
For each (date, gpu_sku) pair with at least three offers, Basis computes median, 25th percentile, 75th percentile, and observation count — both across all providers and per-provider.
Show me how
These daily aggregates live in daily_aggregates and power the time-series pages. Anything below three offers is held out: noise from thin samples is precisely the kind of confidence Basis is built to resist.
Sequential ANOVA, in fixed model order.
For each (date, gpu_sku) with at least five offers, Basis runs a sequential ANOVA on log-prices — a Decompositionsplitting total price variation into named causes, one factor at a time. in fixed model order that renders the same way everywhere on the site:
Show me how
Each factor's attribution is the additional sum-of-squares explained after conditioning on all prior factors. The residual is total_variance − Σ attributions.
Order dependence. Sequential ANOVA is order-dependent: a different order redistributes factor attributions, but leaves the residual unchanged. That is why the Basis page and the comparison panel at the bottom both render in model order rather than prototype order.
Why log-prices. Price ratios, not absolute differences, are the meaningful fungibility metric. A 2× price multiplier at $1/hr vs $2/hr represents the same fungibility gap as 2× at $2/hr vs $4/hr; they should not be conflated in absolute-variance terms.
What this measurement cannot see.
These four constraints set the scope of every claim Basis makes. They are stated up front because pretending they are not present is the failure mode the study is built to avoid.
The unexplained share is the finding.
The residual is the basis risk a compute benchmark would have to absorb.
It is the portion of log-price dispersion that cannot be explained by region, commitment, provider identity, or bundle composition — the irreducible mismatch between a single reference price and what a specific buyer actually pays.
In market-priced segments (marketplaces + spot), observable factors fail to explain roughly 20–61% of H100 price variance week to week; in administered catalogs the same factors explain nearly everything — segment-conditionality is the finding.
Pool in Azure/GCP’s fixed list catalogs (joined Jul 28) and the pooled residual collapses to single digits — administered prices are explainable by construction, which is precisely why a compute benchmark must be segment-aware.
Compare to an equal-weight donut
Loading comparison…
Why pooling misleads
Loading both series…