General formula summary — data includes…
Reference definitions used in the home run model.
CareerR
(CareerHR + 150 × LgHRRate) / (CareerPA + 150)
Y1R
(HR_365 + 80 × LgHRRate) / (PA_365 + 80)
L10R
(HR_10 + 50 × LgHRRate) / (PA_10 + 50)
SplitR
(HR_vsHand + 100 × LgHRRate) / (PA_vsHand + 100)
TimeR
(HR_daynight + 100 × LgHRRate) / (PA_daynight + 100)
BvPR
(HR_vsSP + 150 × LgHRRate) / (PA_vsSP + 150)
HitterBaseRaw
0.18 × (CareerR)
+ 0.42 × (Y1R)
+ 0.10 × (L10R)
+ 0.22 × (SplitR)
+ 0.05 × (TimeR)
+ 0.03 × (BvPR)
FBIndex
(HitterFBpct / LeagueFBpct) ^ 0.4
BarrelIndex
(HitterBarrelPct / LeagueBarrelPct) ^ 0.7
HitterSkill
HitterBaseRaw × FBIndex × BarrelIndex
StarterSplitHRFactor
(StarterHRAllowedRate_split / LeagueHRAllowedRate) ^ 0.5
PitcherFBFactor
(PitcherFBAllowedPct / LeagueFBAllowedPct) ^ 0.30
BullpenFactor
(BullpenHRAllowedRate / LeagueHRAllowedRate) ^ 0.25
PitchingFactor
(StarterSplitHRFactor ^ 0.7)
× (PitcherFBFactor ^ 0.3)
× (BullpenFactor ^ 0.2)
WindFactor
1 + (0.012 × WindOutMPH) − (0.010 × WindInMPH)
TempFactor
1 + 0.003 × (TempF − 70)
HumidityFactor
1 + 0.001 × (HumidityPct − 50)
GameEnv
ParkFactor
× WindFactor
× TempFactor
× HumidityFactor
× RoofFactor
AdjHRRate_PA
HitterSkill
× PitchingFactor
× GameEnv
× ConfirmedLineupFactor
HRProb_Game
1 − (1 − AdjHRRate_PA) ^ ExpectedPA
Games are read from the ESPN scoreboard API one Eastern calendar day at a time, then stored in nba_game. Automatic update: on the first normal page load on or after 4:00 AM Central each calendar day, this page runs one ESPN sync (up to 120 days per run). If no one visits until later, that sync runs then instead. For a pull at exactly 4:00 AM CT regardless of traffic, schedule HTTP access to this URL (e.g. cron + curl). Backfill for 2025-26 starts at 2025-10-20 Eastern through 2026-06-30. After you close that season, the live table is cleared and sync resumes from 2026-10-01 for 2026-27. Use ?since=YYYY-MM-DD to override the empty-table anchor. Manual sync uses at most 45 days per run (?days=1–120). Archived 2025-26 rows appear on games-25-26.php (after the July rollover; games-2026.php redirects there).
NBA index · 2025-26 archive · 300 before 4
Routine refreshes happen once per Central day after 4:00 AM when someone loads this page. Use Manual sync now only for backfill or if you need an immediate pull (walks up to days Eastern dates per run). Team #1 and Team #2 limit the table to the current season in the live table (same season_label as the newest stored game). With one team chosen, you see every game that team played (home or away). With two different teams, you see only head-to-head games between them. Column headers sort the full filtered list; Q1–Full and Total use the sum of away + home values in that column (largest first when you first sort that column). Use Load more for the next 100 rows. A caret (^) after Total means the game had overtime (more than four periods in stored linescores). NEXT uses the full live nba_game table first (ignores Team #1/#2 filters), then the ESPN scoreboard for up to 45 future Eastern days for matchups still missing a row — same schedule JSON as sync, not the news feed (stories only, no slate). Eligible: later calendar day than today (US Eastern), or today if the game is not completed. - if neither source has a qualifying game. Linescores require quarter_scores_json (run mysql_migration_nba_game_archive.sql ALTERs if needed).