- Introducción al concepto del tipo
Uncertain<T>, una nueva abstracción para manejar la incertidumbre a nivel de código
- Este tipo aplica metodologías de programación probabilística para modelar la confianza o posibilidad de un valor en lugar de la lógica booleana tradicional
- Ofrece funciones para tratar datos reales con mucho ruido, como GPS o datos de sensores, como distribuciones de probabilidad matemáticas
- Soporta un equilibrio entre eficiencia computacional y confiabilidad de resultados mediante técnicas de muestreo como SPRT y métodos de Monte Carlo
- Permite una integración gradual con código existente, por lo que resulta muy aplicable en entornos reales
Codificar la incertidumbre: la brecha entre la confianza y los datos reales
- Se menciona el fenómeno de que muchas personas dependen demasiado de la certeza
- Se señala que, conforme aumenta la experiencia en desarrollo de software, se vuelve más frecuente decir “depende del contexto”
- En el código, sin embargo, se sigue repitiendo el patrón de depender solo de juicios verdadero/falso
- Se critica especialmente la realidad de usar solo valores booleanos incluso al tratar datos inciertos como los del GPS
- El modelo de programación binariza demasiado rápido la ‘incertidumbre’ del mundo real y oculta su complejidad
Elegir la abstracción correcta
- En 2014, la University of Washington y Microsoft Research propusieron un concepto que refleja directamente la incertidumbre en el sistema de tipos
- El artículo "Uncertain<T>: A First-Order Type for Uncertain Data" demostró que el enfoque de programación probabilística es práctico
- Se publicó en un repositorio de GitHub código que adapta el concepto a Swift
- Con
Uncertain<T>, los resultados de comparación también se expresan como probabilidades relativas, y en vez de devolver verdadero/falso, regresan Uncertain<Bool>
- El error de posición del GPS se modela según características de datos reales, como con una distribución de Rayleigh
Cómo funcionan en la práctica distintas operaciones con incertidumbre
- Soporta varios operadores y modelos de distribución de probabilidad, y construye un grafo de operaciones para muestrear solo cuando hace falta
- Usa SPRT (Sequential Probability Ratio Testing) para ajustar eficientemente la cantidad de muestras
- En el código de ejemplo se explica la diferencia en el número de muestras necesarias entre comparaciones simples y comparaciones compuestas
- Con esta abstracción, en vez de ignorar la incertidumbre, se la aprovecha de forma natural durante el cálculo para implementar código más ‘inteligente’
Aplicación de la metodología Monte Carlo
- Se introduce el muestreo Monte Carlo para analizar distribuciones de probabilidad y estimar valores esperados
- En la práctica, se puede obtener fácilmente el valor esperado simulando repetidamente el resultado de una tragamonedas
- Incluso sin cálculos analíticos complejos, es posible producir resultados realistas solo con muestreo repetido por computadora
Modelado rico de distribuciones de probabilidad
Uncertain<T> incluye varios constructores de distribuciones de probabilidad, lo que permite modelar con precisión datos del mundo real como ruido de sensores, comportamiento de usuarios o latencia de red
- Soporta parametrización para distintos casos, como mixture, Bernoulli, exponential y normal
- También se ofrece por separado un proyecto de visualización interactiva para ayudar a comprender intuitivamente cada distribución
Operaciones estadísticas y de análisis disponibles
- Ofrece diversas funciones estadísticas como valor esperado, desviación estándar, intervalo de confianza, asimetría (skewness), curtosis (kurtosis) y entropía
- Los resultados de las operaciones también permiten ajustar la cantidad de muestras, haciendo posible un trade-off entre precisión y eficiencia
- Con la función de distribución acumulada (CDF), también se puede calcular fácilmente la probabilidad de que un valor sea menor o igual a cierto umbral
Guía para su aplicación en el mundo real
- Se explican problemas que pueden surgir en apps reales cuando se ignora la incertidumbre (por ejemplo, mostrar velocidades de GPS absurdas)
- Se enfatiza una transición gradual: se recomienda integrar
Uncertain<T> de forma parcial, empezando por rutas críticas como la medición de distancia
- Es posible ajustar el equilibrio entre exactitud y rendimiento mediante configuraciones del costo computacional, como la cantidad de muestras
- En entornos profesionales se recomienda usar activamente herramientas de perfilado como Instruments.app
- El objetivo no es eliminar la incertidumbre, sino reconocer su existencia y establecer patrones de desarrollo para manejarla adecuadamente
Conclusión y perspectiva
- Se espera que los desarrolladores introduzcan el manejo de la incertidumbre desde áreas pequeñas para mejorar la usabilidad y reducir errores
- Al aceptar que la certeza total no existe, se puede elevar la calidad del software con herramientas y abstracciones adecuadas
- En términos prácticos, manejar correctamente la incertidumbre que realmente existe es la verdadera mejora para el trabajo real
1 comentarios
Comentarios de Hacker News
y = m * x + b, cuando todos estos son literales no es más que una simple función de renderizado; pero si las variables contienen toda la estructura del camino de operaciones del que se derivaron, entonces, según la dirección del cálculo, se puede predecir un valor para renderizarlo (forward pass) o calcular automáticamente gradientes/derivadas para llegar hasta el entrenamiento de redes neuronales. Si estos resultados se muestrean matemáticamente, es posible obtener los pesos que forman el modelo. Así está diseñada cada capa del deep learning, y sistemas como PyTorch pueden compilar código óptimo incluso si solo se especifica la combinación de operaciones. Es decir, Uncertain<T> es apenas el punto de partida, y si imaginamos que cualquier variable numérica puede definirse en cualquier momento como metadatos de valores candidatos, y que esos metadatos pueden manipularse con la misma facilidad que sumar valores de variables, se vuelve un experimento muy interesante.10cm +8mm/-3mm, donde el rango permitido queda claramente indicado por arriba y por abajo. También en preguntas como “¿ya casi llegamos?” basadas en GPS, cabría esperar que sea importante entender la direccionalidad del error y distinguir los casos mejores o peores según la “dirección” de la incertidumbre.(-2,2)*(-2,2), el resultado es(-4,4), pero en términos probabilísticos la ocurrencia simultánea de valores extremos es mucho menos probable, así que algo como(-2.35,2.35)sería más realista.certain T.