MBA - Casos Método Montecarlo
Simulación con Modelos Determinísticos
Minicaso 3 Freight Forwarder
Un caso de emprendedora exitoso en la región vitı́cola de Mednoza Argentina está ligado a una egresada de la carrera de ingenierı́a industrial que a comienzos de la década de 1990, ante la incertidumbre de las crisis económicas decidió, sin capital alguno, lanzarse como free lance en el negocio de mover containers con vino a los puertos de Valparaı́so y San Antonio - Chile. Su empresa actuaba como intgradora de servicios entre transportistas, despachantes de aduana, bodegas, navieras y clientes de brokers en el extranjero.
Un factor clave de éxito ( KPI ) era el tamaño de lote óptimo a transportar en cada envı́o. Es bien conocido el modelo de Wilson que data de la década de 1920, pero que hoy resulta casi una garantı́a al fracaso si se utiliza en contextos tan turbulentos como los que nos toca vivir. A pesar de ello el modelo aún se estudia y no es descartado, pués sirve de base para ser mejorado. El modelo tiene tres variables independientes y una dependiente, a saber:
El modelo de Wilson
Variables Independientes
Demanda Media Anual D (en Containers por año)
Costo de almacenamiento unitario Ca ($ por mes)
Costo de emisión o gestión Ce ($ por orden)
Variable Dependiente
- Tamaño de Lote Mensual EOQ
Modelo Mateático
\[ {EOQ} = \sqrt {(\frac {2*D * Ce} {Ca} )}\]
El caso de la Bodega Torrenti operada por el Freight Forwarder
Esta bodega tiene tres destinos principales de exportación.
- Estados Unidos demanda 500 TEUs al año
- Brasil demanda 53 TEUs al año
- Cadandá demand 28 TEUs al año
Costo de Almacenamiento U$D 2.500
Costo de Gestión U$D 750
Modelado numérico en R-CRAN
[1] 18.65476
Inventarios Estocásticos con Simulación Montecarlo
** Simulación con modelos Estocásticos **
Cálculo del EOQ por Montecarlo
Este método no concibe a las variables independientes como fijas, sino que las considera variables aleatorias e introduce Ruido en el modelo matemático. En esta parte deberíaos analizar el comportamento de cada variable y asociarle una distribución (función paramétrica) de probabilidad. Por sencillez supondremos en este ejemplo que las varaibles siguen una distribución normal.
En rigor deberíamos estudiar que distribución siguen los datos con los que alimentaremos el modelo. <bR R-Cran tiene por defecto definidas las siguientes distribuciones de probabilidad.
- Normal
- Logística
- Uniforme
- Gamma
- Lognormal
- Weibull
- Cauchy
- Exponencial
- Chi-cuadrado
- F
- T-Student.
Puede explorar el paquete rriskDistributions que le dará una idea más clara. Generaremos una muestra al azar de 47 valores con media 40 y desvio standard 5
%{r, echo=TRUE} library(rriskDistributions) muestra=rnorm(47,40,5) muestra fit.cont(muestra) %
Estocatización de Variables
Estados Unidos demanda promedio 500 TEUs al año con una varianza de 90
Cadandá demanda promedio 28 TEUs con una varianza de 6 al año
Brasil demanda promedio 93 TEUs al año con una varianza de 8
Costo de Almacenamiento U$D 2.500 Varianza 1.000
Costo de Gestión U$D 750 varianza 250
Cálculo del EOQ Montecarlo
#Genero tres variables aleatorias normales con
#una cantidad de muestras m igual a tres veces #el tamaño de la media
m1 <- 500*3
D1 <- rnorm(m1,500,90)
m2 <- 93*3
D2 <- rnorm(m2,93,8)
m3 <- 28*3
D3 <- rnorm(m3,28,6)
D <- c(D1,D2,D3)
# m_d muestras de demanda
m_d <- length(D)
#Generamos las variables aleatorias de costos igual a la cantidad de muestras de demanda que tenemos.
Ca <- rnorm(m_d,2500,1000)
Ce <- rnorm (m_d,750,250)
# Preparo área de graficos 3 filas 1 columna
#par(mfcol=c(1,3))
#Grafico 1
plot(density(D),
xlab="Demanda TEU", #Change the x-axis label
ylab="Densidad", #y-axis label
main="Muestras de Demanda 5 años")#Main title
#Grafico 2
plot(density(Ca),
xlab="Costo Almacenamiento", #x-axis label
ylab="% eventos registrados", # y label
main="Población Costos Almacenamiento")
#Grafico 3
plot(density(Ce),
xlab="Costo Gestión Inventario", #x-axis label
ylab="% eventos registrados", # y label
main="Población Costos Emisión")
Cálculo de muestras de lote Económico EOQ
En este caso realizaremos las mismas operaciones que antes, pero las variables independientes ahora serán matrices y el resultado será un conjunto de valores con su propia distribución de probabilidades.
[1] 16.46535
[1] 139.6855
[1] 11.81886
Hallaremos los valores máximos y mínimos de las variables dependientes e independientes
[1] 469
[1] 177
[1] 1651
Valores Mínimos
[1] -546.7855
[1] -32.45866
[1] 0.6399603
[1] 247
[1] 882
[1] 199
VAN y TIR por el método Montecarlo
Recurriremos al uso de una biblioteca llamada FinCal, para repetir el proceso que ya ensayamos con el modelo del lote económico EOQ. Es decir veremos como usar R-CRAN para operar sobre un vector que tiene los flujos de fondos descontados e un proyecto utilizando una biblioteca específicamente diseñada para ello. Luego alimentaremos al modelo no con un vector de datos sino con un vector que contiene dos filas. La primera será el flujo de fondo tal como se usó en el primer caso y la segunda es una componente que representa la volatilidad. Este concepto de “volatilidad” hace referencia al riesgo que sumimos en pronosticar ingresos y egresos a futuro. Nuestra certeza sobre los flujos de hace menos confiable conforme transcurre más tiempo en el desarrollo del proyecto. Por lo tanto la segundo componente del nuevo vector tiene algo así como la varianza creciente por la que afectaremos a los pronósticos de fondos futuros.
Repaso de Matemática Financiera
Uso de la biblioteca FinCal
Tal como se señalo más arriba deberemos instalar la biblioteca usanso el comando respectivo solo la primera vez que deseemos instalar en unestro computador. Ejecuteremos entonces:
install.packages("FinCal")
A partir de este momento podemos invocar a la biblioteca como ya sabemos.
Esta biblioteca ha agregado 62 comandos de matemática financiera a nuestra computadora. para saber cuales son ejecutamos la siguiente línea.
[1] "bdy" "bdy2mmy" "candlestickChart"
[4] "cash.ratio" "coefficient.variation" "cogs"
[7] "current.ratio" "ddb" "debt.ratio"
[10] "diluted.EPS" "discount.rate" "ear"
[13] "ear.continuous" "ear2bey" "ear2hpr"
[16] "EIR" "EPS" "financial.leverage"
[19] "fv" "fv.annuity" "fv.simple"
[22] "fv.uneven" "geometric.mean" "get.ohlc.google"
[25] "get.ohlc.yahoo" "get.ohlcs.google" "get.ohlcs.yahoo"
[28] "gpm" "harmonic.mean" "hpr"
[31] "hpr2bey" "hpr2ear" "hpr2mmy"
[34] "irr" "irr2" "iss"
[37] "lineChart" "lineChartMult" "lt.d2e"
[40] "mmy2hpr" "n.period" "npm"
[43] "npv" "pmt" "pv"
[46] "pv.annuity" "pv.perpetuity" "pv.simple"
[49] "pv.uneven" "quick.ratio" "r.continuous"
[52] "r.norminal" "r.perpetuity" "sampling.error"
[55] "SFRatio" "Sharpe.ratio" "slde"
[58] "total.d2e" "twrr" "volumeChart"
[61] "was" "wpr"
Si necesito conocer que hace cada comando nuevo puedo usar el signo de pregunta para ver la página de ayuda interna. Asi:
?npv
Esto debería darle información sobre cada comando nuevo. Veremos algunos ejemplos simples para que tome experiencia en el caso de simulación determinística de flujo de fondos.
Minicaso Van y TIR
Un inversionista coloca $100 durante un año a una tasa de interés simple de 1.5% mensual pagadera mensualmente
¿Qué retribución obtiene durante el año?
[1] 118
Minicaso Reinversión de Dividendos
Considere el caso del inversionista del ejemplo anterior, pero suponiendo que recibe los intereses al final de cada mes y que los reinvierte inmediatamente en las mismas condiciones de la inversión inicial.
¿Qué cantidad de dinero recibirá al cabo de un año ?
[1] 119.5618
Convertir de tasa Anual a Mensual
¿Cuál es la tasa de interés nominal anual de una inversión que ofrece el 1.5% de interés pagado al final de cada mes?
[1] 0.1801125
Plazo fijo
¿Cuál es la tasa efectiva anual de rendimiento de una inversión que ofrece un interés nominal anual del 8%, pagadero cada semestre vencido, pero que el interesado procede a reinvertirlo?
[1] 0.0816
Minicaso flujo de fondos
Crearemo un flujo de fondos consolidado de un proyecto hipotético de la creación de una bodega boutique con destino enoturístico que compite contra otro proyecto similar pero del terreno de la cervezería artesanal. Cada uno de estos proyectos será identificado por los flujos totales FFN1 y FFN2. El proyecto comienza en 2019 y se puede recuperar la inversión hasta 2028
Crearemos el primer flujo de fondos:
#Enoturismo
año<-
c(2019,2020,2021,2022,2023,2024,2025,2026,2027,2028)
FFN1<-c(-940693, 186255, 186255, 186255,
37323,37323,37323,37323, 116482, 280651)
plot(año,FFN1,pch=19,cex=3,col="dark red",type="b")
abline(0,0)
Ahora crearemos el flujo de fondo correspondientes a la actividad de la cerveza. Este proyecto tiene equipos de frío que no sirven más a partir del año 2024.
#Cerveza artesanal
FFN2<-c(-19132841, 5691206, -14230711,
16387818, 24645898)
plot(año[2:6],FFN2,pch=19,cex=3,col=rgb(.25,
0.5, .3), type="b")
abline(0,0)
Selección de proyecto más conveniente
Comparemos los VAN de ambos proyectos
VAN Enoturismo
[1] 5643.277
Este proyecto se realiza en un país riesgoso de modo que lo castigo con una tasa más alta.
VAN Cerveza Artesanal
[1] 11009906
Selección de mejor proyecto
Proyecto del Enoturismo
Comparación por TIR
[1] 0.03481718
[1] 0.1487625
Según el TIR el proyecto más conveniente es:
Proyecto de creveza artesanal.
¿Que proyecto elegirías tu?
TIR y VAN con Montecarlo
Determinaremos cuantos períodos tiene cada proyecto y le asignaremos una varianza creciente a sus flujos de fondos. Esto podría hacerse con la distribución de probalilidades F se Snedecor (Senedorv o Snedecorf). Pero por sencillez tomaremos valores estimados por nosotros.
Vector de Volatilidad
[1] 10
Flujo de Fondos Estocástico
VAN con Montecarlo
Al parecer el uso de matemática financiera nos dice que el proyecto de la cerveza artesanal es el mejor, pero ¿que tan cierto es esto si consideramos la volatilidad creciente o incertidumbre a futuro?
Las funciones de FinCal pueden aplicarse a una variable sola (que en realidad es una matriz de uno por uno), pero también a una matriz de mayores dimensiones. En lugar de darnos un valor nos dará una campana de Gauss de valores de salida.
Para ello crearemos un dataset. En lugar de tomas
Generaremos 144 (12x12) valores aleatorios con una media igual al flujo de fondos que usamos antes (FFN1 como valor promedio), pero ahora usaremos la volatilidad como varianza para este dataset
FFN_S <- matrix(rnorm(144,FFN1,Volatilidad),
ncol=12, nrow=12, byrow=TRUE )
# FFN_S[ ,1] <- rnorm(12, FFN1[1],0.1*Volatilidad[1])
En este caso FFN_S representa el flujo de fondos Estocástico de 12 alternativas tomadas aleatoriamente usando la volatilidad como generador estocástico.
¿Por qué el proyecto de enoturismo es tan riesgoso?
Histograma del VAN Enoturismo
#creo una variable auxiliar
VAN_S <- c(0,0,0,0,0,0,0,0,0,0,0,0)
# cargo en esa variable los valores de flujos aleatorios
for (i in 1:12) { (VAN_S[i] <-
# calculo para cada uno de los 12 fondos un VAN
FinCal::npv(18,FFN_S[i,] ))}
# imprimo el histograma
hist(VAN_S, breaks = 20)
Que opinas de la posibilidad de éxito de este proyecto
Densidad de valores en el VAN Montecarlo
Call:
density.default(x = VAN_S)
Data: VAN_S (12 obs.); Bandwidth 'bw' = 9.327e+04
x y
Min. :-1255821 Min. :8.593e-09
1st Qu.:-1004397 1st Qu.:2.485e-07
Median : -752973 Median :1.167e-06
Mean : -752973 Mean :9.928e-07
3rd Qu.: -501549 3rd Qu.:1.561e-06
Max. : -250124 Max. :2.021e-06