I build applied machine learning and agent systems, and I keep the evaluation attached to them. That second half is the part I actually care about: a model reaching a number is easy, and knowing whether the number means anything is the work. Every repository here reports what failed next to what worked — my thesis opens with the finding that its own LLM contributed nothing, and it is a better piece of work for it.
Development of a Multi-Agent Portfolio Management System Using LLMs University of Thessaly, ECE · July 2026 · supervised by Georgios Thanos
A LangGraph orchestration layer sitting on top of deterministic quantitative tooling. Three specialised agents — data gathering, quantitative analysis, and risk & context — feed a Chief Investment Officer orchestrator that assembles the portfolio. Evaluated across 13 sequential backtest phases over 21 years of US market history, with survivorship bias removed through point-in-time index constituents.
The headline finding is a negative one, and the thesis leads with it: on an already-filtered, already-ranked candidate set, the LLM contributed no selection alpha. Removing it improved both strategies, and the damage scaled with call frequency — the opposite of what a component that adds value does. Establishing that across 13 phases, rather than asserting it, taught me more than a positive result would have.
AI Developer at Agrobox (part-time) — built a retrieval-augmented assistant that answers user questions over company data, and now building a custom AI agent on Google's Agent Development Kit over a FastAPI backend: tool integration, memory logic, file-upload handling, and structured multi-step interaction flows. Also ran the model-selection stage for a Greek voice-entry feature — see the speech-to-text benchmark below.
Smart support ticket triage — LLM-assisted labelling of a support-ticket corpus against a hand-built taxonomy, on the way to a small fine-tuned classifier behind a served endpoint. Still in development, so the repository is private for now.
Greek speech-to-text for voice entry — which model should ship, decided with data instead of a hunch. Three STT models on a Greek agricultural test set, scored on Word Error Rate and real-time factor after normalisation. Domain vocabulary turned out to be the whole ballgame: every model handles plain words, and the gap opens on product names and terms like «ουρία».
Technical-indicator evaluation — five feature-selection methods feeding a recurrent classifier across fourteen large-cap equities, with next-bar execution and realistic costs. Also where I caught an indicator that was leaking eleven days of future data and had topped every feature ranking in the first pass, then traced it with a lag test.
Deep learning for price forecasting — linear, tree and recurrent models (Random Forest, SVR, XGBoost, LSTM, GRU, RNN) across eight cryptocurrencies and three horizons, wrapped in a Streamlit interface, with the extrapolation failure of tree models on trending series documented rather than quietly dropped.
Clustering and classification at scale — K-Means, connectivity-constrained hierarchical clustering and DBSCAN against three classifiers on 100,000 airline passenger records. The interesting part is not the 94.8%; it is why no unsupervised method finds the boundary that supervised learning finds easily.
Recommender systems — item–item collaborative filtering against Neural Collaborative Filtering on a book-ratings corpus, including the unit artefact that made the neural model look 36× better than it was until the two scales were reconciled.
Languages
Machine learning & LLMs
Applications & tooling
Agent systems that can be trusted about what they do. The discipline is the part worth keeping: chronological splits, held-out windows, a benchmark you are allowed to lose to, and a written record of what did not work. Plenty of people can get a model to a number — I would rather be the one who can tell you whether the number means anything.
LinkedIn · Greece