1 points par GN⁺ 2025-04-16 | 1 commentaires | Partager sur WhatsApp
  • Dans les calculs où les entrées fluctuent, comme un changement de poste, la viabilité d’un projet ou un investissement, la plage des résultats possibles aide davantage à décider qu’un seul chiffre
  • Unsure Calculator permet d’entrer des plages comme 4~6 pour calculer avec des valeurs incertaines, et 10~15 signifie qu’on est sûr à 95 % que la vraie valeur se trouve dans cet intervalle
  • Le résultat n’est pas un chiffre unique, mais une plage, une distribution de probabilités et des percentiles ; dans l’exemple d’un départ à l’étranger, cela montre que le solde mensuel peut se situer entre -$60~+$220
  • Pour garder une saisie simple, les notations sur le type de distribution, le niveau de confiance ou la covariance ont été exclues, et le calcul interne repose sur la méthode de Monte Carlo, donc c’est lent et les messages d’erreur sont peu utiles
  • Ce n’est pas un outil pour statisticiens, mais pour des calculs rapides sur un coin de nappe autour d’une idée de business, d’un gain de temps, du risque pandémique ou du ROI marketing ; pour les analyses complexes, il faut des outils spécialisés

Mettre des nombres incertains dans un calcul

  • Unsure Calculator est une première version d’un calculateur d’incertitude destiné à manipuler des nombres non certains
  • Il simplifie les statistiques en les ramenant à la question : « je veux faire des inférences à partir de nombres, même si ces nombres ne sont pas certains »
  • Même dans les calculs du quotidien, beaucoup d’entrées sont incertaines ; on peut donc avoir besoin de calculer avec de l’incertitude sans être spécialiste des statistiques

Notation par plage

  • En plus des nombres ordinaires 4, 3.14, 43942, il prend en charge des entrées sous forme de plage comme 4~6, 3.1~3.2, 40000~45000
  • ~ est le tilde placé entre deux valeurs extrêmes, et il est aussi présent sur le pavé de la calculatrice
  • Cette notation signifie : « je ne connais pas la valeur exacte, mais je suis sûr à 95 % que la vraie valeur se trouve dans cette plage »
  • 10~15 se lit simplement « de 10 à 15 »
  • Il serait possible d’ajouter des notations pour d’autres distributions de probabilité, d’autres niveaux de confiance, des troncatures ou des covariances, mais cela rendrait l’ensemble plus difficile à comprendre
    • L’idée est que les utilisateurs à l’aise avec ces concepts préféreront de toute façon des outils plus sophistiqués
    • L’objectif est de permettre à un large public de profiter facilement de la puissance des calculs statistiques

Le piège du calcul avec un seul nombre

  • Quand on se retrouve face à des valeurs incertaines, il est facile de balayer cela d’un « puisqu’aucune n’est certaine, ce n’est pas important »
  • Choisir un seul chiffre plausible et calculer avec donne l’attrait de la simplicité d’une réponse unique, mais dans la réalité il peut y avoir plusieurs résultats possibles
  • Unsure Calculator intègre plusieurs résultats possibles dans le calcul afin de montrer à la fois les risques et la marge de manœuvre

Exemple de calcul financier pour un emploi à l’étranger

  • Le point de départ vient d’une situation en 2015 où il fallait évaluer l’impact financier pour une famille d’une opportunité professionnelle à l’étranger
    • Le salaire n’est souvent connu qu’après avoir bien avancé dans le processus de recrutement
    • Le coût de la vie sur place variait fortement selon les amis ou les informations trouvées en ligne
    • Même le taux d’imposition se prêtait mal à un simple pourcentage unique
  • Au départ, le calcul a été fait avec une valeur unique qui semblait prudente
1500 * 0.6 - 650 - 150 - 30 - 20 = 50
  • Ce calcul ne montre qu’un seul résultat : il resterait +$50 par mois
  • Si on refait le calcul avec des plages, le résultat change
1400~1700 * 0.55~0.65 - 600~700 - 100~200 - 30 - 20 = -60~220
  • Si l’on est sûr à 95 % que la valeur réelle de chaque poste se situe dans sa plage, on peut considérer que le solde mensuel réel se trouvera lui aussi entre -$60 et +$220
  • C’est plus utile que la valeur unique +$50, car cela fait apparaître la possibilité de perdre de l’argent
  • Les percentiles donnent des informations plus concrètes pour la prise de décision
    • Si le 10e percentile est -$8, cela signifie qu’il y a 10 % de chances que le solde mensuel soit inférieur ou égal à -$8
    • Inversement, 90 % des résultats sont supérieurs à -$8
    • On peut aussi prendre en compte un risque de 5 % de perdre au moins -$33 par mois
  • L’acceptation du risque dépend de la famille et du contexte
    • La tolérance au risque peut être différente selon qu’on a ou non des enfants et un crédit immobilier
    • Sans plan de secours, on regardera peut-être avec plus de prudence une probabilité de perte de 10 %

Exemple avec l’équation de Drake

  • Même si l’objectif est pratique, l’équation de Drake servant à estimer le nombre de civilisations extraterrestres fait aussi partie des exemples
  • Cette équation est une formule d’astrophysique qui estime le nombre de civilisations potentiellement capables de communiquer dans la galaxie
  • Les valeurs d’origine proposées par Frank Drake en 1961 consistaient à multiplier les facteurs suivants
    • 1 étoile se forme chaque année dans la galaxie
    • 1/5 d’entre elles possèdent environ 3 planètes
    • 100 % de ces planètes développent la vie
    • 100 % de cette vie devient intelligente
    • 10 % deviennent capables de communiquer
    • cet état de communicabilité dure 1 million d’années
  • En multipliant ces valeurs, on obtient 60,000, ce qui conduit au résultat qu’il devrait y avoir 60 000 civilisations tentant de communiquer dans la galaxie à un instant donné
  • Depuis 1961, les estimations de chaque paramètre ont fortement divergé parmi les astrophysiciens
  • Un exemple avec des estimations plus récentes sous forme de plages est le suivant
1.5~3 x 0.9~1.0 x 0.1~0.4 x 0.1~1.0 x 0.1~1.0 x 0.1~0.2 x 304~10000
  • Le résultat d’Unsure Calculator montre que le nombre de civilisations attendu pourrait se situer entre 0 et 450
  • La probabilité est tirée vers les valeurs basses, et l’histogramme est lui aussi plus étalé du côté inférieur
  • Des valeurs négatives comme -5 peuvent apparaître dans l’histogramme
    • C’est une limite de l’outil, qui privilégie la simplicité
    • Sans connaissance supplémentaire, le calculateur ne peut pas savoir qu’un nombre de civilisations ne peut pas être négatif

Cas d’usage possibles

  • Il peut servir à calculer la viabilité d’une idée de business
    • Quand la taille du marché, la part de marché, le revenu mensuel par personne et les coûts d’exploitation sont tous incertains
50000~80000 x 0.10~0.20 x 5~10 - 20000~50000
  • Il peut servir à estimer un revenu futur
    • Quand le revenu mensuel, la durée du contrat et le taux d’imposition sont incertains
1000~1500 x 10~12 x (30~50 / 100)
  • Il peut servir à calculer le temps économisé par une technologie comme un lave-vaisselle
    • Quand la fréquence d’utilisation hebdomadaire, le temps gagné par utilisation, la durée de vie et le coût d’installation sont incertains
(3~5 * 5~10 * 51 * 7~15) / 60 - 10~15
  • Il peut servir à estimer le rendement total d’un compte d’investissement
    • Quand le taux d’intérêt et la durée d’investissement sont incertains
5000 x (-2~5 / 100) x 5~10
  • Il peut servir à estimer grossièrement la probabilité de décès lors d’une pandémie
    • Quand le taux d’infection et le taux de létalité sont incertains
(10~30 / 100) * (0.1~1.0 / 100) * 100
  • Il peut servir à estimer la hauteur d’un immeuble de grande hauteur
    • Quand la distance jusqu’au pied du bâtiment et l’angle de visée vers le sommet sont incertains
100 x tan(70 ~ 80)
  • Il peut servir à estimer le ROI d’une campagne marketing
    • Quand le nombre de vues, le taux de clic, le taux de conversion et la dépense sont incertains
1000000 x (2~3 / 100) x (3~5 / 100) x (10~15)

Fonctions prises en charge

  • Le pavé n’affiche que +, -, x, /, mais même à ce stade initial il prend en charge davantage de calculs
  • Voici quelques exemples de fonctions et d’opérations
    • 2~3 ^ 4 : élève une valeur entre 2 et 3 à la puissance 4
    • sqrt(10~12) : racine carrée d’une valeur entre 10 et 12
    • sin(90~95) : sinus d’une valeur entre 90 et 95 degrés

Limites et partage

  • Comme c’est un projet mené par une seule personne, il faut s’attendre à ce que ça casse
  • L’analyseur d’expressions est fragile et les messages d’erreur n’aident pas beaucoup
  • Les calculs sont assez lents
    • Pour conserver de la flexibilité, l’outil utilise la méthode de Monte Carlo
    • Chaque calcul saisi exécute environ 250 000 évaluations basées sur un AST
  • L’interface est très simple et peu esthétique
  • La seule façon de partager une formule est de construire directement l’URL
  • range correspond toujours à une distribution normale
    • Le nombre bas se situe à 2 écarts-types sous la moyenne
    • Le nombre haut se situe à 2 écarts-types au-dessus de la moyenne
    • Des approches plus complexes du point de vue des distributions d’entrée ne sont pas prises en charge
  • Ce n’est pas un outil pour spécialistes des statistiques
    • On peut utiliser Unsure Calculator pour des calculs rapides sur un coin de nappe
    • Pour des travaux plus complexes, il faut des outils statistiques gratuits ou payants, un environnement de programmation complet ou un spécialiste des statistiques

Projet et mises à jour

  • Pour contribuer à l’amélioration de l’outil ou obtenir une version en ligne de commande, on peut utiliser github.com/filiph/unsure
  • D’après une mise à jour de 2025, cette notation et cet outil sont utilisés depuis 5 ans et sont devenus un élément essentiel du flux de travail au démarrage d’un nouveau projet
  • Une version plus récente sous forme d’application notebook est disponible ici
    • Elle est moins accessible aux débutants, mais plus utile pour les utilisateurs avancés
  • Si le projet vous intéresse, vous pouvez suivre Filip Hracek ou vous abonner à la mailing list

1 commentaires

 
GN⁺ 2025-04-16
Avis sur Hacker News
  • J’aime bien cet outil. Mais, dans la tradition de HN, en m’accrochant à un seul mot de l’article pour partir sur une discussion presque — mais en réalité totalement — tangente, il y a au moins trois pièges où l’on se tire une balle dans le pied avec ce genre de calculs

    1. 95 % est beaucoup plus large que ce que les gens imaginent généralement. Les gens comprennent 95 % comme « en gros, ça doit être ça », alors qu’en réalité c’est plus proche de « je serais assez surpris si ce n’était pas ça ». En général, on place mentalement des barres d’erreur beaucoup trop étroites
    2. Les probabilités ne sont que rarement vraiment indépendantes. On pourrait appeler ça le dicton des « Mortgage Derivatives ». Dans l’exemple de la famille, le loyer a de fortes chances d’être corrélé aux dépenses alimentaires, et si le loyer est élevé, il est probable que les dépenses alimentaires le soient aussi. Cela déforme la distribution, et si on la modélise comme une distribution uniforme non pondérée, on est surpris de voir à quel point le résultat réel paraît être un « événement rare »
    3. En général, la distribution normale est plus rare que les gens ne le pensent. Elle tend à nécessiter un facteur de contrainte sur les valeurs. Dans la nature, on en voit souvent parce que les boucles de rétroaction négative sont partout, mais dès qu’on quitte le jardin relativement ordonné de la nature pour le chaos des affaires humaines, la distribution normale devient assez anormale
      L’outil et son implémentation sont bons, mais j’ai vu beaucoup de gens qui découvraient les statistiques y laisser un doigt
    • Je suis tout à fait d’accord avec ça, en particulier avec le point 1. Si l’on demande aux gens d’estimer une plage de réponses dont ils sont sûrs à 90 %, ils donnent en moyenne une plage qui correspond à peu près à un intervalle de confiance de 30 %
      Plus de 90 % des gens n’atteignent même pas un intervalle de confiance de 70 %. On peut le tester soi-même : https://blog.codinghorror.com/how-good-an-estimator-are-you/
    • J’ai travaillé sur un projet consistant à modéliser la date d’achèvement prévue d’un grand diagramme de Gantt avec des parties prenantes non techniques. Certaines tâches étaient nouvelles et irréalistes à quantifier en durée fixe, donc les parties prenantes métier voulaient des durées d’achèvement probabilistes
      Elles ont vraiment apprécié la façon de spécifier les durées de tâche sous la forme t_i ~ PERT(min, mode, max). C’est proche de leur manière de penser, et cela permet aussi de gérer les distributions asymétriques fréquentes dans la réalité
      À noter que PERT n’est qu’une distribution bêta reparamétrée de façon conviviale et intuitive : https://rpubs.com/Kraj86186/985700
    • Cela rejoint l’impression générale que m’a donnée l’article. À mesure que la complexité et la difficulté de raisonner sur les plages augmentaient, ma confiance dans les résultats de l’exemple diminuait plutôt
      Le résultat de 50 $ était bien, et si on lui ajoute une plage plus ou moins, on peut globalement sentir qu’on est près du seuil de rentabilité. En revanche, dire « il y a 95 % de chances que le solde réel se situe entre -60 $ et +220 $ » donne l’illusion d’obtenir une information plus précise, alors qu’on n’a fait qu’ajouter à chaque étape une composition de l’incertitude
      Si l’on ne sait pas si chaque élément est vraiment à 95 %, ni quels sont les vrais minimums et maximums, on ne fait qu’ajouter davantage de suppositions susceptibles d’être fausses. C’est aussi pour ça que je n’aime pas vraiment l’équation de Drake. Chaque étape est une accumulation d’estimations grossières, et je me demande si cela produit vraiment un nombre utile
    • Je ne suis pas vraiment d’accord avec l’idée que « le loyer a de très fortes chances d’être corrélé aux dépenses alimentaires, et si le loyer est élevé, les dépenses alimentaires ont de fortes chances de l’être aussi ». Un modèle où le loyer moyen est corrélé aux dépenses alimentaires moyennes est raisonnable, mais une fois ces deux paramètres donnés, on peut modéliser les variations autour de la moyenne comme non corrélées
      Quoi qu’il en soit, dès qu’on a envie de prendre ce genre de choses en compte, il faut faire de vraies statistiques bayésiennes
      Je ne vois pas non plus d’où vient l’affirmation selon laquelle « la distribution normale nécessite un facteur de contrainte qui force les valeurs ». Ce qu’il faut, ce sont des erreurs non corrélées, pas une « contrainte » ou une « rétroaction négative »
    • Je n’avais jamais pensé aux statistiques comme à des outils électriques ou à des armes à feu, mais la métaphore « les gens qui prennent les statistiques en main pour la première fois y laissent un doigt » tombe vraiment juste
  • J’ai déjà créé des outils similaires
    fermi pour la ligne de commande : https://git.nunosempere.com/NunoSempere/fermi
    calculateur de distributions pour Android : https://f-droid.org/en/packages/com.nunosempere.distribution...
    La version plus complexe https://www.squiggle-language.com/ pourrait aussi vous intéresser. Il existe aussi une version C plus rapide, mais bien plus verbeuse : <https://git.nunosempere.com/personal/squiggle.c>

    • Fermi, en particulier, utilise la syntaxe suivante
      5M 12M # number of people living in Chicago  
      
      beta 1 200 # fraction of people that have a piano  
      
      30 180 # minutes it takes to tune a piano, including travel time  
      
      / 48 52 # weeks a year that piano tuners work for  
      
      / 5 6 # days a week in which piano tuners work  
      
      / 6 8 # hours a day in which piano tuners work  
      
      / 60 # minutes to an hour  
      
      La multiplication est implicite comme opération par défaut, et la distribution personnalisée est une loi log-normale
    • Un autre outil de la même famille est <https://carlo.app/>. Il permet de faire ce type de calculs dans Google Sheets
    • Ce serait un détail sympa si Squiggle prenait en charge la syntaxe a~b :^)
    • J’ai essayé unsure calc et l’application Android, et ils semblent donner des résultats différents
  • Super. Si l’article vous a plu, l’article « Dissolving the Fermi Paradox » pourrait aussi vous intéresser. Il va plus loin en multipliant réellement des fonctions de densité de probabilité, plutôt que d’utiliser les habituelles estimations ponctuelles
    De façon assez surprenante, le résultat suggère que nous pourrions tout simplement être seuls
    https://arxiv.org/abs/1806.02404

    • Honnêtement, c’est un peu déprimant, mais presque tout le monde sur ce site devrait le lire, ne serait-ce que pour la méthodologie
  • J’ai créé un outil similaire, mais pour la ligne de commande[1], avec une motivation proche, quoique un peu plus ambitieuse[2]
    J’aime vraiment le fait que davantage de gens pensent de cette manière. La capacité à raisonner sur les sources de variation n’est pas quelque chose que tout le monde apprend ou développe, mais elle devient de plus en plus importante[3]
    [1]: https://git.sr.ht/~kqr/precel
    [2]: https://entropicthoughts.com/precel-like-excel-for-uncertain...
    [3]: https://entropicthoughts.com/statistical-literacy

  • Les histogrammes en ASCII art, ou plus exactement en ANSI art, sont chouettes. C’est un bon hack pour obtenir quelque chose rapidement
    À leur place, j’aurais probablement perdu cinq fois plus de temps à essayer plusieurs bibliothèques de graphiques avant d’abandonner

    • Dans le même esprit, les illustrations grossières dessinées à la main sont plutôt réussies. Elles collent bien au thème de la « serviette en papier »
    • Il y a ici [1] une implémentation correcte écrite en Awk. C’est un peu brut, mais ça semble facile à étendre
      [1] https://github.com/stefanhengl/histogram
  • https://www.getguesstimate.com/ est une version de cela sous forme de tableur

  • Existe-t-il un moyen de faire une multiplication qui ne soit pas une multiplication scalaire ? Par exemple, si je veux exprimer « la somme de trois lancers de dé », en laissant de côté le fait que ce n’est pas une distribution normale, je voudrais que 1~6 * 3 = 1~6 + 1~6 + 1~6 = 6~15
    Mais en réalité, 1~6 * 3 = 3~18. Cela rend vraiment difficile des calculs du type « combien de temps faudra-t-il pour terminer 1000 tâches qui prennent chacune entre 10 et 100 ? »

  • Ce serait bien de pouvoir reconvertir la sortie en intervalle ou en distribution gaussienne
    Remarque : si vous vous demandez pourquoi il y a une valeur négative (-5) dans l’histogramme, c’est un inconvénient inévitable dû à la simplicité d’Unsure Calculator. Sans connaissance supplémentaire, le calculateur ne peut pas savoir qu’une valeur négative est impossible
    L’équation de Drake, ou les équations qui multiplient des probabilités, peuvent aussi être vues dans l’espace logarithmique. Il y a une incertitude sur l’échelle de chaque probabilité, et la probabilité finale est le produit des exponentielles des log-probabilités. Dans ce cas, ce problème de valeurs négatives ne se pose pas

    • L’exemple de base 100 / 4~6 donne 17~25 en sortie
  • Au début, ça ressemble à un jouet, mais ça semble étonnamment utile. Si ça sortait sous forme d’application à utiliser à côté de ma calculatrice habituelle, je l’installerais clairement
    Je n’arrive pas à me rappeler exactement quand j’en aurais eu besoin, mais si je l’assignais à un raccourci clavier, il y a de fortes chances que je commence à lui trouver des usages

    • J’ai mis ces nombres, à savoir population × taux de possession × fréquence de remplacement × prix unitaire, pour estimer le chiffre d’affaires annuel du marché des smartphones, et je n’étais qu’à quelques points de pourcentage des valeurs réelles trouvées sur Internet
      Comme il y a aussi des fonctions trigonométriques, ça pourrait être pratique pour rétroconcevoir des pièces complexes à partir de mesures simples. Par exemple des volumes de formes, des angles d’arêtes ou des aires de section
      La prise en charge des distributions multimodales serait appréciable, mais pas indispensable. Les fonctions trigonométriques inverses seraient aussi intéressantes, mais complexes et non indispensables
      En tout cas, cet outil est plus pratique que d’ouvrir Python chaque fois que je veux estimer une fourchette de réponse
    • Si vous avez besoin d’une application, https://f-droid.org/en/packages/com.nunosempere.distribution... vaut la peine d’être envisagée
    • Comme le langage principal est Dart, créer une application Flutter à partir de cela devrait être facile
  • Demande de fonctionnalité : ce serait bien de pouvoir spécifier une distribution de probabilité. Par exemple, ~ pour une distribution normale, _ pour une distribution uniforme, etc.

    • Je pense que ce genre de chose devrait être une fonction. Par exemple, une distribution gaussienne de µ=50 et σ=1 serait G(50, 1), une distribution exponentielle négative de λ=3 serait N(3), une distribution uniforme entre 0 et 1 serait U(0, 1), une distribution uniforme entière de 1 à 6 serait UI(1, 6), etc.
      Ce serait beaucoup plus flexible et aussi plus facile à mémoriser
    • L’absence même de cette fonctionnalité est une fonctionnalité. L’article le dit d’ailleurs