Formation Data Engineering, Kuikops (Paris)
ETL Python orienté objet, SQL et PL/SQL analytique, Spark, dbt, Snowflake, AWS, MLOps avec MLflow et CI/CD.
Ingénieur Data / IA diplômé de l'IMT Mines Alès. Un an et demi de R&D en machine learning, deep learning et IA générative, de la modélisation prédictive au déploiement d'agents LLM en local, sur des données qui ne sortent pas du réseau.
Chaque chiffre vient d'un jeu de validation, pas d'une impression. Les limites de chaque mesure sont écrites dans le dépôt correspondant.
| Projet | Résultat mesuré | Contexte |
|---|---|---|
| Agent RAG sur documentation industrielle | 100 % retrieval, 98 % réponses | 20 questions, 5 types de données |
| Prévision multi-cibles en atelier d'assemblage | hit rate 0,82 | 2ᵉ place, hackathon Airbus |
| Prédiction de déplacements urbains | accuracy 0,69 à 0,74 | utilisateurs jamais vus |
| Évaluation comparative de pipelines RAG | 4 configurations, 6 métriques | témoin sans retrieval inclus |
| Transcription vocale et synthèse par LLM | 100 % local | données de santé, aucun appel externe |
Stage de fin d'études chez Incitius Software, Montpellier
Un assistant conversationnel qui interroge en langage naturel deux bases documentaires d'un site industriel : une base structurée d'équipements et de plans, une base de procédures réglementaires. Le problème n'était pas de générer du texte, mais de retrouver le bon code équipement parmi des milliers, ce que la similarité sémantique seule rate systématiquement.
L'agent est construit sur un graphe LangGraph à trois nœuds. À chaque tour, le LLM décide seul s'il répond ou s'il relance une recherche, et fabrique lui-même les arguments de son outil : la requête, la clé de filtre parmi onze, et sa valeur. Les identifiants sont normalisés avant d'atteindre Qdrant, parce que la base écrit « 11 B 0024 » là où le technicien tape « 11B0024 ». Au bout de cinq tours, un second appel sans outil force une réponse sur ce qui a été trouvé, pour qu'aucune question ne reste sans retour.
Le module de navigation dans les procédures réglementaires utilise, lui, une recherche hybride : vecteurs denses et BM25 fusionnés par RRF dans Qdrant. J'ai comparé trois LLM avant de trancher : Qwen3 14B réussit 93 % des raisonnements agentiques contre 40 % pour Mistral 7B, un écart qu'aucune métrique de génération ne montrait.
L'ensemble tourne sur le réseau du client : LLM et embeddings sur serveur GPU interne, base vectorielle en Docker sur site. Sur de la documentation d'exploitation, c'était une contrainte non négociable, et elle a structuré toute l'architecture.
Python · LangGraph · Qdrant · Ollama · Qwen3 14B · mxbai-embed-large · BM25 · RAGAS · Chainlit · Docker · Debian / Hyper-V
Code propriété de l'entreprise. Présentation détaillée sur demande.Hackathon Kaggle Airbus Helicopters, 2ᵉ place
Prédire simultanément trois indicateurs d'une ligne d'assemblage d'hélicoptères : en-cours de production, investissement et satisfaction client. La métrique du concours ne récompensait pas la précision mais le fait de tomber à moins de 0,05 de la cible, ce qui change complètement la fonction de coût à optimiser.
J'ai implémenté un FT-Transformer from scratch en PyTorch : chaque colonne du tableau devient un token, les numériques via un poids appris par colonne, les catégorielles via leur propre table d'embedding, avec un token CLS qui porte les trois prédictions. En parallèle, un LightGBM avec sélection de features par gain cumulé, ramenant 7 600 colonnes à 400.
Les poids du mélange final ont été cherchés directement sur la métrique du concours par tirage de Dirichlet, et non sur une erreur quadratique. Le mélange gagne 4,5 points sur le meilleur modèle seul : les deux modèles se trompent sur des exemples différents.
Python · PyTorch · LightGBM · pandas · NumPy
Mission R&D au CEA
Un pipeline RAG « marche » toujours. La vraie question est de savoir s'il fait mieux qu'un LLM sans récupération, et quel mode de recherche choisir. J'ai construit un framework qui exécute le même jeu de questions dans quatre configurations, dont un témoin sans retrieval, qui est la partie que la plupart des évaluations oublient.
Six métriques en sortie, choisies pour se compléter : ROUGE mesure le recouvrement de surface, BERTScore le sens. Une reformulation correcte fait chuter l'un sans toucher l'autre, et c'est précisément l'écart entre les deux qui indique si le modèle reformule ou s'il dérive.
Le dépôt documente aussi les faiblesses de l'outil, parce qu'elles comptent autant que les résultats : le MRR y est un proxy par paliers de similarité, pas un vrai rang de documents récupérés.
Python · LightRAG · Ollama · asyncio · ROUGE · BERTScore
Stage de recherche à la Czech Technical University, Prague
À partir de trois semaines d'historique de connexions mobiles, prédire à quelle antenne-relais un utilisateur se connectera pour chacune des 24 heures du lendemain. Le corpus vient de Shanghai Telecom : 7,2 millions de connexions réelles, 3 233 antennes, 9 481 téléphones.
La décision qui compte ici n'est pas l'architecture mais le découpage : le split se fait par utilisateur, pas par date. En coupant au milieu des séquences, le modèle verrait à l'entraînement les habitudes des personnes qu'il doit prédire, et le score serait flatté de plusieurs dizaines de points.
Dix configurations testées, tous les journaux d'entraînement conservés. Ce qu'ils montrent : les hyperparamètres ne changent presque rien, et pousser l'entraînement ne fait que creuser l'écart entre apprentissage et généralisation.
Python · TensorFlow / Keras · pandas · scikit-learn · Parquet
Projet d'école pour l'association Les Genêts
Dans un établissement qui accompagne des personnes en situation de handicap, chaque professionnel consigne par écrit ce qui s'est passé pendant son service. En pratique la rédaction arrive en fin de poste, de mémoire, plusieurs heures après les faits, et les détails se perdent.
L'application permet de dicter la note au moment où ça se passe : Whisper transcrit, PostgreSQL range avec ses métadonnées, et Qwen3 produit à la demande une synthèse structurée par personne et par période.
Ce sont des données de santé sur des personnes vulnérables. Passer par une API de transcription aurait été plus simple, et c'était le mauvais choix : tout tourne en local, aucune requête ne quitte le réseau de l'établissement.
Python · Flask · PostgreSQL · Whisper · Ollama · ffmpeg · JavaScript
ETL Python orienté objet, SQL et PL/SQL analytique, Spark, dbt, Snowflake, AWS, MLOps avec MLflow et CI/CD.
Agent IA et système RAG souverain pour documentation technique industrielle en secteur réglementé.
Prédiction de trajectoires à partir de données spatio-temporelles mobiles.
Framework d'évaluation automatique de pipelines RAG sur documents scientifiques et techniques.
Machine learning et deep learning, NLP, science des données, modélisation numérique. Trésorier du gala de l'école : budget de 140 000 € et bureau de 50 personnes.
Admission à l'IMT Mines Alès sur concours national.
scikit-learn, XGBoost, LightGBM, feature engineering, statistiques bayésiennes
PyTorch, TensorFlow / Keras, Transformers, CNN, RNN, Hugging Face
Pipelines RAG, agents ReAct, LangGraph, LlamaIndex, Ollama, Qdrant, embeddings, fine-tuning LoRA et QLoRA, prompt engineering
Python, SQL / PL/SQL, Spark, dbt, Snowflake, Parquet, pipelines ETL, API REST avec FastAPI et Flask
Docker, AWS, Git, Mercurial, Hyper-V, MLflow, CI/CD
Français et arabe natifs, anglais C1, espagnol B2