FAD
Finance Audit Dashboard
|
LIVE
Documentation complète

Finance Audit Dashboard —
Comment ça marche ?

Cette page explique le projet de A à Z, sans prérequis. Que tu sois recruteur, curieux, ou développeur, tu trouveras ici une explication claire de ce que fait ce site, pourquoi il existe, et comment il fonctionne techniquement.

C'est quoi ce site ?

Ce site est un outil d'audit financier automatisé. Il analyse les états financiers de 10 grandes entreprises françaises du CAC40 — LVMH, Sanofi, TotalÉnergies, Air Liquide, etc. — et détecte automatiquement les anomalies comptables grâce à un algorithme d'intelligence artificielle.

En clair : imagine un expert-comptable qui passe des heures à éplucher des tableaux Excel pour trouver les chiffres qui "clochent". Ce site fait exactement la même chose, mais en quelques secondes, de façon automatique et objective.

📊
3 vues
Entreprise · Anomalies · Comparaison
🏢
10 entreprises
CAC40 · données réelles Yahoo Finance
🤖
1 modèle ML
Isolation Forest · 8 ratios financiers

Le problème que ça résout

Dans les cabinets d'audit comme EY, Deloitte ou PwC, les auditeurs analysent chaque année les comptes de leurs clients. Leur job : vérifier que les chiffres sont cohérents, détecter les irrégularités, identifier les postes qui ont anormalement évolué.

Aujourd'hui, une grande partie de ce travail se fait encore manuellement dans Excel : l'auditeur compare les marges d'une année sur l'autre, calcule des ratios, cherche les outliers. C'est long, fastidieux, et sujet aux erreurs humaines.

Ce que ce projet automatise
Pour chaque entreprise du CAC40 analysée, le site récupère automatiquement 5 ans de données financières réelles, calcule 8 ratios financiers clés, et applique un algorithme ML pour scorer chaque année de 0 à 100 selon son niveau d'anomalie. Un score de 100 signifie que cette année est statistiquement très éloignée de la norme du secteur — exactement ce qu'un auditeur cherche.

Par exemple, Kering en 2025 obtient un score d'anomalie de 100/100 sur son ratio de liquidité (current ratio). En pratique, ça signifie que sa capacité à rembourser ses dettes à court terme est statistiquement hors-norme par rapport aux autres entreprises du CAC40. Un auditeur devrait investiguer ce point.

Comment ça marche concrètement ?

Voici ce qui se passe quand tu utilises le site, de la donnée brute à l'affichage :

1
Récupération des données réelles
Le programme Python se connecte à Yahoo Finance via une bibliothèque appelée yfinance. Il télécharge les états financiers officiels de chaque entreprise : le compte de résultat (revenus, charges, bénéfices), le bilan (actifs, dettes, fonds propres) sur les 5 dernières années. Ce sont les mêmes données que celles publiées dans les rapports annuels officiels des entreprises.
2
Nettoyage et transformation (ETL)
Les données brutes sont souvent incomplètes, mal formatées, avec des noms de colonnes différents selon les entreprises. Un pipeline Python nettoie tout ça : il renomme les colonnes, convertit les devises, supprime les doublons, et structure les données dans une base SQLite (une base de données légère stockée dans un seul fichier).
3
Calcul des ratios financiers
À partir des données brutes, on calcule 8 ratios financiers — des indicateurs qui permettent de comparer les entreprises entre elles indépendamment de leur taille. Par exemple, la marge nette (résultat net / chiffre d'affaires) dit quelle proportion du CA se transforme en bénéfice.
4
Détection d'anomalies par ML
Un algorithme d'intelligence artificielle (Isolation Forest) analyse tous ces ratios et calcule pour chaque observation un "score d'anomalie". Plus le score est élevé, plus cette année pour cette entreprise est statistiquement inhabituelle.
5
Exposition via une API
Toutes ces données sont rendues disponibles via une API FastAPI — un serveur web Python qui répond à des questions du type "donne-moi les données de LVMH" en JSON.
6
Affichage dans le dashboard
Le frontend Next.js récupère ces données depuis l'API et les affiche sous forme de graphiques interactifs (Plotly), tableaux et cartes de métriques.

Les ratios financiers calculés

Un ratio financier, c'est un rapport entre deux chiffres du bilan ou du compte de résultat. Il permet de comparer des entreprises de tailles très différentes sur un pied d'égalité. Voici les 8 ratios utilisés par le modèle :

Marge brute
Bénéfice brut / Chiffre d'affaires
Quelle part du CA reste après les coûts de production. LVMH : ~67%. Orange : ~58%. Plus c'est élevé, meilleur est le pricing power.
Marge EBITDA
EBITDA / Chiffre d'affaires
Rentabilité opérationnelle avant impôts et amortissements. C'est le ratio préféré des analystes pour comparer la performance opérationnelle.
Marge nette
Résultat net / Chiffre d'affaires
Ce qui reste vraiment dans la poche après tout. Une marge nette de 15% signifie 15€ de bénéfice pour 100€ de ventes.
ROE
Résultat net / Fonds propres
Return On Equity — combien l'entreprise génère de bénéfice pour chaque euro investi par les actionnaires. LVMH : ~21%.
Ratio courant
Actifs courants / Passifs courants
Capacité à rembourser les dettes à court terme. Un ratio > 1 signifie que l'entreprise peut faire face à ses obligations immédiates.
Dette / Fonds propres
Total dettes / Fonds propres
Le levier financier. Un ratio élevé = entreprise très endettée, plus risquée mais potentiellement plus rentable pour les actionnaires.
Ratio OPEX
Charges opérationnelles / CA
Quelle part du CA part en charges d'exploitation. Une hausse soudaine peut signaler une perte de contrôle des coûts.
Croissance CA (YoY)
(CA année N - CA année N-1) / CA N-1
Croissance du chiffre d'affaires d'une année sur l'autre. TotalÉnergies a connu une forte hausse en 2022 avec la crise énergétique.

L'intelligence artificielle derrière

Le cœur du projet est un algorithme de machine learning appelé Isolation Forest, développé par scikit-learn (la bibliothèque ML standard en Python).

Comment fonctionne l'Isolation Forest ?
L'idée est simple et élégante. L'algorithme construit des centaines d'arbres de décision aléatoires sur les données. Pour chaque observation (une entreprise, une année), il mesure combien de coupures aléatoires sont nécessaires pour l'isoler des autres. Une observation normale est entourée d'autres observations similaires — il faut beaucoup de coupures pour l'isoler. Une anomalie est au contraire isolée en très peu de coupures, car elle est loin de tout le monde.

En pratique : on donne à l'algorithme les 8 ratios financiers de toutes les entreprises sur toutes les années (environ 47 observations). Il apprend ce qu'est un profil financier "normal" pour une entreprise du CAC40, puis calcule un score d'anomalie pour chaque observation.

Le paramètre contamination = 10% signifie qu'on s'attend a priori à ce qu'environ 10% des observations soient anormales. C'est un choix de l'analyste, ajustable selon le contexte.

Pourquoi ce modèle plutôt qu'un autre ?
L'Isolation Forest est idéal ici pour plusieurs raisons : il fonctionne bien avec peu de données (47 observations), il ne nécessite pas de données labellisées (on n'a pas besoin de dire "cette année était anormale" pour l'entraîner), et il est interprétable — on peut identifier quel ratio contribue le plus à l'anomalie.

Les technologies utilisées

Clique sur chaque technologie pour en savoir plus.

PythonLangage principal du backend
+
yfinanceSource de données financières
+
pandasManipulation et transformation des données
+
scikit-learnMachine Learning — Isolation Forest
+
SQLiteBase de données
+
FastAPIAPI REST — interface entre backend et frontend
+
Next.jsFramework frontend React
+
Plotly.jsGraphiques interactifs
+
Tailwind CSSStyling et design système
+
GitHub ActionsCI/CD — automatisation
+

Architecture globale du projet

Voici comment les différentes parties communiquent entre elles :

🌐 Yahoo Finance
→ yfinance (Python)
Données brutes JSON
🐍 Pipeline Python
→ pandas + SQLAlchemy
SQLite (finance_audit.db)
🤖 Isolation Forest
→ scikit-learn
Scores d'anomalie
⚡ FastAPI
→ HTTP/JSON sur :8000
API REST (4 endpoints)
⚛️ Next.js
→ fetch() côté client
Dashboard interactif :3000

Les 4 endpoints de l'API exposent toutes les données du dashboard :

GET/companiesListe toutes les entreprises avec leur score d'anomalie moyen
GET/company/{ticker}Toutes les données d'une entreprise : P&L, ratios, anomalies par année
GET/anomaliesToutes les anomalies détectées, triées par score décroissant
GET/compare?tickers=...Données de plusieurs entreprises pour comparaison côte à côte