Open source

D'un tableau à une carte

Standpoint lit un tableau comparatif et en dessine une carte de positionnement, axes nommés en français compris. Une commande suffit.

Le logo de Standpoint : une carte ancienne gravée, rose des vents comprise, reliée comme un atlas.

Tout le monde a connu ce tableau. Des options en lignes, des critères en colonnes, des notes dans les cases : huit voitures électriques comparées sur l'autonomie, le prix, la recharge, l'habitabilité. Le tableau est honnête, complet, vérifiable. Il est aussi illisible : devant huit colonnes de chiffres, l'œil renonce et l'on finit par choisir à l'instinct, ce que le tableau devait justement éviter.

Standpoint transforme ce tableau en carte. Chaque option devient un point dans un plan ; deux points proches sont deux profils semblables ; les extrémités des axes portent des mots simples, dans la langue de vos colonnes. La question à laquelle répond la carte tient en une ligne : où vous situez-vous ?

Carte de positionnement de voitures électriques produite par Standpoint : un nuage de points colorés, deux axes nommés en français, la référence en haut à droite.

Un tableau de voitures électriques, en entrée français, devient une carte au titre et aux axes français.


Motivation

Les cartes de positionnement sont un grand classique du marketing et du conseil : on les dessine au tableau blanc pour situer des marques, des produits, des concurrents. La méthode qui les fabrique proprement, l'analyse en composantes principales (Principal Component Analysis, PCA), a plus d'un siècle : face à beaucoup de colonnes de chiffres, elle cherche les quelques directions le long desquelles les options diffèrent vraiment, si bien qu'une ligne entière de notes se résume en deux nombres qui gardent l'essentiel de ce qui la distingue des autres.

La méthode est connue ; ce qui coûte du temps, c'est tout l'autour. Orienter la carte pour qu'elle se lise dans le bon sens. Nommer les axes avec des mots qu'un comité de direction comprend. Colorer, étiqueter sans chevauchement, exporter en haute qualité. C'est ce travail d'atelier que Standpoint automatise : une commande lit le tableau (CSV ou Markdown) et écrit la figure, en SVG et en PNG, plus un fichier YAML avec toutes les coordonnées et tous les coefficients.

Un choix d'architecture me tient à cœur : tout tourne sur votre machine. Le calcul, le dessin, et même le nommage des axes, confié à un modèle de langage local exécuté par Ollama, un logiciel qui fait tourner des modèles ouverts sur votre propre ordinateur. Votre tableau, qui contient parfois des notes internes sur vos concurrents, n'est jamais téléversé nulle part.


Comment ça marche

Première étape : mettre les critères sur un pied d'égalité. Une note d'habitabilité sur 5 et un prix en milliers d'euros ne se comparent pas tels quels ; sans précaution, la colonne aux plus grands chiffres écraserait toutes les autres. Chaque colonne \(j\) est donc centrée sur sa moyenne \(\mu_j\) et réduite par son écart-type \(\sigma_j\), la mesure usuelle de dispersion :

$$z_{ij} \;=\; \frac{x_{ij} - \mu_j}{\sigma_j}$$

Après ce recentrage, chaque critère pèse autant que les autres : un point d'écart signifie partout « un écart-type au-dessus de la moyenne ».

Deuxième étape, le cœur mathématique. Imaginez les options comme un nuage de points dans un espace à huit dimensions, une par critère. L'ACP cherche le plan qui, vu de face, étale ce nuage le plus possible : les deux directions \(v_1, v_2\) le long desquelles les options s'écartent le plus les unes des autres. Ce sont les deux premiers vecteurs propres de la matrice de covariance des données recentrées, associés aux plus grandes valeurs propres \(\lambda_1 \ge \lambda_2\). La position d'une option sur la carte est alors sa projection :

$$c_i \;=\; \big(\langle z_i, v_1\rangle,\; \langle z_i, v_2\rangle\big)$$

Une carte plane reste un résumé d'un espace plus riche. La part d'information conservée se mesure, et Standpoint l'affiche sur la figure :

$$\frac{\lambda_1 + \lambda_2}{\sum_k \lambda_k}$$

Autour de 80 %, la carte raconte fidèlement le tableau ; en dessous, elle se lit comme une esquisse.

Troisième étape, l'orientation. Une carte ACP brute sort dans un sens arbitraire : rien n'oblige le « bon » coin à être en haut à droite. Standpoint fait pivoter le plan pour y placer votre option de référence, celle dont vous voulez raconter la position. Cas limite prévu : une référence notée au maximum partout serait projetée loin de tout ; elle est alors posée juste au-delà du meilleur concurrent, là où la carte reste lisible.

Dernière étape, les mots. Les axes de l'ACP restent des sommes pondérées de vos colonnes, donc quelque chose de lisible : un axe peut peser fort sur l'autonomie et la recharge, l'autre sur le prix et le poids. Un modèle local lit ces poids et nomme les quatre pôles comme des qualités positives, dans la langue du tableau (français, anglais ou espagnol, détectée sur les noms de colonnes). Une colonne où moins vaut mieux, marquée « (↓) » comme Prix (↓), donne un pôle qui nomme le bénéfice, « Abordable », jamais le défaut. Un garde-fou écarte les sigles, les négations et les paires d'antonymes.

La carte du paysage des outils de cartes perceptuelles, produite par Standpoint lui-même : Standpoint, factoextra, FactoMineR, prince et d'autres, positionnés sur deux axes nommés.

L'outil se juge lui-même : sa carte du paysage concurrentiel (factoextra, FactoMineR, prince…) est produite par Standpoint.

Le même moteur se présente sous sept formes : une bibliothèque Python (import standpoint), deux lignes de commande jumelles, une interface graphique dans le navigateur, une API HTTP, un serveur MCP pour les agents, et une version entièrement statique où le moteur, compilé en WebAssembly, tourne dans le navigateur du visiteur sans aucun serveur. La figure elle-même est du SVG écrit à la main, sans bibliothèque de graphiques : chaque trait est décidé, pas hérité d'un gabarit.


Conclusion

Un tableau honnête mérite mieux qu'une lecture à l'instinct. La carte ne remplace pas le tableau : elle en donne la vue d'ensemble, celle qui décide quelles lignes relire de près. Et parce que les axes restent des combinaisons de vos propres critères, la carte se défend en réunion : chaque position se retrace jusqu'aux chiffres d'origine, conservés dans le YAML de sortie.

Standpoint est open source, sous licence BSD : pip install standpoint, puis une commande sur votre CSV. Le code, les exemples et la documentation sont sur github.com/warith-harchaoui/standpoint. Apportez un tableau ; repartez en sachant où vous vous situez.