Projects
Data science projects.
A selection of my work across credit risk, security, customer analytics, NLP and more, with code and notebooks on GitHub.
Featured projects
- Featured

Finance & credit risk
Credit risk: Lending Club default prediction
Default prediction on 2.2 million Lending Club loans issued 2007 to 2018, comparing logistic regression, decision trees, random forests and XGBoost.
Built around excluding post-outcome fields, such as recovery amounts, that inflate accuracy but don't exist at decision time.
- XGBoost
- Random forest
- Feature selection
- Featured

Security
Explainable network intrusion detection
Intrusion classification with SHAP attributions, deployed as a Streamlit app so analysts can see why traffic was flagged.
SHAP also used as a leakage diagnostic, since near-perfect scores on intrusion datasets often signal separable labels rather than a good model.
- SHAP
- Streamlit
- Random forest
- Featured

Customer & people analytics
Employee attrition prediction
Attrition modelling on 1,470 employee records and 35 features, comparing logistic regression, decision trees, random forests and gradient boosting.
Class imbalance handled with SMOTE, since roughly one in six employees left and accuracy alone would flatter a model that predicts everyone stays.
- Gradient boosting
- SMOTE
- scikit-learn
- Featured

Security
Insider threat detection in email
Text classification to surface threatening messages, using a voting ensemble of logistic regression, decision tree and random forest, benchmarked against a Keras neural network.
97.6% accuracy with the voting ensemble; SMOTE used because genuine threats are rare by definition.
- NLP
- Voting ensemble
- Keras
More projects.
Customer & people analytics
Telco customer churn
Churn prediction framed around retention economics, comparing four classifiers.
0.843 AUC.
- Classification
- Retention
Customer & people analytics
Customer churn app
A trained churn model served through a Flask web app.
- Flask
- Deployment
Finance & credit risk
Loan default ensemble
Testing whether a voting ensemble earns its complexity over its own components.
87% accuracy.
- Voting ensemble
- Classification
Finance & credit risk
Black–Scholes options pricing
Options pricing with the Black–Scholes formula.
- Quantitative finance
Security
Neural network intrusion detection
Neural network intrusion detection across paired exploratory and modelling notebooks.
89.6% accuracy.
- Neural network
- Keras
NLP & text
Misinformation detector
A Flask app that classifies news text as reliable or misinformation.
- NLP
- Flask
Computer vision
Fruit quality classifier
A convolutional neural network classifying fresh and rotten fruit, deployed with Flask.
93.9% validation accuracy.
- CNN
- Flask
Recommender systems
Film recommender system
Collaborative filtering on MovieLens with fuzzy title search, served via Flask.
RMSE 0.9994.
- Collaborative filtering
- Flask
Regression & forecasting
Network bandwidth allocation
Predicting bandwidth demand, where a negative linear R² shows why an ensemble is needed.
R² 0.875.
- Regression
- Ensembles
Regression & forecasting
Concrete strength prediction
Regression modelling to predict concrete strength.
- Regression
Reinforcement learning
Gridworld Q-learning
Tabular Q-learning implemented from the Bellman equation, without an RL framework.
- Q-learning
- From scratch
Tools
Developer utilities
Six standalone tools: Flask apps, a MongoDB vs MySQL benchmark, and browser utilities.
- Flask
- SQL
- JavaScript
No other projects in this area. The featured ones are above.