Projects
Things I've built. More on the way.
Titanic Survival Prediction
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.
DVD Rental Duration Prediction
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.
Clustering Antarctic Penguin Species
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.
Automated AWS ETL Pipeline
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.