01a — PROBLEM

Problem statement

Game-fish tagging programs collect thousands of release records — species, location, date, and catch details — but raw exports are difficult for anglers and researchers to explore without specialist tools.

Client need: an enterprise system that makes tagging data easier to understand — where fish were released, when activity peaks, and how environmental context (weather, moon phase) relates to catch patterns — including support for use in the field where internet access may be limited.

01b — CLIENT

Presenting to the client

This website is the client presentation layer. It walks through the problem, shows how the data was prepared, and presents evidence from visualisations, the spreadsheet, and intelligent-system outcomes — ending with what we learnt and what was delivered.

The live Streamlit app runs locally for hands-on demo; this site explains the project results for client review without hosting models or raw data files.

Scroll through sections 2–11 for detailed evidence, then section 12 for a summary of learnings and client outcomes.

02a — DATA

Raw tagging export

The pipeline begins with data pulled directly from the NSW Fisheries department API for game-fish tagging releases — saved as GameFish_Releases_Master.csv with 203,300 records (species, location, release date, length, and weight). This original export does not include weather data.

Row count: 203,300 (starting dataset).

Earlier protected CSVs at each stage are kept in newfishdata/ as provenance evidence; they are not deleted.

02b — DATA

Weather and moon enrichment

scripts/enrich_fish_data.py enriches every row with moon phase, wind direction, and rainfall from the Open-Meteo Historical Weather API (batched by ~10 nm grid cells and cached in enrichment_cache.csv). Output: GameFish_Releases_Master_enriched.csv — still 203,300 rows, now with extra weather columns.

Change from previous stage: Δ 0 rows (columns added, no rows removed). Sea surface temperature was also fetched but returned 100% null for every row, so the Sea_Surface_Temp_C column was unusable and later excluded.

02c — DATA

Weather-filtered subset

Only rows with usable Wind_Direction_10m and Rain_mm values were kept (~24.5% of enriched rows had Open-Meteo API coverage for their date/location). This produced Weather_GameFish_Releases_enriched.csv with 49,893 rows.

Change from previous stage: Δ −153,407 rows (203,300 → 49,893).

Row count drops here because many older or remote records fall outside the weather archive API's coverage — a documented data limitation, not random deletion.

02d — DATA

Final primary dataset

Rows missing a recorded Length or Weight were removed, yielding Cleaned_Weather_GameFish_Releases_enriched.csv41,440 rows. The Sea_Surface_Temp_C column was also filtered out at this stage because it was 100% null across the enriched dataset.

Change from previous stage: Δ −8,453 rows (49,893 → 41,440).

This is the final primary dataset used by both the Streamlit app (BasicProduction/fish_app.py) and the neural network trainer (BasicProduction/train_species_nn.py), ensuring the app and model always use the same features.

What we learnt: a single cleaned primary dataset keeps the app, model, and spreadsheet aligned; provenance CSVs at each stage are kept as evidence.

03a — PROTOTYPE

Stage 1: Static KML/PNG heatmap

The first working prototype (BasicProduction/prototype_v1_static_kml/) generated static heatmap images and .kml overlays opened in Google Earth. Scripts like main.py and species_heatmaps.py produced one combined or per-species overlay from early raw CSV exports.

Limitation: no interactivity — changing species or date required regenerating the image. No weather context or intelligent-system reasoning.

What we learnt: static KML proved visualisation was possible, but clients need interactive filtering — that drove the Streamlit + Folium dashboard.

03b — PROTOTYPE

Stage 2: Streamlit + Folium dashboard

Replaced static exports with a live, in-browser dashboard (BasicProduction/fish_app.py). Folium renders an interactive Leaflet map; Streamlit adds species/year/month filtering, manual and AI-assisted modes, trip estimation, and route export.

This prototype later became the base for the intelligent systems (neural network, what-if analysis, certainty-factor engine) — added in later project stages, not in this website section.

What we learnt: the dashboard became the integration point — map filters, offline LLM summaries, and user ratings later fed the expert system.

03c — PROTOTYPE

Stage 3: Power BI reference dashboard

A Power BI dashboard (Dashboard-FishFinder.pbix copy) was built as a business-intelligence-style visualisation alongside the Streamlit app — useful for comparing chart types, slicers, and BI layout patterns during design.

The .pbix file stays in the repository unchanged. This presentation site references it through screenshots only — the file is never copied into the website.

What we learnt: Streamlit suits interactive intelligent systems; Power BI suits polished reporting — both visualise the same data story for different audiences.

04 — SPREADSHEET

Spreadsheet evidence

build_nesa_spreadsheet.py generates NESA_AT3b_Spreadsheet_Weather.xlsx from the cleaned primary dataset. It demonstrates cleansed data exports for clients: original enriched data filtered to rows with complete species, location, and weight, then sampled to 18,225 rows for the Excel workbook.

The script injects an Excel IF formula in column P — Weight_Classification — classifying catches as "Heavy Game Fish" or "Standard" based on weight (>50), satisfying the "appropriate formulae" criterion.

SST is not used as a filter (it is 100% null). The spreadsheet uses the same cleaned dataset lineage as the app and model.

What we learnt: the pipeline produces formula-ready, cleansed exports clients can open in Excel — not just a developer-only CSV.

05 — DASHBOARD

Power BI and dashboard evidence

The Power BI dashboard provides a second visualisation layer for the same underlying tagging data — with charts, filters, and a polished dashboard layout for reporting.

It complements the Streamlit app: Streamlit is the interactive dashboard for maps and intelligent systems; Power BI demonstrates business-intelligence visualisation as a separate prototype stage.

Evidence on this website is shown via exported screenshots placed in assets/images/dashboard/. The live .pbix file is not embedded, copied, or hosted here.

What we learnt: dashboard visualisations help clients see species trends and seasonal peaks at a glance — evidence is shown here via screenshots.

06a — NEURAL NET

Neural network intelligent system

The neural network predicts the most likely game-fish species for a given location, date, and weather/lunar conditions — supporting fish-finding guidance from historical tagging patterns. It is trained on Cleaned_Weather_GameFish_Releases_enriched.csv (41,440 rows), the same primary dataset used by the Streamlit app.

10 input features: Latitude, Longitude, Year, Month_Number, Moon_Phase_Sin/Cos, Wind_Direction_Sin/Cos, Rain_mm, Is_Raining. Sea_Surface_Temp_C was investigated during enrichment but returned 100% null, so it was excluded from the model.

The live model runs in the local Streamlit app (BasicProduction/fish_app.py), not on this website. This section presents the evidence.

06b — NEURAL NET

Model evaluation and alignment

The model was evaluated using an 80% / 20% train–test split (stratified by species class): 33,152 rows for training and 8,288 rows held out for testing.

Metrics on the test set: 63.4% accuracy, 56.3% macro F1, 62.1% weighted F1 — across 13 classes (12 named species + an "Other" bucket).

A feature-mismatch bug was fixed: the app now reads model_info['feature_columns'] from the saved model and builds every prediction input dynamically, so app inputs always match what the network was trained on.

Moderate accuracy is expected — species distribution depends on many factors not captured here (bait, vessel, angler skill, time of day).

What we learnt: location, season, and weather explain part of species patterns (~63% accuracy) — useful for guidance, not a guarantee of catch.

07a — WHAT-IF

What-if analysis

The What-If Analysis panel in the Streamlit app lets users adjust fishing context variables and see how species predictions change — showing how each input affects the model's predicted likelihood.

Adjustable inputs: month, wind direction, rain amount, is-raining, moon phase, latitude, and longitude. Values default from the current map filter context.

07b — WHAT-IF

Baseline vs adjusted comparison

When the user clicks "Run what-if comparison", the app generates two predictions using the same neural network and feature pipeline: a baseline (current context) and an adjusted scenario (with the user's changed values).

Results appear as top-species metrics, a bar chart comparing baseline vs adjusted probabilities, and a table showing the percentage-point change per species — making the effect of each variable change visible and explainable in a walkthrough video.

Like the neural network, what-if analysis runs locally in Streamlit — this website explains and shows screenshot evidence only.

What we learnt: changing month, wind, or location visibly shifts species probabilities — clients can see why a recommendation changes.

08a — EXPERT

Certainty-factor expert system

The second intelligent system uses explicit IF-THEN rules and a running certainty score — implemented in BasicProduction/certainty_factor.py and shown in the Streamlit app alongside the neural network. It complements the data-driven model with rule-based reasoning clients can follow step by step.

Rules and points: Species exists (+10), Season match (+25), Catch density high/medium/low (+35/+20/+5), Location match (+25), User preference match (+15). Maximum possible score: 110.

Planning documents: scripts/CertaintyFactors.md, scripts/IF-THEN.md, scripts/Flowchart.md.

08b — EXPERT

Thresholds and output

Confidence bands: score ≥ 75 → Strong recommendation; 45–74 → Moderate; 1–44 → Weak (advise changing species, season, or location); 0 → Insufficient data (species not in dataset).

Each evaluation returns: a recommended species, certainty score, confidence band, a table of rules fired (with points and plain-English explanations), and a summary sentence. Example: "Moderate recommendation (50/110) for ALBACORE in February."

The expert system and neural network are toggleable/separate panels in the AI Assisted page — together they demonstrate both predictive modelling and expert-system reasoning.

What we learnt: rule-based scoring gives clients a readable explanation (rules fired + points) alongside the neural network's probability output.

09a — TESTING

Testing and evaluation

The Streamlit app, the model training pipeline, and the spreadsheet script were tested separately before being connected together, so any failure could be traced to a single component rather than the whole system.

App startup — the Streamlit app launches without errors, loads the cleaned dataset and saved model, and renders every tab (map, AI Assisted, dashboard).

Neural network prediction — test inputs across different months, locations, and weather combinations return valid species probabilities that sum to 100%, with no shape or feature-order errors.

What-if panel — confirmed that leaving all controls unchanged reproduces the baseline prediction exactly, and that changing a single variable (e.g. month) shifts the adjusted probabilities as expected.

09b — TESTING

Rule engine, spreadsheet & consistency checks

Certainty-factor rules — each rule (species, season, catch density, location, user preference) was tested individually with known inputs to confirm the correct points are added and the running total never exceeds 110.

Spreadsheet generationbuild_nesa_spreadsheet.py was re-run end-to-end to confirm it produces 18,225 rows with a working Weight_Classification formula and no missing-column errors.

Dataset path / feature consistency — verified that the app, trainer, and spreadsheet script all read from the same cleaned CSV, and that the app's prediction inputs match model_info['feature_columns'] exactly (the fix for the earlier feature-mismatch bug).

The pass/fail checklist in the left visual panel (sections 9a and 9b) summarises each quality check — so you can see at a glance which parts of the system were verified during development.

10 — LIMITATIONS

Limitations and future improvements

Known limitations: Sea_Surface_Temp_C was 100% null across the enriched dataset and was removed from all active models. Model accuracy (63.4%) is useful for guidance but not perfect — it reflects patterns in historical data, not a guarantee. Historical recreational catch data may also be biased toward popular fishing spots, active anglers, and reported (rather than all) catches.

Predictions and certainty scores are intended to support an angler's decision-making, not to guarantee a catch.

Future improvements: repair sea-surface-temperature enrichment if a better data source is found; incorporate more recent or live catch reports; improve model comparison (e.g. testing alternative algorithms); deploy the Streamlit app separately if broader access is needed; and add more automated validation and testing.

11a — WALKTHROUGH

Walkthrough and demo instructions

This Firebase website is the presentation layer — it explains and shows evidence of the project. The Streamlit app is the local intelligent systems dashboard where the neural network, what-if analysis, and certainty-factor system actually run.

To run the Streamlit app locally:

source env/bin/activate
python3 -m streamlit run BasicProduction/fish_app.py
11b — WALKTHROUGH

Walkthrough steps

The live demo walks through the system in this order:

  1. Launch the Streamlit app — load the interactive map and dataset.
  2. Filter the map — choose species, year, and month to explore catch patterns.
  3. Neural Network Explorer — run a species prediction from location, time, and weather.
  4. What-If Analysis — change month, wind, rain, moon phase, or location and compare probabilities.
  5. Certainty-Factor Expert System — evaluate a species with rule-based scoring and plain-English explanations.
  6. Spreadsheet export — review the generated Excel workbook with cleansed data and formulae.
  7. Power BI reference — view dashboard screenshots for reporting-style visualisations.

A recorded walkthrough video can be linked from the visual panel once available.

12a — CLIENT

What we learnt

Presenting back to the client means summarising findings from the full project — not only what was built, but what the data and prototypes revealed.

From the data pipeline:

  • Only ~24.5% of enriched rows had usable weather API coverage for their date/location.
  • Sea surface temperature enrichment returned 100% null and was removed from active models.
  • A single cleaned dataset (41,440 rows) keeps the app, model, and spreadsheet consistent.

From visualisations:

  • Catch activity varies strongly by species, season, and geography.
  • Interactive Streamlit maps replaced static KML because clients need to filter without re-exporting.
  • Power BI complements Streamlit for reporting-style dashboard views.

From intelligent systems:

  • Species can be predicted ~63% accurately from location, time, and weather features.
  • What-if analysis shows how changing context shifts probabilities.
  • The certainty-factor expert system explains recommendations in plain English.
12b — CLIENT

Outcomes delivered to the client

The enterprise system delivers evidence through visualisations, a spreadsheet, and intelligent-system outcomes — all grounded in the same cleaned dataset.

  • Streamlit + Folium dashboard — interactive map, filters, AI-assisted mode, intelligent-system panels (live app).
  • Excel spreadsheet — 18,225 cleansed rows with Weight_Classification IF formula.
  • Power BI dashboard — BI visualisation reference (screenshot evidence on this site).
  • Neural network + certainty-factor expert system — species prediction, what-if analysis, and rule-based recommendations.

Predictions and certainty scores support fishing decisions — they do not guarantee a catch. Known limitations are documented in section 10.

Client takeaway: tagging data can be turned into an explorable, offline-capable enterprise tool with both data-driven and rule-based guidance.