Heat Check Tracker

NBA 2025-26 • Shooting streak temperature analysis
# Player GP MPG APT Max Peak Avg SHS SHS/36 Fire % FG% Best Streak Flame Out Heat
Select a moment below to see the temperature curve

Temperature Model

Let $s_1, s_2, \ldots, s_n$ denote the chronological sequence of a player's qualifying shots in a single game. A shot qualifies if it is a jump shot (any subtype) with distance $d \geq 13\,\mathrm{ft}$, or any three-point attempt. Layups, dunks, tip shots, and free throws are excluded.

Each qualifying shot $s_i$ is characterized by:

1. Temperature Update Rule

After each qualifying shot $s_i$, the player's temperature updates as:

$$T_i = \max\!\left(0,\;\; \alpha \cdot \delta_i \cdot \widetilde{T}_{i-1} \;+\; r_i \cdot w(d_i) \cdot \sigma(d_i)\right)$$

where $T_0 = 0$, $\alpha = 1.15$ is the exponential growth multiplier, and $\widetilde{T}_{i-1}$ is the passively decayed temperature at the moment of shot $s_i$.

2. Passive Decay (Gaussian)

Between consecutive shots, the temperature decays continuously via a Gaussian kernel:

$$\widetilde{T}_{i-1} = T_{i-1} \cdot \exp\!\left(-\left(\frac{t_i - t_{i-1}}{\tau}\right)^{\!2}\right), \qquad \tau = 180\,\mathrm{s}$$

The squared exponent produces slow initial decay that accelerates over time: at $\Delta t = 60\,\mathrm{s}$, $\approx 90\%$ of temperature remains; at $\Delta t = 180\,\mathrm{s}$, $\approx 37\%$; at $\Delta t = 300\,\mathrm{s}$, $\approx 4\%$ (effectively cold).

3. Miss Penalty

The miss penalty $\delta_i$ modulates the carry-over from the previous temperature:

$$\delta_i = \begin{cases} 1.0 & \text{if } r_i = 1 \;\;(\mathrm{made}) \\ 0.4 & \text{if } r_i = 0 \text{ and } r_{i-1} = 1 \;\;(\mathrm{first\;miss}) \\ 0.1 & \text{if } r_i = 0 \text{ and } r_{i-1} = 0 \;\;(\mathrm{consecutive\;miss}) \end{cases}$$

A single miss reduces the carry-over to 40% but does not kill the streak. Two consecutive misses reduce it to 10%, effectively ending the hot streak.

4. Distance Weight

Deeper shots receive higher weight, scaling linearly from the midrange baseline:

$$w(d) = 1 + \frac{d - 15}{15}$$
$d = 15\,\mathrm{ft}$ (midrange): $w = 1.0$
$d = 24\,\mathrm{ft}$ (three): $w = 1.6$
$d = 27\,\mathrm{ft}$ (deep three): $w = 1.8$
$d = 30\,\mathrm{ft}$ (logo): $w = 2.0$

5. Eligibility Ramp

A logistic function centered at $15\,\mathrm{ft}$ provides a soft eligibility threshold, replacing a hard distance cutoff:

$$\sigma(d) = \frac{1}{1 + e^{-3(d - 15)}}$$

At $d = 13\,\mathrm{ft}$: $\sigma \approx 0.02$. At $d = 15\,\mathrm{ft}$: $\sigma = 0.50$. At $d = 17\,\mathrm{ft}$: $\sigma \approx 0.99$. The total shot contribution is $r_i \cdot w(d_i) \cdot \sigma(d_i)$.

6. On Fire Threshold

A player is classified as on fire when their temperature exceeds a threshold $T^* = 3.0$, which requires approximately two consecutive qualifying makes to reach.

Primary Statistics

Average Peak Temperature (APT)

For a player with $G$ games played, where $T_g^{\mathrm{peak}} = \max_i T_i^{(g)}$ is the peak temperature in game $g$:

$$\mathrm{APT} = \frac{1}{G} \sum_{g=1}^{G} T_g^{\mathrm{peak}}$$

Sustained Heat Score (SHS)

The temperature is evaluated at every $\Delta = 10\,\mathrm{s}$ interval using Gaussian decay between shots. The per-game SHS is defined as:

$$\mathrm{SHS}_g = \sum_{k} \left[T\!\left(k\Delta\right)\right]^{5/2}$$

By the layer cake representation, this is equivalent (up to a constant) to:

$$\mathrm{SHS}_g \;\propto\; \int_0^{\infty} \mu\!\left(\{t : T(t) \geq x\}\right) \cdot x^{3/2}\, dx$$

where $\mu(\cdot)$ denotes the Lebesgue measure (total time in seconds). The $x^{3/2}$ weighting ensures that both peak intensity and sustained duration contribute to the score, with higher temperatures receiving disproportionately more weight.

The per-36-minute normalized version:

$$\mathrm{SHS}_{36} = \mathrm{SHS}_g \cdot \frac{36}{\mathrm{MPG}}$$

Secondary Statistics