Finance · Machine learning2024Product design · Front-end · Data visualization

B3Forecast

Making a prediction useful begins with making its context visible.

A research interface for exploring Brazilian market history and turning LSTM experiments into an inspectable forecasting workflow.

B3Forecast interface showing market history, controls, and a price chart

What needed to become clear.

Market forecasts are easy to present as a single answer and difficult to evaluate responsibly. The interface needed to keep source data, time range, model output, and historical context in the same readable flow.

  1. 01A data-heavy research workflow built around Streamlit
  2. 02Multiple assets and selectable time ranges
  3. 03Dense tables and charts competing for attention

The product logic behind the interface.

01

Context before prediction

The selected asset, interval, historical table, and price series establish what the model is reading before its output is introduced.

02

One analytical reading path

Configuration stays in a compact rail while the main canvas moves from historical evidence to visual exploration and model output.

03

Research UI, not trading theatre

The visual system avoids simulated exchange controls and keeps the focus on traceable inputs, charts, and model experimentation.

A visible path through the system.

Input

Asset and date-range selection

Processing

Python and Pandas time-series preparation

Model

TensorFlow LSTM experimentation

Interface

Streamlit tables, controls, and chart views

04 / Outcome

The project became a working research surface where a visitor can inspect the data path instead of receiving an isolated prediction.

What I learned

  1. 01Forecast interfaces need to communicate uncertainty and provenance, not only output.
  2. 02Dense financial data becomes easier to navigate when controls and evidence have distinct spatial roles.
  3. 03A model demo is more credible when the UI exposes the workflow around it.

Stack

PythonTensorFlowPandasStreamlitLSTM

Next case

ThreatSense

Continue ↗