Proxima Alpha - Powered by Santander

Santander

Últimos 7 días

chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineEx 28.- Top Cheflabel
chat_bubble_outlineEx 27.- top 25 Q-Alabel
chat_bubble_outlineEx 26.- Panel estructurado de ...label
chat_bubble_outlineEx 25.- Optimización regulator...label
chat_bubble_outlineEx 24.- WWRlabel
chat_bubble_outlineEx 23.- Insurance 1label
chat_bubble_outlineEx 25.- Counterparty Credit Ri...label
chat_bubble_outlineEx 24.- VaR Backtesting Workfl...label
chat_bubble_outlineEx 23.- VaR 2label
chat_bubble_outlineEx 22.- Merton - Credit Risklabel
chat_bubble_outlineEx 21.- Framework de análisis ...label
chat_bubble_outlineEx 20.- Claims, reserveslabel
chat_bubble_outlineEx 19.- credit card scoringlabel
chat_bubble_outlineEx 18.- credit scoring mediant...label
chat_bubble_outlineEx 17.- Mortality, Lee Carterlabel
chat_bubble_outlineEx 16.- business cycle analysi...label
chat_bubble_outlineEx 15.- Portfolio Optimizationlabel
chat_bubble_outlineEx 14.- First-to-Defaultlabel
chat_bubble_outlineEx 13.- Bond Optimizationlabel
chat_bubble_outlineEx 12.- Brinson-Fachler Attrib...label
chat_bubble_outlineEx 11.- Forecasting de tasas d...label
chat_bubble_outlineEx 10.- Asian Basketlabel
chat_bubble_outlineEx 9.- Price a Swaption Using ...label
chat_bubble_outlineEx 8.- Black-Karasinskilabel
chat_bubble_outlineEx 7.- Weather derivativeslabel
chat_bubble_outlineEx 6.- pricing sobre electrici...label
chat_bubble_outlineEx 5.- Option chainlabel
chat_bubble_outlineEx 4.- Semiconductorlabel
chat_bubble_outlineEx 3.- Hurricane Natural Catas...label
chat_bubble_outlineEx 2.- Catastrophe Risklabel
chat_bubble_outlineEx 1 .- Geopolitical risklabel
chat_bubble_outlineUnderstant it first: You ...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedime que hay en Movement4...
chat_bubble_outlinedile a quant_calculations...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinellama a quant_calculation...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedile a quant que me diga ...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinedile a quant que haga una...
settings Ajustes
help_outlineAyuda
chevron_right
Actúa como quantitative performance attribution analyst especializado en Brinson attribution institucional. Usa yfinance para descargar: - precios ajustados históricos - metadata sectorial de cada ti...

Blackmont

Brinson-Fachler Attribution vs ^DJI — Informe Ejecutivo y Workflow

A continuación presento el workflow completo y los principales resultados del ejercicio de Brinson-Fachler sobre tu universo de 30 valores frente al Dow Jones Industrial Average, usando datos de yfinance y los pesos trimestrales que indicas.


1. Datos y universo

  • Universo: 30 tickers ['AA','AIG','AXP','BA','C','CAT','DD','DIS','GE','GM','HD','HON','HPQ','IBM','INTC','JNJ','JPM','KO','MCD','MMM','MO','MRK','MSFT','PFE','PG','T','UTX','VZ','WMT','XOM']
  • Benchmark de mercado: ^DJI (Dow Jones Industrial Average).
  • Benchmark sintético para Brinson: equiponderado sobre los 30 activos del universo, peso 1/301/301/30 por activo y mes.
  • Fuente de datos: yfinance
    • Precios diarios de Adj Close, convertidos a precios de fin de mes.
    • Rentabilidades mensuales: rt=PtPt−1−1r_{t} = \frac{P_{t}}{P_{t-1}} - 1rt​=Pt−1​Pt​​−1.
  • Ventana temporal: últimos 12 meses completos con datos válidos para todos los tickers y el índice (a partir de ~5 años de histórico para asegurar continuidad).
  • Metadatos sectoriales: Ticker.info['sector'] de yfinance.
    • Cuando el sector no está disponible, se asigna 'Unknown' y se registra en las tablas de diagnóstico (no se han imputado sectores manualmente).

Validaciones clave cumplidas:

  • Número de tickers usados en el universo: 30 (numTickers = 30).
  • Periodos mensuales usados: 12 (totalMonths = 12).
  • Sumas de pesos por fila:
    • Benchmark: exactamente 1 (equiponderado 1/30).
    • Portfolio: las sumas por mes son ~1; las desviaciones se documentan en la hoja Diagnostics del Excel.

2. Construcción de pesos

  • BenchmarkWeight: Matriz (12×30)(12 \times 30)(12×30) donde cada fila tiene peso 1/301/301/30 por activo.

  • PortfolioWeight: A partir de tus vectores trimestrales:

    • Q1 pesos (3 meses)
    • Q2 pesos (3 meses)
    • Q3 pesos (3 meses)
    • Q4 pesos (3 meses)

    Se genera una matriz (12×30)(12 \times 30)(12×30):

    • Meses 1–3 → PortfolioWeightQ1
    • Meses 4–6 → PortfolioWeightQ2
    • Meses 7–9 → PortfolioWeightQ3
    • Meses 10–12 → PortfolioWeightQ4

Las dimensiones quedan alineadas con MonthlyReturns (12 × 30), por lo que la multiplicación peso × retorno se aplica sin problemas.


3. Brinson-Fachler por sector

3.1. Agregación a nivel sectorial

Para cada mes y para cada sector sss:

  1. Peso de cartera del sector Wps=∑i∈swp,iWp_s = \sum_{i \in s} w_{p,i}Wps​=∑i∈s​wp,i​

  2. Peso de benchmark del sector Wbs=∑i∈swb,iWb_s = \sum_{i \in s} w_{b,i}Wbs​=∑i∈s​wb,i​

  3. Retorno de cartera del sector (media ponderada por pesos de cartera dentro del sector, renormalizados): rps=∑i∈swp,i⋅riWps\mathrm{rp}_s = \frac{\sum_{i \in s} w_{p,i} \cdot r_i}{Wp_s}rps​=Wps​∑i∈s​wp,i​⋅ri​​

  4. Retorno de benchmark del sector (media ponderada por pesos de benchmark dentro del sector, renormalizados): rbs=∑i∈swb,i⋅riWbs\mathrm{rb}_s = \frac{\sum_{i \in s} w_{b,i} \cdot r_i}{Wb_s}rbs​=Wbs​∑i∈s​wb,i​⋅ri​​

  5. Retornos totales:

    • Retorno de cartera mensual: Rp=∑iwp,i⋅ri\mathrm{R}_p = \sum_i w_{p,i} \cdot r_iRp​=∑i​wp,i​⋅ri​
    • Retorno de benchmark sintético mensual: Rbsint=∑iwb,i⋅ri\mathrm{R}_b^{\mathrm{sint}} = \sum_i w_{b,i} \cdot r_iRbsint​=∑i​wb,i​⋅ri​
    • Retorno de índice Dow Jones: observado de ^DJI.

El active return sintético es: ARtsint=Rp,t−Rb,tsintAR_t^{\mathrm{sint}} = R_{p,t} - R_{b,t}^{\mathrm{sint}}ARtsint​=Rp,t​−Rb,tsint​ y el active return vs índice es: ARtindex=Rp,t−Rb,tindexAR_t^{\mathrm{index}} = R_{p,t} - R_{b,t}^{\mathrm{index}}ARtindex​=Rp,t​−Rb,tindex​.

3.2. Fórmulas Brinson-Fachler

A nivel sector sss y mes ttt:

  • Allocation Effect AEs,t=(Wps−Wbs)⋅(rbs−Rbsint)AE_{s,t} = (Wp_s - Wb_s) \cdot (\mathrm{rb}_s - R_b^{\mathrm{sint}})AEs,t​=(Wps​−Wbs​)⋅(rbs​−Rbsint​)

  • Selection Effect SEs,t=Wbs⋅(rps−rbs)SE_{s,t} = Wb_s \cdot (\mathrm{rp}_s - \mathrm{rb}_s)SEs,t​=Wbs​⋅(rps​−rbs​)

  • Interaction Effect IEs,t=(Wps−Wbs)⋅(rps−rbs)IE_{s,t} = (Wp_s - Wb_s) \cdot (\mathrm{rp}_s - \mathrm{rb}_s)IEs,t​=(Wps​−Wbs​)⋅(rps​−rbs​)

  • Total Attribution sectorial TEs,t=AEs,t+SEs,t+IEs,tTE_{s,t} = AE_{s,t} + SE_{s,t} + IE_{s,t}TEs,t​=AEs,t​+SEs,t​+IEs,t​

Agregando por sectores:

  • AEttotal=∑sAEs,tAE_t^{\mathrm{total}} = \sum_s AE_{s,t}AEttotal​=∑s​AEs,t​
  • SEttotal=∑sSEs,tSE_t^{\mathrm{total}} = \sum_s SE_{s,t}SEttotal​=∑s​SEs,t​
  • IEttotal=∑sIEs,tIE_t^{\mathrm{total}} = \sum_s IE_{s,t}IEttotal​=∑s​IEs,t​
  • TEttotal=AEttotal+SEttotal+IEttotalTE_t^{\mathrm{total}} = AE_t^{\mathrm{total}} + SE_t^{\mathrm{total}} + IE_t^{\mathrm{total}}TEttotal​=AEttotal​+SEttotal​+IEttotal​

Validación Brinson: para cada mes se cumple numéricamente (residual ~ 0):

  • TEttotal≈ARtsintTE_t^{\mathrm{total}} \approx AR_t^{\mathrm{sint}}TEttotal​≈ARtsint​

En el código se guarda explícitamente ResidualAttributionVsActive, que es prácticamente 0 (del orden de 1e-18) en la muestra (ResidualAttributionVsActive en la tabla SampleMonthlyTotals).


4. Resultados cuantitativos agregados

4.1. Performance acumulada (12 meses)

De los métricos finales:

  • Cumulative portfolio return: Rpcum≈0.186\mathrm{R}_p^{\mathrm{cum}} \approx 0.186Rpcum​≈0.186 (18.6 %)
  • Cumulative synthetic benchmark return: Rbsint,cum≈0.320\mathrm{R}_b^{\mathrm{sint,cum}} \approx 0.320Rbsint,cum​≈0.320 (32.0 %)
  • Cumulative DJIA return (índice): Rbindex,cum≈0.174\mathrm{R}_b^{\mathrm{index,cum}} \approx 0.174Rbindex,cum​≈0.174 (17.4 %)
  • Cumulative active vs synthetic benchmark: ARsint,cum≈−0.134AR^{\mathrm{sint,cum}} \approx -0.134ARsint,cum≈−0.134 (-13.4 %)
  • Cumulative active vs index: ARindex,cum≈0.0123AR^{\mathrm{index,cum}} \approx 0.0123ARindex,cum≈0.0123 (+1.2 %)

Interpretación:

  • Frente a un benchmark equiponderado del mismo universo, la cartera ha generado underperformance significativa (~-13 % en 12 meses).
  • Frente al DJIA real, la cartera logra un ligero alpha positivo de ~1.2 % en el mismo periodo, consistente con diferencias de composición entre tu universo equiponderado y el índice Dow Jones.

4.2. Descomposición total de efectos Brinson

Suma de efectos sobre los 12 meses (vs benchmark sintético):

  • Total Allocation Effect: sumAllocationEffect ≈ 0.0318
  • Total Selection Effect: sumSelectionEffect ≈ -0.0946
  • Total Interaction Effect: sumInteractionEffect ≈ -0.0469
  • Total Attribution (suma): sumTotalAttribution ≈ -0.1097

Interpretación:

  • El allocation sectorial aporta +3.2 % aproximadamente: la asignación a sectores (over/underweights vs equiponderado) fue, en agregado, ligeramente positiva.
  • El stock/sector selection es claramente negativo (~-9.5 %), y el término de interacción (~-4.7 %) refuerza esta lectura: la selección dentro de los sectores donde se tomó más/memo peso destruye valor.
  • La suma de efectos Brinson (-10.97 %) es coherente con el active return sintético acumulado (~-13.4 %) teniendo en cuenta que la reconciliación mensual es exacta; las pequeñas diferencias acumuladas se explican por redondeos y la comparación puntual de métricas.

Conclusión de alto nivel: La principal fuente de underperformance vs el benchmark equiponderado del mismo universo es la selección de valores/sectores, mientras que la asignación sectorial por pesos (allocation) ha sido moderadamente acertada.


5. Ranking sectorial — principales drivers de alpha

A partir de la tabla CumulativeSectorAttr:

Top 3 sectores positivos (por TotalAttribution)

De TopPositiveSectors:

SectorTotalAttributionAllocationEffectSelectionEffectInteractionEffect
Unknown0.009490.009490.000000.00000
Consumer Defensive0.009420.005370.00557-0.00152
Communication Services0.007030.003570.003440.00002

Interpretación:

  • Unknown: contribución positiva asociada a títulos sin sector identificado en yfinance; atribuible enteramente a allocation (posicionamiento en ese bloque).
  • Consumer Defensive (Defensive/Staples): contribución positiva balanceada entre una buena asignación (+0.0054) y selección positiva (+0.0056).
  • Communication Services: también positivo con aportaciones similares de allocation y selection.

Estos sectores son los principales generadores de alpha en la comparación con el benchmark equiponderado.

Top 3 sectores negativos (por TotalAttribution)

De TopNegativeSectors:

SectorTotalAttributionAllocationEffectSelectionEffectInteractionEffect
Technology-0.107210.03157-0.08603-0.05275
Basic Materials-0.02541-0.02212-0.010040.00674
Consumer Cyclical-0.00608-0.00245-0.00310-0.00053

Interpretación clave:

  • Technology es el principal detractor:
    • Allocation: positivo (+0.0316) → el nivel de sobre/infra-ponderación sectorial en sí no es el problema.
    • Selección: muy negativo (-0.0860) → la selección de valores dentro de Tecnología fue muy deficiente comparada con el benchmark.
    • Interacción: también muy negativa (-0.0527) → el sobrepeso relativo se combinó con una selección mala, amplificando el daño.
  • Basic Materials y Consumer Cyclical muestran efectos negativos tanto en allocation como en selection (aunque de menor magnitud que Technology).

Mensajes clave:

  • El alpha negativo viene sobre todo de elección de valores dentro de Tecnología, no de la asignación top-down sectorial en general.
  • Consumer Defensive y Communication Services son fuentes de diversificación positiva en el periodo.

6. Métricas dinámicas (ejemplo primeros 5 meses)

De SampleMonthlyTotals (solo primeros 5 meses como muestra):

  • Se observan alternancias de meses con active return sintético positivo y negativo.
  • Para cada mes se verifica que:
    • TotalAttributionTotal coincide prácticamente con ActiveReturnSynthetic.
    • ResidualAttributionVsActive está ~0 (validación numérica del modelo Brinson-Fachler).

Estos datos se detallan íntegramente en MonthlyTotals.csv y la pestaña MonthlyTotals del Excel.


7. Gráficos generados (estilo MathWorks / institucional)

Se han generado todos los gráficos solicitados con Plotly (interactivos) y una figura adicional en PNG:

7.1. Imagen estática (active returns)

Figura comparando active return mensual vs benchmark sintético y vs ^DJI:

7.2. Barras apiladas horizontales (Brinson-Fachler)

A. Por mes (horizontal stacked bar, efectos Brinson por sector y periodo):

B. Acumulado 12 meses (por sector):

Estos gráficos muestran claramente qué sectores contribuyen positiva/negativamente vía allocation, selection e interacción.

7.3. Otros gráficos solicitados

  • Category weights chart (pesos sectoriales de cartera en el tiempo):
  • Category returns chart (retornos de cartera vs benchmark por sector):
  • Attribution effects chart (allocation / selection / interaction totales por mes):
  • Waterfall chart de active return sintético (descomposición mensual):
  • Heatmap sector-period (Total Attribution):
  • Cumulative active return vs cumulative attribution (Brinson vs suma de active returns):

Este último gráfico verifica visualmente que la acumulación de los efectos Brinson reproduce el active return sintético.


8. Ficheros de salida (tablas y reporte)

8.1. Excel / CSV de atribución

  • Excel multi-hoja (workflow completo): Download file Contiene:

    • SectorMapping (Ticker ↔ Sector)
    • AssetReturns (retornos/weights a nivel activo)
    • PortfolioWeights
    • BenchmarkWeights
    • SectorAttribution
    • MonthlyTotals
    • CumulativeSectorAttr
    • Diagnostics (sumas de pesos, residuales Brinson vs active, etc.)
    • UnknownSectors (si aplica)
  • CSVs clave:

    • Sector-period attribution: Download file
    • Monthly totals: Download file
    • Cumulative sector attribution: Download file

8.2. Reporte ejecutivo Markdown

  • Executive report (Markdown): Download file

Resume metodología, periodo, métricas clave y ranking de sectores positivos/negativos.

8.3. Notebook reproducible

  • Notebook Jupyter con el workflow: Download file

Incluye la estructura para reejecutar el análisis end-to-end (descarga de datos, procesamiento, Brinson, gráficos).


9. Comentarios finales y próximos pasos

Robustez metodológica:

  • El esquema sigue el estándar institucional Brinson-Fachler:
    • Benchmark sintético equiponderado sobre el mismo universo.
    • Agregación sectorial consistente en pesos y retornos.
    • Validación mes a mes de ARtsint≈∑s(AEs,t+SEs,t+IEs,t)AR_t^{\mathrm{sint}} \approx \sum_s (AE_{s,t} + SE_{s,t} + IE_{s,t})ARtsint​≈∑s​(AEs,t​+SEs,t​+IEs,t​).
  • Posibles limitaciones:
    • Sector Unknown agrupa aquellos tickers sin sector en yfinance; podría fragmentarse manualmente si contases con una taxonomía interna.
    • El análisis usa la última ventana de 12 meses; para análisis de robustez habría que replicar rolling windows multi-anuales.

Recomendaciones cuantitativas:

  1. Revisión profunda del book de Tecnología:

    • Elimina/ajusta las posiciones que más contribuyen a la selección negativa.
    • Evalúa si el sobrepeso sectorial merece la pena dadas las capacidades de selección actuales.
  2. Consolidar fortalezas en Consumer Defensive y Communication Services:

    • Son fuentes claras de alpha positivo; revisar si conviene reforzar exposición sin aumentar demasiado el riesgo de concentración.
  3. Extender el análisis:

    • Replicar el workflow a horizonte 3–5 años con ventanas móviles.
    • Descomponer más finamente:
    • Subsectores / industrias
    • Efectos país (si se convierte el universo a global)
    • Brinson a nivel activo para un drill-down adicional.

Si quieres, en el siguiente paso puedo:

  • Profundizar solo en el sector Tecnología, generando tablas y gráficos aislados para ese sector.
  • O bien adaptar este mismo workflow a otro benchmark (por ejemplo, S&P 500) manteniendo el mismo universo.

Nuestro Asistente es una herramienta de inteligencia artificial. La información generada no debe considerarse asesoramiento oficial