From raw signals to reliable forecasts.
A hands-on course that takes you from the fundamentals of time series analysis to advanced forecasting and classification techniques. No slides, no fluff. Just real data, real models, and real evaluation.
Most ML courses treat time series as "just another dataset". This course treats it as what it is: a fundamentally different problem that requires specialised thinking.
You will learn how to decompose temporal signals, build robust forecasting models, evaluate them properly, and go beyond prediction into classification. Each notebook builds upon the previous one, creating a coherent path from first principles to production-ready techniques.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Machine Learning for Time Series │
├────────────────┬───────────────────┬───────────────────┬────────────────────┤
│ Foundations │ Classical Models │ Evaluation │ Advanced │
│ │ │ │ │
│ Introduction │ Exponential │ Metrics & │ Advanced │
│ Naive Models │ Smoothing │ Validation │ Forecasting │
│ Transforms │ ARIMA Family │ Model │ Time Series │
│ Decomposition │ │ Comparison │ Classification │
└────────────────┴───────────────────┴───────────────────┴────────────────────┘
# Clone
git clone https://github.com/vortico/ml4ts-course.git && cd ml4ts-course
# Install (using uv, recommended)
uv sync
# Launch notebooks
jupyter notebookAlternatively, install with pip:
pip install -e .
jupyter notebookThe notebooks are designed to be followed in sequence, each building upon concepts from previous chapters:
| # | Topic | Description |
|---|---|---|
| 01 | Introduction to Time Series | Fundamental concepts: stationarity, autocorrelation, data structures, and visualisation techniques for temporal data |
| 02 | Naive Forecasting Models | Baseline models every forecaster must beat: naive, seasonal naive, drift, and average methods |
| 03 | Basic Transformations | Preprocessing for stationarity: differencing, Box-Cox transforms, and variance stabilisation |
| 04 | Decomposition Methods | Extracting trend, seasonality, and residuals using classical and STL decomposition |
| 05 | Exponential Smoothing | Simple (SES), Holt's linear, and Holt-Winters triple exponential smoothing with damped trends |
| 06 | Evaluating Forecasts | MAE, RMSE, MAPE, MASE; cross-validation strategies for time series; model comparison frameworks |
| 07 | ARIMA Family Models | AR, MA, ARMA, ARIMA, SARIMA: identification, estimation, diagnostics, and the Box-Jenkins methodology |
| 08 | Advanced Forecasting | Reduction to regression, recursive vs direct strategies, ensemble methods, and feature engineering |
| 09 | Time Series Classification | Distance-based, feature-based, and shapelet-based approaches to classifying temporal patterns |
ml4ts-course/
├── notebooks/ # Jupyter notebooks (the course)
│ ├── 01-introduction.ipynb
│ ├── 02-naive-forecasting-models.ipynb
│ ├── 03-basic-transformations.ipynb
│ ├── 04-decomposition-methods.ipynb
│ ├── 05-exponential-smoothing.ipynb
│ ├── 06-evaluating-forecasts.ipynb
│ ├── 07-arima-family.ipynb
│ ├── 08-forecasting-advanced-topics.ipynb
│ ├── 09-time-series-classification.ipynb
│ └── utils.py # Shared helpers, custom transformers & loaders
├── data/ # Real-world datasets (Parquet + CSV)
├── img/ # Diagrams and figures
├── notes/ # LaTeX course notes (PDF)
└── pyproject.toml # Project config and dependencies
Real-world datasets included for hands-on practice:
| Dataset | File(s) | Domain | Description |
|---|---|---|---|
| Google Stock | google.parquet, GOOGL.csv |
Finance | Historical OHLCV prices for Google/Alphabet |
| Australian Electricity | electricity_au.parquet, electricity_au_month.parquet |
Energy | Half-hourly and monthly electricity demand from Australia |
| Energy Demand | energy_demand.parquet |
Energy | Hourly energy demand patterns from Spain |
| Chemical Process | chemical_process.parquet |
Industry | Sensor measurements from an industrial chemical process |
| Layer | Tool | Purpose |
|---|---|---|
| Language | Python 3.9–3.13 | Core language |
| Statistics | statsmodels | Classical statistical modelling (ARIMA, ETS, decomposition) |
| ML Toolkit | sktime | Unified interface for time series ML tasks |
| Auto ARIMA | pmdarima | Automatic ARIMA order selection |
| Forecasting | skforecast | Reduction-based forecasting with scikit-learn regressors |
| Visualisation | matplotlib, seaborn | Plotting and exploratory analysis |
| Data | pyarrow | Efficient columnar data storage and loading |
| Environment | Jupyter Notebook | Interactive learning and experimentation |
| Package Manager | uv | Fast, modern Python dependency management |
| Code Quality | ruff | Linting and formatting |
# 1. Clone and install
git clone https://github.com/vortico/ml4ts-course.git && cd ml4ts-course
uv sync
# 2. Make your changes in the notebooks
# 3. Submit a pull requestThis project is maintained by Vortico for educational purposes.
Built with 🔥 by Vortico