Projects

Things I've built. More on the way.

Jun 2026

Titanic Survival Prediction

View on GitHub

My first Kaggle machine learning project. Built a full classification pipeline to predict Titanic passenger survival, comparing five models before selecting a tuned Gradient Boosting classifier. Achieved a Kaggle score of 0.78. Feature importance analysis using logistic regression coefficients confirmed that sex, cabin deck, and port of embarkation were the strongest predictors -- consistent with the historical record.

Pythonscikit-learnClassificationGradient BoostingRandom ForestFeature EngineeringKaggle
Jun 2026

DVD Rental Duration Prediction

View on GitHub

Built a regression pipeline for a DVD rental company to predict how many days a customer would keep a rental, supporting inventory planning. Applied Lasso with cross-validated alpha tuning to reduce a wide feature set to three predictors, then trained and tuned five models. All tuned tree-based models beat the MSE target of 3, with the Decision Tree, Bagging Regressor, and Random Forest each achieving MSE 2.50.

Pythonscikit-learnLassoDecision TreeRandom ForestGradient BoostingFeature EngineeringRegression
May 2026

Clustering Antarctic Penguin Species

View on GitHub

Applied unsupervised machine learning to recover species labels for Antarctic penguin observations where no ground-truth labels were recorded. Used t-SNE dimensionality reduction to visualise the data, revealing ~6 clusters driven by both species and sex variation. Applied the elbow method to confirm k=3 as the optimal cluster count, then fitted K-Means to assign each observation to one of three species — Adelie, Chinstrap, or Gentoo. Validated results with coloured t-SNE plots split by sex, confirming consistent species separation across both male and female penguins.

Pythonscikit-learnK-Meanst-SNEpandasmatplotlibUnsupervised LearningData Visualisation
Sep 2024

Automated AWS ETL Pipeline

View on GitHub

Designed and built a fully automated, end-to-end data engineering pipeline on AWS to ingest, transform, and serve data from a simulated operational database into a cloud-based data warehouse. The pipeline uses scheduled Lambda functions to incrementally extract data from a relational source, storing immutable snapshots in a structured S3 data lake. A transformation layer remodels raw data into a star schema optimised for analytics, outputting Parquet files for efficient querying. A loading process keeps the warehouse updated within 30-minute windows. Built with 90%+ test coverage, CI/CD via GitHub Actions, and security scanning throughout.

PythonAWSS3LambdaCloudWatchEventBridgeSQLStar SchemaParquetCI/CDGitHub Actions