1 pontos por GN⁺ 2025-04-16 | 1 comentários | Compartilhar no WhatsApp
  • Em cálculos com entradas incertas, como mudança de emprego, viabilidade de negócio ou investimento, a faixa de resultados possíveis ajuda mais na decisão do que um único número
  • O Unsure Calculator permite inserir intervalos como 4~6 para calcular com valores incertos, e 10~15 significa que há 95% de confiança de que o valor real esteja dentro desse intervalo
  • O resultado não sai como um número único, mas como faixa, distribuição de probabilidade e percentis; no exemplo de mudança para o exterior, mostra que o saldo mensal pode ficar entre -$60~+$220
  • Para manter a entrada simples, a ferramenta não mostra tipos de distribuição, nível de confiança ou covariância, e os cálculos internos usam o método de Monte Carlo, por isso são lentos e as mensagens de erro não são muito amigáveis
  • Não é uma ferramenta para especialistas em estatística, e sim para contas de guardanapo sobre ideias de negócio, economia de tempo, risco de pandemia ou ROI de marketing; para análises complexas, são necessárias ferramentas profissionais

Colocando números incertos nos cálculos

  • O Unsure Calculator é uma versão inicial de uma calculadora de incerteza para lidar com números que não são totalmente certos
  • Ele simplifica a estatística para o problema de “quero tirar inferências com esses números mesmo que eles não sejam exatos”
  • Mesmo cálculos do dia a dia têm muitos valores de entrada incertos, então às vezes é útil incluir incerteza nos cálculos mesmo sem ser especialista em estatística

Como funciona a notação por intervalo

  • Além de números comuns como 4, 3.14, 43942, ele aceita entradas em intervalo como 4~6, 3.1~3.2 e 40000~45000
  • O ~ é o til entre os dois extremos e também está incluído no teclado da calculadora
  • A notação por intervalo significa “não sei o valor exato, mas tenho 95% de confiança de que o valor real esteja dentro desse intervalo”
  • 10~15 pode ser lido como “de 10 a 15”
  • Seria possível oferecer outras distribuições de probabilidade, outros níveis de confiança, truncamento ou covariância, mas isso foi deixado de fora para não dificultar o entendimento
    • A premissa é que quem já está familiarizado com esses conceitos provavelmente preferirá usar uma ferramenta mais sofisticada
    • O objetivo é permitir que um público mais amplo use o poder dos cálculos estatísticos com facilidade

A armadilha de calcular com um único número

  • Ao encontrar valores incertos, é fácil pensar “os dois são incertos, então isso não importa tanto” e seguir em frente
  • Se você escolhe um único número plausível para fazer a conta, é atraente pela simplicidade de uma resposta única, mas os resultados possíveis de verdade podem não ser apenas um
  • O Unsure Calculator incorpora vários resultados possíveis ao cálculo para mostrar ao mesmo tempo risco e margem de ganho

Exemplo financeiro de mudança para o exterior

  • O ponto de partida foi uma situação de 2015, calculando o impacto financeiro para a família diante de uma oportunidade de trabalho no exterior
    • O salário só seria conhecido depois de avançar bastante no processo seletivo
    • O custo de vida local variava muito entre o que amigos diziam e o que se encontrava na internet
    • A alíquota de imposto também não era algo que desse para resumir em uma única porcentagem simples
  • No começo, o cálculo foi feito com valores únicos que pareciam conservadores
1500 * 0.6 - 650 - 150 - 30 - 20 = 50
  • Esse cálculo mostra apenas um resultado: sobrariam +$50 por mês
  • Ao colocar intervalos e recalcular, o resultado muda
1400~1700 * 0.55~0.65 - 600~700 - 100~200 - 30 - 20 = -60~220
  • Se houver 95% de confiança de que o valor real de cada item esteja dentro do respectivo intervalo, então o saldo mensal real também pode ser visto como estando na faixa de -$60 a +$220
  • Isso é mais útil do que o valor único +$50 porque revela até a possibilidade de perder dinheiro
  • Os percentis dão informações mais concretas para a tomada de decisão
    • Se o 10º percentil for -$8, então há 10% de chance de o saldo mensal ser -$8 ou menor
    • Em outras palavras, 90% dos resultados ficam acima de -$8
    • Também dá para considerar um risco de 5% de perder pelo menos -$33 por mês
  • A disposição para aceitar esse risco depende da família e da situação
    • A tolerância ao risco pode ser diferente sem filhos e sem financiamento imobiliário, ou com ambos
    • Se não houver plano de contingência, uma chance de 10% de prejuízo pode exigir mais cautela

Exemplo da equação de Drake

  • Embora o foco seja cálculo prático, a equação de Drake (Drake equation), usada para estimar o número de civilizações extraterrestres, também aparece como exemplo
  • Essa equação é uma fórmula de astrofísica para estimar quantas civilizações na galáxia poderiam ser capazes de se comunicar
  • Os valores originais de Frank Drake, em 1961, consistiam em multiplicar os seguintes fatores
    • Forma-se 1 estrela por ano na galáxia
    • Dessas, 1/5 têm cerca de 3 planetas
    • 100% desses planetas desenvolvem vida
    • 100% dessa vida se torna inteligente
    • 10% dela se torna capaz de se comunicar
    • O estado comunicativo dura 1 milhão de anos
  • Multiplicando esses valores, chega-se a 60,000, sugerindo que deveria haver 60 mil civilizações tentando se comunicar na galáxia em qualquer momento
  • Desde 1961, as estimativas de cada parâmetro variaram muito entre os astrofísicos
  • Um exemplo com estimativas mais recentes em forma de intervalo é o seguinte
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
  • O resultado no Unsure Calculator mostra que o número esperado de civilizações pode ficar entre 0 e 450
  • A probabilidade é inclinada para os valores mais baixos, e o histograma também aparece mais espalhado nessa parte inferior
  • O histograma pode até mostrar valores negativos como -5
    • Isso é uma limitação da ferramenta por optar pela simplicidade
    • Sem conhecimento adicional, a calculadora não consegue impor a restrição de que o número de civilizações não pode ser negativo

Casos de uso possíveis

  • Dá para calcular a viabilidade de uma ideia de negócio
    • Quando tamanho de mercado, participação de mercado, receita mensal por usuário e custo operacional são todos incertos
50000~80000 x 0.10~0.20 x 5~10 - 20000~50000
  • Dá para estimar receita futura
    • Quando renda mensal, duração do contrato e alíquota de imposto são incertas
1000~1500 x 10~12 x (30~50 / 100)
  • Dá para calcular o tempo economizado por uma tecnologia como uma lava-louças
    • Quando número de usos por semana, tempo economizado por uso, vida útil e custo de instalação são incertos
(3~5 * 5~10 * 51 * 7~15) / 60 - 10~15
  • Dá para estimar o retorno total de uma conta de investimento
    • Quando taxa de juros e prazo do investimento são incertos
5000 x (-2~5 / 100) x 5~10
  • Dá para calcular por alto a probabilidade de morte em uma pandemia
    • Quando taxa de infecção e taxa de letalidade são incertas
(10~30 / 100) * (0.1~1.0 / 100) * 100
  • Dá para estimar a altura de um prédio alto
    • Quando a distância até a base do prédio e o ângulo de visão até o topo são incertos
100 x tan(70 ~ 80)
  • Dá para estimar o ROI de uma campanha de marketing
    • Quando visualizações, taxa de cliques, taxa de conversão e gasto são incertos
1000000 x (2~3 / 100) x (3~5 / 100) x (10~15)

Funções suportadas

  • O teclado mostra apenas +, -, x e /, mas mesmo nesta fase inicial a ferramenta suporta mais tipos de cálculo
  • Alguns exemplos de funções e operações são
    • 2~3 ^ 4: elevar um valor entre 2 e 3 à quarta potência
    • sqrt(10~12): raiz quadrada de um valor entre 10 e 12
    • sin(90~95): seno de um valor entre 90 e 95 graus

Limitações e forma de compartilhamento

  • Por ser um projeto de uma pessoa só, é preciso esperar que quebre às vezes
  • O parser de fórmulas é frágil e as mensagens de erro não ajudam muito
  • Os cálculos são bem lentos
    • Para manter a flexibilidade, usa o método de Monte Carlo
    • Para cada cálculo inserido, executa cerca de 250 mil avaliações baseadas em AST
  • A interface é extremamente simples e não é bonita
  • A única forma de compartilhar uma fórmula é montar a URL manualmente
  • range sempre usa distribuição normal
    • O número menor fica 2 desvios-padrão abaixo da média
    • O número maior fica 2 desvios-padrão acima da média
    • Não há suporte a formas mais complexas de distribuição de probabilidade na entrada
  • Não é uma ferramenta para especialistas em estatística
    • O Unsure Calculator serve para contas de guardanapo
    • Para trabalhos mais complexos, são necessárias ferramentas estatísticas gratuitas ou pagas, um ambiente completo de programação ou um especialista em estatística

Projeto e atualizações

  • Quem quiser ajudar a melhorar a ferramenta ou obter uma versão de linha de comando pode usar github.com/filiph/unsure
  • Segundo a atualização de 2025, essa notação e a ferramenta foram usadas por 5 anos e se tornaram parte essencial do fluxo de trabalho ao iniciar novos projetos
  • Uma versão mais recente em formato de notebook pode ser vista aqui
    • Ela é menos amigável para iniciantes, mas mais útil para usuários avançados
  • Se houver interesse no projeto, é possível seguir Filip Hracek ou assinar a lista de e-mails

1 comentários

 
GN⁺ 2025-04-16
Opiniões do Hacker News
  • Gostei desta ferramenta. Mas, seguindo a tradição do HN, pegando uma única palavra do texto para falar de algo quase — mas na prática totalmente — tangencial, há pelo menos três pontos em que dá para se dar um tiro no pé nesse tipo de cálculo

    1. 95% é muito mais amplo do que as pessoas costumam imaginar. As pessoas entendem 95% como “isso deve estar mais ou menos certo”, mas na prática está mais perto de “eu ficaria bem surpreso se não fosse isso”. Em geral, elas colocam barras de erro mentais estreitas demais
    2. Probabilidades raramente são realmente independentes. Dá para chamar isso de provérbio dos “Mortgage Derivatives”. No exemplo da família, o aluguel provavelmente está correlacionado com a alimentação, e, se o aluguel é alto, a alimentação provavelmente também é alta. Isso distorce a distribuição, e, se você modelar com uma distribuição uniforme sem pesos, vai se surpreender com o quanto o resultado real parece ser um “evento raro”
    3. Em geral, distribuições normais são mais raras do que as pessoas imaginam. Elas tendem a precisar de algum fator restritivo que force os valores. Na natureza, loops de feedback negativo aparecem por toda parte, então elas são comuns, mas, quando se sai do jardim relativamente organizado da mãe natureza e se entra no caos dos assuntos humanos, a distribuição normal se torna algo bem anormal
      A ferramenta e a implementação são boas, mas já vi muita gente que pegou estatística pela primeira vez perder um dedo
    • Concordo fortemente com isso, especialmente com o ponto 1. Quando você pede às pessoas que estimem um intervalo para uma resposta em que elas têm 90% de confiança, em média elas dão algo que corresponde mais ou menos a um intervalo de confiança de 30%
      Mais de 90% das pessoas nem chegam a um intervalo de confiança de 70%. Dá para testar você mesmo: https://blog.codinghorror.com/how-good-an-estimator-are-you/
    • Trabalhei em um projeto com stakeholders não técnicos para modelar datas estimadas de conclusão em um grande gráfico de Gantt. Algumas tarefas eram novas e irrealistas de quantificar como tempo fixo, então os stakeholders de negócio queriam tempos probabilísticos de conclusão das tarefas
      Eles gostaram muito da abordagem de especificar os tempos das tarefas como t_i ~ PERT(min, moda, max). É parecida com a forma como pensam e também lida com distribuições assimétricas comuns no mundo real
      Para referência, PERT é apenas uma distribuição beta reparametrizada de forma amigável e intuitiva para o usuário: https://rpubs.com/Kraj86186/985700
    • Isso combina com a impressão geral que tive ao ler o post. À medida que aumentavam a complexidade e a dificuldade de raciocinar sobre intervalos, minha confiança no resultado do cálculo de exemplo na verdade diminuía
      O resultado de US$ 50 era bom, e, ao colocar uma faixa de mais/menos em cima disso, dá para sentir que está basicamente perto do ponto de equilíbrio. Por outro lado, dizer que “há 95% de chance de o saldo real ficar entre -US$ 60 e +US$ 220” cria a ilusão de que você obteve uma informação mais específica, quando em cada etapa apenas adicionou mais composição de incertezas
      Se você não sabe se cada item é realmente 95%, nem quais são os verdadeiros valores mínimo/máximo, está apenas acrescentando mais palpites que podem estar errados. É por isso que também não gosto muito da equação de Drake. Cada etapa é uma acumulação de chutes grosseiros, e fico em dúvida se isso de fato produz um número útil
    • Não concordo muito com a ideia de que “o aluguel provavelmente está muito correlacionado com a alimentação, e, se o aluguel é alto, a alimentação provavelmente também é alta”. Um modelo em que o aluguel médio se correlaciona com o gasto médio com alimentação é razoável, mas, dados esses dois parâmetros, a variação em torno da média pode ser modelada como não correlacionada
      De qualquer forma, se você chegou ao ponto de querer levar esse tipo de coisa em conta, deveria estar fazendo estatística bayesiana de verdade
      Também não sei de onde vem a afirmação de que “a distribuição normal precisa de algum fator restritivo que force os valores”. O que é necessário são erros não correlacionados, não “restrições” nem “feedback negativo”
    • Nunca tinha pensado em estatística como ferramentas elétricas ou armas de fogo, mas a metáfora de que “quem pega estatística pela primeira vez perde um dedo” é certeira
  • Já criei uma ferramenta parecida
    fermi para linha de comando: https://git.nunosempere.com/NunoSempere/fermi
    Calculadora de distribuições para Android: https://f-droid.org/en/packages/com.nunosempere.distribution...
    Talvez você também se interesse pela versão mais complexa, https://www.squiggle-language.com/. Ou pela versão em C, mais rápida, mas muito mais verbosa: <https://git.nunosempere.com/personal/squiggle.c>

    • Em especial, Fermi tem a seguinte sintaxe
      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  
      
      A multiplicação é implícita como operação padrão, e a distribuição personalizada é lognormal
    • Outra ferramenta da mesma família é <https://carlo.app/>. Ela permite fazer esse tipo de cálculo no Google Sheets
    • Seria um detalhe legal se o Squiggle desse suporte à sintaxe a~b :^)
    • Testei o unsure calc e o app para Android, e eles parecem produzir resultados diferentes
  • Legal. Se você gostou do texto, o artigo “Dissolving the Fermi Paradox” também pode ser interessante. Ele se aprofunda mais em realmente multiplicar funções de densidade de probabilidade, em vez das estimativas pontuais comuns
    De forma um tanto surpreendente, o resultado é que talvez estejamos simplesmente sozinhos
    https://arxiv.org/abs/1806.02404

    • Sinceramente, é um pouco deprimente, mas quase todo mundo neste site deveria ler nem que seja pela metodologia
  • Eu criei uma ferramenta parecida, mas para linha de comando[1], com uma motivação semelhante, só que um pouco mais ambiciosa[2]
    Gosto muito do fato de mais pessoas estarem pensando dessa forma. A capacidade de raciocinar sobre fontes de variação não é algo que todo mundo recebe treinamento para fazer ou desenvolve, mas está se tornando cada vez mais importante[3]
    [1]: https://git.sr.ht/~kqr/precel
    [2]: https://entropicthoughts.com/precel-like-excel-for-uncertain...
    [3]: https://entropicthoughts.com/statistical-literacy

  • Os histogramas em ASCII art, ou mais precisamente em ANSI art, são legais. É um bom hack para fazer algo rapidamente
    Se fosse eu, provavelmente teria perdido 5 vezes mais tempo tentando várias bibliotecas de gráficos e depois desistido

    • Na mesma linha, as ilustrações toscas desenhadas à mão são bem boas. Combinam com o tema de “guardanapo”
    • Aqui [1] há uma implementação decente escrita em Awk. É meio bruta, mas parece fácil de estender
      [1] https://github.com/stefanhengl/histogram
  • https://www.getguesstimate.com/ é a versão disso feita como uma planilha

  • Existe alguma forma de fazer multiplicação que não seja multiplicação escalar? Por exemplo, se eu quiser dizer “a soma de três rolagens de dado”, deixando de lado o fato de que não é uma distribuição normal, eu gostaria que 1~6 * 3 = 1~6 + 1~6 + 1~6 = 6~15
    Mas, na prática, 1~6 * 3 = 3~18. Isso torna muito difícil fazer cálculos como “quanto tempo levará para concluir 1000 tarefas, cada uma levando de 10~100?”

  • Seria bom poder converter a saída de volta para um intervalo ou uma distribuição gaussiana
    Observação: se você está se perguntando por que há um número negativo (-5) no histograma, isso é uma desvantagem inevitável da simplicidade do Unsure Calculator. Sem conhecimento adicional, a calculadora não tem como saber que valores negativos são impossíveis
    A equação de Drake, ou equações que multiplicam probabilidades, também podem ser vistas no espaço logarítmico. Há incerteza na escala de cada probabilidade, e a probabilidade final passa a ser o resultado da multiplicação dos exponenciais das log-probabilidades. Assim, esse problema de números negativos não ocorre

    • O exemplo básico 100 / 4~617~25 como saída
  • No começo parece um brinquedo, mas parece surpreendentemente útil. Se saísse como um app para usar ao lado da calculadora do dia a dia, eu certamente instalaria
    Não consigo lembrar exatamente quando precisei disso, mas parece bem provável que, se eu o vinculasse a um atalho do teclado, começaria a encontrar usos para ele

    • Coloquei esses números aqui — população × taxa de posse × frequência de substituição × preço unitário — para estimar a receita anual do mercado de smartphones, e ficou a apenas alguns pontos percentuais do valor real encontrado na internet
      Como também há funções trigonométricas, parece bom para fazer engenharia reversa de peças complexas a partir de medições simples. Por exemplo, volume de formas, ângulos de arestas, áreas de seção transversal e coisas assim
      Seria bom ter suporte a distribuições multimodais, mas não é essencial. Funções trigonométricas inversas também seriam interessantes, mas são complicadas e não essenciais
      De todo modo, esta ferramenta é mais conveniente do que abrir o Python toda vez que quero estimar um intervalo de resposta
    • Se precisar de um app, vale considerar https://f-droid.org/en/packages/com.nunosempere.distribution...
    • Como a linguagem principal é Dart, parece que criar um app Flutter a partir disso seria fácil
  • Pedido de recurso: seria bom permitir especificar a distribuição de probabilidade. Por exemplo, ~ para distribuição normal, _ para distribuição uniforme, algo assim

    • Acho que isso deveria ser feito com funções. Por exemplo, uma distribuição gaussiana com µ=50 e σ=1 seria G(50, 1), uma distribuição exponencial negativa com λ=3 seria N(3), uma distribuição uniforme entre 0 e 1 seria U(0, 1), uma distribuição uniforme inteira de 1 a 6 seria UI(1, 6), e assim por diante
      Parece muito mais flexível e também mais fácil de lembrar
    • A ausência desse recurso em si é um recurso. O texto também diz isso