Mahi‑mahi — Full Transparency (v1)
Last updated: January 2026 Live URL: primetimefishing.app/mahi
This page is designed to leave nothing out: the exact equations, every variable we use, the open-access URLs behind each driver, verbatim quotes (with page pointers where available), and a plain-English explanation of what is research-backed vs what is calibrated.
The exact math (Mahi v1)
Mahi is an offshore all-day rating built from “lifts” that map into a 1.0–5.0 rating.
L_ocean_raw = L_sst + L_chl
L_ocean = clamp(L_ocean_raw, -0.06, +0.02) // ocean cap (cold can reduce more than warm can boost)
L_total_raw = L_phase + L_overlap_avg + L_time_avg + L_ocean
L_total = clamp(L_total_raw, 0, L_REF) // global clamp
rating = 1 + 4 × (L_total / L_REF) // where L_REF = 0.28
Calculation Methodology (All‑day rating)
This section is the “how it’s calculated” reference for Mahi v1 (mirrors the canonical internal doc).
Step 1) Phase curve (shared Yellowfin/Mahi family)
phaseBoostValue = moonPhaseBoostYellowfinMahi(f) // f in [0,1]
L_phase = (phaseBoostValue × phaseWeight / 2.0) × 0.31
phaseWeight = 1.33
Step 2) Fixed all‑day baselines (modeling assumptions)
L_overlap_avg = overlap(overlapMaxBoost × 0.4, overlapMaxBoost)
L_time_avg = timeBias(nightAvailability × 0.5) // assume ~50% of day is night
Step 3) Ocean block (SST required; CHL optional)
If SST missing → L_ocean = 0.00
If SST < 19°C → force L_chl = 0.00 (cold gate)
L_ocean = clamp(L_sst + L_chl, -0.06, +0.02)
Step 4) Total lift → rating
L_total = clamp(L_phase + L_overlap_avg + L_time_avg + L_ocean, 0, 0.28)
Rating = 1 + 4 × (L_total / 0.28)
Variables (what’s research-backed vs calibrated)
Research-backed means the driver/pattern/mechanism is supported by open-access sources. Calibrated means we chose the exact curve shape/thresholds/weights/caps to produce a stable 1.0–5.0 score and to avoid overclaiming from region- or gear-specific studies.
Moon phase (L_phase)
Research-backed: an open-access offshore tournament summary reports Dolphinfish (Mahi‑mahi) catch-rate peak at First Quarter.
Source (open PDF): NC Sea Grant — Hook, Line & Science (Winter 2020)
“Scientists found a relationship between catch rates and lunar phase for 5 of the 8 species as shown here…
Dolphinfish first quarter” (PDF p.2)
Calibrated: we use a smooth shared phase curve (yellowfin‑mahi) and scale it into a lift:
L_phase = (phaseBoostValue × phaseWeight / 2.0) × 0.31
phaseWeight = 1.33
Average dawn/dusk opportunity (L_overlap_avg) — modeling assumption
Offshore day ratings don’t use time windows. For non‑Yellowfin offshore species we include a small fixed overlap lift so overlap isn’t implicitly treated as 0 in a 24‑hour score. This is a modeling/UX assumption (not claimed as a research effect size).
Night availability (L_time_avg)
Research-backed (context): Mahi spawning events are predicted to occur at night and chiefly at the new moon phase (context; not a universal CPUE effect-size study).
Source (open access): Schlenker et al. 2021 — Frontiers in Marine Science (PDF)
Calibrated: we translate diel context into a small fixed all‑day average lift using nightAvailability = 0.285 and assume ~50% of a day is night.
Environmental Variables (Verification)
This section documents what the papers say (verbatim quotes with page pointers) and then shows exactly how PrimeBite maps that into a stable rating (calibrated thresholds + caps).
Oceanography (SST + chlorophyll‑a) (L_ocean)
Research-backed: multiple open-access studies show SST and chlorophyll-a covary with dolphinfish/mahi CPUE/habitat, but ranges are region-dependent.
SST anchors:
Marín‑Enríquez & Muhlia‑Melo 2018 (PDF)
“...dolphinfish preferred warm waters (24–28°C)...” (PDF p.1)
Martínez Arias et al. 2022 (PDF)
“Higher values of CPUE occurred in temperatures between 25.5 and 27.5 ºC. Above 27.5 °C and below 25.5 °C, CPUE decreases.” (PDF p.5)
“...are generally restricted by the 20°C isotherm (Gibbs and Collette 1959).” (PDF p.4)
Hammond 2008 (SEDAR document page)
“Dolphinfish were shown to utilize ocean waters with temperatures ranging from 16.0 to 30.5°C.” (Hammond 2008; quoted in our fact-check log)
“...tolerated temperatures from 15°C to 29°C but would stop feeding at 18°C (Hassler and Hogarth 1977).” (PDF p.76)
Chlorophyll anchors:
“...low concentrations of chlorophyll‑a (<0.02 mg/m3) ...” (Marín‑Enríquez & Muhlia‑Melo 2018, PDF p.1)
“82.90% of total fish... was caught in waters with concentrations of chl‑a between 0.05 and 0.25 mg/m3...” (Marín‑Enríquez & Muhlia‑Melo 2018, PDF p.5)
“Higher values of CPUE occurred in places where Chl‑a varied between 0.5 and 2.2 mg/m3. Below and above these values respectively, CPUE decreased.” (Martínez Arias et al. 2022, PDF p.5)
Calibrated (exact rules used in-app):
- SST required (if missing, ocean is treated as neutral:
L_ocean = 0.00). - Cold-water gate: if
SST < 19°C, forceL_chl = 0.00(do not allow CHL bonuses to partially cancel cold penalties). - Ocean cap:
L_ocean = clamp(L_sst + L_chl, -0.06, +0.02).
Worked examples (inputs → lifts → rating)
Best case (prime moon window + strong ocean)
Assume:
phaseBoostValue = 1.0 (First Quarter peak for the shared phase model)
SST = 26.5°C → L_sst = +0.01
CHL = 0.10 mg/m³ → L_chl = +0.01
L_ocean_raw = 0.02 → L_ocean = +0.02 (cap)
L_total_raw includes L_phase + L_overlap_avg + L_time_avg + L_ocean
Global clamp allows 5.0/5 only when L_total reaches L_REF = 0.28
Cold water (habitat-limiting)
Assume:
SST = 15°C → L_sst = -0.06
SST < 19°C → CHL ignored (L_chl = 0.00)
Ocean cap allows strong negative influence to reach 1.0/5 in clearly non-viable cold water
Model changelog (Mahi)
- 2026-01: Published full transparency page (this page). No changes to scoring logic.