// Data Science & Data Analysis Portfolio

Alejandro Belda Fernández

Junior Data Scientist & Data Analyst · Python · SQL · Machine Learning

A collection of my data science and analytics projects — the code, the results, and what I learned along the way.

// About

Background

Computer Science graduate from the University of Murcia with a Master's degree in Artificial Intelligence. I spent one year working as a researcher (PDI), handling complex biological datasets, managing Linux server infrastructure, and collaborating in academic research environments. This gave me a strong foundation in data quality, methodological rigour, and working with real-world data. I am now transitioning into industry roles in data science and data analysis.

I enjoy the full pipeline: understanding the business problem, cleaning and transforming messy data, exploring it with the right questions, building models that actually work in context, and communicating results clearly. I care about honest evaluation, documented decisions, and conclusions that non-technical stakeholders can act on.

Status
Unemployed
Seeking
Data Scientist / Data Analyst
Education
Computer Engineering and Master's in Artificial Intelligence — University of Murcia
Prior experience
More than 1 year as a researcher (PDI)
Languages
Spanish (native) · English (B2)
Contact
alejandrobeldafernandez@gmail.com

// Skills

Working stack

Machine Learning

Pythonscikit-learnPandas MatplotlibSeaborn

MLOps & Deployment

DockerFastAPIGit MLflowLinuxPrefect AWSAzure

Databases & Tools

SQLPyPI BI ToolsSpreadsheets

// Top Projects

Five entries that summarise the range of work

Pipeline · LLM

Automated News Report Generator

Scraping, orchestration, local LLM summarization and self-hosted deployment, verified against the real service at every step.

Recommender Systems

Movie Recommendation System

Three recommender approaches compared and explained rather than blended into one black-box ranking.

MLOps · Production

MLOps Telco Customer Churn

Full production lifecycle: tracking, orchestration, drift monitoring, automated retraining and a deployed API.

SQL · BI

Coffee Shop Sales Analysis

12 business questions answered entirely in SQL, from cleaning to a dashboard and a data storytelling presentation.

NLP · RAG

Amazon Reviews Spanish

Sentiment classification and a RAG system on the same corpus, with a formal A/B comparison between a baseline and a fine-tuned transformer.

// Open Source

Published independently

PyPI

calm-data-generator

Python library for synthetic tabular data generation, developed during my time as a researcher. It wraps several generation backends behind a single unified interface, simulates concept drift to test how models degrade, and produces an automated data quality report for every dataset generated.


// Full Log

All ten projects, entry by entry

LOG · 01 Madrid Traffic Accident Injury Prediction ROC AUC 0.873
+
Type
Classification
Stack
Python · pandas · scikit-learn · CatBoost · Optuna · SHAP
Dataset
Madrid City Council open data (2019–2023)

Predicts whether a traffic accident in Madrid will result in at least one injured person, using information available at the time it is reported. Covers person-to-accident aggregation, feature engineering, Optuna tuning and SHAP explainability.

Results (CatBoost): ROC AUC 0.873 · Balanced Accuracy 0.801 · Macro F1 0.73

In practice

Out of every 10 accidents predicted as involving injuries, 8 to 9 are correct. The remaining errors are mostly false alarms rather than missed injuries — the safer type of mistake in an emergency context.

LOG · 02 Madrid Real Estate Price Prediction R² 0.897
+
Type
Regression
Stack
Python · pandas · scikit-learn · XGBoost · Optuna · SHAP
Dataset
Kaggle — Madrid residential property listings

Predicts the sale price of residential properties in Madrid from physical characteristics and location. Includes TargetEncoder for district encoding, Optuna tuning, bootstrap confidence intervals and SHAP explainability.

Results (XGBoost): RMSE €69,568 · R² 0.897 · MAPE 15.27%

In practice

On average, the predicted price is within 15% of the actual sale price. Built area and district amplify each other: a large flat in Chamberí is worth disproportionately more than an equally large flat in Vallecas.

LOG · 03 Customer Personality Analysis Silhouette 0.24
+
Type
Unsupervised Clustering
Stack
Python · pandas · scikit-learn · umap-learn
Dataset
Kaggle — Customer Personality Analysis

Segments customers into 3 profiles based on demographic, spending and campaign response data. Includes outlier detection, PCA, K-Means with Elbow/Silhouette selection and UMAP visualisation.

Results (K-Means K=3 + PCA): Silhouette Score 0.24 · 3 segments identified

In practice

Premium customers spend €1,274 on average without needing discounts. Deal Seekers buy 3.4x more with promotions — that's where discount budgets have the highest ROI. Applying the same campaign to all three is the worst allocation of marketing spend.

LOG · 04 MLOps Telco Customer Churn ROC-AUC 0.84
+
Type
MLOps Pipeline · Binary Classification
Stack
scikit-learn · Optuna · MLflow · Prefect · FastAPI · Evidently AI · Docker · Terraform
Dataset
Kaggle — IBM Telco Customer Churn

Full production lifecycle: data validation, Optuna tuning (150 trials), MLflow tracking, Prefect orchestration, drift monitoring, automated retraining and a FastAPI REST endpoint.

Results (Random Forest + Optuna): ROC-AUC 0.84 · Balanced Accuracy 0.76 · Recall (churn) 0.76

In practice

The model correctly identifies 76% of customers who will cancel before they do. The real value is the infrastructure: the pipeline retrains automatically only when more than 40% of features drift, and only promotes a new model if it beats the current one.

LOG · 05 Store Sales Forecasting RMSLE 0.381
+
Type
Time Series Forecasting · Panel Data Regression
Stack
pandas · statsmodels · linearmodels · LightGBM · XGBoost · Optuna · SHAP
Dataset
Kaggle — Corporación Favorita (Ecuador)

End-to-end forecasting on a 3-million-row retail panel (1,782 store × product-family series over 4.5 years). Includes classical time series diagnostics, a PanelOLS baseline and gradient-boosting models with custom time-series cross-validation.

Results (XGBoost + Optuna): RMSLE 0.381 · R² 0.977 · ~28% better than the naive baseline

In practice

Predictions are driven mostly by recent sales momentum. The one high-impact lever the business actually controls is promotions, so the model doubles as a scenario simulator before a single dollar is spent.

LOG · 06 Coffee Shop Sales Analysis SQL · 12 questions
+
Type
EDA · Business Intelligence
Stack
PostgreSQL · Google Sheets · Metabase · Google Slides
Dataset
Maven Analytics — Coffee Shop Sales (NYC)

Sales analysis of a fictitious three-location coffee shop chain in NYC. SQL cleaning, 12 business questions answered entirely in SQL, a Metabase dashboard and a data storytelling presentation.

Key findings: revenue nearly doubled from January to June. Coffee and Tea drive 66% of revenue. Only 11 product types generate 80% of revenue (Pareto rule).

In practice

An owner can use this to decide which products to promote, optimise staff shifts around peak hours, and design campaigns for the weakest months.

LOG · 07 Amazon Reviews Spanish Macro F1 0.765
+
Type
NLP · Deep Learning · Retrieval
Stack
PyTorch · Hugging Face Transformers · ChromaDB
Dataset
Amazon Reviews Multi — Spanish subset (208,899 reviews)

A sentiment classifier (TF-IDF baseline vs. fine-tuned BETO) and a RAG system that answers questions about the corpus, citing real reviews. Formal A/B comparison with McNemar, bootstrap and cost-per-prediction analysis.

Results: BETO reaches 0.765 macro F1 vs. 0.725 for the baseline (p = 1.3e-12), but costs 1,009× more per prediction.

In practice

The classifier says how many customers are unhappy and where; the RAG system says why. Labelling the full index takes 10 seconds with the baseline vs. 2.8 hours with BETO — cost decides the architecture.

LOG · 08 Movie Recommendation System Precision@5 42.4%
+
Type
Recommender Systems · Matrix Factorization
Stack
pandas · scikit-learn · Surprise (SVD) · Gradio
Dataset
The Movies Dataset — 7,818 movies, ~100,000 ratings

Three systems compared on the same catalog: content-based, item-based collaborative filtering, and SVD. Evaluated with Precision@5/Recall@5, documenting cold start and coverage rather than blending them into one ranking.

Results: collaborative filtering wins by 7-8x, but only covers 43% of the catalog with enough rating history.

In practice

The three models are complements, not competitors. A real product needs all three, plus an explicit fallback for the 57% of the catalog collaborative and SVD cannot reach.

LOG · 09 Fashion Product Images Classification Accuracy 99%
+
Type
Computer Vision · Transfer Learning · Grad-CAM
Stack
PyTorch · torchvision · Grad-CAM
Dataset
Fashion Product Images — 43,946 products

EfficientNetB0 and ResNet50 compared on the same classification task, interpreted with Grad-CAM instead of left as a black box. 3 of 7 original categories were dropped for insufficient data.

Results: ResNet50 beats EfficientNetB0 on every class and metric (99% vs. 97% accuracy).

In practice

Accessories and Apparel account for 63% of all errors: Grad-CAM shows the model's attention locks onto the accessory instead of the labeled garment — a specific, understood failure mode, not random noise.

LOG · 10 Automated News Report Generator Self-hosted
+
Type
Web Scraping · Orchestration · Local LLM
Stack
Playwright · Prefect · SQLite · Qwen2.5 · Docker · Tailscale Funnel
Source
RTVE Google News sitemap

End-to-end pipeline verified against the real service at every step, not its documentation. The planned deployment target (Hugging Face Spaces) turned out not to be viable, so the project ended up self-hosted via Docker + Tailscale Funnel.

Result: a working daily report with a source citation on every entry.

In practice

The dashboard is only reachable while the self-hosted machine is on, not 24/7 — the honest trade-off of a genuinely free deployment.

EXTRA Cloud: Serverless ML Inference on AWS & Azure Serverless
+
Type
Cloud Deployment · Serverless Architecture
Stack
AWS S3 · Lambda · API Gateway · Azure Blob Storage · Azure Functions
Dataset
Iris (AWS) · Diabetes (Azure) — minimal case studies

Two small, self-contained projects demonstrating practical skills on both clouds: models served via a public HTTP endpoint, with no server to manage. The focus is the architecture and the real issues solved along the way (IAM permissions, package limits, region restrictions).