Simulación Monte Carlo en Excel, con o sin complementos
Hay tres maneras de hacer una simulación Monte Carlo con un modelo de Excel: con fórmulas RAND() y una tabla de datos, con un complemento o con una herramienta que ejecuta el archivo fuera de Excel. Todas recalculan el modelo miles de veces, con las entradas inciertas tomadas de rangos, y presentan los resultados como probabilidades: la probabilidad de superar el presupuesto, el costo que no se rebasa con un 80 % de confianza, las entradas que más pesan.
Por qué simular en lugar de usar un solo número
Una hoja de cálculo da una sola respuesta para un conjunto de entradas. Cuando las entradas son estimaciones, esa respuesta oculta cuánto puede desviarse, y suele ser optimista: sumar los costos más probables ignora que es más fácil que un costo se exceda a que quede por debajo. En nuestro ejemplo de costos de un proyecto, la estimación base, que es la suma de los costos más probables, se supera en el 94,2 % de los resultados simulados. Los casos mejor, base y peor no lo corrigen: son tres resultados sin decir qué tan probable es cada uno.
1. Solo Excel, sin complemento: RAND() y una tabla de datos
Excel no tiene un comando de simulación, pero sus funciones bastan para un modelo pequeño:
- Reemplace cada entrada incierta por un valor aleatorio.
RAND()devuelve un número uniforme entre 0 y 1; una función de distribución inversa lo convierte en un valor del rango que quiera (fórmulas más abajo). - Repita el cálculo. Escriba los números de iteración de 1 a 5000 en una columna y, en la columna siguiente, una fila por encima del primer número, una referencia a la celda de salida. Seleccione ambas columnas desde esa fila hacia abajo, elija Datos › Análisis de hipótesis › Tabla de datos (Data › What-If Analysis › Data Table) e indique como “Celda de entrada (columna)” (Column input cell) cualquier celda vacía de la misma hoja. Cada fila recalcula el archivo, así que cada fila obtiene valores aleatorios nuevos.
- Resuma la columna.
AVERAGE,PERCENTILE.INCyCOUNTIF(dividida entre el número de iteraciones) dan la media, el P80 y la probabilidad de superar un objetivo; un histograma muestra la forma.
| Entrada | Fórmula |
|---|---|
| Normal (media, desviación estándar) | =NORM.INV(RAND(), mean, sd) |
| PERT (mín., más probable, máx.) | =BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max) |
| Triangular (mín., más probable, máx.), con el valor aleatorio en U | =IF(U<(ml-min)/(max-min), min+SQRT(U*(max-min)*(ml-min)), max-SQRT((1-U)*(max-min)*(max-ml))) |
| Evento de riesgo (probabilidad p, costo c) | =IF(RAND()<p, c, 0) |
Esto funciona y es una buena manera de aprender. Sus límites se ven en los modelos reales:
- Una tabla de datos recalcula todo el archivo en cada iteración, por lo que los modelos grandes se vuelven lentos. Configurar el cálculo como “Automático excepto para tablas de datos” (“Automatic except for data tables”) deja el archivo utilizable entre una ejecución y otra.
RAND()da valores nuevos en cada recálculo, de modo que los resultados cambian cada vez que se recalcula el archivo, salvo que los pegue como valores.- La correlación entre entradas, el análisis de sensibilidad y los informes requieren fórmulas y gráficos propios.
2. Un complemento de Excel
Complementos como @RISK, Crystal Ball, Analytic Solver y ModelRisk agregan funciones de distribución a Excel (por ejemplo, una función PERT que se escribe en una celda), ejecutan las iteraciones y generan gráficos, análisis de sensibilidad e informes. Funcionan dentro de Excel: cada usuario necesita Excel y el complemento instalados, lo que en muchas empresas exige pedírselo a TI.
3. Una herramienta que ejecuta el archivo fuera de Excel
La tercera opción es una herramienta con motor de cálculo propio, que lee el archivo .xlsx y hace las iteraciones por su cuenta. xellstorm funciona así, en el navegador:
- Abra el archivo que ya tiene; se calcula en la pestaña del navegador y nunca se sube. Una comprobación de compatibilidad compara las fórmulas con los valores que guardó Excel y marca las celdas que el motor no sabe calcular.
- En el mapa del modelo, haga clic en las entradas inciertas y asígneles rangos; después, en los resultados que quiera seguir. Si el archivo ya usa
NORM.INV(RAND(), …)o las funciones de distribución más comunes de @RISK, ModelRisk o Analytic Solver, las fórmulas compatibles pasan a ser entradas, con los parámetros aún vinculados a sus celdas. La fórmulaBETA.INVde la PERT de arriba también se convierte: sus argumentos de forma, que son operaciones aritméticas, siguen vinculados y se evalúan antes de cada ejecución (vea Distribución PERT en Excel). - Cada ejecución parte de una semilla, así que el mismo modelo da siempre los mismos números, y en la mayoría de los archivos solo se recalculan las celdas que cambian en cada iteración.
Las tres formas comparadas
| Solo Excel | Complemento de Excel | xellstorm | |
|---|---|---|---|
| Instalación | Ninguna | Un complemento en Excel | Ninguna: se ejecuta en el navegador |
| Distribuciones | Construidas con fórmulas | Muchas, como funciones | 48, incluidas sus propias tablas |
| Repetir iteraciones | Una tabla de datos que recalcula todo el archivo | Integrado | Integrado; en la mayoría de los archivos recalcula solo lo que cambia |
| Mismos números la próxima vez | No, a menos que se peguen como valores | Con una semilla fija | Con una semilla, sea cual sea el número de núcleos de CPU |
| Correlación, sensibilidad, informes | Sus propias fórmulas y gráficos | Integrado | Integrado |
Cómo leer los resultados
- Media
- El promedio de todos los resultados simulados. Con entradas sesgadas difiere del resultado de las entradas más probables.
- Percentiles (P10, P50, P80, P90)
- El valor que el 10 %, el 50 %, el 80 % o el 90 % de los resultados no supera. P50 es la mediana; P80 y P90 son niveles de presupuesto habituales (más sobre los niveles de percentil).
- Probabilidad de un objetivo
- La proporción de resultados que cumplen una condición, como un costo total superior al presupuesto.
- Curva S
- La probabilidad acumulada según el resultado: de ahí se lee cualquier percentil o la probabilidad de quedar por debajo de un valor dado.
- Diagrama de tornado
- Cuánto se mueve el resultado cuando cada entrada pasa de un percentil bajo a uno alto, con las demás en su mediana; las barras más anchas son las entradas que más importan (diagramas de tornado).
- CVaR (promedio del peor 5 %)
- El promedio del peor 5 % de los resultados: qué tan malos son los peores casos, y no solo con qué frecuencia ocurren (cómo dimensionar una reserva a partir de los peores resultados).
¿Cuántas iteraciones?
Las necesarias para que las cifras que presenta dejen de moverse. El ruido de una media simulada disminuye con la raíz cuadrada del número de iteraciones: cuadruplicarlo lo reduce a la mitad. Unos pocos miles de iteraciones son un punto de partida habitual; los percentiles de la cola, como el P95, necesitan más que la media. xellstorm puede seguir ejecutando hasta que la media y los percentiles se estabilicen dentro de la tolerancia que elija.
Preguntas
¿Una simulación Monte Carlo es lo mismo que un análisis de escenarios?
No. El análisis de escenarios calcula unos pocos casos elegidos, como mejor, base y peor, sin decir qué tan probable es cada uno. Una simulación genera miles de combinaciones a partir de los rangos y le dice qué tan probable es cada resultado.
¿Qué distribución debo usar para una estimación?
Para estimaciones de expertos dadas como mínimo, más probable y máximo, PERT o triangular. Para magnitudes que no pueden bajar de cero y tienen una cola larga a la derecha, lognormal. Para un evento que ocurre o no, una probabilidad con un costo si ocurre. Si tiene datos, ajuste una distribución a ellos.
¿Necesito modificar mi archivo?
Con xellstorm no: las distribuciones se guardan aparte del archivo, no dentro de él, y pueden tomar sus números de celdas que ya existen, como las columnas Min / Likely / Max; las fórmulas quedan como las escribió. Con solo Excel o con un complemento, los rangos se guardan en el propio archivo, como fórmulas o como definiciones del complemento.
¿Cómo se crea una distribución PERT en Excel?
Excel no tiene una función PERT, pero una distribución PERT es una distribución beta escalada para ir del mínimo al máximo, así que BETA.INV sirve para generar valores de ella: =BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max), sustituyendo mínimo, más probable (ml) y máximo por referencias de celda. Su media es (mínimo + 4 × más probable + máximo) / 6. Distribución PERT en Excel la compara con la distribución triangular.
¿Se puede ejecutar una simulación Monte Carlo en Excel sin complemento?
Sí. Genere cada entrada incierta con una fórmula como =NORM.INV(RAND(), mean, sd), repita el modelo con una tabla de datos y resuma los resultados con AVERAGE, PERCENTILE.INC y COUNTIF. O abra el archivo en xellstorm, que ejecuta las iteraciones en el navegador, sin complemento y sin necesidad de Excel.
Relacionados
- Guía
Distribución PERT en Excel: fórmula, media y cuándo usarla
Una PERT es una distribución beta de mín. a máx. con media (mín. + 4 × probable + máx.)/6. La fórmula BETA.INV de Excel, y PERT frente a triangular. - Guía
P50, P80 y P90: qué significan y con cuál presupuestar
P80 es el costo que el 80 % de los resultados simulados no supera. Seis partidas de costo de un edificio suman 2843 en sus P80, pero el P80 de su suma es 2756 (miles de USD). - Guía
Diagramas de tornado y análisis de sensibilidad explicados
Un diagrama de tornado mueve cada entrada por separado, de P10 a P90 por defecto en xellstorm. En una estimación de obra, un riesgo mueve el costo en 150 (miles de USD). - Costo y cronograma de proyectos
¿Cuánta contingencia necesita un proyecto de construcción?
Ejemplo resuelto: en el 94,2 % de los resultados simulados, el edificio cuesta más que la suma de sus costos más probables. Dimensione la contingencia de costos de construcción con Monte Carlo.
xellstorm es una herramienta de simulación Monte Carlo para modelos de Excel que funciona en el navegador: sin complemento, y el archivo nunca sale de su equipo.