Chile exporta uva de mesa a muchos países, y en cada temporada quien exporta tiene que decidir cuánto enviar, cuándo y hacia qué mercado. Desde el Puerto de San Antonio, un barco demora entre 1 semana (Colombia) y 4 semanas (Países Bajos y Alemania), así que el precio que se pagará por la fruta no se conoce cuando se decide el envío.
Decofrut, una empresa que levanta y publica información sobre exportaciones e importaciones de productos agrícolas, nos facilitó los precios semanales de exportación de uva hacia seis de los mercados principales (Brasil, Colombia, Estados Unidos, México, Países Bajos y Alemania) entre 2015 y 2017. Con esos datos desarrollamos una herramienta que recomienda un plan de exportación según cuánto riesgo está dispuesto a aceptar quien decide. Más abajo explicamos cómo funciona, con la formulación matemática incluida, y al final puedes ver la demo paso a paso.
Los precios de los commodities son volátiles: entre 2004 y 2014 la volatilidad promedio fue cuatro veces la de la década anterior. Si quien exporta solo maximiza la utilidad esperada, termina enviando todo al mercado que en promedio paga más, y en un escenario malo ese mercado puede pagar menos que el costo de producir la fruta. Hay que maximizar la utilidad y, al mismo tiempo, limitar su riesgo.
Además, el tiempo de viaje impide corregir un envío ya hecho. Una salida es guardar parte de la fruta en inventario y decidir su destino en una segunda etapa, cuando ya se conocen los primeros precios, pero eso tiene un costo de almacenamiento y vuelve el problema mucho más grande: cada escenario de precios de la primera etapa abre su propio conjunto de escenarios de la segunda.
El trabajo tuvo cuatro frentes: pronosticar los precios de cada mercado con datos reales, armar con esos pronósticos un árbol de escenarios, formular un modelo de optimización con una restricción de riesgo y reducir ese modelo a una forma que se resuelva rápido. El resultado tiene que ser una recomendación que pueda usar alguien que toma decisiones de exportación y no necesita saber de optimización.
Cada vez que alguien usa la herramienta ocurren cuatro etapas. La primera convierte datos en escenarios, la segunda y la tercera formulan y resuelven el problema, y la última lo traduce en decisiones.
Chequeamos los parámetros, pronosticamos los precios de cada mercado y armamos un árbol de escenarios de dos etapas.
Un modelo de optimización elige cuánto enviar a cada mercado, cuánto almacenar y cuánto vender localmente, con un tope al riesgo de la utilidad.
El modelo se reduce a una forma clásica de Markowitz y se calcula, de una sola vez, la frontera de planes eficientes para todos los niveles de riesgo.
Convertimos la solución en un plan en toneladas, con la regla para la segunda etapa, y entregamos el análisis de sensibilidad.
Antes de pronosticar y de escribir el modelo, estos son los conjuntos y los datos que usamos en las fórmulas de más abajo.
Antes de optimizar, la herramienta hace tres cosas: comprueba que los parámetros tengan sentido, pronostica los precios de cada mercado y los convierte en un árbol de escenarios. El modelo es tan bueno como esos escenarios.
Algunas combinaciones de parámetros rompen los supuestos del modelo, y se pueden detectar antes de pronosticar o resolver nada. La herramienta las marca en la propia pantalla de configuración, mientras se ajustan los datos:
Lo que se envía en la primera etapa tiene que llegar antes de la segunda decisión.
Lo que se envía en la segunda etapa tiene que llegar dentro del horizonte.
El precio de salvataje no puede superar lo que se espera obtener en ningún mercado, o el mercado local sería la mejor opción siempre.
El costo de inventario no es negativo y las probabilidades de los escenarios suman 1.
Así se ve en la herramienta. Si se pide una segunda decisión a 2 semanas, pero Rotterdam y Hamburgo demoran 4, el panel marca el primer chequeo en rojo y señala los mercados que lo incumplen.
Probamos tres métodos habituales en la literatura: movimiento browniano geométrico, vectores autorregresivos (VAR) y suavizamiento exponencial de Holt-Winters. Para compararlos, medimos el error de cada uno contra el precio semanal que realmente se observó en México durante 2017, con tres indicadores: el error porcentual absoluto medio (MAPE), la desviación absoluta media (MAD) y la señal de rastreo (TS), que detecta si un método sobreestima o subestima de forma sistemática.
| Método | MAPE | MAD | TS |
|---|---|---|---|
| Holt-Winters | 14,66% | 0,39 | 5,83 |
| Vectores autorregresivos (VAR) | 15,17% | 0,42 | 10,82 |
| Movimiento browniano geométrico | 15,87% | 0,40 | −26,75 |
Holt-Winters tuvo el mejor resultado en los tres indicadores, así que la herramienta lo deja seleccionado, y se puede cambiar manualmente. Con el método elegido se simulan trayectorias semanales de precio para cada mercado. En el gráfico se ve cómo, para México, el promedio de las trayectorias simuladas sigue de cerca al precio observado.
Con las trayectorias simuladas se arma un árbol de dos etapas. Para la primera etapa se generan 14 escenarios de precios, y a partir de cada uno se generan otros 14 para la segunda: en total \(|\Omega_2| = 14 \cdot 14 = 196\) escenarios de segunda etapa. En cada escenario, la utilidad por libra de un mercado es el precio menos el costo de transporte \(\kappa_i\).
De ese árbol salen los números que usa el modelo: la utilidad esperada y la volatilidad de cada mercado en cada etapa, y las correlaciones entre mercados. Los mercados más lejanos, que requieren más semanas de viaje, tienen precios más volátiles. Las correlaciones importan porque la diversificación solo funciona entre precios que no se mueven juntos: Países Bajos y Alemania, por ejemplo, tienen una correlación de −0,31 en la primera etapa, de modo que repartir la carga entre ambos reduce el riesgo sin renunciar a mercados con alta utilidad esperada.
El modelo busca la mayor utilidad esperada posible, sujeta a que la variabilidad de esa utilidad no supere un tope que fija quien decide. Es una extensión del modelo media-varianza de Markowitz, el mismo que se usa para armar carteras de inversión, con dos etapas de decisión. Antes de cada fórmula va la versión en castellano, así que si las fórmulas no son lo tuyo, igual puedes quedarte con la idea.
Supongamos que producir una libra de fruta cuesta 1,5 y que hay dos mercados, A y B. Cada uno tiene dos escenarios de precio igualmente probables.
| Mercado | Escenario 1 | Escenario 2 | Precio esperado | Utilidad esperada |
|---|---|---|---|---|
| A | 1 | 5 | 3 | 1,5 |
| B | 3 | 2 | 2,5 | 1 |
Quien solo mira la utilidad esperada envía todo a A, pero con probabilidad 0,5 se realiza el escenario 1, donde el precio (1) queda por debajo del costo (1,5) y hay pérdida. Enviar todo a B da menos utilidad esperada, pero asegura ganancia. La alternativa es repartir: con el mismo nivel de riesgo se puede lograr una utilidad esperada igual o mayor que la de cualquiera de los dos extremos, porque los precios de A y B no se mueven juntos.
Si además se puede guardar parte de la fruta y decidir después, cuando ya se conoció el precio al que se vendió lo enviado, el reparto mejora todavía más: la segunda decisión puede reaccionar a la nueva información. Esa es la idea del modelo de dos etapas.
Cuando llega la semana \(\tau\), el escenario \(\omega_1\) ya es conocido, y queda decidir qué hacer con lo almacenado. Esa decisión es un problema de optimización más pequeño, uno por cada escenario \(\omega_1\).
Todo lo almacenado se exporta o se vende localmente.
Se elige el reparto de mayor utilidad esperada dado \(\omega_1\), restando el costo de inventario \(c\) por cada libra almacenada.
Todo el stock se envía hoy, se vende localmente o se almacena.
La variabilidad de la utilidad total no puede superar el tope que acepta quien decide.
Todas las proporciones son no negativas.
La herramienta maximiza la utilidad esperada de todo el plan: lo que se gana con lo que se envía o se vende hoy, más lo que se espera ganar con lo almacenado, una vez que se conozca el escenario y se tome la mejor decisión de segunda etapa. Los símbolos \(U_{i1}\) y \(U_{i2}\) son las utilidades por libra, aleatorias, en cada mercado y etapa. Cada nivel de \(\sigma_{\text{MAX}}\) entrega un plan distinto, y la restricción de variabilidad (b) es la que hace que el modelo se pueda ajustar a quien lo usa.
Con todos los escenarios, el modelo de dos etapas es grande y tiene una restricción cuadrática. Lo reducimos a una forma que se resuelve rápido, y con el mismo cálculo se obtienen los planes de todos los niveles de riesgo.
Cada subproblema de segunda etapa es lineal, y al analizarlo con dualidad se obtiene que la mejor decisión siempre consiste en enviar todo lo almacenado al mercado de mayor utilidad esperada, o venderlo localmente, según cuál rinda más. No hace falta tener una variable por escenario y mercado: la segunda etapa se resume en una sola decisión, \(h\), y en un valor que se calcula de antemano para cada escenario:
\(u_F^{\omega_1}\) es la utilidad por libra de lo almacenado si ocurre el escenario \(\omega_1\), y \(u_F\) es su valor esperado. Con esto, los términos de variabilidad del modelo quedan escritos en función de tres tipos de covarianza entre los precios, que se calculan una sola vez a partir del árbol de escenarios:
Con ese resultado, el modelo completo se escribe con solo \(|N| + 2\) variables, que en el caso son 8, sin importar cuántos escenarios haya. Primero el objetivo, que es maximizar la utilidad esperada, y luego las restricciones:
La variabilidad de la utilidad no supera el tope.
Todo el stock se reparte.
Las proporciones no son negativas.
Este modelo tiene exactamente la misma estructura que el de Markowitz para carteras de inversión: un objetivo lineal, una restricción cuadrática de varianza y una restricción de suma 1. Eso permite usar algoritmos especializados que ya existen para él.
La herramienta resuelve el modelo con el Critical Line Algorithm de Markowitz. En vez de resolver un problema por cada valor de \(\sigma_{\text{MAX}}\), el algoritmo calcula los puntos críticos de la frontera de portafolios eficientes, es decir, los niveles de riesgo en los que un mercado entra o sale del plan, y el resto de la frontera se obtiene combinando puntos críticos vecinos. Con una sola corrida, la herramienta tiene la utilidad esperada máxima para cada nivel de riesgo, y mover el control de tolerancia al riesgo en la pantalla es instantáneo.
El tamaño del problema original depende de la cantidad de escenarios. En la investigación resolvimos instancias con 500 escenarios de primera etapa y 250.000 de segunda, en un computador personal con 8 núcleos y 16 GB de memoria, con Python y Gurobi. Para el caso con datos reales, con 14 escenarios de primera etapa y 196 de segunda, el cálculo de la frontera es liviano.
Referencia: Markowitz, H. (1952). Portfolio selection. The Journal of Finance, 7(1), 77-91.
Una vez resuelto el modelo, se pasa al postprocesamiento: convertir las proporciones en un plan que se pueda ejecutar y analizar qué tan robusto es frente a cambios en el riesgo y en los costos.
El modelo entrega proporciones del stock. La herramienta las multiplica por las toneladas disponibles y entrega dos cosas: lo que se envía hoy a cada mercado, junto con lo que se almacena, y una regla para la segunda etapa. La regla es una lista, con una fila por cada escenario de primera etapa, que indica a qué mercado enviar todo lo almacenado o si conviene venderlo localmente. Cuando llega la semana de la segunda decisión y se conocen los precios, quien decide busca su escenario y aplica la regla. En el caso de estudio, lo almacenado se envió a Países Bajos en 7 de los 14 escenarios, a Alemania en 6 y a Colombia en 1.
Postergar parte del envío tiene un beneficio y un costo, y no siempre compensa. Por eso la herramienta calcula dos planes: uno fijo, que decide todo hoy, y uno dinámico, que reserva parte para decidir después. La diferencia en utilidad esperada se llama valor de la solución estocástica (Birge, 1982). En el caso de estudio es cercana a cero, e incluso levemente negativa, cuando el riesgo admitido es bajo, porque con poco riesgo conviene diversificar entre mercados desde el comienzo. A medida que sube el riesgo admitido, el beneficio de reaccionar crece hasta cerca de 9%.
Con la misma solución se calculan tres indicadores que ayudan a decidir cuánto riesgo asumir y en qué conviene invertir:
Riesgo. Cuando no se admite riesgo, el plan vende todo en el mercado local al precio de salvataje. A medida que sube \(\sigma_{\text{MAX}}\), el plan se reparte entre más mercados y después se concentra en Países Bajos y Alemania, que son los de mayor utilidad esperada y mayor volatilidad.
Costo de inventario. Mientras más cuesta almacenar, menos conviene postergar. Para quien es neutral al riesgo existe un costo máximo de inventario, 0,287 USD por libra en el caso de estudio, desde el cual ya no conviene esperar. Con costos bajos, el plan dinámico supera al fijo, y a medida que el costo sube los dos planes se parecen hasta coincidir.
Costo de la incertidumbre. Se compara la utilidad del plan con la que se obtendría si los precios se conocieran de antemano, que es una cota máxima. Planificar con incertidumbre cuesta entre 5% y 30% de la utilidad esperada, y ese costo baja cuando quien decide acepta más riesgo. Es una forma de medir cuánto valdría conseguir mejor información de precios.
Para comprobar que el plan funciona fuera de los datos con los que se calculó, se generan dos árboles de 500 escenarios de primera etapa y 500 de segunda por cada uno. Con uno de ellos, el de entrenamiento, se calcula el plan, y con el otro, el de prueba, se mide la utilidad que habría dado. En todos los casos la desviación estándar de la utilidad quedó por debajo del tope pedido, que es lo que se esperaba del modelo. El plan dinámico rindió igual o más que el fijo, con una diferencia de cerca de 6% a un tope de riesgo alto.
| Tope de riesgo | Costo de inventario | Plan fijo: promedio | Plan fijo: desviación | Plan dinámico: promedio | Plan dinámico: desviación | Diferencia |
|---|---|---|---|---|---|---|
| 0,5 | 0,0 | 2,56 | 0,50 | 2,72 | 0,46 | +6,4% |
| 0,5 | 0,1 | 2,44 | 0,38 | 2,59 | 0,45 | +6,1% |
| 0,3 | 0,0 | 2,47 | 0,30 | 2,55 | 0,29 | +3,3% |
| 0,1 | 0,0 | 2,26 | 0,10 | 2,26 | 0,10 | 0,0% |
Utilidades en USD por libra. Referencia: Birge, J. R. (1982). The value of the stochastic solution in stochastic linear programs with fixed recourse. Mathematical Programming, 24, 314-325. Esta investigación corresponde a la tesis de magíster de Nicolás Vargas Cisternas, Modelo de Markowitz en dos etapas para optimizar planes de exportación de commodity (Pontificia Universidad Católica de Chile, 2023).
Primero se le cuenta a la herramienta qué se quiere decidir: cuándo es la primera y la segunda decisión, a qué mercados se puede enviar y cuánto cuesta almacenar la fruta. Los tiempos y los costos de transporte salen de la ruta marítima desde San Antonio. El panel de la derecha se actualiza en vivo y avisa si algún parámetro rompe un supuesto del modelo.
La herramienta prueba los tres métodos sobre las semanas ya observadas y deja seleccionado el de menor error, en este caso Holt-Winters. El gráfico compara, para México, el precio que realmente ocurrió con las trayectorias simuladas, y sirve para confiar (o no) en el pronóstico antes de optimizar.
Los pronósticos se transforman en un árbol de 14 escenarios de primera etapa y 196 de segunda. Se ve de un vistazo qué utilidad se espera de cada mercado y con cuánta volatilidad, y qué mercados se mueven juntos: la matriz de correlaciones muestra, por ejemplo, la relación negativa entre Países Bajos y Alemania.
Aquí se elige cuánto riesgo se acepta. La curva rosada es la utilidad esperada del plan que reacciona en la segunda etapa, la morada es la del plan fijo y la línea punteada es la cota con información perfecta. Con una desviación estándar máxima de 0,38 USD por libra, reaccionar rinde 2,63 contra 2,51 del plan fijo, un 4,8% más. Como la frontera ya está calculada, deslizar el control actualiza todo al instante.
El resultado es un plan con dos partes. Para la semana 0, cuánto enviar a cada mercado y cuánto almacenar: con 1.000 toneladas, 320 a Países Bajos, 70 a Alemania y 610 almacenadas. Para la semana 4, una regla que indica a qué mercado enviar lo almacenado según el escenario de precios que se observe. Todo se descarga en Excel.
Para decidir con más contexto, la herramienta muestra cuánto vale poder reaccionar según el riesgo aceptado, a qué costo de almacenamiento deja de convenir esperar (0,287 USD por libra en este caso) y qué tan lejos está el plan de la utilidad que daría conocer los precios de antemano. Abajo, la prueba con datos nuevos confirma que el riesgo obtenido respeta el tope pedido.
Quien decide puede partir de una pregunta concreta: cuánta variabilidad en la utilidad está dispuesto a aceptar. La herramienta responde con un plan: cuánto enviar hoy y a qué mercados, cuánto esperar y qué hacer con lo almacenado cuando lleguen los nuevos precios. Con datos reales de exportación de uva de 2015 a 2017, el plan que reacciona a la información de la segunda etapa elevó la utilidad esperada hasta cerca de 9% frente a decidir todo de una vez, y en las pruebas con datos nuevos la desviación estándar de la utilidad se mantuvo siempre dentro del tope pedido.