C:\My Documents\Professional_Log

About the Professional Log


Welcome to my Professional Log, the academic and technical side of this site. Here you will find my CV, my master's thesis, the projects I have built and a collection of written work.

In a hurry? The recruiter view has the essentials on one plain page, with no animations and the CV in English and Spanish.

Try it here. Most projects have a small demo that runs on this page: open the Command Prompt from the desktop or the start menu, or press ▶ on a project card. Each demo computes in your browser and then checks itself against the numbers the project's own Python code produced. For the breaks, Minesweeper and Jewels live in the start menu.

Note: this space is reserved for my professional and academic work. If you are looking for something more personal or relaxed, such as the blog where I will write about recent scientific papers, technology and other topics outside my thesis, head back to the main portal and select the Personal Hub.

About Me


Hello, and welcome to my professional log. My name is Luis A. Quiroz, and I am a data-science-driven physicist with a Master's degree in Astrophysics from UNAM's Institutes of Astronomy and Physics. I specialise in theoretical cosmology, numerical simulation, data visualisation and the application of computational methods to complex problems in mathematical physics.

My master's thesis, completed in 2026, is Effective Equation of State and Gravitational Particle Production in Inflationary Models, supervised by Dr Marcos A. García García. I wrote modular Python code to simulate the dynamics of the inflaton and spectator fields during reheating. For non-physicists, that means studying the energy fields of the early Universe that would become fundamental particles, and which could explain modern puzzles such as dark matter (DM) or the ongoing expansion of space itself.

Beyond theoretical cosmology, my academic and professional path draws heavily on data science (DS), machine learning (ML) and artificial intelligence (AI). I took Dr Jose Antonio Vazquez Mata's course on neural networks as an undergraduate at UNAM's Faculty of Science, I am revisiting Dr Mehryar Mohri's Foundations of Machine Learning course from New York University (NYU), and I completed Dr Zico Kolter's Introduction to Modern AI at Carnegie Mellon University (CMU), where I built a small language model from scratch.

I apply these skills in industry too. As an AI trainer I contribute to human-in-the-loop pipelines, write high-quality annotations for natural language processing (NLP) tasks and evaluate large language model (LLM) outputs for reinforcement learning from human feedback (RLHF). I have also turned the same rigour into software quality assurance: test design, API testing and regression suites, which the QA & engineering track documents.

Clear scientific communication and interdisciplinary research are central to how I work. Over the years I have built a strong foundation in academic and analytical writing, with award-winning essays (Concursos Interpreparatorianos, 2017 to 2019) in both physics and the humanities, such as Natural and Artificial Satellites and Why Study Philosophy Today? I love a good research project!

Finally, as a polyglot with English, German, Italian and Portuguese, I am used to collaborating across international and multidisciplinary teams. Whether I am modelling financial workflows, training language models or simulating the early Universe, my goal is always to use computational tools to extract meaningful insight from complex systems.

If you do not already have a copy of my CV, here it is:

Hope you have a wonderful day/night/whatever! And as John Lennon said at the end of the Beatles' rooftop concert, I hope we passed the audition!

Master's Thesis


Effective Equation of State and Gravitational Particle Production in Inflationary Models

Supervisor: Dr Marcos A. García García

Institution: Institute of Physics, UNAM

Completed: 2026

The thesis characterises the relic abundance of a dark matter candidate produced exclusively through gravitational interaction during the transition between cosmic inflation and reheating. In particular, we study the dynamical behaviour of a spectator scalar field decoupled from the inflaton sector, analysing how the coherent oscillations of the inflationary background modulate the spacetime metric and induce non-thermal particle production.

What the work covers

  1. Exploration of T-model potentials: the first stage evaluated inflationary dynamics with T-model potentials in detail, taking recent literature as the formal reference framework (particularly the analytical formalism in arXiv:2502.20471). The slow-roll conditions and the end of inflation were derived for these potentials. The programming work focused on the dynamics of the inflaton:
    • The evolution of the inflaton during inflation and its transition to the oscillation phase (reheating) was studied for a T-model and several values of k, verifying that the resulting densities follow the theoretical scaling (~ a-6k/(k+2)).
    • The end of inflation (φend) from direct numerical evolution was compared with the analytical predictions of the slow-roll approximation.

    The Colab notebook with these results: view on Google Colab.

  2. Transition to the quartic regime (n = 4): based on arXiv:2206.08940, the thesis turns to the analytical and numerical study of the pure quartic regime (n = 4) for inflaton oscillations. This regime is of particular interest because the average equation of state during the oscillation phase mimics a radiation fluid (⟨w⟩ = 1/3), which fundamentally changes the Hubble rate H(a) and, with it, the instantaneous rates of gravitational particle production of the spectator field.
  3. A precise, modular numerical code: a modular Python environment solves the coupled Friedmann and Klein-Gordon equations simultaneously. It computes the time evolution of the scale factor a(t), the inflaton field φ(t) and the energy densities without explicit couplings.

    The notebook below shows the zero-coupling implementation, the base case of the study.

    View the zero-coupling notebook

Projects


Data & analytics. Pipelines, statistics and dashboards that turn raw records into a decision: cleaning with lineage, KPIs that survive scrutiny and inference with its assumptions stated.

Retail delivery diagnostics: an end-to-end case Live

PythonpandasSQLStar schemaChart.jsStatistics

Diagnosis of a department-store delivery network, from 62,420 raw shipment records to an executive dashboard. The monthly report said 95.7% of deliveries were on time and in full, yet management felt deliveries were getting slower. The analysis shows where and why.

  • Cleaning with lineage: 62,420 raw records reduced to 59,615 shipments, with every exclusion logged.
  • Stores compared with their own zone through Wilson intervals, so only 1 of 61 stores is flagged as significantly worse.
  • The worst-stores ranking turned out to be a carrier effect, visible only after conditioning on zone.

EMA/MACD signal toolkit Live

PythonpandasExcelpytestBitso and Binance APIs

Moving averages, MACD(12, 26, 9) and RSI implemented from first principles for a finance diploma, then extended into a batch run over 35 equities listed on the Mexican Stock Exchange and a bitcoin cost comparison across Mexican platforms.

  • Cross-validated against a 3,815-formula Excel model to within 5 × 10⁻¹³, recalculated in CI on every push.
  • Bitcoin with pesos: live Bitso and Binance order books against Mercado Pago, measured from the prices its app shows. Buying and selling at once costs 0.27% on Binance and 3.98% on Mercado Pago.
  • Crossovers are judged against noise: on a random walk MACD crosses its signal every 12.3 periods, and 22 of the 35 tickers cross at least that often.
  • 82 unit tests on properties derived by hand, such as MACD equal to 7 × slope on a linear trend, all offline.
Daily price, EMA 12 and EMA 26 for FEMSA with the MACD panel and a summary panel, 2 October 2026 Round-trip cost of bitcoin per platform on 14 October 2026: Binance 0.27%, Bitso limit order 1.20%, Bitso market order 1.59% and Mercado Pago 3.98%, of which 1.035% is its spread

Milky Way structure: Gaia DR3 × APOGEE-2 DR17 Live

Pythonpandasastropyscikit-learnTOPCAT

Spatial and kinematic characterisation of the Milky Way's stellar populations, built by cross-matching Gaia DR3 astrometry with APOGEE-2 DR17 spectroscopy.

  • 682,284 sources reduced to 281,612 stars through documented cuts on signal-to-noise, astrometric fit, radial-velocity scatter and parallax.
  • Velocity ellipsoid tilted by a vertex deviation of about −26.6°, consistent with asymmetric drift.
  • DBSCAN partially recovers the Hercules moving group, and the rotation curve is flat beyond 8.5 kpc.
Stellar density map on the Galactocentric XY plane Vector field of mean radial and azimuthal velocities Moving groups found by DBSCAN in the UV velocity plane Galactic rotation curve between 6 and 12 kpc

Stellar classification and astrostatistics Live

RMaximum likelihoodAICHypothesis testing

Statistical characterisation of 240 stars from their temperature and spectral class: distribution fitting by maximum likelihood, model selection, normalisation and hypothesis tests across spectral classes.

  • A physically motivated Gamma model beats an Exponential fit by AIC (4,908.98 against 4,926.26).
  • Box-Cox failed to normalise the data and Ordered Quantile normalisation succeeded, which enabled inference.
  • 92% confidence intervals and t and F tests across 15 pairs of spectral classes.
Exponential model against the theoretical Gamma model for stellar temperatures Temperature distributions after a Box-Cox transformation Histograms before and after Ordered Quantile normalisation Table of 92% confidence intervals for differences in means between spectral classes

AI & LLMs. Machine learning and language models, from a transformer built from scratch to an LLM pipeline that runs unattended on a laptop.

Lecture notes pipeline with agentic RAG Live

Pythonfaster-whisperClaude CodeAnthropic APIChromaDBffmpeg

Turns four-hour class recordings into structured Obsidian notes with no manual steps, then answers questions about past classes citing the class and the minute: local transcription on the CPU, notes written by Claude Code in headless mode and an agent over hybrid retrieval.

  • Fits in 8 GB of RAM: silence-aligned ten-minute chunks cut peak audio memory from more than 6 GB to about 0.7 GB on a two-hour recording.
  • Hybrid retrieval over notes and transcripts, with multilingual embeddings and Spanish BM25 merged by Reciprocal Rank Fusion. The agent answers only with real citations or says the notes do not cover it.
  • Whatever Claude adds stays visibly separate from what was said in class, and mistakes not corrected in class are flagged.
  • 88 tests with no network access: a fake Whisper model, a fake claude executable, the real Anthropic SDK over a fake transport and a real Chroma database.
lecture.mp4 → Whisper (CPU, int8) → transcript [P2 00:12:30] → claude -p → note + concept pages + index

Reward hacking on GSM8K: two small model organisms Live

PythonPyTorchTransformersPEFT (LoRA)Colab

SFT, DPO and GRPO written from scratch in PyTorch with Claude Code, then used to study what a 0.5B language model learns when its RL grader has a loophole: one grader also pays the answer the user suggested, the other pays any final line that contains the right number.

  • A grader that also pays the answer the user suggested drove copying of wrong suggestions from 7% to 97% of training samples. The habit carried over to unseen phrasings (64%) and to SVAMP problems (62%).
  • In 89% of the copies the reasoning itself arrives at the user's number, usually through a false equation, which a consistency monitor cannot see. Penalising what that monitor flags cut flagged copies from 10.8% to 1.8% while copying stayed at 96%.
  • Hedging grew only modestly under a lenient grader that pays answers such as 24 or 72: the model's hedges contained the right answer less often than its single answers were right (39% against 48% during training).
  • Ten hypotheses were written before any GPU run, and each loophole run has a control that differs only in the grader. Every log is in the repository, so all the numbers can be rebuilt on a CPU.
Qwen2.5-0.5B → SFT → DPO → GRPO (strict | biased grader)   ·   SFT with seeded hedges → GRPO (strict | lenient grader)
Six panels of training curves for the strict, biased and monitored runs of the sycophancy experiment Three panels describing the reasoning of training answers that copied the wrong hint Six panels of training curves for the strict and lenient runs of the hedging experiment Bar chart of GSM8K test accuracy after each training stage, with 95% intervals

Small language model from scratch Live

PythonPyTorchNumPy

Every component of a small language model, implemented and then trained, for Carnegie Mellon University's Introduction to Modern AI (online, January to April 2026).

  • An autodiff engine, a BPE tokenizer and the Adam optimiser written from first principles.
  • A decoder-only transformer with masked multi-head attention, a KV cache, RMSNorm and a gated MLP, trained on TinyStories.
  • Fine-tuned with supervised fine-tuning, DPO and reinforcement learning for reasoning on GSM8K.

The code stays private under the course's academic integrity policy. Its post-training part is rebuilt in the open in the reward-hacking project.

Galaxy morphology with convolutional networks Live

PythonTensorFlow / Kerasscikit-learnTransfer learning

Binary classification of 5,608 MaNGA galaxy images into early types and late types, from a baseline CNN to transfer learning, with the class imbalance handled explicitly.

  • Baseline CNN: 81.0% test accuracy, held back by a recall of only 0.68 on late types.
  • A deeper CNN reached 86.3% test accuracy and raised late-type recall to 0.77.
  • InceptionV3 transfer learning reached 85.9% with balanced recall of 0.86 on both classes.
Nine galaxy images the CNN misclassified, with true and predicted labels Confusion matrix of the InceptionV3 transfer-learning model Training and validation accuracy and loss across epochs

QA & engineering. Testing as the main deliverable: requirements reviewed for testability, risk-based test design, API and database testing, and regression suites that run on every push.

Incentive compensation API: a QA case study Live

PostmanNewmanpytestPostgreSQLFastAPIGitHub Actions

A full QA cycle on a sales-commission REST API, the kind of calculation that sales performance management software automates: split credit, clawbacks on returns, a 50% gate, tiered accelerators and a cap.

  • 92 risk-based test cases traced to the requirements, and 8 defects found in the first build, 2 of them critical.
  • A parallel run against an independent Excel model measured 6,566.74 MXN overpaid by the first build and 750 of 750 payouts correct after the fixes.
  • One critical defect only appeared on PostgreSQL, because SQLite does not enforce foreign keys by default. CI now tests on PostgreSQL.
Regression console: build rc1 passes 30 of 92 test cases and overpays 6,566.74 MXN, build rc2 passes 92 of 92 and matches all 750 payouts

Vigía: operational stability monitoring Live

JavaSpring BootFlaskDjangoPostgreSQLMongoDBDocker

A small polyglot platform that ingests request telemetry, reports service-level objectives and detects anomalies: Spring Boot ingestion, a Flask analytics API, a Django back office, PostgreSQL and MongoDB.

  • 1.4 million simulated requests over ten days with three injected incidents, all three detected and nothing else.
  • A Monte Carlo calibration over 40 runs cut false alarms from 18 to 1 without missing an incident.
  • 69 automated tests, run in GitHub Actions together with the calibration.
Vigía stability overview: availability, p95 latency and error budget per application, with open incidents below

MACD signal API Live

FastAPIpandaspytestPostmanNewmanGitHub Actions

The EMA/MACD toolkit served as a REST API and tested from the outside: pytest against pandas and hand calculations, plus a Postman collection that Newman runs in CI.

  • Its tests found a defect shared with the toolkit: rounding noise of about 10⁻¹⁵ on flat or linear prices reported as crossovers.
  • Release 1.0.0 passes 28 of 28 pytest results and 59 of 59 Newman assertions.

Physics & simulation. Numerical physics from my degrees: solvers checked against conserved quantities and analytical limits, including the code of my master's thesis.

Inflation and reheating solver (MSc thesis) Live

PythonSciPyODE integrationCosmology

Modular solver for the coupled Friedmann and Klein-Gordon equations, tracking the scale factor, the inflaton and the energy densities from inflation into reheating. It covers T-model potentials and the pure quartic regime, and checks numerical results against slow-roll predictions.

  • Energy densities for T-model potentials follow the expected scaling with the scale factor, a^(−6k/(k+2)).
  • The numerical end of inflation is compared with the analytical slow-roll prediction.

Astrophysical jet simulation Live

PythonNumPyMacCormack schemeFinite differences

Two-dimensional hydrodynamic simulation of an astrophysical jet, built up from advection and 1D Euler solvers, comparing adiabatic and radiatively cooled runs from a single configuration file.

  • 400 × 150 cells over a 4,000 × 1,500 AU domain, run for 100 years with a MacCormack scheme and CFL = 0.1.
  • Neutral or ionised mean molecular weight, switched at 10⁴ K.
  • With radiative cooling the bow shock is narrower and the jet more compact.
Adiabatic jet at 52 years: density, pressure, temperature and velocity Adiabatic jet at 100 years: density, pressure, temperature and velocity Radiatively cooled jet at 52 years: density, pressure, temperature and velocity Radiatively cooled jet at 100 years: density, pressure, temperature and velocity

The Bar Strikes Back: galactic bar dynamics Live

PythonNumPyRKN4 integratorTest particles

How a dynamically cold stellar disc responds to the smooth growth of a galactic bar, with 10,000 test particles in a composite, collisionless potential.

  • Fourth-order Runge-Kutta-Nyström integration, with a time step chosen by measurement: the energy error of a circular orbit stays below 10⁻¹³.
  • Every particle gains energy as the bar grows, and total energy rises by 120%.
  • The gain grows monotonically with initial radius.
Six snapshots of a stellar disc deforming as the bar grows Final against initial specific energy of the test particles Energy gain against initial radius

Written Work


Reports and presentations from my projects, each next to the code it describes. Most were submitted in Spanish.

The thesis code lives in its Colab notebook.

Languages


I work in Spanish and English every day and keep three more languages going.

  • Spanish: native
  • English: C2
  • Italian: B2. Il mio primo racconto in podcast, an essay and podcast production that won first place in the ENP Interpreparatory Contests, 2019
  • German: B1
  • Portuguese: B1
> ready_ wallpaper: TBackEv.py ↗
--:--