The short version
Amar Merabti, data scientist
- Education
- MSc in Data, Knowledge and Intelligence, Université Paris Cité — ranked 1st in my class (16/20). BSc in Computer Science and first year of an MSc in Intelligent Computer Systems at USTHB, Algiers.
- Experience
- Nricher (2026, 6 months): verifying product attributes with textual inference and TabPFN, 0.925 balanced accuracy. ENAGEO, Sonatrach group (2023–2024): internship then a one-year fixed-term contract on well logs treated as time series (LSTM): imputation (MAE 12.7) and cross-well prediction, correlation raised from 0.52 to 0.82.
- Projects
- A 36.3M-parameter language model trained from scratch for Kabyle; a benchmark of open-source LLMs; agents that learn football through self-play.
- Tools
- Python, PyTorch, Transformers, scikit-learn · Kafka, Spark, MongoDB, SQL · Java, C/C++
- Languages
- French and English (fluent), Arabic (proficient), Kabyle (native)
Amar Merabti
Data scientist — language models, NLP, imperfect data
In industry, I have worked on data nobody had prepared for me. At Nricher, I designed an automatic check for product attributes that validates 68% of values at 99% precision. At ENAGEO, part of the Sonatrach group, I reconstructed missing well measurements with LSTMs, from one well to the next. And to understand language models from the inside, I trained one from scratch for Kabyle, my native language.
Ten experiments
Each project starts from a question. I write down what I did, what I measured, and what did not work: that is often where I learned the most.
-
Exp. 01
Can you train a language model for a language with almost no data?
All available written Kabyle amounts to about 40 million tokens, partly locked in PDFs typeset with pre-Unicode fonts. I wrote the decoder for those fonts, built a 120-million-character corpus, then pretrained a Llama-style Transformer before fine-tuning it on chat messages.
What did not workMy first model (43M parameters for 1M tokens) memorized its corpus: training loss 1.33, validation loss 6.21. It was about 800 times too large for its data.
1.977bits per character on validation after pretraining and fine-tuning, versus 2.046 without pretraining
-
Exp. 02
How do you verify a value extracted from a product page when the client's catalog is unreliable?
Each attribute/value pair becomes a hypothesis, checked sentence by sentence against the product description with textual inference (mDeBERTa-v3). These scores, together with BGE-M3 embeddings, feed TabPFN. The benchmark covers 4 production catalogs: 35 attributes, 30,919 rows and 5,635 paired runs, with a reference built without manual annotation.
What the ablation showedRemoving the 4 inference scores costs 8.9 points; removing the 50 embedding components costs only 1.9 (Wilcoxon test). What matters is how the text representation is oriented, not how rich it is.
Read the experiment →code owned by Nricher, not published68%of values validated automatically, at 99% precision0.925balanced accuracy, versus 0.808 for the inference rule alone and 0.898 for TabSTAR, 28 times more expensive -
Exp. 03
What can agents learn when you give them no rules at all?
I wrote a 2D football engine in NumPy (FIFA proportions, possession, tackles, collisions) and trained a single PPO policy that plays both sides: two players spawn anywhere on the pitch and try to score, with no game rule coded inside the agent. 36 million steps in 48 minutes, on a laptop without a GPU. In parallel, a quadruped simulated with pymunk learns to walk to a flag with Stable-Baselines3.
What did not workPotential-based shaping, the safest form in theory, gives no signal when every match ends: 1% wins. An AlphaStar-style opponent pool loses to mirror self-play. And my first evaluations, on 12 matches from a fixed kick-off, were in fact measuring a single repeated match. The quadruped, for its part, never reaches its target among obstacles (0/20).
73%wins against a scripted player, over 500 matches, against 19% losses
Quadruped: 20/20 targets reached on flat ground, 16/20 on uneven terrain -
Exp. 04
To fill gaps in a time series, does deep learning beat a classical method?
Electricity meters from 3,127 households, 12,864 readings each, 30 to 50% of values masked. We compared a nearest neighbor, an LSTM autoencoder, a partial-convolution U-Net, a self-supervised Transformer and an STL decomposition rewritten in PyTorch to run on GPU.
AnswerNot here. STL wins in both scenarios, including on 1,098 unseen households: trend and seasonality are exactly the structure of this data, and the deep models had to be scaled down to fit on 4 GPUs.
0.262MAE for GPU STL, versus 0.327 for the best deep model (U-Net)
-
Exp. 05
How good are three 7-billion-parameter open-source LLMs at maths, common sense and code?
LLaMA 2, Mistral and distilled DeepSeek-R1, served with Ollama on 4 L4 GPUs: GSM8K 8-shot, HellaSwag and HumanEval 0-shot, with generated code executed in a sandbox and Python error types analyzed.
NuanceDeepSeek-R1 dominates coding, but its long reasoning makes it about 100 times slower, and it gave a usable answer to only 258 maths questions out of 500. Mistral offers the best trade-off between accuracy and latency.
128/164HumanEval problems solved by DeepSeek-R1 (78.0%), versus 52 for Mistral and 15 for LLaMA 2
-
Exp. 06
Can you reconstruct a well measurement where it is missing, and predict it in another well?
Along a borehole, rock properties such as elasticity or density are measured at regular depth intervals. These series have gaps (faulty equipment, lost data) and the measurements are expensive. As an intern, I tested classical models from one well to another and delivered a Java Swing application to geophysicists. On the fixed-term contract, I treated these series as time series, with LSTMs and RNNs: first to fill the gaps within a well, then to predict the same property in another well.
What did not workDuring the internship, linear regression (r = 0.15) and SVM (0.29) did not generalize from one well to another. And even at 0.82 with LSTMs, the predictions were not yet good enough for the company to use: I left the project in development when I moved to France.
0.52 → 0.82cross-well correlation, from internship (MLP) to contract (LSTM), with MAE down from 21.4 to 15.812.7MAE when filling the gaps of a series within the same well (RMSE 15.2) -
Exp. 07
When a human can only annotate two hundred examples, which ones should they get?
Five selection strategies compared at a fixed budget, on two datasets and two classifiers: twenty independent draws per strategy, paired comparisons and a Wilcoxon test. The sandbox on the page puts you in the annotator's seat.
NuanceEntropy, the most taught strategy, does worse than random sampling at the start: 0.687 against 0.799 at fifty labels. And on an easy binary problem every strategy converges — active learning only pays off on hard tasks.
99 %of the final accuracy reached with 16% of the labels, against 96% for random sampling of the same size
-
Exp. 08
Can you open a Transformer and show, head by head, how it gets there?
A 105,000-parameter model — two layers, two heads — trained in 2.3 minutes on a laptop to find in its context what it should write next, then dissected: each head ablated, its attention signature measured, its contribution quantified. The model runs in the page, with a switch per head.
What did not workMy first version of the task kept a fixed motif length: a single-layer model solved it at 100% by plain offset, and my negative control controlled nothing. With a random period it falls back to 40%.
24.7%of the copying left when the single “previous token” head is ablated — 99.5% before, 5.5% if the induction layer goes too
-
Exp. 09
How do you know whether an anomaly detector actually works?
Twenty days of server metrics, 38 sensors, 9.5% labelled anomalies. A 27,000-parameter convolutional autoencoder against three baselines — one of them a random score — evaluated under both protocols used in the field. The detector runs in the page: draw a signal and watch it react.
What it changesMeasured honestly, point by point, the autoencoder gains twenty F1 points over the best simple baseline (0.741 against 0.543). The standard protocol cannot show it: it gives almost the same mark to everyone.
0,963F1 obtained by a random detector under the field's most widely used evaluation protocol — better than the autoencoder
-
Exp. 10
How far can a language model be shrunk for a low-resource language?
KabyLLM-nano: 1.6 million parameters, quantised to 8 bits, 2.07 MB in total — the model writes Kabyle in the page, at eight milliseconds per token, with no server and no connection. Tokenizer trained on the language, quantisation cost measured.
What it is worth1.84 bits per character on validation after 20,000 steps, against 2.09 after 4,200 — and the curve was still falling. At this size the model learns spelling and morphology, not knowledge — and the page says so.
2 048vocabulary entries are enough to segment Kabyle as finely as NLLB-200, which has 256,204
My path, drawn as a well log
My first models predicted well logs. Here is my path drawn the same way: depth is time, and the columns show what I learned and where.
Curves: how intensively I used each field, my own estimate. Patterns: education; orange bands: companies.
Text version of the path
- 2020Baccalaureate in experimental sciences, with honors (Algeria).
- 2020 – 2023BSc in Computer Science, USTHB (Algiers). First games in C with SDL, a library management system in C (year 2), the Aqessar Android chat app, a Flex/Bison compiler, information extraction with Unitex.
- Feb – Jun 2023Machine learning internship at ENAGEO (Sonatrach group): bachelor's thesis on predicting geomechanical parameters.
- 2023 – 2024First year of an MSc in Intelligent Computer Systems, USTHB, alongside a part-time AI developer contract at ENAGEO: well logs treated as time series with LSTMs, imputation and cross-well prediction (correlation raised to 0.82).
- 2024 – 2025MSc year 1 in Data, Knowledge and Intelligence, Université Paris Cité: LLM benchmark, time series imputation, argumentation solver.
- 2025 – 2026MSc year 2 (DCI), ranked 1st in my class (16/20): data quality, streaming, temporal extraction. Data scientist internship at Nricher (Feb – Aug 2026), KabyLLM and RL agents.
- Oct 2026Next step: a CIFRE PhD or a permanent data scientist role.
The workshop
The other projects, from my first games in C to data pipelines. All of them are on GitHub, with a README (in French).
Try two of these projects in the browser →a neural network to tune into a XOR, a debate to settle
-
2026
Kotlin · WebRTC · Firebase · Node.js Code ↗
Siwel
Group audio and video calls between phones, including behind restrictive mobile networks, thanks to a self-hosted TURN server.
-
2026
LightGBM · XGBoost · CatBoost · PyTorch Code ↗
Fishing activity forecasting
shipd.ai challenge: predicting a vessel's fishing hours 1, 2 and 3 days ahead, on 480,192 rows.
-
2025–2026
Kafka · PySpark · MongoDB · Streamlit Code ↗
Real-time e-commerce recommendations
Events replayed through Kafka, recommendations recomputed after each action, and their relevance measured live.
-
2025–2026
pandas · GeoPandas · ydata-profiling Code ↗
NYC Taxi data quality
Measure, then repair: completeness, accuracy, consistency and uniqueness, weighted by use case; GPS coordinates rebuilt with the haversine formula.
-
2025
BERT · HeidelTime · Java Code ↗
Temporal expression extraction
HeidelTime versus BERT on historical, medical and tweet corpora: BERT reaches 95.5% F1 on tweets (relaxed match), far from its original domain.
-
2024–2025
Keras · Spark ML · MySQL Code ↗
Sentiment on 1.6 million tweets
A first version in Keras (LSTM), rebuilt a year later with Spark ML and a MySQL database.
-
2025
Python · Tkinter Try it →Code ↗
Neural network visualizer
Build a network with the mouse, set weights and biases, and watch the forward pass neuron by neuron.
-
2024–2025
Python Try it →Code ↗
Abstract argumentation solver
Complete and stable extensions of a Dung argumentation framework, with credulous and skeptical acceptance.
-
2024–2025
Flask · SQLAlchemy · Bootstrap Code ↗
WatchBid
An auction site for collectible watches: accounts, filterable catalog, listings and bids.
-
2024
Java · Swing Code ↗
Multiple knapsack
Depth-first, breadth-first, A*, a genetic algorithm and bee swarm optimization, compared in a Java interface.
-
2023
C · Flex · Bison Code ↗
MiniPy compiler
Lexical and syntax analysis of a Python-like language, symbol table and quadruple generation.
-
2022–2023
Unitex · Python Code ↗
Drugs and dosages with Unitex
A dictionary built from the Vidal drug database, enriched from context, then rule graphs that spot doses, frequencies and durations.
-
2022
Java · Firebase Code ↗
Aqessar
An Android chat app with an interface in Kabyle: accounts, invitations, real-time conversations.
-
2022–2023
Java · Processing Code ↗
Processing sketches
Snake, minesweeper, pool, the game of life, Langton's ant and fractals.
-
2021–2022
C · linked lists · queues Code ↗
Library management system
Books, students, loans and penalties, with premium and standard waiting queues written by hand on linked lists.
-
2021
C++ · SDL 1.2 Code ↗
SDL mini-games
My first graphical programs, self-taught: a shoot 'em up, a snake, pong and mini-golf.
What I'm looking for
From October 2026, two paths interest me equally.
A CIFRE PhD
A CIFRE PhD is a three-year doctorate carried out jointly by a company and an academic lab in France. I am looking for a topic where the data itself is the problem: scarce, noisy, incomplete or unreliable. Language models and NLP, tabular, medical or biological data, physics, chemistry: the field matters less to me than the scientific question and its value for the company.
- A first taste of research in industry: my MSc thesis at Nricher worked on 4 production catalogs.
- Rigorous protocols: references without manual annotation, ablations, paired tests, calibration.
- The habit of implementing things myself, from a Transformer to a simulation engine.
A permanent data scientist role
I want to join a team that builds models people actually use, and that measures what they are worth before deploying them.
- End-to-end pipelines: ingestion with Kafka and Spark, modeling, evaluation, application.
- Two industry experiences with measured results: ENAGEO (0.52 → 0.82) and Nricher (68% automated at 99% precision).
- Hands-on experience with LLMs, from fine-tuning to benchmarking.
Azul — hello, in Kabyle.
Kabyle is my native language, and very few digital tools understand it. That is where KabyLLM and Aqessar come from; my very first programs, though, were games in C that I wrote on my own in 2021.
I did my bachelor's degree and the first year of a master's at USTHB, in Algiers, while working for ENAGEO. I then joined Université Paris Cité for the DCI master's, which I finished ranked first in my class.
Away from models: football, music and photography. The photos on this site are mine.
- Languages
- Kabyle (native)
French, English (fluent)
Arabic (proficient) - Everyday tools
- Python, PyTorch, Transformers
scikit-learn, pandas
Kafka, Spark, MongoDB, SQL
Java, C/C++, LaTeX - Online
- github.com/MerabtiAmar
LinkedIn



A PhD topic, a role, a question about a project?
merabtiamar91@gmail.com- CV for PhD applicationsEN · PDF
- CV for data scientist rolesEN · PDF
- CV thèse CIFREFR · PDF
- CV data scientistFR · PDF