Black Marlin — Full Transparency (v1)

Last updated: January 2026 Live URL: primetimefishing.app/blackmarlin

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 (Black Marlin v1)

Black Marlin is an offshore all-day rating built from “lifts” that map into a 1.0–5.0 rating.

L_ocean_raw = L_sst
L_ocean     = clamp(L_ocean_raw, -0.06, +0.02)   // SST-only ocean cap

L_total_preSeason  = L_phase + L_overlap_avg + L_ocean
L_total_postSeason = applySeasonalMultiplier(L_total_preSeason, seasonMult)

L_total = clamp(L_total_postSeason, 0, L_REF)    // global clamp
rating  = 1 + 4 × (L_total / L_REF)              // where L_REF = 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.

Calculation Methodology (All‑day rating)

This section is the “how it’s calculated” reference for Black Marlin v1.

phaseBoostValue = moonPhaseBoostBlackMarlinQuarters(f)   // f in [0,1]
L_phase         = (phaseBoostValue × phaseWeight / 2.0) × 0.31

L_overlap_avg   = overlap(overlapMaxBoost × 0.4, overlapMaxBoost)

// Ocean (SST only):
// - If SST missing → ocean treated as neutral (0.00)
L_ocean         = clamp(blackMarlinSstLift(sstC), -0.06, +0.02)

// Seasonality:
seasonMultRaw   = seasonalMultipliers[monthIndex]
seasonMult      = clamp(seasonMultRaw, 0.9, 1.15)

L_total         = clamp((L_phase + L_overlap_avg + L_ocean) × seasonMult, 0, 0.28)
rating          = 1 + 4 × (L_total / 0.28)

Moon phase (quarter phases / “half-moons”)

Research-backed (GBR diaries): higher CPUE during half-moons and ~30–40% lower during new or full moons.

Pepperell et al. 2025 (open access): DOIPDF

“Moon phase had a non-linear relationship with higher CPUE during a half moon and approximately 30%–40% lower during new or full moons (Fig. 7e).”

Seasonality (GBR timing)

Research-backed: a GBR spawning aggregation forms in Oct–Nov; the charter season is Sep–Dec with peak CPUE Oct–Nov.

Domeier & Speare 2012 (open access): PLOS ONE full text

Calibrated: exact multipliers (GBR-timed, applied globally as a modeling choice): Sep/Dec ×1.05; Oct/Nov ×1.10; all other months ×1.00.

Environmental variables (verification)

This section documents what the papers say (verbatim quotes) and then shows how PrimeBite maps that into a stable rating (calibrated thresholds + caps).

SST (SST-only ocean block)

Setyadji & Fahmi 2020 (open access): DOIPDF

“In this study, high CPUE occurred between 29–31°C...”
“... SST and SSH were statistically significant when incorporated into the models, but it allegedly wasn’t the main driver...”

Calibrated (exact rules used in-app):

  • Missing SST: treat ocean as neutral (L_ocean = 0.00).
  • Ocean cap: L_ocean = clamp(L_sst, -0.06, +0.02).
  • Cold penalties: <18°C → -0.06; 18–22°C → -0.03 (explicit modeling choice).
  • Warm bonuses: 29–31°C → +0.02; 28–32°C → +0.01 (loosely anchored to the “29–31°C” note).

Worked examples (inputs → lifts → rating)

Best case

Assume:
phaseBoostValue = 1.0 (quarter-phase peak)
seasonMult = 1.10 (Oct/Nov)
SST = 30°C → L_sst = +0.02 → L_ocean = +0.02 (cap)

L_total_preSeason  ≈ L_phase + L_overlap_avg + 0.02
L_total_postSeason = L_total_preSeason × 1.10
Global clamp allows 5.0/5 only when L_total reaches L_REF = 0.28

Cold water

Assume:
SST = 17°C → L_sst = -0.06 → L_ocean = -0.06
seasonMult = 1.00 (most months)

Cold penalty can materially lower the rating and supports reaching 1.0/5 in clearly non-viable water (after clamping).

Model changelog (Black Marlin)

  • 2026-01: Published full transparency page (this page). No changes to scoring logic.