This repository contains the project submission for the Introduction to Machine Learning course within the Digital Science for High-Tech program (Department of Engineering) at Tel Aviv University (Spring 2026). The project applies the CRISP-DM methodology to predict the probability that a B2B course registration will be cancelled (Dropped_Course) prior to the course start date. The official guidelines and grading criteria are detailed in the project instructions.
- Interactive Presentations
- Interactive Notebook (HTML) – Full exploratory analysis, validation diagnostics, and model tuning.
- HTML Overview (No Code) – High-level summary of findings and output figures.
- Markdown Notebook Export – Static markdown version.
- Code & Scripts
- Jupyter Notebook (ipynb) – Submitted notebook file (and the Marimo script version).
- Inference Pipeline (pipeline.py) – Production script replicating the final predictions.
The prediction task is structured as a future-window forecasting problem. The dataset represents historical course bookings, where the validation and test sets are chronologically separated from the training data.
- Categorical Normalization: Consolidated 2,670 raw categorical levels (containing typographic variations, casing noise, and special characters) into 201 clean levels.
- Validation Strategy: Used adversarial validation to identify temporal and distribution drift between the training and test sets (adversarial AUC of 0.935). Consequently, a chronological split (training on 2015-2016, validating on 2017) was used instead of random cross-validation.
- Feature Engineering: Formulated domain-specific indicators including cancellation histories (
prev_drop_rate), lab assignment matches (got_requested_lab), group composition features, and linear time indices (days_since_epoch). High-cardinality identifiers (Agent, Country, Company) were represented using frequency encoding. - Model Blend: Evaluated Logistic Regression (AUC 0.881), Multi-Layer Perceptron (AUC 0.877), and gradient boosted tree architectures. The final pipeline implements a rank-average ensemble of XGBoost, LightGBM, and CatBoost (validation AUC of 0.9159, Average Precision of 0.897).
- Submission Details: The current scored submission achieves a pre-submission test AUC score of 0.889314.
- submission - Files submitted for grading:
- Group_27_Notebook.ipynb - Jupyter notebook containing EDA, training, and evaluation.
- Group_27_Submission.csv - Pre-submission prediction CSV.
- submission-report.md - Project report (written in Hebrew).
- Train_Data.csv and Test_Data_No_Target.csv - Source datasets.
- docs - Documentation and interactive views:
- index.html - Landing page for GitHub Pages.
- notebook.html - Interactive notebook export.
- overview.html - HTML overview containing prose and figures without code blocks.
- notebook.md - Markdown copy of the notebook.
- versions - Archived iterations and previous pipeline/notebook versions (
v1,v2,v3,ron_version). - pipeline.py - Script containing the inference pipeline.
- pyproject.toml and uv.lock - Python dependencies managed via
uv. - References - Original assignments, instructions, and course materials.
The project requires Python 3.13 and uses uv for dependency management.
Sync the dependencies and build the virtual environment:
uv syncMarimo version:
uv run marimo edit notebook.pyJupyter version:
uv run --with jupyter jupyter notebook notebook.ipynbTo run a dry-run check of the pipeline without writing predictions:
uv run python pipeline.pyTo run the pipeline and output a prediction file:
uv run python pipeline.py --write --out data/tmp_submission.csv