[ + ] HOW THE PROJECTION WORKS
0 · Runtime data core. On launch the app scans the folder it lives in, reads every player_stats*.csv it finds (player_stats.csv, player_stats2.csv, player_stats3.csv, …) and merges them, de-duplicating overlapping rows by player id + season + league + team. All matching is keyed on each player's unique RealGM URL id (e.g. /player/…/Summary/108702), never on names — dozens of names are shared by different players. Drop this file into any session folder (or add extra player_stats files) and it rebuilds everything from scratch.
1 · Empirical route data (DIRECT mode). For your chosen route, the app pools all ID-verified cross-league transfers it traced (both directions, reverse moves sign-flipped), weights each by the player's minutes, and takes the mean shift per stat. DIRECT mode uses only this — no proxy, no model.
2 · Network scale (BLEND mode fallback). A weighted least-squares solve over every transfer edge among all leagues (Spanish ACB anchored at 0 when present) gives each league a coefficient per stat; any route's model shift = origin coefficient − destination coefficient. BLEND mixes empirical and model by sample size: weight = n / (n + 30).
3 · SPAIN SCALE mode. The scraper pipeline's Spain Scale, computed live in-app from the same player_stats feed using the pipeline's exact algorithm: per stat, transfers are aggregated into league-pair edges weighted by min(minutes) (50-minute stint gate, matching the scraper), then league offsets are solved over the whole transfer graph by weighted Gauss-Seidel anchored at ACB = 0 (falling back to Primera FEB / Segunda FEB if ACB is absent). A league's coefficient is the expected change in that stat moving from it to ACB; multi-hop connections propagate automatically, so every connected league gets coefficients — including ones scraped after any pipeline run (e.g. NCAA conferences). spain_scale_coefficients*.csv files are no longer needed and are ignored. Respects the season window and league exclusions; leagues with no path to the Spanish pyramid show NOT CONNECTED.
4 · Season window. The filter bar restricts every calculation — stints, transfers, network scale, league means, player search — to seasons inside the chosen window. Transfers crossing the window boundary are excluded. The grid re-derives instantly on change.
5 · Stabilize (optional). Regresses your input toward the origin league's minutes-weighted mean by MIN / (MIN + 350) before translating — useful for small samples. Off by default since the transfer data already bakes in typical regression.
6 · Robust weighting (toggle, default ON). High-volume feeder routes (NBA↔G-League shuttles, NCAA drafts) can dominate a league's network rating with hundreds of correlated, selection-biased records. ROBUST mode applies two corrections to every solve and to route evidence: one vote per player per route (a shuttle player's crossings are averaged into a single record) and route weight saturation (each directed route's total weight is capped smoothly at 25,000 minute-equivalents, so bias can't buy influence with volume). Ghost records always show every raw crossing. Toggle OFF for the pure scraper-faithful weighting.
7 · Vote ledger. Click any league in the rank timeline to see exactly which neighbor leagues set its rating: each edge's weight share, raw records vs unique movers, the mean shift in each direction (a route is trustworthy when OUT→ and ←IN roughly mirror), the neighbor's own rating, and the resulting vote. The league's rating is (approximately) the weighted mean of those votes.
8 · Talent-curve correction (toggle, default RAW). A route's observed shift is distorted when its movers are unrepresentative — exceptionally good imports regress toward the mean and elite talent translates non-linearly, so a league fed by star imports gets a skewed edge. CORRECTED mode residualizes every transfer's shift against the mover's deviation from their origin-league mean: the slope is estimated within routes (pair-centered weighted regression, so genuine league gaps cannot leak into it), then subtracted per transfer. Average movers are untouched; only the exceptional-import distortion is removed. Applies to all solves and route evidence; ghost records always show raw shifts.
Percentage stats are clamped to sane ranges. All figures are estimates of rate stats; counting stats depend on role and minutes in the new team.