All Projects
2026Data Science / Forecasting

Exploring Time Series Forecasting

Solo Developer

A hands on study of time series forecasting that compares classical statistical baselines against Facebook Prophet with external regressors, built as a clear and reproducible progression of notebooks.

PythonJupyter NotebookProphetPandasNumPystatsmodelsscikit-learnMatplotlib

Overview

About the project

Forecasting future values from historical data is deceptively hard. There is no single model that works everywhere. A simple baseline can quietly outperform a sophisticated model, and choosing the right one means first understanding the data's trend, seasonality, and noise. I wanted to build that intuition properly instead of reaching for one tool by default.

I structured the work as a guided progression of Jupyter notebooks. The first explores the data, looking at its trend, seasonality, and stationarity. The second implements classical baselines so there is an honest reference point to beat. The third applies Facebook Prophet, adding external regressors to capture effects the history alone cannot explain. Shared helper code lives in a reusable library module, and every model is compared with consistent error metrics so the results stay fair.

The project produces a clear, side by side comparison of forecasting approaches. It shows where simple baselines hold up and where Prophet's added structure earns its keep, and it leaves behind a reusable toolkit for future time series work.

System Overview

At a glance

A self directed study of time series forecasting organised as a progression of Jupyter notebooks. The work walks from raw signal exploration through classical baselines into Facebook Prophet with external regressors, all sharing a reusable helper library so every model is evaluated on the same footing.

How It Works

System Architecture

Exploratory Analysis

Inspects trend, seasonality, and stationarity in the raw series

Classical Baselines

Naive and statistical models that set an honest reference score

Prophet & Regressors

Facebook Prophet with external regressors for richer structure

Shared Library

Reusable helpers for preprocessing, plotting, and metrics

Process Flow

How the project moves from start to finish, step by step.

1
Step 1

Explore

Profile the time series for trend, seasonality, and stationarity before any modelling begins.

2
Step 2

Baseline

Fit simple classical models so every later result has a fair score to beat.

3
Step 3

Forecast

Apply Prophet with external regressors, then compare every model on the same error metrics.

System Breakdown

Notebook Breakdown

The repository is organised so each notebook builds on the previous one, with shared utilities lifted into a reusable library module.

Notebook 1 — Exploration

  • Trend Analysis

    Visualises long run direction and isolates the underlying signal.

  • Seasonality Decomposition

    Separates seasonal and residual components for closer inspection.

  • Stationarity Tests

    Statistical checks that decide which transformations the modelling stage needs.

Notebook 2 — Classical Baselines

  • Naive Forecast

    A reference model any later approach must beat.

  • Statistical Models

    Well understood classical methods used as fair, honest baselines.

  • Error Metrics

    Consistent metrics so every later result stays comparable.

Notebook 3 — Prophet with Regressors

  • Prophet Setup

    Prophet configured for the dataset's trend and seasonality.

  • External Regressors

    Extra variables that capture effects history alone cannot explain.

  • Forecast Diagnostics

    Residuals, intervals, and saved figures for visual checks.

Shared Library

  • Reusable Helpers

    Common preprocessing, plotting, and metrics code lifted out of the notebooks.

  • Consistent Interfaces

    Functions every notebook calls the same way so comparisons stay fair.

Workflows

End to End Process

Each phase has a single, clear purpose, with the output of one feeding the next.

1

Data Profiling

Purpose: Understand the series before any modelling decision is made.

How it works

  • Load the raw historical data and inspect frequency, gaps, and outliers.
  • Visualise trend, seasonality, and residuals.
  • Run stationarity tests to decide what transforms the modelling stage needs.
  • Save figures so the analysis stays reproducible.
2

Classical Baselines

Purpose: Set a fair, well understood reference score every later model must beat.

How it works

  • Fit naive and simple statistical baselines on the same train and test split.
  • Score each model with consistent error metrics.
  • Record the results in a shared comparison table.
  • Confirm where simple methods already cover most of the signal.
3

Prophet with Regressors

Purpose: Layer extra structure where the baselines fall short.

How it works

  • Configure Prophet for the dataset's trend and seasonality.
  • Add external regressors that capture effects the history alone cannot explain.
  • Fit on the same training window used by the baselines.
  • Inspect residuals and intervals to stay honest about uncertainty.
4

Comparison and Evaluation

Purpose: Decide where the added complexity is worth it.

How it works

  • Score every model with the same metrics.
  • Compare results side by side in one shared table.
  • Visualise forecasts together to spot strengths and failure modes.
  • Document where simple beats fancy and where Prophet earns its keep.

What It Does

Features & Capabilities

Reproducible Notebooks

A clear, ordered progression anyone can run from start to finish.

Reusable Library

Shared helper code in a lib module keeps the notebooks clean and consistent.

Fair Comparison

Consistent error metrics applied across every model in the study.

Visual Diagnostics

Saved figures for trends, residuals, and forecast quality.

Running It

Deployment & Technology Stack

PythonCore Language
Jupyter NotebookAnalysis Environment
ProphetForecasting Model
statsmodelsClassical Models
scikit-learnMetrics & Regressors
pandasData Handling