Profil hybride : culture financière (Master Économie Appliquée + alternance Business Analyst) et ingénierie de données. Ce profil n'est pas une collection de projets isolés — c'est un écosystème connecté où chaque brique réutilise la précédente, de la base opérationnelle jusqu'au cloud.
Business Analyst opérationnel (alternance), Groupe Delcroix · août 2025 → septembre 2026
- Refonte du reporting autour d'un modèle sémantique Power BI partagé (gouvernance, maintenance, charge serveur).
- Étapes Power Query converties en SQL natif sur des sources hétérogènes (AS/400, TMS, OPM) pour alléger les rapports.
- Tableaux de bord de pilotage opérationnel : TRS véhicules, plannings, écarts comptables, projections d'heures.
- Étude de cadrage : passage à un entrepôt de données centralisé, méthode ABC, accès par profil/service.
- Sujets prolongés dans le portfolio, sur des données entièrement fictives : 21 · entrepôt de pilotage sous Power BI et 17 · rentabilité en méthode ABC.
Master 2 Économie appliquée (conseil économique aux entreprises), Université de Lille · 2024 → 2026
Ce portfolio a été construit avec un assistant de code IA (Claude Code) — c'est
visible dans les commits (Co-Authored-By), et je préfère le dire clairement.
J'utilise l'IA comme un assistant qui accroît ma productivité, mon raisonnement et ma vitesse d'apprentissage. Le code produit avec elle est relu, corrigé, vérifié et, autant que possible, refait par moi, pour toujours comprendre ce qui est fait et produit.
Ce qui relève de moi :
- Le cadrage métier : le problème, les KPI, les règles de gestion, le périmètre. Exemple : pour le projet 20, construit pour une candidature, j'ai choisi le pilotage de projets d'ingénierie plutôt que de réutiliser l'e-commerce, pour coller au « Management de Projet » de l'offre.
- Le SQL et Power BI / DAX : je les relis, les corrige et les maîtrise (modélisation, mesures, rapports).
- L'exécution et la vérification : je lance les pipelines et je recoupe les chiffres avant de publier (projet 20 : agrégats Databricks comparés au calcul local, au chiffre près).
Ce que ça m'a appris :
- Relire, c'est comprendre : je réponds de chaque transformation, donc je dois la comprendre.
- Vérifier avant de croire : l'IA peut se tromper avec assurance ; tout chiffre est recoupé par un calcul indépendant.
- Bien spécifier et guider : le résultat dépend de la clarté du besoin, ce qui m'a entraîné à cadrer comme un Business Analyst.
Je peux expliquer et défendre en entretien chaque choix et chaque chiffre de ces projets.
| Vous recrutez un·e... | Commencez par... |
|---|---|
| Data Analyst | 22 · Prix immobilier MEL (73 000 ventes réelles, économétrie) → 01 · Olist (données réelles, ~100k commandes) → 09 · Dashboard Power BI → 08 · SQL analytique |
| Data Engineer | 19 · Plateforme multi-domaines → 21 · Entrepôt transport → 13 · BigQuery → 20 · Databricks |
| Business Analyst / Contrôle de gestion | 21 · Spécification fonctionnelle → entrepôt (23 user stories, règles de gestion, recette) → 15 · Écarts Prix/Volume/Mix → 17 · ABC costing → 16 · Business case |
| 2 minutes seulement | Le diagramme ci-dessous, puis 14 · Filiation : cliquer un indicateur et remonter jusqu'à la donnée brute |
Un seul socle (la base du Projet 07, en ambre ci-dessous) irrigue tout le reste. Chaque flèche est une vraie dépendance technique — pas juste un ordre de lecture.
flowchart LR
classDef petrol fill:#137A8B,color:#fff,stroke:#0d5964,stroke-width:1px
classDef ambre fill:#E4A93C,color:#1a1a1a,stroke:#b8822b,stroke-width:1px
classDef neutre fill:#eef1f2,color:#1a1a1a,stroke:#c7cdd0,stroke-width:1px
P07["07 · Base PostgreSQL<br/>OLTP e-commerce, 3NF"]
P08["08 · Bibliothèque SQL<br/>fenêtres, cohortes, RFM"]
P09["09 · Dashboard Power BI<br/>étoile, DAX, RLS"]
P10["10 · Pipeline ELT<br/>dbt + Prefect"]
P11["11 · Gouvernance<br/>dictionnaire + lignage"]
P13["13 · Entrepôt BigQuery<br/>même étoile, cloud"]
P14["14 · Filiation<br/>traçabilité interactive"]
P07 --> P08 --> P09
P07 --> P10 --> P09
P10 --> P11
P07 -.-> P11
P07 --> P13
P10 --> P14
P11 -.-> P14
class P07 ambre
class P09,P13 petrol
class P08,P10,P11,P14 neutre
Le même schéma dimensionnel tourne deux fois : une fois en local (Power BI ↔ PostgreSQL, Projet 09) et une fois dans le cloud (Power BI ↔ BigQuery, Projet 13) — la modélisation ne dépend pas de l'infrastructure qui la porte.
📐 Le motif qui revient dans presque tous les projets : l'architecture "medallion"
Même démarche à chaque fois, du système source jusqu'à la restitution — le terme technique en gras, ce qu'il veut dire en simple juste en dessous :
flowchart LR
ERP[("🏭 ERP / système source<br/>AS/400, SQL Server...<br/><i>la vraie techno où naît la donnée</i>")] --> SRC[("🎭 Extraction<br/>API, CSV, base OLTP<br/><i>copie d'une 'base de production' simulée</i>")]
SRC --> RAW[("📥 raw<br/>copie fidèle, non transformée<br/><i>rien n'est perdu, tout est rejouable</i>")]
RAW --> STG[("🧹 staging<br/>nettoyage, typage, renommage<br/><i>ETL/ELT via dbt, en SQL testé</i>")]
STG --> MARTS[("⭐ marts<br/>étoile : faits + dimensions<br/><i>l'entrepôt, une seule source de vérité</i>")]
MARTS --> BI["📊 Power BI / Streamlit<br/>restitution<br/><i>chacun voit ce qu'il a le droit de voir</i>"]
Chaque couche a un seul rôle : raw garde une copie fidèle de la source
(traçabilité, on peut toujours rejouer) ; staging nettoie et type sans
changer le sens métier ; marts expose un modèle prêt pour l'analyse.
Séparer ces couches évite qu'une transformation cassée corrompe la donnée
source — utilisé dans les projets 04, 10, 11 et 13.
⭐ 22 · Prix des logements de la métropole lilloise — 73 271 ventes notariées réelles (DVF), régression hédonique (déplié)
Problème : un prix au m² moyen par commune ne dit presque rien — à Lille il varie du simple au double d'un quartier à l'autre. Ce bien est-il au prix du marché, compte tenu de ce qu'il est et de là où il est ? Méthode : nettoyage DVF documenté (dont une résidence étudiante vendue lot par lot qui gonflait une médiane de 90 %), régression hédonique à effets fixes quartier et trimestre, validation sur ventes non vues, test statistique, note d'une page pour un décideur. Résultat : à bien égal, l'emplacement fait varier le prix de −30 % à +37 % ; baisse 2024/2022 de −3,9 % (appartements) et −7,1 % (maisons), p < 10⁻¹⁷ ; une cave ou un parking vaut +7,6 % ; erreur d'estimation 13,7 % contre 18,4 % pour la médiane communale.
· Repo · Note décideur · Démo live
01 · Analyse des ventes e-commerce (Olist) — données réelles Kaggle, ~100k commandes
Problème : une baisse de CA constatée — est-ce la qualité de service qui s'est dégradée, ou autre chose ? Méthode : nettoyage SQL, 7 requêtes KPI, dashboard Power BI (étoile, 15 mesures). Résultat : la baisse n'est pas liée à la qualité (délais raccourcis pendant la baisse) — le vrai problème est la rétention : 97 % des clients ne commandent qu'une fois.
· Repo
02 · Nettoyage & qualité de données (NYC 311) — 50k lignes, API réelle
Problème : des données d'incidents municipaux avec des villes mal saisies, des catégories manquantes, des dates aberrantes. Méthode : module Pandas réutilisable + vue SQL, 8 règles de qualité testées. Résultat : 8/8 tests PASS — villes non standardisées 46 280 → 0, catégories manquantes 54 → 0.
· Repo
03 · Suivi de prix de jeux vidéo + web app — déployée en ligne
Problème : repérer les meilleures affaires jeux vidéo sans dataset propre existant. Méthode : collecte API CheapShark (choix éthique vs scraping fragile) → SQLite, app Flask avec filtres réactifs et graphique Chart.js. Résultat : app déployée sur Render, rafraîchissement automatique quotidien des prix via GitHub Actions.
06 · Automatisation de reporting Excel — gain de temps chiffré
Problème : un rapport Excel mensuel refait à la main à chaque fois. Méthode : génération programmatique (openpyxl) — mise en forme, 4 feuilles, graphiques natifs — depuis la base du Projet 07 ; mini-app Streamlit pour le lancer sans coder. Résultat : ~38 h/an gagnées, documenté et chiffré.
· Repo
08 · Bibliothèque SQL analytique — 16 requêtes métier commentées
Problème : démontrer une maîtrise SQL au-delà du SELECT simple.
Méthode : fonctions fenêtres, cohortes de rétention, segmentation RFM,
CTE récursive — chaque requête commentée avec sa logique métier.
Résultat : bibliothèque réutilisable, note d'optimisation des
performances incluse.
· Repo
09 · Dashboard exécutif Power BI — modèle en étoile complet
Problème : donner une vue fiable et unique de la performance commerciale. Méthode : modèle en étoile propre, 17 mesures DAX (time intelligence YoY/YTD/MoM), sécurité au niveau des lignes (RLS). Résultat : dashboard 2 pages, drill-down, documentation in-situ du modèle.
· Repo
⭐ 15 · Reporting de gestion — écarts Budget/Réel, méthode Prix/Volume/Mix (déplié)
Problème : "CA réel 70,3 M€, Budget 71,6 M€" ne dit rien à un directeur
commercial — a-t-on vendu moins, moins cher, ou pas les bonnes catégories ?
Méthode : décomposition Prix/Volume/Mix (méthode standard de contrôle de
gestion), identités algébriques vérifiées par assert (pas de chiffre publié
sans preuve qu'il boucle), commentaires de clôture générés par département.
Résultat : écart total -1,9 % expliqué département par département —
deux départements compensent en partie les deux autres, invisible sur le seul
total consolidé.
· Repo
⭐ 16 · Business case — investissement — NPV/IRR/sensibilité (déplié)
Problème : un fournisseur promet de réduire les annulations de commande — combien ça vaut vraiment, et à partir de quand ? Méthode : constat mesuré sur données réelles (7,18 % d'annulation), NPV/IRR (bissection, sans dépendance financière externe)/payback, grille de sensibilité 2 variables, mémo de décision écrit avec recommandation conditionnelle. Résultat : NPV +36 081 €, IRR 22,4 %, mais marge de sécurité étroite — la sensibilité identifie le point de bascule et motive un go conditionnel (test A/B avant déploiement complet) plutôt qu'un feu vert aveugle.
17 · Rentabilité produit/client — allocation ABC costing
Problème : un produit rentable en marge brute peut détruire de la valeur
une fois les coûts indirects réellement alloués — invisible dans une
répartition au prorata du CA.
Méthode : 3 pools de coûts indirects (logistique, paiement, SAV), chacun
sur son véritable inducteur (nb de lignes, montant réel par méthode de
paiement, nb de commandes) ; réconciliations CA produit/client vérifiées par
assert contre le total mesuré en base.
Résultat : 9 produits sur 2000 à marge nette négative malgré une
marge brute positive, seuil de rentabilité isolé (~12,80 €/ligne) ; signal
client honnêtement rapporté comme absent sur ce jeu de données plutôt que
forcé.
· Repo
Voir aussi Data platform — contrôle de gestion : data platform de pilotage d'entreprise avec modèle Réel/Budget/Forecast complet, 4 tableaux de bord dont un "Pilotage CG" et un PDG/FinOps.
07 · Base de données e-commerce (PostgreSQL) — la fondation du portfolio
Problème : construire un socle opérationnel réutilisable par tous les
autres projets.
Méthode : modélisation relationnelle 3NF, contraintes d'intégrité, index
ciblés, conteneurisé Docker.
Résultat : requêtes ~26× plus rapides (EXPLAIN ANALYZE avant/après),
base réutilisée par 6 autres projets du portfolio.
· Repo
04 · Entrepôt de données multi-sources — DuckDB local
Problème : croiser 3 sources hétérogènes (base transactionnelle, calendrier,
météo) sans infra cloud.
Méthode : entrepôt DuckDB + dbt-duckdb, orchestration Prefect en une
commande.
Résultat : 10 modèles dbt, 11 tests PASS, dim_date fusionne
calendrier et météo.
· Repo
10 · Pipeline ELT automatisé — architecture medallion
Problème : automatiser la chaîne complète source → entrepôt sans tout recharger à chaque fois. Méthode : extraction incrémentale par watermark (public → raw), dbt (staging → marts en étoile), orchestration Prefect. Résultat : 28 tests dbt PASS, validé sur données réelles (+928 lignes incrémentales, 0 doublon au 2ᵉ passage).
· Repo
11 · Gouvernance & qualité des données — dictionnaire + lignage
Problème : sans gouvernance, personne ne sait ce que signifie une colonne ni qui est responsable d'une table. Méthode : dictionnaire raw/staging/marts, conventions de nommage, tests dbt, lignage généré automatiquement. Résultat : 28 tests qualité PASS, ownership et SLA documentés par table.
· Repo
⭐ 14 · Filiation — documentation vivante et interactive de traçabilité
Problème : le lignage dbt (Projet 11) est exact mais lu par des
data engineers — pas par quelqu'un qui demande juste "d'où vient ce chiffre ?".
Méthode : page cliquable qui remonte un indicateur/colonne/table jusqu'à
sa donnée brute ; jeu de données réel introspecté depuis le Projet 10
(manifest.json/catalog.json/run_results.json, rien d'inventé), script
Python rejouable après chaque dbt run.
Résultat : 13 nœuds (5 sources + 8 modèles), 28 tests dbt réels
affichés avec leur statut, lecture seule + renvoi vers le système source
(gouvernance, pas d'édition directe en base).
· Repo
12 · Dédoublonnage & golden record — entity resolution
Problème : deux sources clients avec doublons, fautes de frappe et variantes de noms — aucun identifiant fiable. Méthode : standardisation, fuzzy matching (rapidfuzz), union-find pour regrouper les doublons, règles de survivorship. Résultat : 1280 → 813 golden records, précision 97,2 % / rappel 95,9 % / F1 96,5 % — mesuré contre une vérité terrain connue.
· Repo
⭐ 13 · Entrepôt central BigQuery — le même modèle, dans le cloud (déplié — la preuve cloud du portfolio)
Problème : est-ce que la modélisation dimensionnelle du Projet 09 tient
la route hors d'un environnement local ?
Méthode : extraction dlt (PostgreSQL → BigQuery raw), dbt-bigquery
(staging → marts, même étoile que le Projet 09), IAM à privilège minimal,
Power BI branché sur marts.
Résultat : 12/12 tests dbt PASS, compte de service sans rôle Owner,
modèle documenté in-situ.
· Repo
Voir aussi olist-analytics-dbt-snowflake (reproduction guidée d'une formation vidéo, pas un projet original — annoncé comme tel dans son propre README) : même stack ELT (S3 → Snowflake → dbt) sur le dataset réel Olist, poussée jusqu'au bout — 25/25 tests, snapshot SCD2, orchestration Prefect, CI GitHub Actions verte, doc de lignage publiée.
⭐ 18 · Monitoring Eco2mix — infra live en production (déplié — le seul projet du portfolio avec un flux vraiment temps réel)
Problème : tous les projets précédents partent d'un import one-shot —
aucun ne prouve savoir exploiter une infra en prod (déploiement, secrets,
uptime) sur un flux qui ne s'arrête jamais.
Méthode : VPS + Coolify auto-hébergé (n8n + Metabase, HTTPS Let's
Encrypt réel), ingestion automatisée toutes les 15 min (API RTE Eco2mix)
vers Supabase avec RLS testée avec les vrais rôles (SET ROLE, 6/6 cas),
marts dbt, dashboards Metabase + Power BI, lignage branché sur le
Projet 14
avec refresh quotidien automatisé.
Résultat : pipeline qui tourne tout seul depuis le déploiement,
7 phases du cadrage terminées et vérifiées en conditions réelles (pas
supposées) — cadrage complet dans
l'issue #1.
⭐ 19 · Plateforme data d'entreprise — le plus gros projet solo du portfolio (déplié — 3 domaines métier bout en bout)
Problème : aucun projet précédent ne fait cohabiter plusieurs domaines
métier hétérogènes (technos et qualité de données différentes) dans un
même entrepôt gouverné.
Méthode : 3 bases "de production" simulées par usage réel sur plusieurs
mois (AS/400 + Excel pour les Ventes, SQL Server + CSV + Factur-X pour la
Finance, MySQL + JSON + mock API SaaS OAuth2/webhook/reverse-ETL pour le
Marketing) → dbt vers un entrepôt en modèle constellation (dimensions
partagées, plusieurs faits), RLS multi-rôles testée par SET ROLE,
housekeeping index/bloat sur les 3 moteurs réels, lignage branché sur le
Projet 14.
Résultat : 51/51 tests dbt, réconciliation Factur-X 91 %
structuré contre 44 % non structuré (argument chiffré pour la
migration e-facturation), absence de corrélation marketing→ventes
honnêtement rapportée avec sa cause racine plutôt qu'une conclusion
forcée — 7 phases du cadrage terminées, cadrage complet dans
l'issue #2.
· Repo
20 · Pilotage de projets d'ingénierie — Azure Databricks/PySpark, construit pour une candidature ciblée
Problème : prouver la stack exacte demandée par une offre précise (Data Engineer, Azure Databricks/PySpark/Azure DevOps + Power BI) plutôt qu'une compétence générique adjacente. Méthode : pipeline PySpark (ingestion → nettoyage → contrôles qualité → marts KPI) exécuté sur Azure Databricks Community Edition, requêtes SQL, pipeline Azure DevOps, dashboard Power BI (étoile, 16 mesures DAX) — mapping détaillé exigence de l'offre → preuve dans le repo. Résultat : 11/11 tests PASS, 10 contrôles qualité automatisés (doublons, bornes, intégrité référentielle) avant/après fiabilisation, dérive budgétaire de +11,9 % détectée sur le portefeuille synthétique.
· Repo
21 · Intégrer Power BI dans un transporteur — entrepôt DuckDB + dbt et 23 rapports de pilotage
Problème : chez TransVal Logistique (transporteur citerne fictif), Power BI
est branché en direct sur 6 systèmes de gestion et chaque rapport refait son
propre nettoyage : mesures recopiées, TODAY() partout, deux rapports qui
donnent deux chiffres pour les mêmes heures, aucune sécurité ni aucun test.
Méthode : entrepôt DuckDB + dbt incrémental entre les sources et Power BI
(imports CDC / fenêtres / snapshots, SCD2, 48 tests), modèle sémantique
PBIP/TMDL généré (352 mesures, une définition chacune), 23 rapports de
pilotage, un par sujet, sécurité par ligne, orchestration et alertes n8n,
déploiement fabric-cicd.
Résultat : mêmes chiffres prouvés KPI par KPI (Power BI de départ ↔
entrepôt 93/97 + 4 erreurs corrigées et documentées ; entrepôt ↔ nouveau
modèle : 2 213 valeurs, 0 écart), pipeline complet en ≈ 2 minutes rejoué en CI.
⭐ 05 · Assistant d'analyse financière (RAG/LLM) — la pièce maîtresse IA (déplié — le projet le plus démonstratif)
Problème : un LLM seul hallucine des chiffres financiers plausibles mais faux — inacceptable sur ce sujet. Méthode : récupération vectorielle locale (embeddings, sans clé API) + génération Claude, avec garde-fous (ancrage strict, citations obligatoires, refus explicite mesuré). Résultat : rappel de récupération 100 % (7/7) sur un jeu d'évaluation à vérité terrain connue, garde-fous documentés et testés.
· Repo
| Pratique | Comment elle est appliquée ici |
|---|---|
| Un repo = un projet | 22 dépôts indépendants, chacun avec un README structuré (problème → méthode → résultats chiffrés → reproduction) |
| Tests systématiques, vérifiés par CI | dbt tests (unicité, non-nullité, intégrité référentielle) sur les projets 04/10/11/13/18 ; tests qualité Python sur les projets 02/09/12/14 ; constats d'analyse rejoués sur les données réelles (Olist) sur le projet 01 ; asserts d'identité/réconciliation comptable sur les projets 15/16/17 ; RLS testée avec les vrais rôles sur les projets 18/19 ; tests PySpark sur le projet 20 ; parité KPI par KPI Power BI ↔ entrepôt sur le projet 21 ; 21 des 22 dépôts ont une CI GitHub Actions qui rejoue le pipeline à chaque push — badge cliquable dans chaque README concerné, pas juste une affirmation |
| Documentation vivante | Journal de bord par projet, descriptions in-situ dans les modèles Power BI, dictionnaires de données générés (pas de doc qui se périme dans un coin) |
| Secrets jamais commités | .gitignore systématique, clés de service hors repo, tout secret lu depuis l'environnement (ANTHROPIC_API_KEY, GOOGLE_APPLICATION_CREDENTIALS) |
| Moindre privilège | Comptes de service à droits scopés (IAM BigQuery : dataEditor + jobUser, jamais Owner) |
| Reproductibilité | Scripts rejouables (load_postgres_to_bq.py, fetch_deals.py, build_index()), environnements Docker/venv versionnés |
| Garde-fous coûts cloud | Région unique, colonnes explicites dans les requêtes facturées (BigQuery), staging en vues / marts en tables matérialisées |
| Commits descriptifs | Convention feat: / docs: / fix:, message = contexte + résultat chiffré, jamais juste "update" |
Chaque dépôt suit le même plan — problème métier → méthode → résultats
chiffrés → comment rejouer — un dossier docs/, du code versionné, et une
CI qui vérifie ce qu'il avance plutôt que de se contenter de l'affirmer.
Retrouve le point de départ recommandé plus haut, dans
« Par où commencer ».
Charte commune « Petrol & Ambre » appliquée à tous les dashboards et
documents du portfolio : #137A8B (signature), #E4A93C
(accent), déclinée en thème Power BI réutilisable — un détail qui compte
autant que le code pour donner une impression de cohérence sur 22 projets.