Things you can check yourself
Every underlined claim on this page links to the artifact that proves it.
Services
Five practices. The first three are where most engagements start.
Typical engagement: you have a RAG or agent system in production and no idea if last week's prompt change made it better or worse. I give you a scored eval suite, a dashboard, and a release gate. Two to four weeks.
Typical engagement: your RAG answers are plausible but wrong, or your agent loops. I audit retrieval quality separately from generation quality, fix the layer that is actually failing, and leave you the eval suite that proves it.
Typical engagement: you need AI in an environment with real constraints (health data, air-gapped, intermittent connectivity, a regulator). I design the architecture and the compliance story together, because retrofitting the second onto the first never works.
Where a model output drives a decision that costs something to get wrong, I make the uncertainty explicit and calibrated.
Typical engagement: your model is accurate enough on average and still makes expensive mistakes, because nothing downstream knows which predictions to distrust. I add the uncertainty layer and tune the decision rule against your actual cost of error.
Typical engagement: you have transaction data and a commercial question (what should we stock, what will it sell, which customers are worth defending) and no analytical layer between the two. I build it, and I make it rerunnable next quarter rather than a one-off deck.
Selected work
Platform engineering at organizational scale, then commercial analytics, then shipping product where the environment fights back, then the statistical foundations underneath all of it.
Platform and production AI
Checking how worn an aircraft brake heat sink is normally means sending someone to inspect it on the ground. We replaced the inspection with an estimate: read the temperature sensors during the parking phase after landing, measure how long the brake takes to cool, and infer wear from that.
The difficulty is that cooling time is not a clean signal. Ambient temperature, wind, and the conditions on that particular apron all move it, so the same brake in the same condition looks different in Dubai and in Oslo. The method therefore models the environment explicitly, using XGBoost regression to predict how those conditions shift the expected cooling time, and reads wear from what the environment cannot explain. The result is per-aircraft, per-brake monitoring across an entire fleet, continuously, with nobody going out to look.
Filed by Safran with three named inventors, including me. French priority August 2024, PCT filing July 2025, published as WO2026032835A1 in February 2026. Unlike everything else here from Safran, this one you can read in full: a published patent is a public disclosure by definition, so the method, the modelling choice and the reasoning are all in the document.
This one generalizes well. Any workflow of the form "score many documents against one rubric, and be able to justify each score" is the same system.
The platform work I do at Safran and the African Development Bank sits behind NDAs. This is the same architecture, open, so you can read it before hiring me: github.com/sawallesalfo/DS-backbone
One docker compose up gives a team the full loop: JupyterLab for exploration, MLflow for experiment tracking and the model registry, PostgreSQL as MLflow's backing store, MinIO as S3-compatible artifact and dataset storage, and Nginx routing it all behind clean hostnames instead of a spread of localhost ports.
The point is what it removes. Most teams assemble these five pieces by hand, differently on every laptop, then spend the first month of a project debugging why an experiment that ran locally will not reproduce. Configuration is environment variables, storage is S3-compatible from day one, so moving from this sandbox to real cloud storage is a URL change and not a rewrite.
If you are hiring someone to set up your data or ML environment, this repo is the deliverable, and you can inspect it before we talk.
Commercial analytics
The most complete piece of work I can show end to end, because the report is public and so is the core algorithm.
ECCBC knew its own points of sale but knew almost nothing about the neighbourhoods they sat in. Every HORECA outlet in the channel received the same assortment, because there was no basis for giving them different ones. Pilot zones Marrakech and Tizi Ouzou. The chain runs: enrich the customer base with external spatial data, segment on it, model demand per product within each segment, then use those models to decide what goes in each fridge.
Insurance pricing is one of the few places where a model has to satisfy a regulator as well as a business. I migrated the pricing stack from traditional GLMs to machine learning without losing that: separate frequency and severity risk models meeting financial regulatory requirements, a big data migration to Azure with CI/CD integration, GDPR-compliant handling throughout, and continuous performance monitoring after release. Processing time fell 40 percent.
The interesting constraint is explainability. An actuary can defend a GLM coefficient to a supervisor. Replacing it with a gradient-boosted model means you now owe an account of why the price moved, which shapes what you are allowed to build.
Before joining, I won first place in AXA Direct's internal data science competition. Code is public, written in R.
Replaced keyword matching with BERT-based semantic embeddings, on top of NLP-based deduplication and normalization of a messy product catalogue.
Then measured it properly. Not a simultaneous A/B split: a gradual rollout over four weeks, which means randomization was imperfect and the naive before-and-after number could not be trusted. So the lift was estimated with causal inference. Causal Forest for heterogeneous treatment effects across user segments, Double Machine Learning to control for confounders, propensity score matching to correct the selection bias the rollout design introduced.
+29 percent user satisfaction, significant at p < 0.01, and defensible because the seasonal and behavioural drift was modelled out rather than assumed away. The number I would have reported without that layer was larger and partly fictional.
Built around seven questions a retailer actually asks: who are my best customers, who is about to leave, who could be worth more than they are, who is already gone, where does retention effort pay off, who is loyal, and who will respond to this campaign. Public repository.
It is organized as a pipeline (inputs, intermediates, then one folder per analysis) rather than a pile of notebooks, which is the difference between an analysis someone can rerun next quarter and one they cannot.
Products under constraint
A non-profit in Ouagadougou building speech and translation models for a language with almost no digital corpus.
Everything is public: huggingface.co/burkimbia and github.com/BurkimbIA
Multi-tenant platform connecting patients, clinicians and institutions, built for regions where specialist care means travelling and connectivity is not guaranteed.
Running the whole clinical assistant on the phone. Cloud transcription is the easy answer and the wrong one here: it needs a network the clinic may not have, and it sends patient speech to a third party. So I built the offline path and measured it. Whisper via whisper.rn for speech, a small language model via cactus-react-native for the clinical note draft, benchmarked on the phones clinicians actually carry (Tecno, Infinix, Samsung A-series) rather than a flagship: Whisper tiny against small, Gemma 270M against Qwen3 0.6B, on latency and quality. Models download once, then nothing leaves the device.
That work became a step-by-step guide to deploying an LLM on mobile, written for backend and data engineers who have never opened Android Studio.
Retail shops and wholesalers in Ouagadougou. The product is not a cash register, it is a decision assistant: margin, trend, what actually earns, what is sitting dead on the shelf. Analytics is the product.
Offline-first out of necessity: local SQLite is the source of truth, a sync engine watches connectivity and pushes queued sales in batches when the network returns. Multi-tenancy is enforced with Postgres row-level security rather than application code, so a query bug cannot leak one merchant's sales into another's.
The analytics layer is where the real work is, and three rules separate it from a dashboard:
While building it I audited a neighbouring prototype's inventory formulas and found the days-inventory-outstanding calculation was dividing a quantity by an amount in currency, using closing stock where its own comment specified average, and multiplying by the period after the division had already produced one. On a real case (350 F purchase price, 26 units average stock, 8 sold in 14 days) the prototype returned 0.16 days against a true 45.5. The error scaled with purchase price, so it was not even a constant offset. The dashboard had been showing plausible, meaningless numbers.
Testing is deliberately unfashionable here: 164 mobile tests run against a real SQLite engine, and 9 backend tests against a real Postgres. I refused jest-expo because its automatic mocks execute no SQL, so the suite would pass without proving anything.
Foundations
Monthly series from 2004. Stationarity testing (Augmented Dickey-Fuller), Johansen cointegration, VAR and VECM specification with information-criterion lag selection, Granger causality, impulse response functions, and forecast error variance decomposition at a 12-month horizon. Full residual diagnostics: Jarque-Bera p = 0.38, White p = 0.45, Portmanteau p = 0.91. Included a COVID-19 shock analysis on the price level. Slides public.
I list this because time series and causal identification keep coming back. Forecasting, anomaly detection, and any question of the form "did our change cause this" are the same toolkit.
Method
What gets optimized is a business metric computed on decisions and actions, not a score on a held-out set. A model that improves AUC while the decision threshold stays wrong has improved nothing. I start from the decision and the cost of getting it wrong, then work backwards to what the model needs to output, which is often an interval or an abstention rather than a number.
I will not tune a system that has no scoreboard. The first deliverable on most engagements is the measurement, because without it every subsequent change is a guess.
Most of my production experimentation has been canary deployments, shadow traffic and gradual rollout rather than full simultaneous randomized A/B tests. If you need the latter I can design it, but I will tell you where my hands-on experience ends and where I am reasoning from method.
No metric leaves you cautious. A confident wrong number gets acted on. When something cannot be computed honestly I say so in the interface rather than defaulting to zero and letting it average into a total, and I will do the unglamorous manual validation when that is what makes the downstream numbers defensible.
Mocks that never execute the query pass whether the query is right or wrong. If the logic lives in SQL, the test talks to a database.
Architecture decision records, runbooks, and README files a new engineer can follow. I read the existing code before proposing anything, and I match its conventions rather than importing mine.
Tooling
| Languages | Python (primary), R, SQL, SAS (certified), TypeScript |
| LLM and agents | LangChain, LangGraph, pydantic-ai, LiteLLM, MCP, Transformers, Unsloth, PEFT |
| Evaluation and observability | Langfuse, MLflow, Prometheus, Grafana, custom eval harnesses, NLTK, spaCy |
| ML and statistics | PyTorch, scikit-learn, TensorFlow, Spark, causal inference (DML, Causal Forest, propensity scores), uncertainty quantification (conformal prediction, CQR, MAPIE, bootstrap intervals), cost-sensitive threshold tuning, time series (VAR, VECM, cointegration, SARIMAX), Bayesian statistics, geostatistics |
| Serving and infrastructure | FastAPI, Docker, Kubernetes, AWS (EKS, SageMaker, Lambda, S3), Azure (Container Apps, AI Search, Databricks), Terraform, RunPod |
| On-device | whisper.rn, cactus-react-native, GGUF and INT4 quantization, Expo EAS, benchmarking on mid-range Android |
| Data | PostgreSQL, MySQL, pgvector, LanceDB, Azure AI Search, Redis, Airflow, SQLite |
| Frontend | Next.js, React, React Native, Gradio, Streamlit |
Public proof
I publish a technical article roughly every two weeks at blog.salifsawadogo.com, in French, since 2024. It is the closest thing to a code sample I can offer for NDA-bound work, because the patterns are the same ones I ship.
On evaluation
On RAG and agents
On architecture and delivery
Code and records
| WO2026032835A1 | Safran patent, aircraft brake wear monitoring. Named inventor. Published February 2026 |
| Credly | SAS Certified Specialist, Base Programming Using SAS 9.4 |
| Rapport-universitaire | The full 161-page Coca-Cola thesis and the inflation econometrics slides |
| Super-Matching-Algorithm | The entity matching engine from the Coca-Cola project |
| Mini_Kaggle_AXA | First-place solution, AXA Direct competition, in R |
| Machine_Learning_Journey | Clustering, LDA, CART, bagging, boosting, random forest, in R with R Markdown |
| DS-backbone | One-command data science environment: MLflow, MinIO, PostgreSQL, JupyterLab, Nginx |
| Retail-360 | RFM, customer lifetime value, survival-analysis churn, SARIMAX and gradient-boosted forecasting |
| Deployment_Data_Science_Project | The same model deployed five ways: local, server, API, cloud, Docker |
| huggingface.co/burkimbia | Eleven published models, three public leaderboards |
| claude-skills | Reusable agent skills for architecture diagrams and technical documentation |
| RH-360 · Recommandation-Engine | HR feature engineering, and visitor segmentation for e-commerce personalization |
| audio_processing_playground · Frame2Text4LLM | Speech and multimodal experiments feeding the BurkimbIA pipeline |
Background
If there is one thing I do across every project, it is asking whether a number is real before anyone acts on it. That looks like hand-verifying 400 matched records before trusting an entity resolution pipeline. It looks like running causal inference on a search improvement to find out how much of the lift was seasonality. It looks like refusing to display a margin computed from half the data, and catching an inventory formula that divided crates by currency and returned 0.16 days where the answer was 45.5. In LLM work it is the same instinct wearing different clothes: golden datasets, faithfulness scoring, and a release gate.
M2 MASERATI, Data Science, Université Paris-Est Créteil, 2022. Eiffel Excellence Scholarship.
State Engineer, Statistical Modelling, INSEA Rabat, 2021. Thesis at Equatorial Coca-Cola Bottling Company.
Preparatory cycle, Mathematics and Physics, Fès, 2018. CIOSPB Scholarship.
SAS Certified Specialist: Base Programming Using SAS 9.4
Burkina Faso to Morocco to France, on scholarship at each step. I mention it because it is also why I work the way I do: I have never had the luxury of assuming the infrastructure would be there.
I teach at 2iE in Ouagadougou, on the data science master's: Cloud, AI and Security, plus Big Data and Spark, sentiment analysis, and Python for data science. I also mentor career-changers into data science at DataScientest, and I ran the same mentoring programme internally at Safran for colleagues moving into data roles.
This is not a line I put here to look well-rounded. Teaching a topic four times to people who have never seen it is what forces you to actually understand it, and it is why I can explain a retrieval failure to a product owner without hiding behind vocabulary. If you need someone who will leave your team able to maintain what was built, that is the same skill.
I also teach sideways, to peers rather than students. I ran a session on conformal prediction and uncertainty quantification for fellow data scientists at DataScientest, and I spent a good part of the DOCFIRA on-device work explaining mobile deployment to colleagues who had never opened Android Studio.
I volunteer with Kodiko, which pairs refugees with professionals to help them re-enter the workforce in France.
Languages: French (native-level, C2), English (professional, B2), Mooré (native).
I work across Europe and West Africa and I am comfortable in both. For a client building for African markets, that is not a diversity note, it is domain knowledge: I know why offline-first is not optional, why a French-only interface excludes users, and why the phone in the field is a Tecno and not an iPhone.
Working together
I work as an independent consultant, remote, in French or English, and I am used to distributed teams across Europe and Africa. I already run a client engagement with a multilateral institution, so I know what it takes to hold a delivery commitment alongside existing work rather than promising availability I do not have.
A working data science or MLOps environment for your team, with experiment tracking, artifact storage and a notebook workspace, reproducible on every machine. DS-backbone is roughly what you get, adapted to your cloud.
I review your LLM system and hand back a written assessment with prioritized findings and a remediation plan.
Evaluation harness, RAG pipeline, agent system, or the MLOps layer around an existing model.
Architecture review, code review, and a second pair of eyes on releases.
A short description of your system and where it is stuck is enough to start. I will tell you whether I am the right person before we talk about scope.