ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

El modelo de minimizacion de la Mean Absolute Deviation (MAD)

RolaguApuntes2 de Junio de 2023

3.978 Palabras (16 Páginas)104 Visitas

Página 1 de 16

El modelo de minimizacion de la Mean Absolute Deviation (MAD)

ChatGPT

La minimización de la desviación absoluta media, o Mean Absolute Deviation (MAD), es un enfoque utilizado en varios campos, incluyendo análisis de datos, pronósticos de series temporales, machine learning, entre otros, para evaluar la precisión de los modelos predictivos. MAD es una medida de la dispersión de los datos, es decir, se utiliza para entender cuánto varían los puntos de datos del valor medio.

En el contexto de la optimización de modelos, la minimización de MAD a menudo implica ajustar los parámetros del modelo de tal manera que se minimice la suma total de las diferencias absolutas entre las predicciones del modelo y los valores observados reales.

Aquí hay un ejemplo simplificado de cómo se puede plantear este problema:

Supongamos que tenemos un conjunto de n observaciones (y1, y2, ..., yn) y un modelo que produce un conjunto correspondiente de predicciones (f1, f2, ..., fn). La MAD para estas observaciones y predicciones se calcula como:

MAD = (1/n) * Σ |yi - fi|

Donde:

Σ denota la suma total,

|yi - fi| es la diferencia absoluta entre la i-ésima observación y la i-ésima predicción,

n es el número total de observaciones.

El objetivo es ajustar el modelo (cambiar los parámetros, la estructura, etc.) para minimizar este valor de MAD.

Es importante tener en cuenta que, aunque MAD puede ser una métrica útil para la precisión del modelo, también tiene limitaciones. Por ejemplo, no penaliza los errores grandes tanto como otras medidas como la desviación cuadrática media (Mean Squared Error, MSE). Por lo tanto, es posible que un modelo con una MAD baja todavía pueda producir algunos errores de predicción muy grandes.

User

Escriba el modelo anterior usando CVXPY de python

ChatGPT

CVXPY es una biblioteca de Python para problemas de optimización convexa. Permite definir problemas de optimización de manera declarativa y resuelve los problemas de forma eficiente utilizando diferentes solvers de optimización.

Aquí te dejo un ejemplo simplificado de cómo podrías minimizar la Mean Absolute Deviation (MAD) utilizando CVXPY. Para este ejemplo, supongamos que tenemos algunos datos observados y un modelo simple lineal con una variable. Estamos tratando de encontrar el valor de la variable que minimiza la MAD.

python

Copy code

import cvxpy as cp

import numpy as np

# Número de observaciones

n = 100

# Generar algunos datos observados aleatoriamente

np.random.seed(1)

y_obs = np.random.randn(n)

# La variable que estamos tratando de optimizar

x = cp.Variable()

# Definir la función objetivo como la MAD

objective = cp.Minimize(cp.sum(cp.abs(y_obs - x))/n)

# Definir el problema

problem = cp.Problem(objective)

# Resolver el problema

problem.solve()

# Imprimir el valor óptimo

print("El valor óptimo de x es: ", x.value)

En este ejemplo, x es la variable de decisión que estamos tratando de encontrar. La función objetivo, definida como la suma del valor absoluto de las diferencias entre las observaciones y x dividida por n, es lo que queremos minimizar.

La línea problem.solve() resuelve el problema de optimización, encontrando el valor de x que minimiza la función objetivo.

Finalmente, imprimimos el valor óptimo de x.

Este es un modelo muy simple solo para ilustrar cómo podrías usar CVXPY para minimizar la MAD. En un problema real, es probable que tengas un modelo más complicado y múltiples variables que optimizar.

User

import numpy as np

import pandas as pd

import yfinance as yf

# warnings . filterwarnings (" ignore ")

pd. options . display . float_format ="{:.4%}". format

# Date range

start = "2018-01-01"

end = "2019-12-31"

# Tickers of assets

assets = ["AAPL", "TGT", "MO", "APA", "MMC", "JPM","DE", "MSFT", "VZ", "NI", "BA", "C"]

assets . sort ()

# Downloading data

data = yf. download (assets , start = start , end = end )

data = data .loc [: ,( "Adj Close", slice ( None ))]

data . columns = assets

# Calculating returns

Y = data [ assets ]. pct_change (). dropna ()

En el script anterior ¿Como añadir´ıa las condiciones que los pesos de los activos

deben sumar 120% y posiciones en corto maximo -30%?

ChatGPT

En el script que has proporcionado, estás descargando datos de precios de acciones y luego calculando los retornos diarios. Entiendo que ahora deseas configurar un problema de optimización en el que seleccionas los pesos de los activos de manera que los pesos sumen el 120% (lo que sugiere el uso de apalancamiento) y las posiciones en corto no excedan el -30%.

Podemos usar CVXPY para definir y resolver este problema de optimización. En este problema, los pesos de los activos son nuestras variables de decisión. La función objetivo puede ser cualquier cosa que quieras maximizar o minimizar (como la volatilidad de la cartera o el retorno esperado), pero no se menciona en tu pregunta, por lo que asumiré que estás buscando minimizar la MAD.

A continuación se muestra cómo podrías modificar tu script para incluir la definición y resolución de este problema de optimización.

python

Copy code

import cvxpy as cp

# Crear una variable para cada activo

weights = cp.Variable(len(assets))

# Definir las restricciones

constraints = [

    # Los pesos de los activos deben sumar 120%

    cp.sum(weights) == 1.2,

    # Posiciones en corto máximo -30%

    weights >= -0.3

]

# Calcular el retorno esperado utilizando los retornos históricos

expected_return = Y.mean()

# Definir la función objetivo

objective = cp.Minimize(cp.sum(cp.abs(Y.values @ weights - expected_return)))

# Definir el problema

problem = cp.Problem(objective, constraints)

# Resolver el problema

problem.solve()

# Imprimir los pesos óptimos

print("Los pesos óptimos de los activos son: ", weights.value)

Por favor, ten en cuenta que este código es bastante simplificado y puede que no sea adecuado para tu aplicación específica. Para empezar, solo hemos considerado las restricciones sobre la suma total de los pesos y las posiciones cortas, y no hemos considerado ninguna restricción sobre la exposición máxima a un solo activo o grupo de activos. Además, este código asume que el retorno esperado se puede calcular simplemente como la media de los retornos históricos, lo cual puede no ser apropiado en muchos casos. En un escenario real, se debería emplear una metodología más rigurosa para estimar los retornos esperados.

User

¿Como añadiriıa el termino de regularizaci´on λx2 a la funcion objetivo? donde

λ es una constante que tiene un valor entre 0 y 1. Para resolver el problema

puede asumir un valor de λ.

ChatGPT

Para agregar un término de regularización a la función objetivo, simplemente puedes sumar el término regularizador a la función objetivo existente. En este caso, estás buscando agregar el término λ||x||2, donde λ es una constante y ||x||2 representa la norma l2 (también conocida como norma euclidiana) de los pesos del activo.

Aquí te muestro cómo podrías hacer esto con CVXPY:

python

Copy code

import cvxpy as cp

# Crear una variable para cada activo

weights = cp.Variable(len(assets))

# Definir las restricciones

constraints = [

    # Los pesos de los activos deben sumar 120%

    cp.sum(weights) == 1.2,

    # Posiciones en corto máximo -30%

    weights >= -0.3

]

# Calcular el retorno esperado utilizando los retornos históricos

expected_return = Y.mean()

# Definir el término de regularización

lambda_value = 0.5 # Puedes cambiar esto al valor de λ que prefieras

...

Descargar como (para miembros actualizados) txt (25 Kb) pdf (117 Kb) docx (559 Kb)
Leer 15 páginas más »
Disponible sólo en Clubensayos.com