Nader Mohamed, Data Scientist & AI Engineer

Every fact on this site, in one document, with the source of every figure printed beside it.

Home

I train models and put them where the user already is.

One of them reads 171 hieroglyph signs at 98.2% [the project's own README, checked 2026-08-28], inside a phone browser, with no photo leaving the device.

Sources, checked 2026-08-28:

  • content/identity.md
  • content/projects/wadjet.md

Work

Ten projects, in three groups. Each group makes a claim you can check against every project underneath it.

Models that leave the notebook. Trained, then put somewhere a person can open.

Wadjet

An Egyptian heritage platform where the AI runs inside your browser

Point a phone at a hieroglyphic inscription and Wadjet reads the signs back to you. The interesting part is not the reading. It is that the models do not run on the server.

I trained three classifiers, exported them to ONNX, and ran them client-side through ONNX Runtime Web. Three things follow. The photo never leaves the device, which is a real property for somebody standing in a museum rather than a line of marketing. Inference costs the server nothing, so the app survives on a free tier instead of falling over. And it keeps working on a bad connection, because the model is already cached.

The hieroglyph classifier reports 98.2% [the project's own README, checked 2026-08-28] across 171 Gardiner sign classes. The landmark classifier reports 93.8% across 52 Egyptian sites. Both figures come from the repo's own README. The test set composition is not published there, so read them as reported model accuracy, not as a benchmark result.

Before this, there was Horus AI

The first version got to ~80% [the Horus AI README, checked 2026-08-28], up from 50%. What moved it was not a bigger model.

The Sphinx was being classified under the pyramid complex, because the two classes were not meaningfully distinct in the data. Merging confusing classes, balancing the rest, and checking labels by hand did the work. The taxonomy was wrong before the model was.

Wadjet is what I built once I knew that.

What this does not do.

Open the live version: https://nadercr7-wadjet-v2.hf.space

Sources, checked 2026-08-28:

  • content/projects/wadjet.md

Incident Forecasting Pipeline

Predicting where incidents happen next, across 129 sites

A transportation company needed to know how many operational incidents each of its locations would see in the coming year, so it could move from reacting toward preventing. I built the pipeline that produces those forecasts.

The best thing in it is a feature I deleted. Several same-year features correlated above 99% [the public repo, checked 2026-08-28] with the target. Left in, the model would have scored beautifully and forecast nothing. Catching your own leakage is worth more than any accuracy figure, because the alternative is a number that flatters everyone until it is used.

The current model reaches R² 0.8684 [the public repo and the internal deliverable log, which agree, checked 2026-08-28] across 129 [the public repo, checked 2026-08-28] locations and 20,000+ records, with a mean absolute error of 21.32 and 66% less error than a naive mean baseline. I engineered 56 candidate features and kept 20, ranked by importance averaged across two ensembles rather than trusted from one. The target is log-transformed, because incident counts are right-skewed. The split is strictly temporal, with no random cross-validation. That scores worse, and it is the only correct choice for time-ordered data.

Interaction features moved R² from roughly 0.78 to 0.87. Feature engineering mattered more than model complexity.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/incident-forecasting.md

Cerebral Stroke Prediction

Logistic regression with the gradient descent written by hand

There is a custom logistic regression class in this project instead of an import, with the gradient descent written out as a loop. A scikit-learn KNN model sits next to it as a baseline, so the hand-written one has something to be measured against.

Class imbalance is handled by random over- and under-sampling. Both models are scored on accuracy, precision, recall, and F1, rather than on accuracy alone, which on an imbalanced medical dataset would be close to meaningless. The final classifier is wrapped in a small desktop window so somebody who does not write code can enter the features and read a risk score.

The point is not the score. The point is that the mathematics was typed out once, by hand, before it was ever imported.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/stroke-prediction.md

Systems that stop. Every one of these knows a condition under which it refuses to continue.

Grounded RAG PDF Q&A

A retrieval system built to say "I don't know" and proven to do it

Upload PDFs, ask questions, get answers that cite the document and the page they came from. Ask something the documents do not answer and it returns one exact sentence:

I couldn't find this in the documents.

That refusal is the product. Anyone can wire an embedding model to a language model. Making the thing shut up when it should is the engineering.

Three gates do it. A best-chunk relevance score below 0.55 [the project's own README, checked 2026-08-28] returns the refusal without calling the model at all, which is deterministic, free, and unit-tested with a stub that fails the test if the model is ever invoked. A grounded prompt tells the model that a source mentioning a topic is not a source answering the question. And a normalizer rewrites any refusal-shaped reply to the exact contract string, because models drift.

Citations cannot be faked either. Retrieved chunks arrive numbered with their document and page, and the markers are mapped back afterwards. Out-of-range markers get discarded, so the model cannot invent a source it was never shown.

The golden set passes 17/17 [the project's own README, checked 2026-08-28], and 15 more tests run offline with no API key. The case worth quoting asks about stock options. The documents do discuss 401(k) vesting, so related content comes back. It still refuses.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/rag-pdf-qa.md

workflow-doc-agent

An agent that documents production workflows, built before the call and used to win it

An AI consulting engagement was looking for exactly this:

Have an agent look at a folder of production work (a Python file and an Excel report), summarize the purpose of the code, ask a few questions on frequency of the workflow, and then auto-build the documentation for it.

Rather than write a proposal about how I would build it, I built it. Then I took the call with it running. I got the work.

It reads the folder without executing anything: AST for the Python, sampled sheets and headers for the workbook, so no whole file is ever dumped into a prompt. A cheap model writes the summary and asks three to five clarifying questions about schedule and ownership. A stronger model writes the final runbook. Each stage is validated against a schema before the next one starts.

Two decisions matter more than the rest. Both model providers sit behind one interface with identical schemas and an identical loop, so switching is one environment variable. And a cost tracker stops the run at a hard budget ceiling instead of spending past it. Anyone who has handed an autonomous loop an API key knows why the second one is there.

It ships with 9 [the project's own README, checked 2026-08-28] tests, a capability eval, a regression eval, and a sample holding 24 months of synthetic data.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/workflow-doc-agent.md

Multi-agent reporting pipeline (client work, anonymized)

Eleven stages, ten QA specialists, and a queue that runs overnight

A consultancy client, via Upwork. The pipeline takes a tabular dataset and a written brief, and produces a finished, standards-compliant Excel deliverable along with its own handoff documentation. It runs on demand, or unattended overnight, with a filesystem watcher draining a queue one job at a time.

Most multi-agent projects are three prompts in a loop. This one knows how to stop.

There are 11 [the delivered build, read directly, checked 2026-08-28] stages. A quality stage dispatches 10 specialist checks across two groups, and a critical failure blocks shipping. On failure the run loops back to the build stage and tries again, up to 3 attempts, then finalizes as failed rather than pretending. An architect stage picks between a cached path for recurring report shapes and a custom build for anything else. The standards checklist the quality agents apply is also a standalone validator that can audit any completed run on its own, so verification does not depend on the agent being honest about its own work.

The same contract produced a Python automation driving Excel through COM. 312 [the delivered build, read directly, checked 2026-08-28] tests pass against a hostile external process that leaks and hangs. Getting there needs a session-scoped safety net that kills orphaned processes, so one failed test cannot poison the next.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/client-multi-agent-pipeline.md

Second opinions. Each one measures the same thing twice, because one measurement is not evidence.

Paired time-series synchrony analysis

Two ways of measuring the same thing, so neither one has to be trusted alone

A delivered research contract. Two simultaneous multi-channel recordings of the same event, and one question: do the two signals move together.

I answered it twice. Cross-correlation and dynamic time warping share no assumptions. One looks for a shifted linear match, the other for the cheapest alignment path. Running both and then testing whether they converge is the difference between a result and a claim. Most analysis stops after the first method.

The scale was 7,991 [the delivered notebooks and their saved outputs, checked 2026-08-28] paired computations over 714,474 samples per channel set, sampled at 7.81 Hz, bandpassed from 0.01 to 0.1 Hz with a fourth-order zero-phase Butterworth filter, then read through a 30-second rolling window.

The delivery is the part I would show first. The first version was one notebook of 119 [the delivered notebooks and their saved outputs, checked 2026-08-28] cells. It ran, and it was the wrong shape for the person receiving it. So it became four notebooks that each open cold, run alone, and hand the next one a saved array rather than a live kernel. Every code cell is preceded by an explanation of the reasoning rather than the syntax. The client was a researcher, not an engineer, and a deliverable they cannot open is not a deliverable.

It shipped with an explicit list of what the analysis could not resolve. They had not asked for that section.

The research is unpublished, so no finding appears here.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/fnirs-timeseries-research.md

Sentiment Alignment, Amazon reviews against BERT

Star ratings and review text measure different things, and the gap is the finding

Most sentiment projects stop at classifying the review. This one runs a pre-trained multilingual BERT sentiment model across Amazon reviews, then compares what the model reads against the star rating the person actually gave, sorting the result into four alignment categories.

The gap is the finding. A three-star review often carries positive text: good product, not great. A five-star review is often flatly neutral: it works. Stars and text measure different things, and quantifying where they part company is more interesting than either number on its own.

To be precise about what this is: inference on a pre-trained model, not fine-tuning.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/sentiment-alignment.md

Student Success Analytics

The students at risk were the ones whose grades looked fine

Student demographics, academic records, engagement with the learning platform, and risk labels, read with SQL and Excel against five intervention questions.

Low attendance combined with low forum activity predicted risk better than GPA alone. The segment worth naming is the one a GPA threshold never flags: high grades, zero engagement. On paper those students look fine. That is the whole finding, and it is the kind that only shows up when you measure the second thing as well as the obvious one.

It is analysis rather than machine learning, and it should not be described as anything else.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/student-success-analytics.md

T2D Adipose Tissue Research

Which genes matter is a question about the network, not the gene

Differentially expressed genes in Type 2 Diabetes adipose tissue, drawn from public GEO datasets, analysed with GEO2R alongside custom R and Python, then run through STRING for protein-protein interactions and read in Cytoscape.

Expression level answers which genes changed. Network topology answers which of those changes matter, and the two answers are not the same list. The hub genes here come out of how many edges meet at a node, not out of how far the expression moved.

It is the only work here in R, and the only work here from wet science. There is no public artifact for it, and this page does not imply one.

What this does not do.

Sources, checked 2026-08-28:

  • content/projects/t2d-adipose-research.md

About

I live in Desouq, a town in Kafr El Sheikh, up in the Nile Delta. Cairo time, GMT+2.

I am reading for a BSc in Artificial Intelligence at Kafr El Sheikh University. I started in September 2023 and expect to finish in July 2027.

Most of my work is the unglamorous half of machine learning. Cleaning data. Engineering features. Checking whether a number means what it looks like it means. Then getting the result somewhere a person can open it.

Wadjet is the clearest example. I trained three image classifiers, exported them to ONNX, and ran them client-side through ONNX Runtime Web. The photo never leaves the phone, and inference costs the server nothing, so it survives on a free tier. A model trained in a Delta town ends up running inside a browser somewhere else. That is the part of this I find worth doing.

I went through the DEPI Data Science track from 2024 to 2025, led the cohort team, and finished with Best Project and Best Member. The following summer I did two internships, one at the National Telecommunication Institute and one at Egypt's Ministry of Communications and Information Technology.

Since July 2025 I have been a Data Science intern at Zetta Global, forecasting operational incidents across 129 [the public incident-prediction repo, checked 2026-08-28] locations. Real data behaves differently from a downloaded dataset. It grows, the distribution shifts underneath the model, and the honest number goes down rather than up.

Since October 2025 I have been Head of Programming at IEEE Kafr El Sheikh, where I plan the curriculum and teach the Python sessions. Before that I ran the C++ track. I have competed in IEEEXtreme, the 24-hour global programming competition.

I freelance as well. Three completed contracts, two of them rated 5.0 [Upwork profile, read directly, checked 2026-08-28].

What I am aiming at is production systems rather than research. I graduate in July 2027.

Sources, checked 2026-08-28:

  • content/identity.md
  • content/cv.md

Now

Building
Extending the Zetta forecasting pipeline into driver risk scoring and segmentation, reading from and writing to a PostgreSQL warehouse. Also building this site.
Learning
Nothing new to report this month.
Available for
Data science and AI engineering roles, and freelance work.

Updated 2026-08-28.

Sources, checked 2026-08-28:

  • content/identity.md
  • content/projects/incident-forecasting.md

Contact

Write to me at the address below. There is no form, because a form can break quietly and an address cannot.

Sources, checked 2026-08-28:

  • content/identity.md
  • content/online-presence.md