Copy disabled (too large)
Download .txt
Showing preview only (27,013K chars total). Download the full file to get everything.
Repository: FilippoMB/python-time-series-handbook
Branch: main
Commit: 2ce7bd67d495
Files: 33
Total size: 25.8 MB
Directory structure:
gitextract_i1zmg0c9/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ └── deploy-book.yml
├── .gitignore
├── .python-version
├── CITATION.cff
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── _config.yml
├── _toc.yml
├── environment.yml
├── notebooks/
│ ├── 00/
│ │ ├── intro.md
│ │ ├── knowledge_test.md
│ │ └── resources.md
│ ├── 01/
│ │ └── introduction_to_time_series.ipynb
│ ├── 02/
│ │ └── stationarity.ipynb
│ ├── 03/
│ │ └── smoothing.ipynb
│ ├── 04/
│ │ └── ar-ma.ipynb
│ ├── 05/
│ │ └── arma_arima_sarima.ipynb
│ ├── 06/
│ │ └── unit-root-hurst.ipynb
│ ├── 07/
│ │ └── kalman-filter.ipynb
│ ├── 08/
│ │ └── signal-transforms-filters.ipynb
│ ├── 09/
│ │ └── prophet.ipynb
│ ├── 10/
│ │ └── nn-reservoir-computing.ipynb
│ ├── 11/
│ │ └── nonlinear-ts.ipynb
│ └── 12/
│ └── classification-clustering.ipynb
├── pyproject.toml
├── scripts/
│ └── sync_user_environment.py
└── tsa_course/
├── __init__.py
├── lecture1.py
├── lecture11.py
├── lecture2.py
└── lecture8.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
pull_request:
push:
branches:
- main
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Check user environment sync
run: uv run --no-sync python scripts/sync_user_environment.py --check
- name: Install OpenMP runtime
run: |
sudo apt-get update
sudo apt-get install -y libgomp1 libomp-dev
- name: Install dependencies
run: uv sync --extra notebooks --group docs --frozen
- name: Verify DTW compiled backend
run: |
uv run python - <<'PY'
import numpy as np
from dtaidistance import dtw, dtw_ndim
dtw.try_import_c(verbose=True)
x = np.vstack([np.linspace(0.0, 1.0, 12), np.linspace(0.1, 1.1, 12)])
dtw.distance_matrix_fast(x, parallel=False)
y = np.random.default_rng(0).normal(size=(4, 9, 2))
dtw_ndim.distance_matrix_fast(y, parallel=False)
PY
- name: Build package
run: uv build
- name: Smoke test package imports
run: |
uv run python - <<'PY'
import tsa_course.lecture1
import tsa_course.lecture2
import tsa_course.lecture8
import tsa_course.lecture11
import rise
PY
- name: Verify classic notebook and RISE
run: |
uv run jupyter notebook --version
uv run jupyter-nbextension list | grep -qi rise
- name: Build Jupyter Book
run: uv run --extra notebooks --group docs jupyter-book build . --builder html
validate-user-environment:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up micromamba
uses: mamba-org/setup-micromamba@v2
with:
environment-file: environment.yml
cache-environment: true
cache-downloads: true
generate-run-shell: true
post-cleanup: all
- name: Smoke test user environment
run: |
python - <<'PY'
import numpy as np
import pandas
import rise
import sklearn
import statsmodels
import tsa_course
from dtaidistance import dtw, dtw_ndim
x = np.vstack([np.linspace(0.0, 1.0, 12), np.linspace(0.1, 1.1, 12)])
dtw.distance_matrix_fast(x, parallel=False)
y = np.random.default_rng(0).normal(size=(4, 9, 2))
dtw_ndim.distance_matrix_fast(y, parallel=False)
PY
jupyter notebook --version
jupyter-nbextension list | grep -qi rise
shell: micromamba-shell {0}
================================================
FILE: .github/workflows/deploy-book.yml
================================================
name: Build and Deploy Jupyter Book
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: write
concurrency:
group: deploy-jupyter-book
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
python-version: "3.12"
enable-cache: true
- name: Check user environment sync
run: uv run --no-sync python scripts/sync_user_environment.py --check
- name: Install OpenMP runtime
run: |
sudo apt-get update
sudo apt-get install -y libgomp1 libomp-dev
- name: Install dependencies
run: uv sync --extra notebooks --group docs --group deploy --frozen
- name: Verify DTW compiled backend
run: |
uv run python - <<'PY'
import numpy as np
from dtaidistance import dtw, dtw_ndim
dtw.try_import_c(verbose=True)
x = np.vstack([np.linspace(0.0, 1.0, 12), np.linspace(0.1, 1.1, 12)])
dtw.distance_matrix_fast(x, parallel=False)
y = np.random.default_rng(0).normal(size=(4, 9, 2))
dtw_ndim.distance_matrix_fast(y, parallel=False)
PY
- name: Build package
run: uv build
- name: Smoke test package imports
run: |
uv run python - <<'PY'
import tsa_course.lecture1
import tsa_course.lecture2
import tsa_course.lecture8
import tsa_course.lecture11
PY
- name: Build Jupyter Book
run: uv run --extra notebooks --group docs jupyter-book build . --builder html
- name: Verify build output
run: |
test -d _build/html
ls -la _build/html | head -n 20
- name: Deploy to GitHub Pages
run: uv run --group deploy ghp-import -n -p -f _build/html
================================================
FILE: .gitignore
================================================
# Build files
_build/*
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
*.DS_Store
================================================
FILE: .python-version
================================================
3.12
================================================
FILE: CITATION.cff
================================================
cff-version: 1.0.0
message: "If you use this material in your work, please cite it as below."
authors:
- family-names: "Bianchi"
given-names: "Filippo Maria"
title: "Time Series Analysis with Python"
date-released: 2024-04-15
license: MIT
url: "https://github.com/FilippoMB/python-time-series-handbookl"
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
This repository intentionally uses two environments with different audiences:
- Users use [environment.yml](environment.yml) with Conda to run the notebooks.
- Maintainers and CI use [pyproject.toml](pyproject.toml) plus [uv.lock](uv.lock).
The goal is to keep the user workflow simple without giving up the speed and reproducibility of `uv` for development and automation.
## Python version
The repository targets Python 3.12 for notebook development, CI, and the generated Conda environment.
## Maintainer setup
1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/).
2. Sync the maintainer environment:
```bash
uv sync --extra notebooks --group docs --group deploy
```
3. Run Jupyter Notebook if needed:
```bash
uv run jupyter notebook
```
Classic slideshow support depends on `rise`, which still imports `pkg_resources`, so keep the `setuptools<81` constraint until RISE drops that dependency.
On macOS, notebook `12 - Time series classification and clustering` may require `libomp`:
```bash
brew install libomp
```
## Dependency maintenance
When you change direct dependencies, keep the environments in sync in this order:
1. Edit [pyproject.toml](pyproject.toml).
2. Refresh the lockfile:
```bash
uv lock
```
3. Regenerate the user Conda environment:
```bash
uv run --no-sync python scripts/sync_user_environment.py
```
4. Validate the result:
```bash
uv run --no-sync python scripts/sync_user_environment.py --check
uv sync --extra notebooks --group docs
uv run --extra notebooks --group docs jupyter-book build . --builder html
```
CI checks both the `uv` workflow and the user Conda environment.
## Notebook diffs
Keep notebook changes as small as possible.
- Avoid committing execution timestamps or unrelated output churn when only markdown or source cells changed.
- If a notebook must be re-executed, prefer changes that are reproducible and explain stability-related parameter changes in the markdown next to the code.
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2024 Filippo Maria Bianchi
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Time Series Analysis with Python
<div align="center">
<img src="https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/logo.png" style="width: 5cm; display: block; margin: auto;">
</div>
<br>
<div align="center">
📚 <a href="https://filippomb.github.io/python-time-series-handbook">Read it as a book</a>
</div>
<br>
[](https://pepy.tech/projects/tsa-course)
This is the collection of notebooks for the course *Time Series Analysis with Python*.
You can view and execute the notebooks by clicking on the buttons below.
## 📑 Content
1. **Introduction to time series analysis**
- Definition of time series data
- Main applications of time series analysis
- Statistical vs dynamical models perspective
- Components of a time series
- Additive vs multiplicative models
- Time series decomposition techniques
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/01/introduction_to_time_series.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/01/introduction_to_time_series.ipynb)
<br>
2. **Stationarity in time series**
- Stationarity in time series
- Weak vs strong stationarity
- Autocorrelation and autocovariance
- Common stationary and nonstationary time series
- How to identify stationarity
- Transformations to achieve stationarity
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/02/stationarity.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/02/stationarity.ipynb)
<br>
3. **Smoothing**
- Smoothing in time series data
- The mean squared error
- Simple average, moving average, and weighted moving average
- Single, double, and triple exponential smoothing
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/03/smoothing.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/03/smoothing.ipynb)
<br>
4. **AR-MA**
- The autocorrelation function
- The partial autocorrelation function
- The Auto-Regressive model
- The Moving-Average model
- Reverting stationarity transformations in forecasting
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/04/ar-ma.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/04/ar-ma.ipynb)
<br>
5. **ARMA, ARIMA, SARIMA**
- Autoregressive Moving Average (ARMA) models
- Autoregressive Integrated Moving Average (ARIMA) models
- SARIMA models (ARIMA model for data with seasonality)
- Automatic model selection with AutoARIMA
- Model selection with exploratory data analysis
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/05/arma_arima_sarima.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/05/arma_arima_sarima.ipynb)
<br>
6. **Unit root test and Hurst exponent**
- Unit root test
- Mean Reversion
- The Hurst exponent
- Geometric Brownian Motion
- Applications in quantitative finance
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/06/unit-root-hurst.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/06/unit-root-hurst.ipynb)
<br>
7. **Kalman filter**
- Introduction to Kalman Filter
- Model components and assumptions
- The Kalman Filter algorithm
- Application to static and dynamic one-dimensional data
- Application to higher-dimensional data
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/07/kalman-filter.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/07/kalman-filter.ipynb)
<br>
8. **Signal transforms and filters**
- Introduction to Fourier Transform, Discrete Fourier Transform, and FFT
- Fourier Transform of common signals
- Properties of the Fourier Transform
- Signal filtering with low-pass, high-pass, band-pass, and bass-stop filters
- Application of Fourier Transform to time series forecasting
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/08/signal-transforms-filters.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/08/signal-transforms-filters.ipynb)
<br>
9. **Prophet**
- Introduction to Prophet for time series forecasting
- Advanced modeling of trend, seasonality, and holidays components
- The Prophet library in Python
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/09/prophet.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/09/prophet.ipynb)
<br>
10. **Neural networks and Reservoir Computing**
- Windowed approaches and Neural Networks for time series forecasting
- Forecasting with a Multi-Layer Perceptron
- Recurrent Neural Networks: advantages and challenges
- Reservoir Computing and the Echo State Network
- Dimensionality reduction with Principal Component Analysis
- Forecasting electricity consumption with Multi-Layer Perceptron and Echo State Network
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/10/nn-reservoir-computing.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/10/nn-reservoir-computing.ipynb)
<br>
11. **Non-linear time series analysis**
- Dynamical systems and nonlinear dynamics
- Bifurcation diagrams
- Chaotic systems
- High-dimensional continuous-time systems
- Fractal dimensions
- Phase space reconstruction and Taken's embedding theorem
- Forecasting time series from nonlinear systems
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/11/nonlinear-ts.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/11/nonlinear-ts.ipynb)
<br>
12. **Time series classification and clustering**
- Multivariate time series
- Time series similarities and dissimilarities
- Dynamic Time Warping
- Time series kernels
- Embedding time series into vectors
- Classification of time series
- Clustering of time series
- Visualize time series with kernel PCA
[](https://nbviewer.jupyter.org/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/12/classification-clustering.ipynb) or [](https://colab.research.google.com/github/FilippoMB/python-time-series-handbook/blob/main/notebooks/12/classification-clustering.ipynb)
<br>
## 💻 Run the notebooks locally
For local notebook usage, the recommended path is Conda.
1. Install [Miniconda](https://www.anaconda.com/docs/getting-started/miniconda/main) or another Conda-compatible distribution.
2. Clone the repository:
```bash
git clone https://github.com/FilippoMB/python-time-series-handbook.git
cd python-time-series-handbook
```
3. Create the environment:
```bash
conda env create -f environment.yml
conda activate tsa-course
```
4. Launch Jupyter Notebook:
```bash
jupyter notebook
```
## 🛠 Maintainer workflow
For repository development, packaging, and CI, this project uses `uv`.
1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/).
2. Sync the maintainer environment:
```bash
uv sync --extra notebooks --group docs --group deploy
```
3. Launch Jupyter Notebook:
```bash
uv run jupyter notebook
```
If notebook `12 - Time series classification and clustering` fails to load the compiled `dtaidistance` backend on macOS, install `libomp`:
```bash
brew install libomp
```
See [CONTRIBUTING.md](CONTRIBUTING.md) for the maintainer checklist and dependency update workflow.
## 🛠 Build the book locally
The book build is part of the maintainer workflow and uses `uv`:
```bash
uv sync --extra notebooks --group docs
uv run --extra notebooks --group docs jupyter-book build . --builder html
```
The build output will be written to `_build/html`.
## 📦 Build the package
To build the Python package artifacts:
```bash
uv build
```
This produces a wheel and a source distribution in `dist/`.
## 🎥 Notebook format and slides
The notebooks are structured as a sequence of slides to be presented using [RISE](https://rise.readthedocs.io/en/latest/).
If you open a notebook you will see the following structure:
<img src="https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_nb.png" style="width: 50%" align="center">
RISE is included in the provided environments. To enable the visualization of the slide type, open the classic notebook interface and select `View -> Cell Toolbar -> Slideshow`.
By pressing the `Enter\Exit RISE Slideshow` button at the top you can enter the slideshow presentation.
<img src="https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise.png" style="width: 40%" align="center">
<img src="https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise2.png" style="width: 40%" align="center">
<img src="https://raw.githubusercontent.com/FilippoMB/python-time-series-handbook/main/notebooks/00/media/slides_rise3.png" style="width: 40%" align="center">
See the [RISE documentation](https://rise.readthedocs.io/en/latest/) for more info.
## 📝 Citation
If you are using this material in your courses or in your research, please consider citing it as follows:
```bibtex
@misc{bianchi2024tsbook,
author = {Filippo Maria Bianchi},
title = {Time Series Analysis with Python},
year = {2024},
howpublished = {Online},
url = {https://github.com/FilippoMB/python-time-series-handbook}
}
```
================================================
FILE: _config.yml
================================================
# Book settings
title: Time series analysis with Python
author: Filippo Maria Bianchi
logo: logo.png
# # Define the name of the latex output file for PDF builds
# latex:
# latex_documents:
# targetname: book.tex
# # Add a bibtex file so that we can create citations
# bibtex_bibfiles:
# - references.bib
# Information about where the book exists on the web
repository:
url: https://github.com/FilippoMB/python-time-series-handbook # Online location of the book
# path_to_book: docs # Optional path to the book, relative to the repository root
branch: main # Which branch of the repository should be used when creating links (optional)
# Add GitHub buttons to your book
# See https://jupyterbook.org/customize/config.html#add-a-link-to-your-repository
html:
use_issues_button: true
use_repository_button: true
favicon : "logo.png"
exclude_patterns:
- _build
- README.md
- CONTRIBUTING.md
- .venv
- .venv/**
- .conda-check
- .conda-check/**
- build
- build/**
- dist
- dist/**
- .DS_Store
- Thumbs.db
parse:
myst_enable_extensions:
# Defaults here: https://jupyterbook.org/en/stable/customize/config.html
- html_image
- amsmath
- dollarmath
execute:
execute_notebooks: 'auto' # off, force, auto, cache
timeout: -1 # Disable timeouts for executing notebooks
================================================
FILE: _toc.yml
================================================
# Table of contents
# Learn more at https://jupyterbook.org/customize/toc.html
format: jb-book
root: notebooks/00/intro
chapters:
- file: notebooks/01/introduction_to_time_series
- file: notebooks/02/stationarity
- file: notebooks/03/smoothing
- file: notebooks/04/ar-ma
- file: notebooks/05/arma_arima_sarima
- file: notebooks/06/unit-root-hurst
- file: notebooks/07/kalman-filter
- file: notebooks/08/signal-transforms-filters
- file: notebooks/09/prophet
- file: notebooks/10/nn-reservoir-computing
- file: notebooks/11/nonlinear-ts
- file: notebooks/12/classification-clustering
- file: notebooks/00/knowledge_test
- file: notebooks/00/resources
================================================
FILE: environment.yml
================================================
# User notebook environment for the course.
name: tsa-course
channels:
- conda-forge
- nodefaults
dependencies:
- python=3.12
- pip
- numpy=2.4.3
- matplotlib=3.10.8
- scipy=1.17.1
- tqdm=4.67.3
- statsmodels=0.14.6
- pandas=3.0.1
- pandas-datareader=0.10.0
- seaborn=0.13.2
- scikit-learn=1.8.0
- setuptools=80.10.2
- notebook=6.5.7
- rise=5.7.1
- dtaidistance=2.4.0
- plotly=6.6.0
- ipywidgets=8.1.8
- pip:
- opencv-python-headless==4.13.0.92
- pmdarima==2.1.1
- prophet==1.3.0
- reservoir-computing==1.0.2
- tck==1.0.0
- yfinance==1.2.0
- -e .
================================================
FILE: notebooks/00/intro.md
================================================
# Time series analysis with Python
<script async defer src="https://buttons.github.io/buttons.js"></script>
Welcome to a journey through the world of time series analysis using Python! This collection of Jupyter notebooks serves as both a comprehensive course and a practical guide for students, data scientists, and researchers interested in exploring the interplay between statistical theories and practical applications in time series analysis.
Time series analysis is a central discipline in data science, offering insights into patterns over time that are useful for forecasting, anomaly detection, and understanding temporal dynamics. The aim of this course is to introduce fundamental concepts of time series analysis from multiple perspectives: statistical, dynamical systems, machine learning, and signal processing. This interdisciplinary approach aims to give the reader a broad view on the world of time series.
```{image} media/topics.png
:alt: topics
:width: 500px
:align: center
```
The course is designed to combine high-level theoretical knowledge with practical programming skills. Each chapter introduces key concepts of time series analysis together with hands-on coding sections. This structure allows you to immediately apply the theoretical concepts you learn, seeing first-hand how these translate into functional tools in data analytics. Through this process, you will gain both the knowledge to understand complex time series data and the skills to analyze and predict it effectively.
To reinforce learning and encourage active engagement, each chapter concludes with exercises. These are designed to test your understanding and help you apply the lessons in practical contexts.
Whether you are new to time series analysis or looking to refine your expertise, this course offers a broad exploration of the field, with Python as your toolkit. I hope that you will find this material both educational and entertaining, brining you a step closer to mastering time series analysis.
## 📖 Chapters
The course is organized into the following chapters.
```{tableofcontents}
```
```{note}
The notebooks are presented in class as slides using RISE (see [here](https://github.com/FilippoMB/python-time-series-handbook?tab=readme-ov-file#-notebook-format-and-slides) for more details).
For this reason, the text in the notebooks is organized with bullet points.
```
## 🎓 University courses
These notebooks are currently adopted in [STA-2003 Tidsrekker](https://sa.uit.no/utdanning/emner/emne?p_document_id=822793) at UiT the Arctic University of Tromsø and [062785 - Time Series Analysis](https://www.polimi.it/) at Polytechnic of Milan.
## 🚀 Getting started with coding
You can read from here all the content of the course. However, to get your hands-on experience with coding you want to run the code snippets or the whole notebooks that you can download on <a href="https://github.com/FilippoMB/python-time-series-handbook" target="_blank">
<img src="https://img.shields.io/badge/-GitHub-8A2BE2?style=round-square-small&logo=github" alt="GitHub">
</a>.
To run the code and the notebooks locally, the recommended path is a Conda environment, for example with Miniconda.
1. Install [Miniconda](https://www.anaconda.com/docs/getting-started/miniconda/main) or another Conda-compatible distribution.
2. Clone the repository:
```bash
git clone https://github.com/FilippoMB/python-time-series-handbook.git
cd python-time-series-handbook
```
3. Create the course environment:
```bash
conda env create -f environment.yml
conda activate tsa-course
```
4. Launch Jupyter Notebook:
```bash
jupyter notebook
```
If you are contributing to the repository and prefer the maintainer workflow based on `uv`, the repository [README](https://github.com/FilippoMB/python-time-series-handbook/blob/main/README.md) contains the development instructions.
## ⚒ Roadmap
```{warning}
This is an early version of the course. There might be imprecisions and errors. Also, some chapters might undergo significant revisions and changes.
```
I am planning to add more material over time to cover additional topics in new chapters and to extend the existing ones with new content.
If there is a specific topic you feel is missing or passages that you feel are not clear enough, open an <a class="github-button" href="https://github.com/FilippoMB/python-time-series-handbook/issues" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-issue-opened" aria-label="Issue FilippoMB/python-time-series-handbook on GitHub">Issue</a> on the repository on Github.
### A note on deep learning
For the moment, I intentionally decided to leave more advanced deep learning techniques aside. There are a couple of reasons for this choice. Firstly, advanced deep learning methods rely heavily on specific knowledge and tools that are generally covered in specialized deep learning courses. This focus does not align with the introductory nature of this course, which is aimed at covering the fundamentals of time series analysis.
Secondly, while deep learning opens up exciting avenues for new applications—such as NLP and analysis of video and spatio-temporal data—it primarily enhances capabilities in handling diverse data types and scaling to large datasets. However, for the core objectives of this course, which are to understand and manipulate time series data effectively, the advantages of moving from the basic neural networks introduced here to more complex deep learning models do not significantly alter the fundamental approach.
## 🤝 Contributing
Time series analysis with Python is designed with accessibility in mind. The material is completely open-sourced and uses only free software, based in Python.
You can contribute both by adding new material, fixing typos, and suggesting edits. To do that,
<a class="github-button" href="https://github.com/FilippoMB/python-time-series-handbook/fork" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-repo-forked" aria-label="Fork FilippoMB/python-time-series-handbook on GitHub">Fork</a> the Github repository and submit a pull request.
If you want to build the Jupyter Book itself or package the `tsa-course` library, the repository README contains the additional contributor commands.
Finally, if you liked this content, please share it with others who might find it useful and give it a
<a class="github-button" href="https://github.com/FilippoMB/python-time-series-handbook" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-star" aria-label="Star FilippoMB/python-time-series-handbook on GitHub">Star</a> on GitHub.
## 📝 Citation
If you are using this material in your courses or in your research, please consider citing it as follows:
```bibtex
@misc{bianchi2024tsbook,
author = {Filippo Maria Bianchi},
title = {Time Series Analysis with Python},
year = {2024},
howpublished = {Online},
url = {https://github.com/FilippoMB/python-time-series-handbook}
}
```
================================================
FILE: notebooks/00/knowledge_test.md
================================================
# Knowledge test
## Chapter 1
**What is the primary purpose of time series analysis?**
- A) To categorize different types of data as time series data.
- B) To use statistical methods to describe and interpret data patterns.
- C) To understand and forecast the behavior of a process that generates time series data.
- D) To analyze the behavior of non-time series data over fixed intervals.
```{admonition} Answer
:class: note, dropdown
C
```
**What type of data is typically analyzed using time series analysis?**
- A) Textual data
- B) Image data
- C) Numerical data collected over time
- D) Categorical data
```{admonition} Answer
:class: note, dropdown
C
```
**In the context of time series analysis, which of the following best describes the concept of 'trend'?**
- A) The irregular and unpredictable movement in data over a short period.
- B) The consistent, long-term direction of a time series data set.
- C) A repeating pattern or cycle observed within a given year.
- D) Variations caused by specific one-time events.
```{admonition} Answer
:class: note, dropdown
B
```
**How is time series analysis applied in the business sector?**
- A) Primarily for historical data archiving
- B) For designing new products
- C) In demand forecasting and sales analysis
- D) Only in employee performance tracking
```{admonition} Answer
:class: note, dropdown
C
```
**Which method is commonly used to decompose time series data?**
- A) Linear regression analysis
- B) Fourier transform
- C) Principal component analysis
- D) Additive or multiplicative models
```{admonition} Answer
:class: note, dropdown
D
```
**What is a crucial aspect to consider when dealing with time series data for accurate analysis?**
- A) The frequency of data collection
- B) The color coding of data points
- C) The alphabetical ordering of data entries
- D) The digital format of the data files
```{admonition} Answer
:class: note, dropdown
A
```
**Which component of time series data adjusts for variations that recur with fixed periods throughout the data?**
- A) Trend
- B) Seasonality
- C) Cyclical
- D) Residual
```{admonition} Answer
:class: note, dropdown
B
```
## Chapter 2
**Which of the following tests is used to determine the stationarity of a time series?**
- A) Pearson correlation test
- B) Chi-square test
- C) Augmented Dickey-Fuller test
- D) T-test
```{admonition} Answer
:class: note, dropdown
C
```
**What is the significance of stationarity in time series analysis?**
- A) Stationarity is not significant; most modern time series models do not require it.
- B) Stationarity is crucial because many time series forecasting models assume it, and nonstationary data can lead to unreliable models.
- C) Stationarity only applies to financial time series and is irrelevant in other fields.
- D) Stationarity ensures that the time series data does not require transformations before analysis.
```{admonition} Answer
:class: note, dropdown
B
```
**Why is stationarity important for applying statistical models to time series data?**
- A) Stationary data allows for easier identification of outliers.
- B) Non-stationary data can lead to biases in model parameters.
- C) Stationarity assures that the mean and variance are consistent over time, which is a common assumption in many time series models.
- D) Stationary series ensure high performance across all types of data, regardless of the underlying trends.
```{admonition} Answer
:class: note, dropdown
C
```
**What impact does non-stationarity have on the predictive modeling of time series data?**
- A) It improves the accuracy of predictions by introducing variability.
- B) It has no impact on the predictions as modern models adjust for it automatically.
- C) It can lead to misleading results and poor forecasts because the statistical properties change over time.
- D) It simplifies the model selection process by reducing the number of parameters.
```{admonition} Answer
:class: note, dropdown
C
```
**What type of transformation is commonly applied to time series data to achieve stationarity?**
- A) Logarithmic transformation
- B) Polynomial transformation
- C) Fourier transformation
- D) Binary transformation
```{admonition} Answer
:class: note, dropdown
A
```
**In time series analysis, why do we want to apply differencing?**
- A) To increase the mean of the series over time.
- B) To identify and remove trends and cycles, helping achieve stationarity.
- C) To amplify the seasonal patterns in the data.
- D) To convert non-numeric data into a usable format.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the primary goal of testing for stationarity in a time series dataset?**
- A) To detect the presence of outliers in the dataset.
- B) To ensure the dataset is suitable for seasonal adjustments.
- C) To confirm the data’s statistical properties do not vary over time.
- D) To increase the complexity of the statistical model.
```{admonition} Answer
:class: note, dropdown
C
```
**What characteristic defines a random walk model?**
- A) The values of the series are based on a deterministic trend.
- B) Each value in the series is the sum of the previous value and a random error term.
- C) The series values change according to a fixed seasonal pattern.
- D) The series strictly follows a linear path without deviation.
```{admonition} Answer
:class: note, dropdown
B
```
**Why is a random walk typically considered non-stationary in the context of time series analysis?**
- A) Because its variance remains constant over time.
- B) Because its variance depend on the time at which the series is observed.
- C) Because it consistently follows a predictable trend.
- D) Because its mean and variance change over time.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the periodicity of a signal affect its stationarity in time series analysis?**
- A) Periodic signals are always considered stationary because they exhibit regular cycles.
- B) Periodic signals are non-stationary because their mean and variance are not constant over time.
- C) Periodic signals become stationary only when their frequency matches the sampling rate.
- D) Periodic signals do not affect the stationarity of a time series as they are considered noise.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the characteristic of white noise that generally qualifies it as a stationary process in time series analysis?**
- A) Its mean and variance change over time.
- B) Its mean and variance remain constant over time.
- C) It exhibits a clear trend and seasonality.
- D) Its frequency components vary with each observation.
```{admonition} Answer
:class: note, dropdown
B
```
**How do autocorrelation and autocovariance relate to the concept of stationarity in time series data?**
- A) Autocorrelation and autocovariance are only defined for non-stationary processes.
- B) Stationary processes have constant autocorrelation and autocovariance that do not depend on time.
- C) Autocorrelation and autocovariance decrease as a time series becomes more stationary.
- D) Stationary processes exhibit zero autocorrelation and autocovariance at all times.
```{admonition} Answer
:class: note, dropdown
B
```
**What does constant autocorrelation over time imply about the stationarity of a time series?**
- A) It suggests that the time series is non-stationary, as autocorrelation should vary with time.
- B) It indicates potential stationarity, as autocorrelation does not change over time.
- C) It implies the need for further seasonal adjustment, irrespective of stationarity.
- D) It demonstrates that the series is under-differenced and needs more transformations.
```{admonition} Answer
:class: note, dropdown
B
```
**What does it indicate about a time series if the autocorrelations for several lags are very close to zero?**
- A) The series is likely non-stationary with a strong trend.
- B) The series is highly predictable at each time step.
- C) The series likely exhibits white noise characteristics, suggesting it could be stationary.
- D) The series shows a clear seasonal pattern.
```{admonition} Answer
:class: note, dropdown
C
```
**What implication does a significant autocorrelation at lag 1 indicate about the stationarity of a time series?**
- A) The series is stationary with no dependence between time steps.
- B) The series exhibits long-term cyclic patterns, suggesting non-stationarity.
- C) The series is likely non-stationary, indicating dependence between consecutive observations.
- D) The series is perfectly predictable from one time step to the next.
```{admonition} Answer
:class: note, dropdown
C
```
**How can summary statistics and histogram plots be used to assess the stationarity of a time series?**
- A) By showing a consistent mean and variance in histograms across different time segments.
- B) By demonstrating a decrease in variance over time in summary statistics.
- C) By identifying a fixed mode in histogram plots regardless of time period.
- D) By showing increasing skewness in summary statistics over different intervals.
```{admonition} Answer
:class: note, dropdown
A
```
**What do consistent histogram shapes across different time segments suggest about the stationarity of a time series?**
- A) The series likely exhibits non-stationary behavior due to changing distributions.
- B) The series displays stationarity with similar distributions over time.
- C) The histograms are irrelevant to stationarity and should not be used.
- D) The series shows non-stationarity due to the presence of outliers.
```{admonition} Answer
:class: note, dropdown
B
```
## Chapter 3
**Why is smoothing applied to time series data?**
- A) To increase the frequency of data points
- B) To highlight underlying trends in the data
- C) To create more data points
- D) To prepare data for real-time analysis
```{admonition} Answer
:class: note, dropdown
B
```
**What is the formula for calculating the Mean Squared Error in time series analysis?**
- A) MSE = Sum((Observed - Predicted)^2) / Number of Observations
- B) MSE = Sum((Observed - Predicted) / Number of Observations)^2
- C) MSE = (Sum(Observed - Predicted)^2) * Number of Observations
- D) MSE = Square Root of [Sum((Observed - Predicted)^2) / Number of Observations]
```{admonition} Answer
:class: note, dropdown
A
```
**Which of the following is a limitation of the simple average smoothing technique?**
- A) It is computationally intensive
- B) It gives equal weight to all past observations
- C) It focuses primarily on recent data
- D) It automatically adjusts to seasonal variations
```{admonition} Answer
:class: note, dropdown
B
```
**What is an advantage of using the moving average technique over the simple average technique?**
- A) It can handle large datasets more efficiently
- B) It reduces the lag effect by focusing on more recent data
- C) It gives equal weight to all observations in the series
- D) It automatically detects and adjusts for seasonality
```{admonition} Answer
:class: note, dropdown
B
```
**How does the window size $P$ in a moving average smoothing technique affect the delay in forecasting?**
- A) Delay decreases as $P$ increases
- B) Delay increases as $P$ increases
- C) Delay remains constant regardless of $P$
- D) Delay is inversely proportional to $P$
```{admonition} Answer
:class: note, dropdown
B
```
**What is the trade-off between responsiveness and robustness to noise when using a moving average smoothing technique?**
- A) Increasing responsiveness also increases robustness to noise
- B) Decreasing responsiveness decreases robustness to noise
- C) Increasing responsiveness decreases robustness to noise
- D) Responsiveness and robustness to noise are not related in moving average smoothing
```{admonition} Answer
:class: note, dropdown
C
```
**In the weighted moving average formula $\text{Forecast} = \frac{\sum_{i=1}^P w_i \times X_{n-i+1}}{\sum_{i=1}^P w_i}$, what does $X_{n-i+1}$ represent?**
- A) The weight of the i-th data point
- B) The value of the i-th data point from the end of the data set
- C) The total number of observations in the data set
- D) The average value of the data set
```{admonition} Answer
:class: note, dropdown
B
```
**What does triple exponential smoothing add to the forecasting model compared to double exponential smoothing?**
- A) An additional smoothing constant for cyclicality
- B) A smoothing component for seasonality
- C) A component that adjusts for random fluctuations
- D) An enhanced trend adjustment component
```{admonition} Answer
:class: note, dropdown
B
```
**What are the core components of the triple exponential smoothing model?**
- A) Level, trend, and random error
- B) Level, cyclicality, and trend
- C) Level, trend, and seasonality
- D) Trend, seasonality, and cyclicality
```{admonition} Answer
:class: note, dropdown
C
```
**Can the triple exponential smoothing model account for different types of seasonality?**
- A) Yes, it can model both additive and multiplicative seasonality
- B) No, it only models additive seasonality
- C) No, it only models multiplicative seasonality
- D) Yes, but it requires additional parameters beyond the standard model
```{admonition} Answer
:class: note, dropdown
A
```
**For which scenario would triple exponential smoothing likely provide more accurate forecasts than double exponential smoothing?**
- A) Data where seasonal patterns vary depending on the level of the time series
- B) Stable data sets with very little change over time
- C) Time series with rapidly changing trends but no seasonality
- D) Short time series data with limited historical records
```{admonition} Answer
:class: note, dropdown
A
```
## Chapter 4
**In the context of AR and MA models, what role does the correlation play?**
- A) It helps in determining the optimal parameters of the MA model
- B) It identifies the stationary nature of the time series
- C) It measures the strength and direction of a linear relationship between time series observations at different times
- D) It specifies the number of differences needed to make the series stationary
```{admonition} Answer
:class: note, dropdown
C
```
**How does the autocorrelation function help in analyzing time series data?**
- A) By identifying the underlying patterns of cyclical fluctuations
- B) By determining the strength and sign of a relationship between a time series and its lags
- C) By calculating the average of the time series
- D) By differentiating between seasonal and non-seasonal patterns
```{admonition} Answer
:class: note, dropdown
B
```
**How can cross-correlation help in understanding relationships in time series data?**
- A) It identifies the internal structure of a single series
- B) It detects the point at which two series are most aligned or have the strongest relationship
- C) It determines the overall trend of a single time series
- D) It measures the variance within one time series
```{admonition} Answer
:class: note, dropdown
B
```
**How does partial autocorrelation differ from autocorrelation in analyzing time series data?**
- A) PACF isolates the correlation between specific lags ignoring the effects of intermediate lags, while ACF considers all intermediate lags cumulatively.
- B) PACF is used for linear relationships, whereas ACF is used for non-linear relationships.
- C) PACF can only be applied in stationary time series, while ACF can be applied in both stationary and non-stationary series.
- D) There is no difference; PACF is just another term for ACF.
```{admonition} Answer
:class: note, dropdown
A
```
**How does an autoregressive model differ from a moving average model?**
- A) AR models use past values of the variable itself for prediction, while MA models use past forecast errors.
- B) AR models use past forecast errors for prediction, while MA models use past values of the variable itself.
- C) AR models consider the trend and seasonality in data, while MA models only focus on the recent past.
- D) There is no difference; AR and MA models are identical.
```{admonition} Answer
:class: note, dropdown
A
```
**What is the primary assumption of an AR model regarding the relationship between past and future values?**
- A) Future values are completely independent of past values
- B) Future values are determined by a weighted sum of past values
- C) Past values have a diminishing linear effect on future values
- D) Future values are predicted by the mean of past values
```{admonition} Answer
:class: note, dropdown
B
```
**When selecting the optimal order $p$ for an AR model, what are we looking for in the Partial Autocorrelation Function (PACF)?**
- A) The point where the PACF cuts off after a significant spike
- B) The highest peak in the PACF
- C) The lag where the PACF crosses the zero line
- D) The lag with the maximum PACF value
```{admonition} Answer
:class: note, dropdown
A
```
**In the context of AR models, what is meant by 'stationarity'?**
- A) The mean of the series should not be a function of time.
- B) The series must exhibit clear trends and seasonality.
- C) The variance of the series should increase over time.
- D) The autocorrelations must be close to zero for all time lags.
```{admonition} Answer
:class: note, dropdown
A
```
**Why would you apply differencing to a time series before fitting an AR model?**
- A) To introduce seasonality into the data
- B) To convert a non-stationary series into a stationary one
- C) To increase the mean of the time series
- D) To reduce the variance of the time series
```{admonition} Answer
:class: note, dropdown
B
```
**What is a potential consequence of overdifferencing a time series?**
- A) It can introduce a trend into a previously trendless series.
- B) It can create a spurious seasonality in the data.
- C) It can lead to an increase in the variance of the series.
- D) It can produce a series with artificial autocorrelation.
```{admonition} Answer
:class: note, dropdown
D
```
**What is the primary characteristic of a Moving Average (MA) model in time series analysis?**
- A) It uses past forecast errors in a regression-like model.
- B) It predicts future values based solely on past observed values.
- C) It smooths the time series using a window of observations.
- D) It captures the trend and seasonality of the time series.
```{admonition} Answer
:class: note, dropdown
A
```
**When analyzing the ACF plot to identify the order $q$ of an MA model, what are you looking for?**
- A) A gradual decline in the lag values
- B) A sharp cut-off after a certain number of lags
- C) A constant value across all lags
- D) Increasing values with increasing lags
```{admonition} Answer
:class: note, dropdown
B
```
## Chapter 5
**What are the parameters of an ARMA model that need to be specified?**
- A) $p$ (order of the autoregressive part) and $q$ (order of the moving average part)
- B) $d$ (degree of differencing)
- C) $s$ (seasonal period)
- D) A and B are correct
```{admonition} Answer
:class: note, dropdown
A
```
**Under what condition is an ARMA model particularly useful compared to exponential smoothing?**
- A) When the time series data is non-stationary
- B) When the time series has a clear seasonal pattern
- C) When the time series exhibits autocorrelations
- D) When the time series is highly erratic and without patterns
```{admonition} Answer
:class: note, dropdown
C
```
**What is the first step in building an ARMA model?**
- A) Determine whether the time series is stationary
- B) Select the orders p and q for the model
- C) Estimate the parameters of the model
- D) Check the model diagnostics
```{admonition} Answer
:class: note, dropdown
A
```
**Which criterion is often used to compare different ARIMA models to find the optimal one?**
- A) The least squares criterion
- B) The Akaike Information Criterion (AIC)
- C) The Pearson correlation coefficient
- D) The Durbin-Watson statistic
```{admonition} Answer
:class: note, dropdown
B
```
**What type of differencing might be necessary when preparing a time series for ARIMA modeling?**
- A) Seasonal differencing
- B) Non-linear differencing
- C) Progressive differencing
- D) Inverse differencing
```{admonition} Answer
:class: note, dropdown
A
```
**What characteristic of a sinusoidal signal might lead the ADF test to conclude it is stationary?**
- A) Its mean and variance are not constant.
- B) It exhibits clear seasonality.
- C) Its mean and autocovariance are time-invariant.
- D) It has increasing amplitude over time.
```{admonition} Answer
:class: note, dropdown
C
```
**How does a month plot assist in the preparation for ARIMA modeling?**
- A) By confirming the stationarity of the time series
- B) By revealing seasonal effects that might require seasonal differencing
- C) By estimating the parameters for the model
- D) By determining the appropriate lags for the ARIMA model
```{admonition} Answer
:class: note, dropdown
B
```
**What does it mean to perform out-of-sample validation on an ARIMA model?**
- A) To re-estimate the model parameters using the same data set
- B) To test the model on data that was not used during the model fitting process
- C) To use cross-validation techniques on randomly selected subsamples
- D) To apply in-sample predictions to check consistency
```{admonition} Answer
:class: note, dropdown
B
```
**How should the residuals of a properly fitted ARIMA model be distributed?**
- A) Normally distributed around zero
- B) Uniformly distributed across the range of data
- C) Log-normally distributed
- D) Exponentially distributed
```{admonition} Answer
:class: note, dropdown
A
```
**When evaluating the residuals of an ARIMA model, what plot is used to assess the standardization and distribution of residuals?**
- A) Scatter plot
- B) Box plot
- C) Q-Q plot
- D) Pie chart
```{admonition} Answer
:class: note, dropdown
C
```
**What aspect of residuals does the Shapiro-Wilk test specifically evaluate?**
- A) The autocorrelation structure
- B) The distribution's adherence to normality
- C) The heteroscedasticity of residuals
- D) The variance stability over time
```{admonition} Answer
:class: note, dropdown
B
```
**Why is the Ljung-Box test important when validating ARIMA models?**
- A) It confirms the seasonal patterns are significant
- B) It verifies that the residuals do not exhibit significant autocorrelation, suggesting a good model fit
- C) It checks the variance of residuals to ensure homoscedasticity
- D) It evaluates the power of the model's parameters
```{admonition} Answer
:class: note, dropdown
B
```
**What does the provision of a confidence interval in ARIMA model predictions signify?**
- A) The precision of the estimated parameters
- B) The accuracy of the model’s forecasts
- C) The range within which future forecasts are likely to fall, with a certain probability
- D) The model’s ability to predict exact future values
```{admonition} Answer
:class: note, dropdown
C
```
**What key feature distinguishes ARIMA models from ARMA models?**
- A) ARIMA models require the data to be stationary.
- B) ARIMA models include an integrated component for differencing non-stationary data.
- C) ARIMA models use only moving average components.
- D) ARIMA models cannot handle seasonal data.
```{admonition} Answer
:class: note, dropdown
B
```
**Why might an analyst choose an ARIMA model for a financial time series dataset?**
- A) If the dataset is stationary with no underlying trends
- B) If the dataset shows fluctuations that revert to a mean
- C) If the dataset contains underlying trends and requires differencing to become stationary
- D) If the dataset is periodic and predictable
```{admonition} Answer
:class: note, dropdown
C
```
**What is the primary method for determining the difference order $d$ in an ARIMA model?**
- A) Calculating the AIC for different values of $d$
- B) Observing the stationarity of the time series after successive differencings
- C) Using a fixed $d$ based on the frequency of the data
- D) Applying the highest $d$ to ensure model simplicity
```{admonition} Answer
:class: note, dropdown
B
```
**What additional parameters are specified in a SARIMA model compared to an ARIMA model?**
- A) Seasonal orders: $P, D, Q$ and the length of the season $s$
- B) Higher non-seasonal orders: $p, d, q$
- C) A constant term to account for trends
- D) Parameters to manage increased data frequency
```{admonition} Answer
:class: note, dropdown
A
```
**How does the seasonal differencing order $D$ in SARIMA models differ from the regular differencing $d$ in ARIMA models?**
- A) $D$ is used to stabilize the variance, while $d$ stabilizes the mean.
- B) $D$ specifically targets removing seasonal patterns, while $d$ focuses on achieving overall stationarity.
- C) $D$ adjusts for autocorrelation, while $d$ corrects for heteroscedasticity.
- D) $D$ is used for linear trends, and $d$ is used for exponential trends.
```{admonition} Answer
:class: note, dropdown
B
```
**What methodology is generally used to select the seasonal autoregressive order $P$ and the seasonal moving average order $Q$ in a SARIMA model?**
- A) Examining the ACF and PACF plots specifically for the identified seasonal lags
- B) Applying cross-validation techniques across multiple seasonal cycles
- C) Testing various combinations of $P$ and $Q$ until the model no longer improves
- D) Reducing $P$ and $Q$ iteratively based on the simplest model criterion
```{admonition} Answer
:class: note, dropdown
A
```
**In what scenario might the AutoARIMA model be particularly beneficial?**
- A) When the user has extensive statistical knowledge and prefers to control every aspect of model building.
- B) When quick deployment and model testing are necessary without detailed prior analysis.
- C) When the data shows no signs of seasonality or non-stationarity.
- D) When only qualitative data is available for analysis.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the MAPE differ from the Mean Squared Error (MSE) in its interpretation of forecasting accuracy?**
- A) MAPE provides a measure of error in absolute terms, while MSE measures error in squared terms.
- B) MAPE is more sensitive to outliers than MSE.
- C) MAPE gives a relative error which makes it easier to interpret across different data scales, unlike MSE which provides an absolute error.
- D) MAPE is used only for linear models, while MSE is used for non-linear models.
```{admonition} Answer
:class: note, dropdown
C
```
**Why is it important to consider both MSE and MAPE when conducting a grid search for the best SARIMA model?**
- A) Because some models may perform well in terms of low MSE but might show high percentage errors as indicated by MAPE, especially on smaller data scales.
- B) Because higher values of both MSE and MAPE indicate a more complex and desirable model.
- C) Because lower MSE and higher MAPE together are indicative of a model that is overfitting.
- D) Because the regulatory standards in time series forecasting mandate the use of both metrics for compliance.
```{admonition} Answer
:class: note, dropdown
A
```
**How is the complexity of an ARIMA model typically quantified?**
- A) By the sum of the parameters $p$, $d$, and $q$.
- B) By the computational time required to fit the model.
- C) By the number of data points used in the model.
- D) By the variance of the residuals produced by the model.
```{admonition} Answer
:class: note, dropdown
A
```
## Chapter 6
**What is the main purpose of conducting a unit root test on a time series dataset?**
- A) To determine the optimal parameters for an ARIMA model.
- B) To identify whether the time series is stationary or non-stationary.
- C) To confirm if the time series has a constant mean and variance.
- D) To evaluate the predictive accuracy of a time series model.
```{admonition} Answer
:class: note, dropdown
B
```
**How is the concept of a "unit root" integral to understanding the behavior of a time series?**
- A) It helps in identifying the periodic components of the series.
- B) It indicates whether the time series will return to a trend path or persist in deviation.
- C) It determines the cyclical amplitude of the time series.
- D) It specifies the frequency of the time series data.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the ADF test enhance the basic Dickey-Fuller test for more accurate unit root testing?**
- A) By incorporating higher-order regression terms to account for autocorrelation in the residuals.
- B) By increasing the number of lags used in the regression to capture seasonality.
- C) By applying a transformation to the time series data to ensure normal distribution.
- D) By reducing the dataset size to focus on more recent data points.
```{admonition} Answer
:class: note, dropdown
A
```
**When evaluating a time series for non-stationarity using the ADF test, why might one choose to include both $\alpha$ and $\beta t$ in the regression model?**
- A) To ensure that the test accounts for both constant and linear trend components, thus avoiding spurious rejection of the unit root null hypothesis in the presence of a trend.
- B) To increase the regression model’s fit to the data, thereby reducing residual errors.
- C) To differentiate between seasonal and non-seasonal components effectively.
- D) To comply with regulatory requirements for financial time series analysis.
```{admonition} Answer
:class: note, dropdown
A
```
**Why is mean reversion considered an important concept in trading and investment strategies?**
- A) It provides a basis for predicting long-term trends in asset prices.
- B) It suggests that price extremes may be temporary, offering potential opportunities for arbitrage.
- C) It indicates constant returns regardless of market conditions.
- D) It guarantees a fixed rate of return on all investments.
```{admonition} Answer
:class: note, dropdown
B
```
**What does the rejection of the null hypothesis in a mean reversion test like the ADF suggest about the time series?**
- A) The series is likely non-stationary with no mean reversion.
- B) The series does not contain a unit root, suggesting mean reversion.
- C) There is no correlation between sequential data points in the series.
- D) The series exhibits clear seasonal patterns and trends.
```{admonition} Answer
:class: note, dropdown
B
```
**In which scenario might a time series be mean-reverting but not stationary?**
- A) If the mean to which the series reverts itself changes over time.
- B) If the series displays constant mean and variance.
- C) If the autocorrelation function shows dependency at only very short lags.
- D) If the series exhibits no significant peaks or troughs.
```{admonition} Answer
:class: note, dropdown
A
```
**What implication does a Hurst exponent greater than 0.5 indicate about a time series?**
- A) The series exhibits mean-reverting behavior.
- B) The series is likely to be stationary.
- C) The series shows persistent behavior, trending in one direction.
- D) The series has no clear long-term trends.
```{admonition} Answer
:class: note, dropdown
C
```
**What Hurst exponent value is typically associated with an antipersistent time series?**
- A) Around 0.5
- B) Less than 0.5
- C) Exactly 0.0
- D) Greater than 0.7
```{admonition} Answer
:class: note, dropdown
B
```
**How can the Hurst exponent be utilized by traders or financial analysts when evaluating the behavior of stock prices?**
- A) A Hurst exponent of 0.5 or higher suggests a good opportunity for trend-following strategies.
- B) A Hurst exponent below 0 can suggest opportunities for strategies based on price reversals.
- C) A Hurst exponent above 0.5 may encourage a profitable investment in stable, low-volatility stocks.
- D) A Hurst exponent above 0 indicates high risk and high potential returns, suitable for aggressive investment strategies.
```{admonition} Answer
:class: note, dropdown
A
```
**What fundamental properties does Geometric Brownian Motion (GBM) assume about the behavior of stock prices?**
- A) Stock prices change in accordance with a Poisson distribution.
- B) Stock prices follow a path determined by both a constant drift and a random shock component.
- C) Stock prices are stable and do not show volatility.
- D) Stock prices are inversely proportional to the market volatility.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the treatment of volatility differ between Brownian Motion and Geometric Brownian Motion?**
- A) In Brownian Motion, volatility is constant, whereas in GBM, volatility impacts the rate of exponential growth.
- B) Volatility is not a factor in Brownian Motion but is crucial in GBM.
- C) In GBM, volatility decreases as stock prices increase, unlike in Brownian Motion where it remains stable.
- D) Volatility in Brownian Motion leads to negative stock prices, which GBM corrects by allowing only positive values.
```{admonition} Answer
:class: note, dropdown
A
```
## Chapter 7
**How could the Kalman Filter benefit aerospace applications?**
- A) It is used to maintain and organize flight schedules.
- B) It aids in the calibration of on-board clocks on satellites.
- C) It provides precise real-time filtering and prediction of spacecraft and satellite trajectories.
- D) It is only used for communication between spacecraft.
```{admonition} Answer
:class: note, dropdown
C
```
**Why is it important to accurately estimate the noise parameters in the Kalman Filter?**
- A) Incorrect noise parameters can lead to overfitting of the model to noisy data.
- B) Accurate noise parameter estimation is crucial for the filter's ability to adapt its estimates to the level of uncertainty in both the process dynamics and observations.
- C) High noise estimates increase the filter’s processing speed.
- D) Lower noise estimates simplify the mathematical calculations in the filter.
```{admonition} Answer
:class: note, dropdown
B
```
**Why is the assumption of Gaussian noise important in the operation of the Kalman Filter?**
- A) It allows the use of binary noise models.
- B) It simplifies the mathematical representation of the noise.
- C) Gaussian noise implies that all errors are uniformly distributed.
- D) It ensures that the state estimation errors are normally distributed, facilitating analytical tractability and optimal estimation.
```{admonition} Answer
:class: note, dropdown
D
```
**What is the primary concept of the Kalman Filter regarding the use of multiple sources of information?**
- A) To disregard noisy measurements in favor of a more precise model.
- B) To combine information from an imprecise model and noisy measurements to optimally estimate the true state of a system.
- C) To enhance the accuracy of measurements by filtering out model predictions.
- D) To use only the most reliable source of information while ignoring others.
```{admonition} Answer
:class: note, dropdown
B
```
**In the Kalman Filter, what does the 'predict' step specifically calculate?**
- A) The certainty of the measurement data.
- B) The prior estimate of the state before the next measurement is taken into account.
- C) The exact value of external influences on the system.
- D) The posterior state estimate.
```{admonition} Answer
:class: note, dropdown
B
```
**In the Kalman Filter, what role does the prior error estimate play during the update phase?**
- A) It is used to directly correct the system’s model dynamics.
- B) It determines how much weight to give the new measurement versus the predicted state.
- C) It serves as a constant factor to maintain stability in the filter's performance.
- D) It is adjusted to match the measurement noise for consistency.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the Kalman Filter algorithm utilize these two sources of error during its operation?**
- A) It ignores these errors to simplify the computations.
- B) It adjusts the error estimates based solely on the measurement error.
- C) It combines both errors to calculate the state estimate and update the error covariance.
- D) It sequentially addresses each error, first correcting for process error, then measurement error.
```{admonition} Answer
:class: note, dropdown
C
```
**How does the Kalman Gain affect the outcome of the 'correct' step in the Kalman Filter?**
- A) A higher Kalman Gain indicates a greater reliance on the model prediction over the actual measurement.
- B) The Kalman Gain optimizes the balance between the predicted state and the new measurement, updating the state estimate accordingly.
- C) The Kalman Gain decreases the measurement noise automatically.
- D) A lower Kalman Gain speeds up the computation by reducing data processing.
```{admonition} Answer
:class: note, dropdown
B
```
**What role does measurement innovation play in the Kalman Filter's 'correct' step?**
- A) It is used to adjust the Kalman Gain to minimize the impact of new measurements.
- B) It determines how much the estimates should be adjusted, based on the new data received.
- C) It recalculates the system's baseline parameters without influencing the current state estimate.
- D) It provides a direct measurement of the system's performance efficiency.
```{admonition} Answer
:class: note, dropdown
B
```
**Why is the Kalman Filter particularly effective at dealing with partial observations of a system's state?**
- A) It can operate without any data, relying solely on system models.
- B) It integrates available partial data with the system's dynamic model to estimate unobserved components.
- C) It filters out incomplete data to prevent errors.
- D) It requires full data observation at each step to function correctly.
```{admonition} Answer
:class: note, dropdown
B
```
**What theoretical implication does an error covariance matrix $R$ approaching zero have on the measurement process in the Kalman Filter?**
- A) It implies that the measurements are becoming less reliable and should be disregarded.
- B) It indicates an increase in measurement noise, requiring more conservative updates.
- C) It signals that the measurements are becoming non-linear.
- D) It suggests that the measurements are believed to be almost perfect, with negligible noise.
```{admonition} Answer
:class: note, dropdown
D
```
**In what scenario would the predicted error covariance $P_t^{-}$ approaching zero be considered ideal in the Kalman Filter application?**
- A) In highly dynamic systems where measurements are less reliable than the model predictions.
- B) When the system model and the process noise are perfectly known and constant.
- C) In systems where no prior knowledge of the state dynamics exists.
- D) In applications where the measurement noise $R$ is extremely high, making $P_t^{-}$ the primary source of information.
```{admonition} Answer
:class: note, dropdown
B
```
**What role does the process noise covariance matrix $Q$ play in the Kalman Filter?**
- A) It affects how much the state prediction is trusted over the actual measurements.
- B) It adjusts the measurement model to fit better with observed data.
- C) It is negligible and typically set to zero to simplify calculations.
- D) It defines the expected noise or uncertainty in the dynamics of the system being modeled.
```{admonition} Answer
:class: note, dropdown
D
```
**How does the Kalman Gain influence the Kalman Filter's operation?**
- A) It determines the rate at which the state estimate converges to the true state.
- B) It ensures that the filter always trusts the model's predictions over measurements.
- C) It optimally combines information from the predicted state and the measurement to generate an updated state estimate with minimum error variance.
- D) It is used to adjust the process noise covariance matrix $Q$ to account for environmental changes.
```{admonition} Answer
:class: note, dropdown
C
```
## Chapter 8
**What information does the magnitude of the Fourier transform provide about the time series?**
- A) The overall trend of the time series
- B) The strength of different frequencies present in the time series
- C) The exact timestamps of specific events in the time series
- D) The predictive accuracy of the time series model
```{admonition} Answer
:class: note, dropdown
B
```
**What does the inverse Fourier transform achieve in the context of signal processing?**
- A) It generates the amplitude spectrum of the signal
- B) It compresses the signal data for better storage
- C) It reconstructs the original time-domain signal from its frequency-domain representation
- D) It converts the phase spectrum into a usable format
```{admonition} Answer
:class: note, dropdown
C
```
**Is the Fourier transform directly computed in practical applications?**
- A) Yes, it is directly computed as defined mathematically
- B) No, it is considered too complex for real-time computations
- C) Yes, but only for very small datasets
- D) No, it is approximated using other techniques due to efficiency concerns
```{admonition} Answer
:class: note, dropdown
D
```
**Why is the Fast Fourier Transform preferred over the traditional Fourier Transform in most applications?**
- A) It operates in real-time
- B) It requires less computational power and is faster due to reduced complexity
- C) It provides more detailed frequency analysis
- D) It is easier to implement in software
```{admonition} Answer
:class: note, dropdown
B
```
**In the Fourier Transform of a pure sinusoidal function, what indicates the frequency of the sinusoid?**
- A) The width of the spikes in the frequency domain
- B) The height of the spikes in the frequency domain
- C) The position of the spikes along the frequency axis
- D) The area under the curve in the frequency spectrum
```{admonition} Answer
:class: note, dropdown
C
```
**What is the Fourier Transform of a Dirac delta function?**
- A) A single spike at the origin
- B) A flat line across all frequencies at zero amplitude
- C) A continuous spectrum across all frequencies
- D) Symmetric spikes at specific frequencies
```{admonition} Answer
:class: note, dropdown
C
```
**How does the Fourier Transform of a unit step function typically appear in the frequency domain?**
- A) As a constant amplitude across all frequencies
- B) As a spike at zero frequency with a symmetric component inversely proportional to frequency
- C) As increasing amplitudes with increasing frequency
- D) As decreasing amplitudes with increasing frequency
```{admonition} Answer
:class: note, dropdown
B
```
**When does spectral leakage typically occur in the Fourier transform process?**
- A) When the signal is perfectly periodic within the observed time window
- B) When the length of the data window does not exactly contain an integer number of cycles of the signal
- C) When the signal has a very low frequency
- D) When the signal amplitude is very high
```{admonition} Answer
:class: note, dropdown
B
```
**What mathematical expression best describes the linearity property of the Fourier transform?**
- A) $ F(ax + by) = aF(x) + bF(y) $
- B) $ F(x + y) = F(x) * F(y) $
- C) $ F(x + y) = F(x) / F(y) $
- D) $ F(ax + by) = aF(x) * bF(y) $
```{admonition} Answer
:class: note, dropdown
A
```
**If a signal $x(t)$ is shifted in time by $t_0$, what is the effect on its Fourier transform $X(f)$?**
- A) $X(f)$ is multiplied by $e^{-i2\pi ft_0}$
- B) $X(f)$ remains unchanged
- C) $X(f)$ is multiplied by $e^{i2\pi ft_0}$
- D) $X(f)$ is divided by $e^{i2\pi ft_0}$
```{admonition} Answer
:class: note, dropdown
A
```
**What is the effect of multiplying two Fourier transforms in the frequency domain?**
- A) The corresponding time-domain signals are added.
- B) The corresponding time-domain signals are multiplied.
- C) The corresponding time-domain signals are convolved.
- D) The corresponding time-domain signals are subtracted.
```{admonition} Answer
:class: note, dropdown
C
```
**What happens to the Fourier transform of a signal when it is integrated in the time domain?**
- A) The Fourier transform is multiplied by $-j2\pi f$.
- B) The Fourier transform is divided by $j2\pi f$.
- C) The Fourier transform is differentiated.
- D) The Fourier transform is multiplied by $f$.
```{admonition} Answer
:class: note, dropdown
B
```
**What mathematical relationship does Parseval's theorem establish between a time-domain function and its Fourier transform?**
- A) The integral of the square of the time-domain function equals the integral of the square of the frequency-domain function multiplied by $2\pi$.
- B) The integral of the square of the time-domain function equals the integral of the square of the frequency-domain function divided by $2\pi$.
- C) The sum of the squares of a discrete time-domain signal equals the sum of the squares of its discrete Fourier transform divided by the number of samples.
- D) The integral of the square of the time-domain function equals the integral of the square of the frequency-domain function.
```{admonition} Answer
:class: note, dropdown
D
```
**How do filters affect a signal in terms of its frequency components?**
- A) Filters randomly alter the frequencies present in a signal.
- B) Filters uniformly amplify all frequencies of a signal.
- C) Filters remove all frequencies from a signal to simplify it.
- D) Filters allow certain frequencies to pass while blocking others, based on the filter design.
```{admonition} Answer
:class: note, dropdown
D
```
**How is the transfer function of a filter related to its frequency response?**
- A) The transfer function, when evaluated on the imaginary axis, gives the frequency response.
- B) The frequency response is the integral of the transfer function over all frequencies.
- C) The frequency response is the derivative of the transfer function with respect to frequency.
- D) The transfer function is a simplified version of the frequency response that omits phase information.
```{admonition} Answer
:class: note, dropdown
A
```
**How does a Bode plot assist in filter design and analysis?**
- A) It provides a method to directly measure the filter’s resistance and capacitance.
- B) It allows designers to visually assess how a filter modifies signal amplitude and phase at various frequencies.
- C) It calculates the exact dimensions needed for filter components.
- D) It identifies the specific materials required for constructing the filter.
```{admonition} Answer
:class: note, dropdown
B
```
**How does a low-pass filter benefit digital communications?**
- A) It encrypts the communication signals.
- B) It enhances the clarity of digital signals by filtering out high-frequency noise and interference.
- C) It converts analog signals to digital signals.
- D) It increases the bandwidth of the communication channel.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the characteristic of a Butterworth filter?**
- A) It has a rectangular frequency response, making it ideal for time-domain operations.
- B) It is known for its maximally flat magnitude response in the passband, providing a smooth transition with no ripples.
- C) It emphasizes certain frequency components using a tapered cosine function.
- D) It combines characteristics of both rectangular and triangular filters for versatile applications.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the primary function of a high-pass filter?**
- A) To allow only low-frequency signals to pass and attenuates high-frequency signals.
- B) To allow only high-frequency signals to pass and attenuates low-frequency signals.
- C) To amplify all frequencies of a signal equally.
- D) To stabilize voltage fluctuations within a circuit.
```{admonition} Answer
:class: note, dropdown
B
```
**In audio engineering, what is a typical use of a band-stop filter?**
- A) To enhance the overall loudness of the audio track.
- B) To eliminate specific unwanted frequencies, like electrical hum or feedback.
- C) To synchronize audio tracks by adjusting their frequency content.
- D) To convert stereo audio tracks into mono.
```{admonition} Answer
:class: note, dropdown
B
```
**What role does the Fourier transform play in identifying the main seasonalities in a dataset?**
- A) It decomposes the dataset into its constituent frequencies, highlighting predominant cycles.
- B) It directly filters out non-seasonal components, leaving only the main seasonal patterns.
- C) It amplifies the seasonal fluctuations to make them more detectable by standard algorithms.
- D) It compresses the data to reduce computational requirements for forecasting.
```{admonition} Answer
:class: note, dropdown
A
```
## Chapter 9
**What role do holiday effects play in the Prophet model?**
- A) They are considered as outliers and are removed from the dataset.
- B) They are modeled as part of the trend component.
- C) They are ignored unless specifically included in the model.
- D) They provide adjustments for predictable events that cause unusual observations on specific days.
```{admonition} Answer
:class: note, dropdown
D
```
**What feature of the Prophet model allows it to adapt to changes in the direction of time-series data trends?**
- A) The inclusion of a stationary component to stabilize variance
- B) The use of change points to allow for shifts in the trend
- C) A constant growth rate applied throughout the model
- D) Periodic adjustments based on previous forecast errors
```{admonition} Answer
:class: note, dropdown
B
```
**What is a key characteristic of using a piecewise linear function for modeling trends in the Prophet model compared to a standard linear function?**
- A) Piecewise linear functions model trends as constant over time.
- B) Piecewise linear functions can adapt to abrupt changes in the trend at specific points in time.
- C) Standard linear functions allow for automatic detection of change points.
- D) Standard linear functions are more flexible and adapt to non-linear trends.
```{admonition} Answer
:class: note, dropdown
B
```
**How are change points typically determined in the Prophet model?**
- A) Through manual specification by the user.
- B) By a random selection process to ensure model variability.
- C) Automatically during model fitting, based on the data's historical fluctuations.
- D) Using a fixed interval that divides the data series into equal segments.
```{admonition} Answer
:class: note, dropdown
C
```
**How does the Logistic growth model handle forecasts for data with inherent upper limits?**
- A) By using a predefined upper limit known as the carrying capacity.
- B) By randomly assigning an upper limit based on data variability.
- C) By continuously adjusting the upper limit as new data becomes available.
- D) By ignoring any potential upper limits and forecasting based on past growth rates.
```{admonition} Answer
:class: note, dropdown
A
```
**How does saturating growth occur in the Logistic growth model within Prophet?**
- A) It happens when the growth rate exceeds the carrying capacity.
- B) It occurs as the time series approaches the carrying capacity, causing the growth rate to slow down.
- C) It is when the growth rate remains constant regardless of the carrying capacity.
- D) It is defined as the exponential increase in growth without bounds.
```{admonition} Answer
:class: note, dropdown
B
```
**What is required to model holidays in the Prophet framework?**
- A) A list of dates for the holidays must be manually specified.
- B) Holidays are automatically detected based on the country's standard holiday calendar.
- C) The user must input the exact dates and duration of each holiday, along with their potential impact on the forecast.
- D) A statistical test to determine which holidays significantly affect the data.
```{admonition} Answer
:class: note, dropdown
A
```
## Chapter 10
**Which of the following is a characteristic of using window-based methods for time series prediction?**
- A) They can only use linear models for forecasting
- B) Utilize a fixed window of data points to make predictions
- C) Predictions are independent of the forecasting horizon
- D) Do not require sliding the window to generate new predictions
```{admonition} Answer
:class: note, dropdown
B
```
**What is a common limitation of linear models when predicting time series data involving trends and seasonal patterns?**
- A) They are highly sensitive to outliers
- B) They require no assumptions about data distribution
- C) They struggle to model the seasonal variations effectively
- D) They automatically handle missing data
```{admonition} Answer
:class: note, dropdown
C
```
**What fundamental concept allows neural networks to model non-linear relationships in data?**
- A) The use of linear activation functions only
- B) The application of a fixed number of layers
- C) The integration of non-linear activation functions
- D) The reduction of dimensions in the input data
```{admonition} Answer
:class: note, dropdown
C
```
**What is the primary function of the hidden layers in a Multi-Layer Perceptron?**
- A) To directly interact with the input data
- B) To apply non-linear transformations to the inputs
- C) To reduce the dimensionality of the input data
- D) To categorize input data into predefined classes
```{admonition} Answer
:class: note, dropdown
B
```
**How is the input data typically structured for training an MLP in time series forecasting?**
- A) As a sequence of random data points
- B) In chronological order without modification
- C) Divided into overlapping or non-overlapping windows
- D) Categorized by the frequency of the data points
```{admonition} Answer
:class: note, dropdown
C
```
**Why is the Multi-Layer Perceptron considered a part of the windowed approaches in time series forecasting?**
- A) It uses the entire dataset at once for predictions
- B) It processes individual data points separately
- C) It analyzes data within specific time frames or windows
- D) It predicts without regard to temporal sequence
```{admonition} Answer
:class: note, dropdown
C
```
**What is one limitation of the windowed approach to time series forecasting related to the use of historical data?**
- A) It can only use the most recent data points.
- B) It requires a constant update of historical data.
- C) It restricts the model to only use data within the window.
- D) It mandates the inclusion of all historical data.
```{admonition} Answer
:class: note, dropdown
C
```
**How do RNNs benefit time series forecasting compared to MLPs?**
- A) By handling larger datasets more efficiently
- B) By processing each data point independently
- C) By capturing temporal dependencies within sequences
- D) By using fewer parameters and simpler training processes
```{admonition} Answer
:class: note, dropdown
C
```
**During the training of an RNN, what method is commonly used to update the model's weights?**
- A) Backpropagation through time
- B) Forward-only propagation
- C) Perceptron learning rule
- D) Unsupervised learning techniques
```{admonition} Answer
:class: note, dropdown
A
```
**Why might RNNs encounter difficulties in long sequence time series forecasting?**
- A) They process data too quickly.
- B) They favor shorter dependencies due to gradient issues.
- C) They are unable to handle multiple data types.
- D) They reduce the complexity of the model unnecessarily.
```{admonition} Answer
:class: note, dropdown
B
```
**How do Echo State Networks simplify the training process compared to standard Recurrent Neural Networks?**
- A) By training only the input weights
- B) By eliminating the need for hidden layers
- C) By only adapting the output weights
- D) By using simpler activation functions
```{admonition} Answer
:class: note, dropdown
C
```
**What is the function of the Readout in a Reservoir Computing model?**
- A) It serves as the primary memory component.
- B) It actively modifies the reservoir's weights.
- C) It is responsible for making final predictions from the reservoir states.
- D) It generates random weights for the reservoir.
```{admonition} Answer
:class: note, dropdown
C
```
**What is the primary function of the reservoir in Reservoir Computing models?**
- A) To reduce the dimensionality of the time series data
- B) To generate a high-dimensional representation of input features
- C) To directly predict future values of the time series
- D) To simplify the computational requirements of the network
```{admonition} Answer
:class: note, dropdown
B
```
**Why are the dynamical features generated by the reservoir considered general-purpose in Reservoir Computing?**
- A) They are specifically tailored to one type of time series data.
- B) They only predict one forecast horizon accurately.
- C) They adapt to different tasks without retraining the reservoir.
- D) They require constant updates to remain effective.
```{admonition} Answer
:class: note, dropdown
C
```
**What is the spectral radius of a reservoir in Reservoir Computing?**
- A) The maximum eigenvalue of the reservoir's weight matrix
- B) The total number of neurons in the reservoir
- C) The minimum value required for computational stability
- D) The learning rate for training the reservoir
```{admonition} Answer
:class: note, dropdown
A
```
**In a Reservoir with chaotic dynamics, what happens to two different initial states as time progresses?**
- A) They converge to the same final state quickly.
- B) They eventually diverge from each other.
- C) They stabilize at a midpoint between the two states.
- D) The evolution of one state is completely independent from the evolution of the other.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the purpose of input scaling $\omega_{\text{in}}$ in the context of a Reservoir's input weights?**
- A) To decrease the stability of the reservoir
- B) To control the impact of input data on the reservoir's state
- C) To simplify the network architecture
- D) To enhance the linear behavior of the reservoir
```{admonition} Answer
:class: note, dropdown
B
```
**What is the impact of hyperparameter settings on the dynamics of a Reservoir?**
- A) They are irrelevant to how the Reservoir processes inputs.
- B) They primarily affect the speed of computations rather than accuracy.
- C) They dictate the internal dynamics and stability of the model.
- D) They only affect the output layer and not the Reservoir itself.
```{admonition} Answer
:class: note, dropdown
C
```
**What is Principal Component Analysis (PCA) primarily used for in data analysis?**
- A) To increase the dimensionality of the dataset
- B) To classify data into predefined categories
- C) To reduce the dimensionality of the dataset
- D) To predict future trends based on past data
```{admonition} Answer
:class: note, dropdown
C
```
**How are principal components selected in PCA?**
- A) By choosing components with the lowest eigenvalues
- B) By selecting components that explain the most variance
- C) Based on the components with the smallest eigenvectors
- D) Through random selection of the eigenvectors
```{admonition} Answer
:class: note, dropdown
B
```
**In what way can Principal Component Analysis (PCA) be applied within Reservoir Computing?**
- A) To increase the size of the reservoir states
- B) To decrease computational efficiency
- C) To reduce the dimensionality of the reservoir states
- D) To introduce more redundancy into the features
```{admonition} Answer
:class: note, dropdown
C
```
**In what scenario is a Gradient Boost Regression Tree particularly beneficial as a readout for Echo State Networks?**
- A) When data is predominantly linear and simple
- B) When minimal computational resources are available
- C) When dealing with highly non-linear and variable data
- D) When the model must be trained quickly with few data points
```{admonition} Answer
:class: note, dropdown
C
```
## Chapter 11
**How is a dynamical system typically defined in the context of time series analysis?**
- A) A system where output values are independent of previous states.
- B) A system described by a deterministic process where the state evolves over time in a predictable manner.
- C) A random process with inputs that are not related to the time variable.
- D) A static system where the state does not change over time.
```{admonition} Answer
:class: note, dropdown
B
```
**In terms of mathematical modeling, how are continuous dynamical systems typically represented compared to discrete systems?**
- A) Using difference equations for continuous and differential equations for discrete.
- B) Using differential equations for continuous and difference equations for discrete.
- C) Both use differential equations but apply them differently.
- D) Both use difference equations but under different conditions.
```{admonition} Answer
:class: note, dropdown
B
```
**What distinguishes the outcomes of stochastic systems from those of deterministic systems in dynamical modeling?**
- A) Stochastic systems provide identical outcomes under identical conditions.
- B) Deterministic systems yield different outcomes under the same initial conditions.
- C) Stochastic systems may produce different outcomes even under identical initial conditions.
- D) Both systems are completely predictable and yield the same results every time.
```{admonition} Answer
:class: note, dropdown
C
```
**In terms of system behavior, how do linear and nonlinear dynamical systems differ?**
- A) Linear systems show exponential growth or decay, nonlinear systems do not.
- B) Linear systems' outputs are directly proportional to their inputs; nonlinear systems' outputs are not.
- C) Nonlinear systems are less predictable over time than linear systems.
- D) Nonlinear systems are always unstable, while linear systems are stable.
```{admonition} Answer
:class: note, dropdown
B
```
**What role does the parameter $r$ play in the logistic map related to population growth?**
- A) It represents the death rate of the population.
- B) It signifies the population’s initial size.
- C) It controls the growth rate of the population.
- D) It is irrelevant to changes in population size.
```{admonition} Answer
:class: note, dropdown
C
```
**Why is the logistic map classified as a nonlinear system?**
- A) It depends solely on linear equations to predict future states.
- B) It features a quadratic term that determines the rate of change.
- C) It behaves linearly regardless of parameter values.
- D) It simplifies all interactions to direct proportional relationships.
```{admonition} Answer
:class: note, dropdown
B
```
**What happens when the growth rate $r$ in the logistic map is increased beyond a critical threshold?**
- A) The system remains in a steady state.
- B) The system transitions from contractive to chaotic dynamics.
- C) Population growth becomes linear and predictable.
- D) The logistic map becomes a linear system.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the characteristic of a two-points attractor in a dynamical system?**
- A) The system settles into one of two possible stable states.
- B) The system’s states alternate randomly between two points.
- C) The system never reaches any of the two points but orbits around them.
- D) The system remains unstable and does not converge to any point.
```{admonition} Answer
:class: note, dropdown
A
```
**What can period-doubling bifurcations indicate about a system’s dynamics?**
- A) They signal a transition towards simpler, more predictable behavior.
- B) They show a system is becoming less sensitive to initial conditions.
- C) They indicate a system’s route to chaotic behavior as parameters vary.
- D) They reflect a system’s shift to a lower energy state.
```{admonition} Answer
:class: note, dropdown
C
```
**In a system with multiple points attractors, how do different initial conditions affect the outcome?**
- A) All initial conditions lead to the same attractor point.
- B) Initial conditions determine which of the several attractor points the system converges to.
- C) Multiple attractors lead to a chaotic system where outcomes are unpredictable.
- D) Initial conditions have no influence on the system’s behavior.
```{admonition} Answer
:class: note, dropdown
B
```
**What are Lyapunov exponents used for in the analysis of dynamical systems?**
- A) To measure the rate of separation of infinitesimally close trajectories.
- B) To calculate the exact future state of chaotic systems.
- C) To reduce the complexity of modeling chaotic systems.
- D) To determine the initial conditions of a system.
```{admonition} Answer
:class: note, dropdown
A
```
**What is a return map in the context of dynamical systems?**
- A) A graphical representation of linear system trajectories.
- B) A tool for measuring the periodicity of a system.
- C) A plot showing the relationship between sequential points in a time series.
- D) A method for calculating Lyapunov exponents.
```{admonition} Answer
:class: note, dropdown
C
```
**What is a difference equation in the context of dynamical systems?**
- A) An equation that describes changes in continuous systems over infinitesimal time increments.
- B) An equation that models the discrete steps in which systems evolve over time.
- C) A method for determining the equilibrium state of a continuous system.
- D) A technique used exclusively in physical systems to measure differences in state.
```{admonition} Answer
:class: note, dropdown
B
```
**What are the Lotka-Volterra equations commonly used to model?**
- A) The interaction between predator and prey populations in an ecological system.
- B) The growth patterns of a single species in isolation.
- C) The economic dynamics between competing businesses.
- D) Chemical reaction rates in closed systems.
```{admonition} Answer
:class: note, dropdown
A
```
**What makes the Lotka-Volterra equations a continuous-time dynamical system?**
- A) They model population changes at discrete intervals only.
- B) They are based on continuous changes over time, not just at specific points.
- C) They predict exact population sizes at fixed times.
- D) The equations are used for systems that do not evolve over time.
```{admonition} Answer
:class: note, dropdown
B
```
**How does the Rössler system exemplify a chaotic dynamical system?**
- A) By exhibiting low sensitivity to initial conditions.
- B) Through its linear interaction of variables.
- C) By showing chaotic behavior when parameters reach certain values.
- D) It is inherently predictable regardless of parameter settings.
```{admonition} Answer
:class: note, dropdown
C
```
**What is the implication of a zero Lyapunov exponent in a dynamical system?**
- A) It signals exponential divergence of system trajectories.
- B) It indicates neutral stability where trajectories neither converge nor diverge.
- C) It suggests the system will always return to a stable equilibrium.
- D) It denotes a complete lack of sensitivity to initial conditions.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the phase space of a dynamical system?**
- A) A graphical representation of all possible system states.
- B) A specific region where the system's energy is minimized.
- C) The timeline over which a system's behavior is observed.
- D) A mathematical model that predicts system failures.
```{admonition} Answer
:class: note, dropdown
A
```
**Why are fractal dimensions important in the analysis of chaotic systems?**
- A) They help in designing the system’s mechanical structure.
- B) They are crucial for understanding the complexity and scale properties of chaotic attractors.
- C) Fractal dimensions are used to simplify the mathematical model of the system.
- D) They determine the thermal properties of chaotic systems.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the formula relating the ratio $r$, the number of parts $N$, and the dimensionality $D$ in fractal geometry?**
- A) $N = D^r$
- B) $D = \frac{\log N}{\log r}$
- C) $r = D \times N$
- D) $D = N \div r$
```{admonition} Answer
:class: note, dropdown
B
```
**What does a non-integer fractal dimension signify about the structure of a fractal?**
- A) It represents simple, predictable patterns within the fractal.
- B) It indicates a higher degree of complexity and fine structure at infinitesimal scales.
- C) Non-integer dimensions are errors in mathematical calculations.
- D) It shows that fractals are typically three-dimensional.
```{admonition} Answer
:class: note, dropdown
B
```
**What does the dimensionality of an attractor reveal about a dynamical system?**
- A) The precision of measurements in the system.
- B) The potential energy levels throughout the system’s operation.
- C) The complexity and predictability of the system’s dynamics.
- D) The geographical spread of the system.
```{admonition} Answer
:class: note, dropdown
C
```
**What does it imply when we say a dynamical system is observed partially?**
- A) It implies complete observation of all variables and interactions within the system.
- B) Observations are limited to a subset of the system's variables, not capturing the entire state.
- C) It means observations are made continuously without any interruption.
- D) The system is only observed at its initial and final states, not during its evolution.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the primary statement of Takens' Embedding Theorem?**
- A) It states that a fully observable dynamical system can always be understood from partial observations.
- B) It suggests that a single observed variable is sufficient to reconstruct a dynamical system’s full state under certain conditions.
- C) It asserts that dynamical systems cannot be understood without complete data.
- D) It requires continuous observation of all variables in a system for accurate modeling.
```{admonition} Answer
:class: note, dropdown
B
```
**What hyperparameters must be specified to construct time-delay embedding vectors?**
- A) The embedding dimension and the delay time.
- B) The system's total energy and mass.
- C) The variables' initial and final values.
- D) The linear coefficients of the system equations.
```{admonition} Answer
:class: note, dropdown
A
```
**What is a potential consequence of setting $\tau$ too short or too long in Takens' Embedding?**
- A) Too short or too long $\tau$ may cause overlap or excessive separation between data points in the embedding, obscuring the system's true dynamics.
- B) It can change the fundamental properties of the dynamical system.
- C) The dimensionality of the attractor will decrease.
- D) It will automatically adjust to the optimal length over time.
```{admonition} Answer
:class: note, dropdown
A
```
**What method is used to ascertain the appropriate $m$ for Takens' Embedding?**
- A) The method of false nearest neighbors is employed to find the smallest $m$ where points that appear close in the embedding are close in the original space.
- B) Using a complex algorithm that integrates all known variables of the system.
- C) Setting $m$ based on the total number of observations available.
- D) By selecting $m$ randomly to ensure a diverse range of behaviors is captured.
```{admonition} Answer
:class: note, dropdown
A
```
**How can Takens' Embedding be used in time series forecasting?**
- A) By predicting the exact future states of a dynamical system.
- B) Through constructing a phase space that helps infer future states based on past behavior.
- C) By ensuring all predictions are absolutely deterministic.
- D) It is used to reduce the dimensionality of the data for easier visualization only.
```{admonition} Answer
:class: note, dropdown
B
```
## Chapter 12
**What distinguishes a supervised task like classification from an unsupervised task such as clustering in time series analysis?**
- A) Supervised tasks use unlabelled data while unsupervised tasks use labelled data.
- B) Both supervised and unsupervised tasks use labels to guide the learning process.
- C) Supervised tasks use labels to guide the learning process, while unsupervised tasks do not use any labels.
- D) Unsupervised tasks require a set decision boundary predefined by the model.
```{admonition} Answer
:class: note, dropdown
C
```
**Under which circumstances is it preferable to use F1 score rather than accuracy?**
- A) When the data set is balanced and model performance is consistent across classes.
- B) When the data set is imbalanced and there is a need to balance the importance of precision and recall.
- C) When the classes in the data set are perfectly balanced.
- D) F1 score should be used only when accuracy is above a certain threshold.
```{admonition} Answer
:class: note, dropdown
B
```
**What is Normalized Mutual Information (NMI) used for in data analysis?**
- A) To measure the dependency between variables in regression tasks.
- B) To evaluate the performance of clustering by comparing the clusters to ground truth classes.
- C) To assess the accuracy of classification models.
- D) To determine the linearity of relationships in data.
```{admonition} Answer
:class: note, dropdown
B
```
**Which statement best describes the relationship between similarity and dissimilarity measures in clustering algorithms?**
- A) Similarity measures are recalculated into dissimilarity measures before use.
- B) They are often used interchangeably with an inverse relationship; high similarity implies low dissimilarity.
- C) Dissimilarity measures are derived from similarity measures through complex transformations.
- D) Only dissimilarity measures are valid in statistical analysis.
```{admonition} Answer
:class: note, dropdown
B
```
**Why do different (dis)similarity measures affect classification outcomes?**
- A) All (dis)similarity measures produce the same results.
- B) Different measures may interpret the relationships between data points differently, impacting the classification boundaries.
- C) Only linear measures affect classification; nonlinear measures do not.
- D) (Dis)similarity measures are unrelated to classification results.
```{admonition} Answer
:class: note, dropdown
B
```
**In what scenarios is hierarchical clustering particularly useful?**
- A) When data is linear and simple.
- B) When the dataset is extremely large and computational resources are limited.
- C) When exploring data to find inherent structures and relationships at multiple scales.
- D) It is only useful for numeric data types.
```{admonition} Answer
:class: note, dropdown
C
```
**Why are standard distances like Euclidean distance often unsuitable for time series data?**
- A) They ignore the temporal dynamics and patterns specific to time series data.
- B) They calculate distances too quickly, leading to underfitting.
- C) They are more computationally intensive than specialized time series distances.
- D) They only work with categorical data.
```{admonition} Answer
:class: note, dropdown
A
```
**What defines a multi-variate time series in data analysis?**
- A) A series that consists of multiple sequences of categorical data points.
- B) A series that tracks multiple variables or series over time.
- C) A time series that is derived from a single variable observed at different intervals.
- D) A series analyzed only through linear regression models.
```{admonition} Answer
:class: note, dropdown
B
```
**What is Dynamic Time Warping (DTW) and how does it differ from Euclidean distance in analyzing time series?**
- A) DTW is a method for measuring similarity between two sequences which may vary in speed, aligning them optimally to minimize their distance; Euclidean distance measures static point-to-point similarity.
- B) DTW uses a complex algorithm that requires more data than Euclidean distance.
- C) DTW can only be used with linear data, whereas Euclidean distance works with any data type.
- D) There is no difference; DTW and Euclidean distance are the same.
```{admonition} Answer
:class: note, dropdown
A
```
**What is an "alignment path" in the context of Dynamic Time Warping (DTW)?**
- A) A sequence of steps required to set up the DTW algorithm.
- B) The optimal route through a matrix that minimizes the cumulative distance between two time series.
- C) The maximum difference measured between two time series.
- D) A statistical method for estimating the time delay between sequences.
```{admonition} Answer
:class: note, dropdown
B
```
**How is the optimal alignment path determined in Dynamic Time Warping?**
- A) By randomly selecting paths until a satisfactory alignment is found.
- B) Through a greedy algorithm that chooses the shortest immediate path.
- C) Using dynamic programming to efficiently compute the minimal distance.
- D) By manual adjustment until the sequences are visually aligned.
```{admonition} Answer
:class: note, dropdown
C
```
**What are the key properties of Dynamic Time Warping (DTW)?**
- A) It is sensitive to outliers and noise in the data.
- B) It is invariant to scaling and rotation of the time series.
- C) It adjusts for shifts and distortions in the time dimension.
- D) It requires the time series to be of the same length.
```{admonition} Answer
:class: note, dropdown
C
```
**How can Dynamic Time Warping (DTW) be combined with classifiers like SVC or k-NN for time series analysis?**
- A) By using the DTW distance matrix as a feature vector directly in classifiers.
- B) First computing the DTW distance matrix, then using this matrix to measure similarities in the classifier’s training and testing phases.
- C) Applying DTW after classification to improve the accuracy of SVC or k-NN.
- D) DTW cannot be combined with these types of classifiers.
```{admonition} Answer
:class: note, dropdown
B
```
**What role does kernel-PCA play when combined with DTW in visualizing time series data?**
- A) It enhances the computational speed of the DTW calculations.
- B) It simplifies the time series data into a single variable.
- C) It projects the DTW (dis)similarity matrix into a lower-dimensional space for easier visualization.
- D) It directly classifies time series data into predefined categories.
```{admonition} Answer
:class: note, dropdown
C
```
**What is the fundamental concept behind a Gaussian Mixture Model (GMM) in clustering?**
- A) A model that uses a single Gaussian distribution to represent all data.
- B) A non-probabilistic model that assigns each data point to a cluster.
- C) A probabilistic model that assumes each cluster follows a different Gaussian distribution.
- D) A model that clusters data based on fixed thresholds of similarity.
```{admonition} Answer
:class: note, dropdown
C
```
**What is a primary advantage of using an ensemble approach in TCK?**
- A) It simplifies the model by reducing the number of parameters.
- B) It improves clustering robustness and accuracy by integrating diverse model perspectives.
- C) It reduces computational requirements by using a single model.
- D) It focuses only on the largest cluster, ignoring smaller ones.
```{admonition} Answer
:class: note, dropdown
B
```
**What advantage does embedding a time series into a real-valued vector provide?**
- A) It allows the time series to be processed by traditional data analysis tools that require fixed-length inputs.
- B) It enhances the temporal resolution of the time series data.
- C) It preserves the raw format of time series data without any loss.
- D) It increases the storage requirements for time series data.
```{admonition} Answer
:class: note, dropdown
A
```
**What is the primary purpose of the Reservoir module in the Reservoir Computing framework for time series analysis?**
- A) To directly predict future values in a time series
- B) To preprocess data by normalizing and cleaning
- C) To extract and expand dynamic features from the input time series for use in classification and clustering
- D) To reduce the dimensionality of the input data
```{admonition} Answer
:class: note, dropdown
C
```
**What advantage does a bidirectional Reservoir offer over a standard Reservoir?**
- A) It captures temporal dependencies more effectively by integrating past and future context.
- B) It reduces the computational requirements for processing.
- C) It operates with fewer parameters and simpler configuration.
- D) It is easier to implement and maintain.
```{admonition} Answer
:class: note, dropdown
A
```
**What characteristic does the Dimensionality Reduction module bring to the Reservoir Computing framework?**
- A) It decreases the processing speed of the system
- B) It compresses the high-dimensional data into a more manageable form without significant loss of information
- C) It increases the number of features for better classification accuracy
- D) It requires additional external data to function effectively
```{admonition} Answer
:class: note, dropdown
B
```
**What is the main difference between using Tensor-PCA and traditional PCA for dimensionality reduction in Reservoir Computing?**
- A) Tensor-PCA does not support multivariate data.
- B) Tensor-PCA is better suited for handling the multidimensional data structures typical of reservoir states, unlike traditional PCA which is limited to flat data structures.
- C) Traditional PCA is faster and less complex computationally than Tensor-PCA.
- D) Traditional PCA can handle larger datasets more efficiently than Tensor-PCA.
```{admonition} Answer
:class: note, dropdown
B
```
**Why does representing time series using the Reservoir model space typically perform better than using just the output model space?**
- A) Because it includes only the most recent data points, ignoring earlier dynamics.
- B) It captures a richer and more comprehensive set of dynamic behaviors from the entire reservoir processing.
- C) The output model space is more computationally intensive, leading to slower performance.
- D) It uses simpler mathematical models, making it easier to implement.
```{admonition} Answer
:class: note, dropdown
B
```
**What is the purpose of the readout module in the Reservoir Computing framework for multivariate time series?**
- A) To store the incoming multivariate time series data for processing
- B) To filter noise from the input data before it enters the reservoir
- C) To map the time series representation to the desired output
- D) To increase the computational speed of the reservoir processing
```{admonition} Answer
:class: note, dropdown
C
```
**What is a disadvantage of using Time Series Cluster Kernel (TCK)?**
- A) It requires large amounts of memory.
- B) It is limited to linear time series data.
- C) It cannot handle multivariate data.
- D) It's computationally intensive.
```{admonition} Answer
:class: note, dropdown
D
```
================================================
FILE: notebooks/00/resources.md
================================================
# Resources and acknowledgments
The following resources served as inspiration and provided very useful content to write some of the sections of the book.
- Intel course on time series [[Link](https://www.intel.com/content/www/us/en/developer/topic-technology/artificial-intelligence/training/course-time-series-analysis.html)].
- Collection of links for books, articles, frameworks, etc... on time series [[Link](https://github.com/ElizaLo/Time-Series)].
- A “semi-auto” way to determine parameters for SARIMA model [[Link](https://tsanggeorge.medium.com/a-semi-auto-way-to-determine-parameters-for-sarima-model-74cdee853080)].
- Book on Time Series analysis (University of California) [[Link](https://stats.libretexts.org/Bookshelves/Advanced_Statistics/Time_Series_Analysis_(Aue))].
- Lecture on stats models, ESN, and state-space reconstruct [[Link](https://github.com/FilippoMB/lecture_RNN_phase_space)].
- Time series classification and clustering with Reservoir Computing [Link](https://github.com/FilippoMB/Time-series-classification-and-clustering-with-Reservoir-Computing)
- Medium article on Fourier transform [[Link](https://medium.com/the-modern-scientist/the-fourier-transform-and-its-application-in-machine-learning-edecfac4133c)]
- Neptune blog, inspired by the Intel course [[Link](https://neptune.ai/blog/time-series-forecasting#:~:text=Pseudo%2Dadditive%20models%20combine%20the,related%20to%20the%20multiplicative%20model)].
- Cheat-sheet TS models in Python [[Link](https://machinelearningmastery.com/time-series-forecasting-methods-in-python-cheat-sheet/)].
- Time series analysis with Python [[Link](https://github.com/AileenNielsen/TimeSeriesAnalysisWithPython/tree/master)].
- An Introduction to Kalman Filter [[Link](https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf)].
- Python library to extract static features from time series data [[Link](https://github.com/fraunhoferportugal/tsfel)].
- Basic Concepts in Nonlinear Dynamics and Chaos [[Link](https://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Workshop.html)].
- IPython Cookbook, Second Edition (2018) [[Link](https://ipython-books.github.io/121-plotting-the-bifurcation-diagram-of-a-chaotic-dynamical-system/)].
- Introduction to Taken's Embedding [[link](https://www.kaggle.com/code/tigurius/introduction-to-taken-s-embedding/notebook)].
- An introduction to Dynamic Time Warping [[link](https://rtavenar.github.io/blog/dtw.html)].
- An intuitive approach to DTW — Dynamic Time Warping [[link](https://towardsdatascience.com/an-intuitive-approach-to-dtw-dynamic-time-warping-f660ccb77ff4)].
## Acknowledgments
Thanks to:
- [Simone Scardapane](https://www.sscardapane.it/) for spotting many typos, giving feedback, and suggestions.
- Jonas Berg Hansen for giving feedback on the exercises.
================================================
FILE: notebooks/01/introduction_to_time_series.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to time series analysis\n",
"\n",
"<img src=\"media/cover.png\" style=\"width: 40%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
},
"tags": []
},
"source": [
"## Introduction\n",
"\n",
"In this lecture we will cover the following topics:\n",
"\n",
"- Definition of time series data.\n",
"- Introduction to time series analysis and application examples.\n",
"- The main components of a time series.\n",
"- Time series decomposition."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "skip"
},
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"#Imports\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import statsmodels.api as sm\n",
"from statsmodels.tsa.seasonal import seasonal_decompose, STL\n",
"from scipy.fft import fft\n",
"np.random.seed(0) # for reproducibility"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Basics"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### What is a time series?\n",
"\n",
"- A time series is a sequence of data points organized in time order.\n",
"- Usually, the time signal is sampled at equally spaced points in time.\n",
"- These can be represented as the sequence of the sampled values.\n",
"- We refer to this setting as *discrete* time.\n",
"\n",
"<img src=\"media/ts_equal.png\" style=\"width: 50%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Irregularly sampled time signals can still be represented as a time series.\n",
"- It is necessary to encode this additional information into an additional data structure.\n",
"- We refer to this setting as *continuous* time.\n",
"\n",
"<img src=\"media/ts_unequal.png\" style=\"width: 50%; display: block; margin: auto;\">\n",
"\n",
"- This setting is less common. We focus on discrete time."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### What data are represented as time series?\n",
"\n",
"- Time series are found in a myriad of natural phenomena, industrial and engineering applications, business, human activities, and so on."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<img src=\"media/passengers.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<img src=\"media/co2.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<img src=\"media/sunspots.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<img src=\"media/electricity.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<img src=\"media/water_temps.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Other examples include data from:\n",
" - Finance: stock prices, asset prices, macroeconomic factors.\n",
" - E-Commerce: page views, new users, searches.\n",
" - Business: transactions, revenue, inventory levels.\n",
" - Natural language: machine translation, chatbots."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Time series analysis\n",
"\n",
"The main pruposes of time series analysis are:\n",
"1. To **understand** and characterize the underlying process that generates the observed data.\n",
"2. To **forecast** the evolution of the process, i.e., predict the next observed values."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- There are two main different perspectives to look at a time series.\n",
"- Each perspective leads to different time series analysis approaches"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Statistics perspective\n",
"\n",
"- A time series is a sequence of *random variables* that have some correlation or other distributional relationship between them. \n",
"\n",
"<img src=\"media/random_var.png\" style=\"width: 40%; display: block; margin: auto;\">\n",
"\n",
"- The sequence is a realization (observed values) of a stochastic process.\n",
"- Statistical time series approaches focus on finding the parameters of the stochastic process that most likely produced the observed time series."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Dynamical system perspective\n",
"\n",
"- This perspective assumes that there is a system governed by unknown variables $\\{x_1, x_2, x_3, \\dots ,x_𝑁\\}$.\n",
"- Generally, we only observe one time series $y$ generated by the system.\n",
"- What can $y$ be?\n",
" - One of the system variables.\n",
" - A function $f$ of system variables.\n",
"- The objective of the analysis is to reconstruct the dynamics of the entire system from $y$.\n",
"\n",
"<img src=\"media/partial.png\" style=\"width: 40%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Applications\n",
"\n",
"Time series analysis is applied in many real world applications, including\n",
"- Economic forecasting\n",
"- Stock market analysis\n",
"- Demand planning and forecasting\n",
"- Anomaly detection\n",
"- … And much more"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"**Economic Forecasting**\n",
"\n",
"- Time series analysis is used in macroeconomic predictions.\n",
"- World Trade Organization does time series forecasting to predict levels of international trade [[source](https://www.econ-jobs.com/research/36056-Forecasting-international-trade-A-time-series-approach.pdf)].\n",
"- Federal Reserve uses time series forecasts of the economy to set interest rates [[source](https://www.federalreserve.gov/pubs/feds/2009/200910/200910pap.pdf)].\n",
"\n",
"<img src=\"media/economic.png\" style=\"width: 50%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"**Demand forecasting**\n",
"\n",
"- Time series analysis is used to predict demand at different levels of granularity.\n",
"- Amazon and other e commerce companies use time series modeling to predict demand at a product geography level [[source](https://www.theverge.com/2014/1/18/5320636/amazon-plans-to-ship-your-packages-before-you-even-buy-them)].\n",
"- Helps meet customer needs (fast shipping) and reduce inventory waste\n",
"\n",
"<img src=\"media/ecommerce.png\" style=\"width: 50%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"**Anomaly detection**\n",
"\n",
"- Used to detect anomalous behaviors in the underlying system by looking at unusual patterns in the time series.\n",
"- Widely used in manufacturing to detect defects and target preventive maintenance [[source](https://papers.phmsociety.org/index.php/phme/article/view/1256/phmec_20_1256)].\n",
"- With new IoT devices, anomaly detection is being used in machinery heavy industries, such as petroleum and gas [[source](https://arxiv.org/abs/1607.02480)].\n",
"\n",
"<img src=\"media/anomaly.png\" style=\"width: 50%; display: block; margin: auto;\">\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Time series components"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- A time series is often assumed to be composed of three components:\n",
" - *Trend*: the long-term direction.\n",
" - *Seasonality*: the periodic behavior.\n",
" - *Residuals*: the irregular fluctuations."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Trend\n",
"\n",
"- Trend captures the general direction of the time series.\n",
"- For example, increasing number of passengers over the years despite seasonal fluctuations.\n",
"- Trend can be increasing, decreasing, or constant.\n",
"- It can increase/decrease in different ways over time (linearly, exponentially, etc…).\n",
"\n",
"<img src=\"media/passengers_trend.png\" style=\"width: 70%; display: block; margin: auto;\">"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Let's create a trend from scratch to understand how it looks like."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"time = np.arange(144)\n",
"trend = time * 2.65 +100"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "subslide"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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OTS/YDCIkSNHYsGCBQCAYcOGYdeuXXjnnXdw1113yedxFs3r//7v/7B8+XKsWLECAwYMwNatW5GTk4OUlBTMnDlTPo9zUEZjPnfOpvn4/X7ceuutCAaDePvtty95PmfRdIqKivDmm2+iuLi4wZ9pW5gDl/ZFiMTERKjV6vOSeXl5+Xn/8kVN75FHHsFnn30Gm82Gbt26yceTk5MBgHNpZkVFRSgvL8eIESMQFRWFqKgoOBwO/PGPf0RUVJT8WXMOza9Lly7o379/2LF+/frJm97w90TLePzxx/Hkk0/i1ltvxaBBg3DnnXfisccew8KFCwFwDkqpz+eenJwMn8+HioqKi55DTcfv92P69Ok4ePAg8vLy5KtRAGfREtavX4/y8nJ0795d/vP78OHDmDNnDnr06AGgbc+BQSpCaLVajBgxAnl5eWHH8/LykJGRoVBXbZ8QAg8//DBWrVqFdevWIS0tLayelpaG5OTksLn4fD44HA7OpQlNmDABO3bswNatW+VfI0eOxO23346tW7eiZ8+enEMLGT9+/HmPANi3bx+uuOIKAPw90VLcbjdUqvA/otVqtbz9OeegjPp87iNGjIBGowk7p7S0FDt37uRsmtiZELV//36sXbsWCQkJYXXOovndeeed2L59e9if3ykpKXj88cfxr3/9C0Abn4NCm1zQBaxcuVJoNBrx/vvvi927d4ucnBxhMBjEoUOHlG6tzfrtb38r4uLihN1uF6WlpfIvt9stn/PSSy+JuLg4sWrVKrFjxw5x2223iS5duoiqqioFO2/7zt21TwjOoaVs2bJFREVFiRdffFHs379ffPjhh0Kv14vly5fL53AWzW/mzJmia9eu4osvvhAHDx4Uq1atEomJiWLevHnyOZxD86iurhYlJSWipKREABCvvfaaKCkpkXeCq8/n/sADD4hu3bqJtWvXiuLiYnHVVVeJIUOGiNraWqV+rFbpl2bh9/vF9ddfL7p16ya2bt0a9me41+uV34OzuHyX+j3xcz/ftU+ItjsHBqkI89///d/iiiuuEFqtVgwfPlzehpuaB4AL/lqyZIl8TjAYFM8995xITk4WOp1OZGdnix07dijXdDvx8yDFObSczz//XAwcOFDodDrRt29f8d5774XVOYvmV1VVJR599FHRvXt3ER0dLXr27CmeeeaZsL8gcg7Nw2azXfDPhZkzZwoh6ve5ezwe8fDDD4v4+HgRExMjrr32WnHkyBEFfprW7ZdmcfDgwYv+GW6z2eT34Cwu36V+T/zchYJUW52DJIQQLXHli4iIiIiIqK3gPVJEREREREQNxCBFRERERETUQAxSREREREREDcQgRURERERE1EAMUkRERERERA3EIEVERERERNRADFJEREREREQNxCBFRERERETUQAxSREREDSRJEj799FOl2yAiIgUxSBERUasxa9YsSJKEBx544Lzagw8+CEmSMGvWrCb7frm5uRg6dGiTvR8REbUdDFJERNSqpKamYuXKlfB4PPKxmpoa/PWvf0X37t0V7IyIiNoTBikiImpVhg8fju7du2PVqlXysVWrViE1NRXDhg2Tj3m9Xvzud79D586dER0djczMTBQWFsp1u90OSZLw9ddfY+TIkdDr9cjIyMDevXsBAEuXLsXzzz+Pbdu2QZIkSJKEpUuXyl//008/4aabboJer0d6ejo+++wzuVZRUYHbb78dnTp1QkxMDNLT07FkyZJm/FSIiKilMUgREVGrc/fdd4cFk7/85S+45557ws6ZN28ePv74YyxbtgzFxcXo3bs3rr76apw6dSrsvGeeeQavvvoqvv32W0RFRcnvc8stt2DOnDkYMGAASktLUVpailtuuUX+uueffx7Tp0/H9u3bcc011+D222+X3/s///M/sXv3bnz11VfYs2cP3nnnHSQmJjbXx0FERApgkCIiolbnzjvvREFBAQ4dOoTDhw9jw4YNuOOOO+S6y+XCO++8g1deeQVTpkxB//798ec//xkxMTF4//33w97rxRdfhNlsRv/+/fHkk09i48aNqKmpQUxMDIxGI6KiopCcnIzk5GTExMTIXzdr1izcdttt6N27NxYsWACXy4UtW7YAAI4cOYJhw4Zh5MiR6NGjByZOnIjrrruuZT4cIiJqEVFKN0BERNRQiYmJmDp1KpYtWwYhBKZOnRp2xefAgQPw+/0YP368fEyj0WD06NHYs2dP2HsNHjxY/t9dunQBAJSXl1/yfqtzv85gMMBkMqG8vBwA8Nvf/hY333wziouLMXnyZNx4443IyMho/A9MREQRh1ekiIioVbrnnnuwdOlSLFu27LxlfUIIAKFtyn9+/OfHNBqN/L/P1ILB4CW//7lfd+Zrz3zdlClTcPjwYeTk5OD48eOYMGEC5s6dW8+fjIiIWgMGKSIiapV+9atfwefzwefz4eqrrw6r9e7dG1qtFgUFBfIxv9+Pb7/9Fv369av399BqtQgEAo3qr1OnTpg1axaWL1+ON954A++9916j3oeIiCITl/YREVGrpFar5WV6arU6rGYwGPDb3/4Wjz/+OOLj49G9e3csWrQIbrcb9957b72/R48ePXDw4EFs3boV3bp1g8lkgk6nu+TXPfvssxgxYgQGDBgAr9eLL774okEBjoiIIh+DFBERtVqxsbEXrb300ksIBoO48847UV1djZEjR+Jf//oXOnbsWO/3v/nmm7Fq1SpYrVacPn0aS5YsqdcDf7VaLZ566ikcOnQIMTExyMrKwsqVK+v9fYmIKPJJ4sxCciIiIiIiIqoX3iNFRERERETUQAxSREREREREDcQgRURERERE1EAMUkRERERERA3EIEVERERERNRADFJEREREREQNxCBFRERERETUQAxSREREREREDcQgRURERERE1EAMUkRERERERA3EIEVERERERNRA/x9A2LiPZV8QcQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1000x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1, figsize=(10, 3))\n",
"ax.plot(time, trend, color='tab:red')\n",
"ax.set_xlabel(\"Months\")\n",
"ax.set_ylabel(\"Passengers\")\n",
"plt.grid()\n",
"plt.title(\"Trend vs Time\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Seasonality\n",
"\n",
"- Periodic fluctuations in time series data that occur at regular intervals due to seasonal factors.\n",
"- It is characterized by consistent and predictable patterns over a specific period (e.g., daily, monthly, quarterly, yearly)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"It can be driven by many factors.\n",
"- Naturally occurring events such as weather fluctuations caused by time of year.\n",
"- Business or administrative procedures, such as start and end of a school year.\n",
"- Social or cultural behavior, e.g., holidays or religious observances."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Let's generate the seasonal component."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"seasonal = 20 + np.sin( time * 0.5) * 20"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "subslide"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAE6CAYAAAAoZ6IFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAArs9JREFUeJztnXecXFXd/9/Tdrb3ZDebDgmEEHoACb0kQOj4U5pALM+jIkpEaYIPwUdAwiOgD4oNAVEEfSgiCCQohCYQUkhCSQKk7242ZXudcn9/nDl3ZrObZGfmlnNnz/v1ymsms7N3zt0z957zbZ+vzzAMA41Go9FoNBqNRqPRmPjdHoBGo9FoNBqNRqPRqIY2lDQajUaj0Wg0Go1mF7ShpNFoNBqNRqPRaDS7oA0ljUaj0Wg0Go1Go9kFbShpNBqNRqPRaDQazS5oQ0mj0Wg0Go1Go9FodkEbShqNRqPRaDQajUazC9pQ0mg0Go1Go9FoNJpd0IaSRqPRaDQajUaj0eyCNpQ0Go3GA7zzzjtccMEFjBs3jnA4TE1NDccccwzf+9733B6aq8yZM4cJEyb0e23ChAnMmTPH/H99fT3z5s1j+fLljo4tU9avX4/P5xvSv/Xr13PSSSdx0kknuT1sjUajyTmCbg9Ao9FoNHvm+eef59xzz+Wkk05i/vz5jBo1ioaGBt577z0ef/xxfvrTn7o9RKV4+umnKS0tNf9fX1/PbbfdxoQJEzj00EPdG9gQGTVqFP/+97/7vXbVVVfR2trKn/70pwHv/eUvf+nk8DQajWbYoA0ljUajUZz58+czceJEXnrpJYLB5G374osvZv78+S6OTE0OO+wwt4eQFeFwmM997nP9XistLaWvr2/A6wBTp051amgajUYzrNCpdxqNRqM4O3bsoLq6up+RJPH7B97Gn3jiCY455hiKioooLi7m9NNPZ9myZf3e895773HxxRczYcIECgoKmDBhApdccgkbNmzo976uri6+//3vM3HiRPLz86msrGT69On8+c9/7ve+Z599lmOOOYbCwkJKSkqYOXPmgKjIvHnz8Pl8fPDBB1xyySWUlZVRU1PDV77yFVpbW/u99xe/+AUnnHACI0eOpKioiIMOOoj58+cTiUT2+vdKTb179dVXOfLIIwH48pe/bKaszZs3j0cffRSfzzdgnAA/+tGPCIVC1NfXD/oZzzzzDD6fj3/+858DfvbAAw/g8/lYsWIFAJ999hkXX3wxdXV1Ztrkqaeealkq4K6pdzJ17+677+auu+4y5/ikk05izZo1RCIRbrzxRurq6igrK+OCCy6gqalpwHGH8j3SaDSaXEYbShqNRqM4xxxzDO+88w7f+c53eOedd/ZoLNxxxx1ccsklTJ06lb/85S88+uijtLe3c/zxx/Phhx+a71u/fj37778/9913Hy+99BJ33XUXDQ0NHHnkkWzfvt1837XXXssDDzzAd77zHV588UUeffRRvvCFL7Bjxw7zPY899hjnnXcepaWl/PnPf+bBBx+kubmZk046iTfeeGPAGD//+c+z33778eSTT3LjjTfy2GOP8d3vfrffez799FMuvfRSHn30UZ577jm++tWvcvfdd/P1r389rb/d4YcfzkMPPQTALbfcwr///W/+/e9/87WvfY2LLrqI2tpafvGLX/T7nWg0yq9//WsuuOAC6urqBj3u2WefzciRI81jp/Lwww9z+OGHc/DBBwMwe/ZslixZwvz581m4cCEPPPAAhx12GC0tLWmdS7r84he/4M033+QXv/gFv/vd7/j4448555xz+OpXv8q2bdv4/e9/z/z583n55Zf52te+1u93h/o90mg0mpzG0Gg0Go3SbN++3TjuuOMMwACMUChkzJgxw7jzzjuN9vZ2830bN240gsGg8e1vf7vf77e3txu1tbXGF7/4xd1+RjQaNTo6OoyioiLjZz/7mfn6tGnTjPPPP3+3vxeLxYy6ujrjoIMOMmKxWL/PHDlypDFjxgzztVtvvdUAjPnz5/c7xlVXXWXk5+cb8Xh8t58RiUSMP/zhD0YgEDB27txp/uzKK680xo8f3+/948ePN6688krz/4sXLzYA46GHHhpw7FtvvdXIy8sztm7dar72xBNPGICxaNGi3Z63YRjGtddeaxQUFBgtLS3max9++KEBGP/7v/9rGIaYO8C477779nisvXHiiScaBx544G5/duKJJ5r/X7dunQEYhxxySL85ue+++wzAOPfcc/v9/ty5cw3AaG1tNQwju++RRqPR5BI6oqTRaDSKU1VVxeuvv87ixYv5yU9+wnnnnceaNWu46aabOOigg8wI0EsvvUQ0GuWKK64gGo2a//Lz8znxxBN59dVXzWN2dHRwww03MGnSJILBIMFgkOLiYjo7O/noo4/M9x111FG88MIL3Hjjjbz66qt0d3f3G9vq1aupr6/n8ssv75cGWFxczOc//3nefvtturq6+v3Oueee2+//Bx98MD09Pf3Sv5YtW8a5555LVVUVgUCAUCjEFVdcQSwWY82aNVn/TSXf/OY3Afjtb39rvnb//fdz0EEHccIJJ+zxd7/yla/Q3d3NE088Yb720EMPEQ6HufTSSwGorKxk33335e677+aee+5h2bJlxONxy8a/J2bPnt1vTg444AAAzjrrrH7vk69v3LgRSO97pNFoNLmMNpQ0Go3GI0yfPp0bbriBv/71r9TX1/Pd736X9evXm4IOW7duBeDII48kFAr1+/fEE0/0S6m79NJLuf/++/na177GSy+9xLvvvsvixYsZMWJEP2Po5z//OTfccAPPPPMMJ598MpWVlZx//vmsXbsWwEzBGzVq1IDx1tXVEY/HaW5u7vd6VVVVv/+Hw2EA83M3btzI8ccfz5YtW/jZz35mGokyRW5XYy0bampquOiii/j1r39NLBZjxYoVvP7661x99dV7/d0DDzyQI4880ky/i8Vi/PGPf+S8886jsrISwKxjOv3005k/fz6HH344I0aM4Dvf+Q7t7e2WncdgyDFI8vLy9vh6T08PkN73SKPRaHIZrXqn0Wg0HiQUCnHrrbdy7733smrVKgCqq6sB+L//+z/Gjx+/299tbW3lueee49Zbb+XGG280X+/t7WXnzp393ltUVMRtt93GbbfdxtatW83o0jnnnMPHH39sGj0NDQ0DPqe+vh6/309FRUVa5/bMM8/Q2dnJU0891e887OqDdM011/Doo4/yt7/9jRdffJHy8nIuu+yyIf3ul7/8Za666io++ugjPvvsMxoaGvjyl7/c7z3jx4/nwQcfBGDNmjX85S9/Yd68efT19fGrX/3K8vPJlqF+jzQajSbX0YaSRqPRKE5DQ8OgERuZIicFB04//XSCwSCffvopn//853d7PJ/Ph2EYZiRH8rvf/Y5YLLbb36upqWHOnDm8//773HfffXR1dbH//vszevRoHnvsMb7//e/j8/kA6Ozs5MknnzSV8NJBHiN1fIZh9EuPS4ddI1a7csQRRzBjxgzuuusuVq1axX/+539SVFQ0pGNfcsklXHvttTz88MN89tlnjB49mlmzZu32/fvttx+33HILTz75JEuXLk3/ZBxgqN8j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
gitextract_i1zmg0c9/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ └── deploy-book.yml
├── .gitignore
├── .python-version
├── CITATION.cff
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── _config.yml
├── _toc.yml
├── environment.yml
├── notebooks/
│ ├── 00/
│ │ ├── intro.md
│ │ ├── knowledge_test.md
│ │ └── resources.md
│ ├── 01/
│ │ └── introduction_to_time_series.ipynb
│ ├── 02/
│ │ └── stationarity.ipynb
│ ├── 03/
│ │ └── smoothing.ipynb
│ ├── 04/
│ │ └── ar-ma.ipynb
│ ├── 05/
│ │ └── arma_arima_sarima.ipynb
│ ├── 06/
│ │ └── unit-root-hurst.ipynb
│ ├── 07/
│ │ └── kalman-filter.ipynb
│ ├── 08/
│ │ └── signal-transforms-filters.ipynb
│ ├── 09/
│ │ └── prophet.ipynb
│ ├── 10/
│ │ └── nn-reservoir-computing.ipynb
│ ├── 11/
│ │ └── nonlinear-ts.ipynb
│ └── 12/
│ └── classification-clustering.ipynb
├── pyproject.toml
├── scripts/
│ └── sync_user_environment.py
└── tsa_course/
├── __init__.py
├── lecture1.py
├── lecture11.py
├── lecture2.py
└── lecture8.py
SYMBOL INDEX (20 symbols across 5 files) FILE: scripts/sync_user_environment.py function parse_args (line 52) | def parse_args() -> argparse.Namespace: function parse_version (line 64) | def parse_version(version: str) -> tuple[int, ...]: function marker_matches (line 68) | def marker_matches(marker: str | None, target_python: str) -> bool: function load_lock_data (line 96) | def load_lock_data() -> dict: function get_package_record (line 101) | def get_package_record(lock_data: dict, name: str) -> dict: function get_tsa_course_record (line 114) | def get_tsa_course_record(lock_data: dict) -> dict: function select_dependency_entries (line 121) | def select_dependency_entries(entries: list[dict], target_python: str) -... function resolve_locked_version (line 130) | def resolve_locked_version(lock_data: dict, dependency: dict, target_pyt... function collect_expected_versions (line 136) | def collect_expected_versions(lock_data: dict, target_python: str) -> di... function render_environment (line 161) | def render_environment(expected_versions: dict[str, str]) -> str: function main (line 189) | def main() -> int: FILE: tsa_course/lecture1.py function fft_analysis (line 4) | def fft_analysis(signal): FILE: tsa_course/lecture11.py function _runge_kutta_4th_order (line 7) | def _runge_kutta_4th_order(func, initial_value, start_time, end_time, pa... function _variational_equation (line 76) | def _variational_equation(t, Phi, x, func_jac, p=()): function _combined_state_equations (line 120) | def _combined_state_equations(t, S, num_dimensions, func, func_jac, p=()): function computeLE (line 167) | def computeLE(func, func_jac, x0, t, p=(), ttrans=None): function plot_bifurcation_diagram (line 240) | def plot_bifurcation_diagram(func, func_jac, x0, time_vector, parameters... FILE: tsa_course/lecture2.py function run_sequence_plot (line 3) | def run_sequence_plot(x, y, title, xlabel="Time", ylabel="Values", ax=No... FILE: tsa_course/lecture8.py function fourierPrediction (line 4) | def fourierPrediction(y, n_predict, n_harm = 5): function annotated_sin_plot (line 43) | def annotated_sin_plot():
Copy disabled (too large)
Download .json
Condensed preview — 33 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (27,131K chars).
[
{
"path": ".github/workflows/ci.yml",
"chars": 2890,
"preview": "name: CI\n\non:\n pull_request:\n push:\n branches:\n - main\n\npermissions:\n contents: read\n\njobs:\n validate:\n r"
},
{
"path": ".github/workflows/deploy-book.yml",
"chars": 1962,
"preview": "name: Build and Deploy Jupyter Book\n\non:\n push:\n branches:\n - main\n workflow_dispatch:\n\npermissions:\n content"
},
{
"path": ".gitignore",
"chars": 3113,
"preview": "# Build files\n_build/*\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n"
},
{
"path": ".python-version",
"chars": 5,
"preview": "3.12\n"
},
{
"path": "CITATION.cff",
"chars": 310,
"preview": "cff-version: 1.0.0\nmessage: \"If you use this material in your work, please cite it as below.\"\nauthors:\n - family-names:"
},
{
"path": "CONTRIBUTING.md",
"chars": 2042,
"preview": "# Contributing\n\nThis repository intentionally uses two environments with different audiences:\n\n- Users use [environment."
},
{
"path": "LICENSE",
"chars": 1078,
"preview": "MIT License\n\nCopyright (c) 2024 Filippo Maria Bianchi\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "README.md",
"chars": 12327,
"preview": "# Time Series Analysis with Python\n\n<div align=\"center\">\n <img src=\"https://raw.githubusercontent.com/FilippoMB/python"
},
{
"path": "_config.yml",
"chars": 1333,
"preview": "# Book settings\ntitle: Time series analysis with Python\nauthor: Filippo Maria Bianchi\nlogo: logo.png\n\n# # Define the nam"
},
{
"path": "_toc.yml",
"chars": 650,
"preview": "# Table of contents\n# Learn more at https://jupyterbook.org/customize/toc.html\n\nformat: jb-book\nroot: notebooks/00/intro"
},
{
"path": "environment.yml",
"chars": 629,
"preview": "# User notebook environment for the course.\nname: tsa-course\nchannels:\n - conda-forge\n - nodefaults\ndependencies:\n - "
},
{
"path": "notebooks/00/intro.md",
"chars": 7117,
"preview": "# Time series analysis with Python\n\n<script async defer src=\"https://buttons.github.io/buttons.js\"></script>\n\nWelcome to"
},
{
"path": "notebooks/00/knowledge_test.md",
"chars": 83045,
"preview": "# Knowledge test\n\n## Chapter 1\n\n**What is the primary purpose of time series analysis?**\n- A) To categorize different ty"
},
{
"path": "notebooks/00/resources.md",
"chars": 2797,
"preview": "# Resources and acknowledgments\n\nThe following resources served as inspiration and provided very useful content to write"
},
{
"path": "notebooks/01/introduction_to_time_series.ipynb",
"chars": 763458,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Introduction to time series analy"
},
{
"path": "notebooks/02/stationarity.ipynb",
"chars": 1105851,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "notebooks/03/smoothing.ipynb",
"chars": 823567,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "notebooks/04/ar-ma.ipynb",
"chars": 1498804,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"\"\n },\n \"tags"
},
{
"path": "notebooks/05/arma_arima_sarima.ipynb",
"chars": 3712308,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"3a9c10b5\",\n \"metadata\": {},\n \"source\": [\n \"# ARMA, ARIMA,"
},
{
"path": "notebooks/06/unit-root-hurst.ipynb",
"chars": 653057,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"f2631573\",\n \"metadata\": {},\n \"source\": [\n \"# Unit root te"
},
{
"path": "notebooks/07/kalman-filter.ipynb",
"chars": 476026,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Kalman filter\\n\",\n \"\\n\",\n \""
},
{
"path": "notebooks/08/signal-transforms-filters.ipynb",
"chars": 3616276,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Signal transforms and filters\\n\","
},
{
"path": "notebooks/09/prophet.ipynb",
"chars": 2540797,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"c03ed1c0\",\n \"metadata\": {},\n \"source\": [\n \"# Prophet\\n\",\n"
},
{
"path": "notebooks/10/nn-reservoir-computing.ipynb",
"chars": 1090099,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Neural networks and Reservoir Com"
},
{
"path": "notebooks/11/nonlinear-ts.ipynb",
"chars": 7788200,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Nonlinear time series analysis\\n\""
},
{
"path": "notebooks/12/classification-clustering.ipynb",
"chars": 2792029,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Time series classification and cl"
},
{
"path": "pyproject.toml",
"chars": 1493,
"preview": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"tsa-course\"\nversion = \"0.3."
},
{
"path": "scripts/sync_user_environment.py",
"chars": 6225,
"preview": "#!/usr/bin/env python3\n\nfrom __future__ import annotations\n\nimport argparse\nimport re\nimport sys\nfrom pathlib import Pat"
},
{
"path": "tsa_course/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tsa_course/lecture1.py",
"chars": 1190,
"preview": "import numpy as np\nfrom scipy.fft import fft\n\ndef fft_analysis(signal):\n \"\"\"\n Perform a Fourier analysis on a time"
},
{
"path": "tsa_course/lecture11.py",
"chars": 13644,
"preview": "import numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.integrate import solve_ivp\nfrom scipy.signal import find_p"
},
{
"path": "tsa_course/lecture2.py",
"chars": 789,
"preview": "import matplotlib.pyplot as plt\n\ndef run_sequence_plot(x, y, title, xlabel=\"Time\", ylabel=\"Values\", ax=None):\n \"\"\"\n "
},
{
"path": "tsa_course/lecture8.py",
"chars": 3298,
"preview": "import numpy as np\nimport matplotlib.pyplot as plt\n\ndef fourierPrediction(y, n_predict, n_harm = 5):\n \"\"\"\n Predict"
}
]
About this extraction
This page contains the full source code of the FilippoMB/python-time-series-handbook GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 33 files (25.8 MB), approximately 6.8M tokens, and a symbol index with 20 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.