mick@portfolio:~/$ whoami

SOFTWARE ENGINEER

Michael McCallion — MSc Artificial Intelligence (Distinction). I build machine learning pipelines, data-driven applications, and clean full-stack projects.

Python C# SQL Machine Learning Flask scikit-learn PyTorch pandas Git Azure NumPy Full-Stack REST APIs Data Engineering NLP Classification Python C# SQL Machine Learning Flask scikit-learn PyTorch pandas Git Azure NumPy Full-Stack REST APIs Data Engineering NLP Classification

Skills

// core competencies — hover to pause the marquee above

Python90%
Machine Learning85%
C# / .NET80%
SQL82%
Flask / Full-Stack75%
Data Engineering78%
PyTorch / scikit-learn80%
Git / Azure / DevOps75%

Dissertation Project

// MSc research — biometric identification via breath data

breathprint_research.py — MSc AI Dissertation

Human Breathprints as Biometric Identifiers

Assessing Uniqueness and Reliability — investigated whether human "breathprints" can act as a reliable biometric identifier using machine learning on volatile organic compound (VOC) breath data.

MSc Artificial Intelligence Machine Learning VOCs / Breath Analysis Feature Selection + Classification

Research question

Can VOC patterns in exhaled breath uniquely and reliably identify an individual despite natural variability caused by diet, health, environment, and time?

  • Assess uniqueness via patterns across individuals
  • Reduce high-dimensional VOC data into informative components
  • Prevent overfitting given limited samples
  • Evaluate classification performance using standard metrics

Dataset & constraints

Breath samples from 11 subjects collected across multiple days. VOCs measured using SESI-MS / Q-TOF mass spectrometry.

  • High dimensionality: many VOC features
  • Small sample size: risk of overfitting
  • Variability: VOCs fluctuate over time

Pipeline (Iteration 1)

Goal: reduce dimensionality early, then select features.

  • StandardScaler → PCA → LDA
  • Lasso / Ridge / ElasticNet feature selection
  • Classifiers: Logistic Regression, SVM, Random Forest

Pipeline (Iteration 2)

Goal: test whether ordering matters (feature selection first).

  • StandardScaler → Lasso / Ridge / ElasticNet
  • LDA after selection (maximise class separability)
  • Same classifiers: Logistic Regression, SVM, Random Forest

KEY FINDING: ordering matters

Changing the sequence of dimensionality reduction and feature selection significantly affects classification outcomes. Iteration 2 (feature selection → LDA) produced a major improvement in Logistic Regression performance.

Iteration 1 — Results

ModelAccuracyF1
Logistic Regression25.64%24.46%
SVM30.77%33.03%
Random Forest33.33%32.01%

Best accuracy: Random Forest (~33%) — problem is hard under this pipeline.

Iteration 2 — Results

ModelAccuracyF1
Logistic Regression56.41%55.99%
SVM41.03%44.74%
Random Forest38.46%32.01%

Logistic Regression improves dramatically — feature space shape matters more than classifier choice.

What the results suggest

  • Promise: Breathprints contain identifying information
  • Hard problem: High-dimensional signals + temporal variability
  • Representation matters: Better feature space unlocks stronger results

Limitations & future work

  • Scale: Larger labelled datasets needed
  • Stability: Evaluate across longer time windows
  • Methods: Non-linear reduction, stronger ensembles
  • Validation: Test on unseen cohorts / external datasets

Other Projects

// MSc modules — practical ML demos and interactive experiments

qlearning_agent.py — Reinforcement Learning Demo

Q-Learning Gridworld Agent

Deep Learning Module Reinforcement Learning Q-Learning Epsilon-Greedy

Model-free reinforcement learning agent that learns an optimal policy in a 5×5 gridworld with obstacles. Balances exploration vs exploitation using an epsilon-greedy strategy, improving over episodes.

What it demonstrates

  • Discrete state/action RL with a Q-table
  • Reward shaping (goal reward + step penalty)
  • Learning progression visible through shorter paths

Try it live

Interactive demo — train the agent and watch it navigate the grid in real time.

snall_chatbot.py — AI Portfolio Assistant

SNALL — Portfolio AI Chatbot

OpenAI GPT Flask RAG / Knowledge Base Full-Stack

Built and deployed this portfolio site with an embedded AI assistant that answers questions about my experience, projects, and dissertation. Uses a custom knowledge base (CV + dissertation text) to give contextual, accurate responses. Supports English and Irish.

How it works

  • Flask backend serving the full portfolio UI
  • OpenAI GPT with custom system prompt + RAG knowledge base
  • Deployed to Render — live at mickmccallion.com

Try it

Hit the chat bubble in the bottom-right corner — ask it anything about me.

About Me

// software engineer · MSc AI graduate · based in Sydney

about_michael.txt

Software Engineer with experience building and supporting reliability-critical software in a regulated manufacturing environment at Abbott Diabetes Care. Worked mainly across C# and SQL, developing internal applications used on the factory floor, troubleshooting production issues, and improving system reliability through clean, maintainable code.

Recently completed an MSc in Artificial Intelligence (Distinction), focused on applied machine learning and evaluation. Dissertation explored whether human "breathprints" can be used as a non-invasive biometric identifier using VOC data.

Outside of code: fishing, guitar, harmonica, and always tinkering with something new.

  • ✦ Software Engineering: C# / SQL / Python
  • ✦ AI/ML: feature engineering, model evaluation, classification
  • ✦ Full-stack: Flask, REST APIs, deployed web projects
  • ✦ End-to-end ownership: build → test → deploy
  • ✦ MSc AI (Distinction) — University of Galway

Contact

// roles, projects, collaborations — fire me a message

Get in touch

Best reached via email — I typically reply within a day. Always happy to chat about roles, projects, or collaborations.

[ Email Me ]