Time Series Lesson 40 – Bidirectional | Dataplexa

Bidirectional Models

So far, every model we used learned patterns by moving only forward in time. That is natural — because time flows forward.

But in many real-world problems, understanding a data point becomes much clearer when we also know what happens after it.


Why One Direction Is Sometimes Not Enough

Imagine this real-world situation:

  • A sudden dip in sales
  • A temporary drop in website traffic
  • A short anomaly in sensor data

If we only look at past data, that dip looks alarming. But if we also see the future, we may realize it was temporary.

Bidirectional models allow learning from:

  • Past → Present
  • Future → Present

What “Bidirectional” Actually Means

A bidirectional model consists of:

  • One model reading the sequence forward
  • Another model reading the sequence backward

Both representations are then combined to make a better understanding.

This does not mean predicting the future using future data — it means understanding structure when the full sequence is available.


Real-World Example: Product Demand Analysis

Consider daily demand for a product around a promotion period.

The demand pattern:

  • Slow increase before promotion
  • Sharp spike during promotion
  • Gradual normalization after promotion

Understanding the spike is easier when we see both before and after behavior.


Visual Comparison: Forward vs Bidirectional Understanding

The plot below shows:

  • Actual demand pattern
  • Forward-only model response
  • Bidirectional model response

How to Read This Plot

  • The black line is actual product demand
  • The purple line reacts slowly to sudden changes
  • The orange line identifies the spike more precisely

The bidirectional model captures the full shape of the event.


Conceptual Bidirectional Logic

Python: Bidirectional Memory Concept
forward_memory = 0
backward_memory = 0

forward_pass = []
backward_pass = []

for value in series:
    forward_memory = 0.9 * forward_memory + 0.1 * value
    forward_pass.append(forward_memory)

for value in reversed(series):
    backward_memory = 0.9 * backward_memory + 0.1 * value
    backward_pass.append(backward_memory)

backward_pass.reverse()

combined = [
    (f + b) / 2 for f, b in zip(forward_pass, backward_pass)
]

What this means conceptually:

  • Forward pass captures historical momentum
  • Backward pass captures upcoming structure
  • Combined view smooths noise and sharp transitions

Where Bidirectional Models Are Used

  • Offline forecasting analysis
  • Anomaly detection
  • Pattern recognition
  • Sequence labeling

They are powerful when the full sequence is available.


Important Limitation

Bidirectional models are not suitable for:

  • Real-time forecasting
  • Streaming predictions
  • Online decision systems

Because future data is required to build the backward context.


Practice Questions

Q1. Why do bidirectional models detect spikes better?

Because they analyze both pre-spike buildup and post-spike normalization.

Q2. Can bidirectional models be used in live forecasting?

No. They require future data to compute backward context.

Next lesson: Sequence-to-Sequence models for complex forecasting tasks.