Loading page content…
Loading page content…
Methodology
LakeRadar reads official weather and water data, checks that every value has a source, and turns it into five activity scores. The calculation is deterministic and versioned: the same inputs always produce the same number, and every stored score records the version of the constants that produced it.
Scores are heuristics, not safety guarantees. They summarize what the available data says. They are not a substitute for an official warning, a local rule, or your own judgment on the water.
Every number on a lake page carries one of four badges, and the badge is always visible next to the value it describes. Nothing is shown without one, and nothing is shown at all when there is no source behind it.
| Badge | Meaning | Example |
|---|---|---|
| Measured | Instrument or station observation | USGS gauge reading |
| Forecast | Official model or forecast output | NWS hourly forecast |
| Calculated | LakeRadar deterministic computation | Activity score / best window |
| Curated | Human or source-backed static fact | Fish species, ramp, depth |
Each badge renders one of these sentences beside its value. The station, source and timestamp below are illustrative; the wording is the wording the site uses, produced by the same code that produces it on a lake page.
Measured by USGS 09380000; as of Mar 14, 1:45 PM UTC; provisional data subject to revision.
Forecast from the National Weather Service; updated Mar 14, 1:45 PM UTC.
Calculated by LakeRadar from the conditions shown; see methodology.
Curated from a published state agency source; verified Mar 14, 1:45 PM UTC.
Two further sentences are fixed and appear verbatim wherever they apply:
Not available from a verified source for this lake.
Latest source update is older than expected. Use caution and check the official source.
A badge also sets the ceiling on how much that value can contribute to a score's confidence. A measurement from an instrument outranks a model run, and a model run outranks nothing at all.
| Provenance kind | Starting confidence |
|---|---|
| Measured | 1.00 |
| Forecast | 0.90 |
| Calculated | 0.90 |
| Curated | 0.90 |
Freshness is judged per data type, not site-wide. An alert that is twenty minutes old is unusable; a curated fact about a boat ramp is still good after a year. Inside the first window a value counts as current and its confidence factor is 1.00. Past it, the factor decays linearly toward 0.50 at twice the window. Past the third column the value is excluded from scoring entirely rather than quietly trusted.
| Data type | Current for | Warning after | Excluded after |
|---|---|---|---|
| NWS alerts | 5 minutes | 15 minutes | 15 minutes |
| NWS hourly forecast | 1 hour | 3 hours | 3 hours |
| Weather observation | 30 minutes | 2 hours | 2 hours |
| USGS continuous water data | 1 hour | 6 hours | 1 day |
| Curated facts and access points | 180 days | 365 days | 365 days |
A gauge whose documented upstream cadence is slower than the generic window is judged against its own cadence instead, so a daily-updated station is never marked stale for behaving normally. What the visitor sees is one of four labels:
Scores are computed from stored readings at render time under versioned constants, currently lakeradar-score/1.0.0. Every persisted score records that version, so a published number can always be reproduced from the weights that produced it. Bumping a weight, a curve, a threshold or a cap means a new version — a shipped version is never edited.
An input that is missing contributes 0.50 to the confidence mean while being excluded from the score's weights. Unknown data halves the confidence contribution rather than zeroing it, so one absent optional input does not suppress an otherwise well-sourced score.
The same bands apply to every activity and to the overall score. A label is a summary of a number, not a verdict: it never appears without the score and the confidence beside it.
| Score | Label |
|---|---|
| 90–100 | Excellent |
| 75–89 | Good |
| 55–74 | Fair |
| 35–54 | Poor |
| 0–34 | Very Poor / Avoid |
Each activity has its own weight table summing to 100 points. The tables below are the tables the engine reads, so what is written here is what is computed.
Weights sum to 100 points.
| Factor | Points | Input |
|---|---|---|
| Wind | 20 | Required |
| Precipitation chance | 10 | Required |
| Cloud cover | 10 | Required |
| Pressure trend | 15 | Optional |
| Air comfort | 5 | Required |
| Water temperature | 25 | Optional |
| Time of day | 15 | Required |
Weights sum to 100 points.
| Factor | Points | Input |
|---|---|---|
| Wind | 30 | Required |
| Gusts | 25 | Optional |
| Precipitation chance | 10 | Required |
| Visibility and conditions | 10 | Optional |
| Storms and alerts | 20 | Required |
| Verified water access | 5 | Optional |
Weights sum to 100 points.
| Factor | Points | Input |
|---|---|---|
| Wind suitability | 40 | Required |
| Gust stability | 25 | Optional |
| Precipitation chance | 10 | Required |
| Storms and alerts | 20 | Required |
| Visibility | 5 | Optional |
Weights sum to 100 points.
| Factor | Points | Input |
|---|---|---|
| Wind | 35 | Required |
| Gusts | 30 | Optional |
| Precipitation chance | 10 | Required |
| Storms and alerts | 20 | Required |
| Air comfort | 5 | Required |
Weights sum to 100 points.
| Factor | Points | Input |
|---|---|---|
| Storms and alerts | 35 | Required |
| Air temperature | 15 | Required |
| Water temperature | 30 | Required |
| Wind | 10 | Optional |
| Precipitation chance | 10 | Optional |
Water temperature is a required input for swimming, so no numeric score is shown without a verified water temperature reading for that lake.
The overall score is a weighted mean of the five activity scores. Fishing and boating carry the most weight because they are the primary audiences; sailing, kayaking and swimming are scored identically in their own right and simply count for less of the single headline number. An activity whose score is suppressed contributes nothing, and the remaining weights are re-normalized.
| Activity | Share |
|---|---|
| Fishing | 30% |
| Boating | 25% |
| Sailing | 15% |
| Kayaking | 15% |
| Swimming | 15% |
An active National Weather Service alert overrides the arithmetic. The alert itself is always rendered above any score, with its event, severity, expiry and a link to the official NWS page, so a warning is never something a visitor has to scroll past a number to find.
| NWS trigger | Effect on scores |
|---|---|
| Tornado Warning, Severe Thunderstorm Warning, Extreme Wind Warning, Flash Flood Warning, Blizzard Warning | Every activity score is capped at 10. |
| Severe Thunderstorm Watch, High Wind Warning, Wind Advisory, Gale Warning, Special Marine Warning, Storm Warning, Lake Wind Advisory | Capped at 30 for boating, sailing, kayaking. |
| Forecast text mentioning thunderstorm, lightning, thunder | A flat penalty of 25 points applies while no warning is active. |
Event names are matched case-insensitively against the NWS event field, and the thresholds are configuration rather than hardcoded prose, so operations can tighten them without a code change. A cap lowers a number. It is not a statement that conditions are acceptable, and LakeRadar does not state or imply that any lake is without lightning hazard, that any water is at a safe level, or that any trip is worth taking.
A best window is a span of hours in the forecast during which an activity scores well. It is derived from the same hourly rows as the hourly table, and it is only claimed when there is enough forecast data to support it.
| Rule | Value |
|---|---|
| Hourly forecast rows needed before any window is claimed | 6 |
| Shortest window shown | 3 hours |
| Longest window shown | 6 hours |
| How far ahead windows are searched | 48 hours |
| Minimum average score for a window to be worth recommending | 70 |
When the forecast is too short, or no span reaches the minimum average, LakeRadar shows no window. An empty window slot is a true statement; an optimistic one is not.
A URL is worth indexing because it satisfies a distinct task with enough unique value, not because it exists. LakeRadar scores every lake against the signals below. The maximum is 110 points and a lake enters the index at 70 or above — but three signals are required regardless of the total, because no quantity of other points can substitute for them:
| Signal | Points | Status |
|---|---|---|
| Verified identity, coordinates and state | 10 | Required |
| Working NWS mapping | 20 | Required |
| At least 3 sourced lake facts | 10 | Contributes |
| Official or authoritative source link | 10 | Required |
| Verified water gauge (optional) | 10 | Contributes |
| At least one verified access point | 10 | Contributes |
| At least one sourced fish species | 10 | Contributes |
| Useful unique curated summary | 10 | Contributes |
| Related lakes computed | 5 | Contributes |
| No unresolved critical data issue | 15 | Contributes |
| Maximum possible score | 110 | Index at 70+ |
A verified USGS gauge is explicitly optional. A lake with no gauge can still be published; its water level and water temperature are simply omitted rather than estimated from a neighbouring lake. A curated summary must reach 80 words to count as useful unique content and is guided to stay under 180. At least 3 lake facts must carry a source, and at least 4 related lakes must be computed so a page is never a dead end.
A state guide is listed in the state directory once at least 5 of its lakes are published. Below that, the state page still exists and still links to the lakes it does have, but it is marked noindex,follow and left out of the sitemap. LakeRadar would rather publish fewer pages: a directory of thin pages teaches a crawler to distrust the directory.