Skip to content

Instantly share code, notes, and snippets.

@Financioneroncios
Last active May 26, 2021 23:29
Show Gist options
  • Save Financioneroncios/3476f57718a11bb0a95b6801d0cb64bc to your computer and use it in GitHub Desktop.
Save Financioneroncios/3476f57718a11bb0a95b6801d0cb64bc to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hierarchical Risk Parity (HRP) and Hierarchical Equal Risk Contribution (HERC)\n",
"### Portfolio Optimization Part VII\n",
"<br>__[Financionerioncios](https://financioneroncios.wordpress.com)__\n",
"<br>__[Dany Cajas](https://www.linkedin.com/in/dany-cajas/)__\n",
"<br>__[Riskfolio-Lib](http://riskfolio-lib.readthedocs.io/)__\n",
"<br>__[Practical Econometrics with Python](https://www.amazon.com/-/es/Marlon-Saito-ebook/dp/B08KJ1322G/ref=sr_1_1?dchild=1&qid=1603904149&refinements=p_27%3AMarlon+Saito&s=digital-text&sr=1-1&text=Marlon+Saito)__ \n",
"<br>__[Econometría Práctica con Python](https://www.amazon.com/-/es/Marlon-Saito-ebook/dp/B08KHZKV9R/ref=sr_1_2?dchild=1&qid=1603903646&refinements=p_27%3AMarlon+Saito&s=digital-text&sr=1-2&text=Marlon+Saito)__ \n",
"\n",
"<br>Hola gente, espero les guste este post que es de uno de los temas más recientes en la gestión de portafolios. No se olviden que para Python les recomiendo que usen __[winpython](https://winpython.github.io/)__ (solo windows, pero es portable) o __[anaconda](https://www.anaconda.com/download/)__ (es multiplataforma, pero requiere de instalación). Al instalar cualquiera de estas distribuciones encontraran los ejecutables Jupyter Notebook (el formato del post, los archivos tienen extensión es .ipynb) y Spyder (IDE que recomiendo para trabajar porque permite visualizar las variables y su tipo, los archivos tienen extensión es .py)\n",
"\n",
"En la página del blog dejaré los notebooks (se abren con jupyter notebook), los scripts de python (recomiendo que usen spyder para trabajar con estos archivos) y los archivos en excel con la data usada en los ejemplos.\n",
"\n",
"Los temas que trataremos en este post son:\n",
"1. Hierarchical Risk Parity (HRP).\n",
" 1. Hierarchical Tree Clustering\n",
" 1. Seriation or Quasi-Diagonalization\n",
" 1. Recursive Bisection\n",
" 1. Comparison among PortfolioLab, PyPortfolioOpt and Riskfolio-Lib\n",
"1. Hierarchical Equal Risk Contribution (HERC).\n",
" 1. Hierarchical Tree Clustering\n",
" 1. Optimal Number of Clusters and Seriation\n",
" 1. Hierarchical Recursive Bisection\n",
" 1. Comparison between PortfolioLab and Riskfolio-Lib\n",
"\n",
"\n",
"# 1. Hierarchical Risk Parity (HRP).\n",
"\n",
"Es una técnica desarrollada por López de Prado (2016), que combina la estructura jerárquica que existe entre los activos y la paridad de riesgo ingenua (pesos proporcionales a la inversa del riesgo).\n",
"\n",
"## A. Hierarchical Tree Clustering\n",
"\n",
"Este paso consiste en crear una estructura jerárquica entre los activos basados en la información de la matriz de correlación. En forma práctica se construye una matriz de linkage, esta matriz puede minimizar la distancia entre las hojas o no (PortfolioLab y PyPortfolioOpt no minimizan la distancia entre hojas), que se puede visualizar mediante un dedrograma."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[*********************100%***********************] 25 of 25 completed\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import yfinance as yf\n",
"import warnings\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"yf.pdr_override()\n",
"pd.options.display.float_format = '{:.4%}'.format\n",
"\n",
"# Date range\n",
"start = '2016-01-01'\n",
"end = '2019-12-30'\n",
"\n",
"# Tickers of assets\n",
"assets = ['JCI', 'TGT', 'CMCSA', 'CPB', 'MO', 'APA', 'MMC', 'JPM',\n",
" 'ZION', 'PSA', 'BAX', 'BMY', 'LUV', 'PCAR', 'TXT', 'TMO',\n",
" 'DE', 'MSFT', 'HPQ', 'SEE', 'VZ', 'CNP', 'NI', 'T', 'BA']\n",
"assets.sort()\n",
"\n",
"# Downloading data\n",
"data = yf.download(assets, start = start, end = end)\n",
"data = data.loc[:,('Adj Close', slice(None))]\n",
"data.columns = assets"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>APA</th>\n",
" <th>BA</th>\n",
" <th>BAX</th>\n",
" <th>BMY</th>\n",
" <th>CMCSA</th>\n",
" <th>CNP</th>\n",
" <th>CPB</th>\n",
" <th>DE</th>\n",
" <th>HPQ</th>\n",
" <th>JCI</th>\n",
" <th>...</th>\n",
" <th>NI</th>\n",
" <th>PCAR</th>\n",
" <th>PSA</th>\n",
" <th>SEE</th>\n",
" <th>T</th>\n",
" <th>TGT</th>\n",
" <th>TMO</th>\n",
" <th>TXT</th>\n",
" <th>VZ</th>\n",
" <th>ZION</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2016-01-05</th>\n",
" <td>-2.0257%</td>\n",
" <td>0.4057%</td>\n",
" <td>0.4036%</td>\n",
" <td>1.9693%</td>\n",
" <td>0.0180%</td>\n",
" <td>0.9305%</td>\n",
" <td>0.3678%</td>\n",
" <td>0.5783%</td>\n",
" <td>0.9483%</td>\n",
" <td>-1.1953%</td>\n",
" <td>...</td>\n",
" <td>1.5881%</td>\n",
" <td>0.0212%</td>\n",
" <td>2.8236%</td>\n",
" <td>0.9758%</td>\n",
" <td>0.6987%</td>\n",
" <td>1.7539%</td>\n",
" <td>-0.1730%</td>\n",
" <td>0.2409%</td>\n",
" <td>1.3735%</td>\n",
" <td>-1.0857%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-01-06</th>\n",
" <td>-11.4863%</td>\n",
" <td>-1.5879%</td>\n",
" <td>0.2411%</td>\n",
" <td>-1.7557%</td>\n",
" <td>-0.7727%</td>\n",
" <td>-1.2473%</td>\n",
" <td>-0.1736%</td>\n",
" <td>-1.1239%</td>\n",
" <td>-3.5867%</td>\n",
" <td>-0.9551%</td>\n",
" <td>...</td>\n",
" <td>0.5547%</td>\n",
" <td>0.0212%</td>\n",
" <td>0.1592%</td>\n",
" <td>-1.5647%</td>\n",
" <td>-0.1466%</td>\n",
" <td>-1.0155%</td>\n",
" <td>-0.7653%</td>\n",
" <td>-3.0048%</td>\n",
" <td>-0.9035%</td>\n",
" <td>-2.9145%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-01-07</th>\n",
" <td>-5.1389%</td>\n",
" <td>-4.1922%</td>\n",
" <td>-1.6573%</td>\n",
" <td>-2.7699%</td>\n",
" <td>-1.1047%</td>\n",
" <td>-1.9769%</td>\n",
" <td>-1.2207%</td>\n",
" <td>-0.8855%</td>\n",
" <td>-4.6058%</td>\n",
" <td>-2.5394%</td>\n",
" <td>...</td>\n",
" <td>-2.2066%</td>\n",
" <td>-3.0309%</td>\n",
" <td>-1.0411%</td>\n",
" <td>-3.1557%</td>\n",
" <td>-1.6148%</td>\n",
" <td>-0.2700%</td>\n",
" <td>-2.2845%</td>\n",
" <td>-2.0570%</td>\n",
" <td>-0.5492%</td>\n",
" <td>-3.0019%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-01-08</th>\n",
" <td>0.2737%</td>\n",
" <td>-2.2705%</td>\n",
" <td>-1.6037%</td>\n",
" <td>-2.5425%</td>\n",
" <td>0.1099%</td>\n",
" <td>-0.2241%</td>\n",
" <td>0.5706%</td>\n",
" <td>-1.6402%</td>\n",
" <td>-1.7641%</td>\n",
" <td>-0.1649%</td>\n",
" <td>...</td>\n",
" <td>-0.1539%</td>\n",
" <td>-1.1366%</td>\n",
" <td>-0.7308%</td>\n",
" <td>-0.1448%</td>\n",
" <td>0.0895%</td>\n",
" <td>-3.3839%</td>\n",
" <td>-0.1117%</td>\n",
" <td>-1.1387%</td>\n",
" <td>-0.9719%</td>\n",
" <td>-1.1254%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016-01-11</th>\n",
" <td>-4.3384%</td>\n",
" <td>0.1693%</td>\n",
" <td>-1.6851%</td>\n",
" <td>-1.0215%</td>\n",
" <td>0.0915%</td>\n",
" <td>-1.1791%</td>\n",
" <td>0.5674%</td>\n",
" <td>0.5287%</td>\n",
" <td>0.6616%</td>\n",
" <td>0.0331%</td>\n",
" <td>...</td>\n",
" <td>1.6436%</td>\n",
" <td>0.0000%</td>\n",
" <td>0.9869%</td>\n",
" <td>-0.1450%</td>\n",
" <td>1.2224%</td>\n",
" <td>1.4570%</td>\n",
" <td>0.5367%</td>\n",
" <td>-0.4607%</td>\n",
" <td>0.5800%</td>\n",
" <td>-1.9919%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 25 columns</p>\n",
"</div>"
],
"text/plain": [
" APA BA BAX BMY CMCSA CNP CPB \\\n",
"Date \n",
"2016-01-05 -2.0257% 0.4057% 0.4036% 1.9693% 0.0180% 0.9305% 0.3678% \n",
"2016-01-06 -11.4863% -1.5879% 0.2411% -1.7557% -0.7727% -1.2473% -0.1736% \n",
"2016-01-07 -5.1389% -4.1922% -1.6573% -2.7699% -1.1047% -1.9769% -1.2207% \n",
"2016-01-08 0.2737% -2.2705% -1.6037% -2.5425% 0.1099% -0.2241% 0.5706% \n",
"2016-01-11 -4.3384% 0.1693% -1.6851% -1.0215% 0.0915% -1.1791% 0.5674% \n",
"\n",
" DE HPQ JCI ... NI PCAR PSA \\\n",
"Date ... \n",
"2016-01-05 0.5783% 0.9483% -1.1953% ... 1.5881% 0.0212% 2.8236% \n",
"2016-01-06 -1.1239% -3.5867% -0.9551% ... 0.5547% 0.0212% 0.1592% \n",
"2016-01-07 -0.8855% -4.6058% -2.5394% ... -2.2066% -3.0309% -1.0411% \n",
"2016-01-08 -1.6402% -1.7641% -0.1649% ... -0.1539% -1.1366% -0.7308% \n",
"2016-01-11 0.5287% 0.6616% 0.0331% ... 1.6436% 0.0000% 0.9869% \n",
"\n",
" SEE T TGT TMO TXT VZ ZION \n",
"Date \n",
"2016-01-05 0.9758% 0.6987% 1.7539% -0.1730% 0.2409% 1.3735% -1.0857% \n",
"2016-01-06 -1.5647% -0.1466% -1.0155% -0.7653% -3.0048% -0.9035% -2.9145% \n",
"2016-01-07 -3.1557% -1.6148% -0.2700% -2.2845% -2.0570% -0.5492% -3.0019% \n",
"2016-01-08 -0.1448% 0.0895% -3.3839% -0.1117% -1.1387% -0.9719% -1.1254% \n",
"2016-01-11 -0.1450% 1.2224% 1.4570% 0.5367% -0.4607% 0.5800% -1.9919% \n",
"\n",
"[5 rows x 25 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Calculating returns\n",
"\n",
"Y = data[assets].pct_change().dropna()\n",
"\n",
"display(Y.head())"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABMRsAAAACYiYAEAAExEwAIAAJiIgAUAADARAQsAAGAiAhYAAMBEBCwAAICJCFgAAAATEbAAAAAmImABAABMRMACAACYiIAFAAAwEQELAABgIgIWAADARAQsAACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABPZb+kCYMf76HHJmSdcs69x3pnDv8c97Zp9ncOOSA5/xDX7GgAAO5geLFjamSdcHpCuroMOG27XxHlnXvOgBwCww+nBglVw0GHJI16+bA3XtPcLAAA9WAAAAFMRsAAAACYiYAEAAExEwAIAAJiIgAUAADARAQsAAGAiAhYAAMBEBCwAAICJCFgAAAATEbAAAAAmImABAABMRMACAACYiIAFAAAwEQELAABgIgIWAADARAQsAACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABMRsAAAACYiYAEAAExEwAIAAJiIgAUAADARAQsAAGAiAhYAAMBEBCwAAICJCFgAAAATEbAAAAAmImABAABMRMACAACYiIAFAAAwEQELAABgIgIWAADARAQsAACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABMRsAAAACYiYAEAAExEwAIAAJiIgAUAADARAQsAAGAiAhYAAMBEBCwAAICJCFgAAAATEbAAAAAmImABAABMRMACAACYiIAFAAAwEQELAABgIgIWAADARAQsAACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABMRsAAAACYiYAEAAExEwAIAAJiIgAUAADARAQsAAGAiAhYAAMBEBCwAAICJCFgAAAATEbAAAAAmImABAABMRMACAACYiIAFAAAwEQELAABgIgIWAADARAQsAACAiQhYAAAAExGwAAAAJiJgAQAATETAAgAAmIiABQAAMBEBCwAAYCICFgAAwEQELAAAgIkIWAAAABMRsAAAACYiYAEAAExEwAIA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\n",
"text/plain": [
"<Figure size 864x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import riskfolio.PlotFunctions as plf\n",
"\n",
"# Plotting Hierarchical Tree\n",
"\n",
"ax = plf.plot_dendrogram(returns=Y,\n",
" correlation='pearson',\n",
" linkage='single',\n",
" k=None,\n",
" max_k=10,\n",
" leaf_order=True, # Con True se minimiza la distancia entre las hojas\n",
" ax=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. Seriation or Quasi-Diagonalization\n",
"\n",
"En este paso se reordena la matriz de correlación y covarianzas para que tengan el mismo orden que los activos basados en la matriz de linkage."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting Assets Clusters\n",
"\n",
"ax = plf.plot_clusters(returns=Y,\n",
" correlation='pearson',\n",
" linkage='single',\n",
" k=None,\n",
" max_k=10,\n",
" leaf_order=True, # Con True se minimiza la distancia entre las hojas\n",
" dendrogram=True,\n",
" ax=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## C. Recursive Bisection\n",
"\n",
"En este paso se realiza una optimización de paridad de riesgo ingenua empezando por la parte superior del dendrograma y se baja dividiendo el número de activos por la mitad hasta llegar a las hojas. En este paso es importante el orden de los activos en el dendrograma por lo que los pesos son diferentes si se considera el orden por defecto o el orden que minimiza la distancia entre las hojas."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>weights</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>9.2348%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>6.2761%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>6.0066%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>5.8463%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>5.4304%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>5.4020%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>5.2399%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>5.2292%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>5.0535%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>4.4309%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>4.3929%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>3.7516%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>3.3760%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>3.2428%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>3.2120%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>3.1672%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>3.0520%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>2.7574%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>2.4539%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>2.3251%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>2.3219%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>2.2749%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>2.1737%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>1.8956%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.4532%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" weights\n",
"VZ 9.2348%\n",
"MO 6.2761%\n",
"PSA 6.0066%\n",
"T 5.8463%\n",
"JCI 5.4304%\n",
"MMC 5.4020%\n",
"CNP 5.2399%\n",
"TMO 5.2292%\n",
"NI 5.0535%\n",
"CMCSA 4.4309%\n",
"BAX 4.3929%\n",
"SEE 3.7516%\n",
"CPB 3.3760%\n",
"BMY 3.2428%\n",
"LUV 3.2120%\n",
"TGT 3.1672%\n",
"TXT 3.0520%\n",
"MSFT 2.7574%\n",
"JPM 2.4539%\n",
"DE 2.3251%\n",
"BA 2.3219%\n",
"ZION 2.2749%\n",
"HPQ 2.1737%\n",
"PCAR 1.8956%\n",
"APA 1.4532%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import riskfolio.HCPortfolio as hc\n",
"\n",
"# Building the portfolio object\n",
"port = hc.HCPortfolio(returns=Y)\n",
"\n",
"# Estimate optimal portfolio:\n",
"\n",
"model='HRP' # Could be HRP or HERC\n",
"correlation = 'pearson' # Correlation matrix used to group assets in clusters\n",
"rm = 'MV' # Risk measure used, this time will be variance\n",
"rf = 0 # Risk free rate\n",
"linkage = 'single' # Linkage method used to build clusters\n",
"max_k = 10 # Max number of clusters used in two difference gap statistic\n",
"leaf_order = True # Consider optimal order of leafs in dendrogram\n",
"\n",
"w = port.optimization(model=model,\n",
" correlation=correlation,\n",
" rm=rm,\n",
" rf=rf,\n",
" linkage=linkage,\n",
" max_k=max_k,\n",
" leaf_order=leaf_order)\n",
"\n",
"display(w.sort_values(by=\"weights\", ascending=False, axis=0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## D. Comparison PortfolioLab, PyPortfolioOpt and Riskfolio-Lib\n",
"\n",
"Solo tres bibliotecas en Python tienen habilitada esta técnica de optimización, por lo que vamos a comparar los resultados en los tres casos."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>8.2385%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>8.1938%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>6.3128%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>6.0782%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>4.9473%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>4.6305%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>4.6076%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>4.5504%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>4.2864%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>4.2848%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>4.2817%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>4.1743%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>4.0275%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>3.7550%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>3.4733%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>2.9540%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>2.9341%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>2.8056%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>2.7529%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>2.4419%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>2.2311%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>2.2079%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>2.1958%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>2.1672%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.4674%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"PSA 8.2385%\n",
"CNP 8.1938%\n",
"NI 6.3128%\n",
"MMC 6.0782%\n",
"MO 4.9473%\n",
"CPB 4.6305%\n",
"SEE 4.6076%\n",
"BMY 4.5504%\n",
"TGT 4.2864%\n",
"BAX 4.2848%\n",
"VZ 4.2817%\n",
"JCI 4.1743%\n",
"LUV 4.0275%\n",
"T 3.7550%\n",
"CMCSA 3.4733%\n",
"TXT 2.9540%\n",
"BA 2.9341%\n",
"JPM 2.8056%\n",
"HPQ 2.7529%\n",
"TMO 2.4419%\n",
"MSFT 2.2311%\n",
"DE 2.2079%\n",
"ZION 2.1958%\n",
"PCAR 2.1672%\n",
"APA 1.4674%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Usando PortfolioLab\n",
"##############################################\n",
"\n",
"from portfoliolab.clustering.hrp import HierarchicalRiskParity\n",
"\n",
"# Calculando los pesos HRP\n",
"hrp = HierarchicalRiskParity()\n",
"hrp.allocate(asset_prices=data)\n",
"w_1 = hrp.weights.sort_values(by=0, ascending=False, axis=1).T\n",
"\n",
"display(w_1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Graficando el Dendrograma\n",
"\n",
"fig, ax = plt.subplots(figsize=(12, 8))\n",
"ax = hrp.plot_clusters(assets=data.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El dendrograma que produce PortfolioLab no considera el orden que minimiza la distancia entre las hojas."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>8.2390%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>8.1940%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>6.3130%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>6.0780%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>4.9470%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>4.6310%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>4.6080%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>4.5500%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>4.2860%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>4.2850%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>4.2820%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>4.1740%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>4.0270%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>3.7550%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>3.4730%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>2.9540%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>2.9340%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>2.8060%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>2.7530%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>2.4420%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>2.2310%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>2.2080%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>2.1960%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>2.1670%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.4670%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"PSA 8.2390%\n",
"CNP 8.1940%\n",
"NI 6.3130%\n",
"MMC 6.0780%\n",
"MO 4.9470%\n",
"CPB 4.6310%\n",
"SEE 4.6080%\n",
"BMY 4.5500%\n",
"TGT 4.2860%\n",
"BAX 4.2850%\n",
"VZ 4.2820%\n",
"JCI 4.1740%\n",
"LUV 4.0270%\n",
"T 3.7550%\n",
"CMCSA 3.4730%\n",
"TXT 2.9540%\n",
"BA 2.9340%\n",
"JPM 2.8060%\n",
"HPQ 2.7530%\n",
"TMO 2.4420%\n",
"MSFT 2.2310%\n",
"DE 2.2080%\n",
"ZION 2.1960%\n",
"PCAR 2.1670%\n",
"APA 1.4670%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Usando PyPortfolioOpt\n",
"##############################################\n",
"\n",
"from pypfopt import HRPOpt\n",
"\n",
"hrp = HRPOpt(Y)\n",
"hrp.optimize()\n",
"w_2 = hrp.clean_weights()\n",
"w_2 = pd.Series(w_2).to_frame().sort_values(by=0, ascending=False, axis=0)\n",
"\n",
"display(w_2)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>weights</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>8.2385%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>8.1938%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>6.3128%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>6.0782%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>4.9473%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>4.6305%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>4.6076%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>4.5504%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>4.2864%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>4.2848%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>4.2817%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>4.1743%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>4.0275%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>3.7550%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>3.4733%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>2.9540%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>2.9341%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>2.8056%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>2.7529%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>2.4419%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>2.2311%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>2.2079%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>2.1958%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>2.1672%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.4674%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" weights\n",
"PSA 8.2385%\n",
"CNP 8.1938%\n",
"NI 6.3128%\n",
"MMC 6.0782%\n",
"MO 4.9473%\n",
"CPB 4.6305%\n",
"SEE 4.6076%\n",
"BMY 4.5504%\n",
"TGT 4.2864%\n",
"BAX 4.2848%\n",
"VZ 4.2817%\n",
"JCI 4.1743%\n",
"LUV 4.0275%\n",
"T 3.7550%\n",
"CMCSA 3.4733%\n",
"TXT 2.9540%\n",
"BA 2.9341%\n",
"JPM 2.8056%\n",
"HPQ 2.7529%\n",
"TMO 2.4419%\n",
"MSFT 2.2311%\n",
"DE 2.2079%\n",
"ZION 2.1958%\n",
"PCAR 2.1672%\n",
"APA 1.4674%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Usando Riskfolio-Lib\n",
"##############################################\n",
"\n",
"w_3 = port.optimization(model=model,\n",
" correlation=correlation,\n",
" rm=rm,\n",
" rf=rf,\n",
" linkage=linkage,\n",
" max_k=max_k,\n",
" leaf_order=False)\n",
"\n",
"w_3 = w_3.sort_values(by=\"weights\", ascending=False, axis=0)\n",
"\n",
"display(w_3)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"#T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col3{\n",
" background-color: #004529;\n",
" color: #f1f1f1;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col3{\n",
" background-color: #53b466;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col2{\n",
" background-color: #004629;\n",
" color: #f1f1f1;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col3{\n",
" background-color: #7ec97b;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col2{\n",
" background-color: #2b8e4a;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col2{\n",
" background-color: #88cd7f;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col2{\n",
" background-color: #339951;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col3{\n",
" background-color: #75c578;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col2{\n",
" background-color: #72c376;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col3{\n",
" background-color: #43ac5e;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col2{\n",
" background-color: #86cc7f;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col3{\n",
" background-color: #daf0a4;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col2{\n",
" background-color: #c9e99c;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col2{\n",
" background-color: #8bce81;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col3{\n",
" background-color: #def2a7;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col2{\n",
" background-color: #9cd687;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col2{\n",
" background-color: #e0f3a8;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col2{\n",
" background-color: #acdd8e;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col2{\n",
" background-color: #a2d88a;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col3{\n",
" background-color: #74c477;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col3{\n",
" background-color: #dff3a8;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col2{\n",
" background-color: #bae394;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col3{\n",
" background-color: #5cb86b;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col3{\n",
" background-color: #abdc8d;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col3{\n",
" background-color: #e4f4ab;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col2{\n",
" background-color: #e1f3a9;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col3,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col3{\n",
" background-color: #f8fcbe;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col2{\n",
" background-color: #e6f5ac;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col3{\n",
" background-color: #f7fcb9;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col2{\n",
" background-color: #e8f6ae;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col3{\n",
" background-color: #f9fdc5;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col2{\n",
" background-color: #f3fab6;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col3{\n",
" background-color: #edf8b2;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col3{\n",
" background-color: #f8fcc0;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col2{\n",
" background-color: #f8fdc1;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col3{\n",
" background-color: #fbfed2;\n",
" color: #000000;\n",
" }#T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col0,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col1,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col2,#T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col3{\n",
" background-color: #ffffe5;\n",
" color: #000000;\n",
" }</style><table id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >PortfolioLab</th> <th class=\"col_heading level0 col1\" >PyPortfolioOpt</th> <th class=\"col_heading level0 col2\" >RiskfolioLib</th> <th class=\"col_heading level0 col3\" >RiskfolioLib Optimal</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row0\" class=\"row_heading level0 row0\" >PSA</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col0\" class=\"data row0 col0\" >8.2385%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col1\" class=\"data row0 col1\" >8.2390%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col2\" class=\"data row0 col2\" >8.2385%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row0_col3\" class=\"data row0 col3\" >6.0066%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row1\" class=\"row_heading level0 row1\" >CNP</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col0\" class=\"data row1 col0\" >8.1938%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col1\" class=\"data row1 col1\" >8.1940%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col2\" class=\"data row1 col2\" >8.1938%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row1_col3\" class=\"data row1 col3\" >5.2399%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row2\" class=\"row_heading level0 row2\" >NI</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col0\" class=\"data row2 col0\" >6.3128%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col1\" class=\"data row2 col1\" >6.3130%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col2\" class=\"data row2 col2\" >6.3128%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row2_col3\" class=\"data row2 col3\" >5.0535%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row3\" class=\"row_heading level0 row3\" >MMC</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col0\" class=\"data row3 col0\" >6.0782%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col1\" class=\"data row3 col1\" >6.0780%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col2\" class=\"data row3 col2\" >6.0782%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row3_col3\" class=\"data row3 col3\" >5.4020%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row4\" class=\"row_heading level0 row4\" >MO</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col0\" class=\"data row4 col0\" >4.9473%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col1\" class=\"data row4 col1\" >4.9470%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col2\" class=\"data row4 col2\" >4.9473%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row4_col3\" class=\"data row4 col3\" >6.2761%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row5\" class=\"row_heading level0 row5\" >CPB</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col0\" class=\"data row5 col0\" >4.6305%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col1\" class=\"data row5 col1\" >4.6310%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col2\" class=\"data row5 col2\" >4.6305%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row5_col3\" class=\"data row5 col3\" >3.3760%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row6\" class=\"row_heading level0 row6\" >SEE</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col0\" class=\"data row6 col0\" >4.6076%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col1\" class=\"data row6 col1\" >4.6080%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col2\" class=\"data row6 col2\" >4.6076%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row6_col3\" class=\"data row6 col3\" >3.7516%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row7\" class=\"row_heading level0 row7\" >BMY</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col0\" class=\"data row7 col0\" >4.5504%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col1\" class=\"data row7 col1\" >4.5500%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col2\" class=\"data row7 col2\" >4.5504%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row7_col3\" class=\"data row7 col3\" >3.2428%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row8\" class=\"row_heading level0 row8\" >TGT</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col0\" class=\"data row8 col0\" >4.2864%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col1\" class=\"data row8 col1\" >4.2860%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col2\" class=\"data row8 col2\" >4.2864%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row8_col3\" class=\"data row8 col3\" >3.1672%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row9\" class=\"row_heading level0 row9\" >BAX</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col0\" class=\"data row9 col0\" >4.2848%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col1\" class=\"data row9 col1\" >4.2850%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col2\" class=\"data row9 col2\" >4.2848%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row9_col3\" class=\"data row9 col3\" >4.3929%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row10\" class=\"row_heading level0 row10\" >VZ</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col0\" class=\"data row10 col0\" >4.2817%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col1\" class=\"data row10 col1\" >4.2820%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col2\" class=\"data row10 col2\" >4.2817%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row10_col3\" class=\"data row10 col3\" >9.2348%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row11\" class=\"row_heading level0 row11\" >JCI</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col0\" class=\"data row11 col0\" >4.1743%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col1\" class=\"data row11 col1\" >4.1740%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col2\" class=\"data row11 col2\" >4.1743%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row11_col3\" class=\"data row11 col3\" >5.4304%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row12\" class=\"row_heading level0 row12\" >LUV</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col0\" class=\"data row12 col0\" >4.0275%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col1\" class=\"data row12 col1\" >4.0270%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col2\" class=\"data row12 col2\" >4.0275%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row12_col3\" class=\"data row12 col3\" >3.2120%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row13\" class=\"row_heading level0 row13\" >T</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col0\" class=\"data row13 col0\" >3.7550%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col1\" class=\"data row13 col1\" >3.7550%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col2\" class=\"data row13 col2\" >3.7550%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row13_col3\" class=\"data row13 col3\" >5.8463%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row14\" class=\"row_heading level0 row14\" >CMCSA</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col0\" class=\"data row14 col0\" >3.4733%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col1\" class=\"data row14 col1\" >3.4730%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col2\" class=\"data row14 col2\" >3.4733%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row14_col3\" class=\"data row14 col3\" >4.4309%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row15\" class=\"row_heading level0 row15\" >TXT</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col0\" class=\"data row15 col0\" >2.9540%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col1\" class=\"data row15 col1\" >2.9540%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col2\" class=\"data row15 col2\" >2.9540%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row15_col3\" class=\"data row15 col3\" >3.0520%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row16\" class=\"row_heading level0 row16\" >BA</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col0\" class=\"data row16 col0\" >2.9341%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col1\" class=\"data row16 col1\" >2.9340%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col2\" class=\"data row16 col2\" >2.9341%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row16_col3\" class=\"data row16 col3\" >2.3219%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row17\" class=\"row_heading level0 row17\" >JPM</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col0\" class=\"data row17 col0\" >2.8056%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col1\" class=\"data row17 col1\" >2.8060%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col2\" class=\"data row17 col2\" >2.8056%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row17_col3\" class=\"data row17 col3\" >2.4539%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row18\" class=\"row_heading level0 row18\" >HPQ</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col0\" class=\"data row18 col0\" >2.7529%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col1\" class=\"data row18 col1\" >2.7530%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col2\" class=\"data row18 col2\" >2.7529%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row18_col3\" class=\"data row18 col3\" >2.1737%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row19\" class=\"row_heading level0 row19\" >TMO</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col0\" class=\"data row19 col0\" >2.4419%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col1\" class=\"data row19 col1\" >2.4420%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col2\" class=\"data row19 col2\" >2.4419%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row19_col3\" class=\"data row19 col3\" >5.2292%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row20\" class=\"row_heading level0 row20\" >MSFT</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col0\" class=\"data row20 col0\" >2.2311%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col1\" class=\"data row20 col1\" >2.2310%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col2\" class=\"data row20 col2\" >2.2311%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row20_col3\" class=\"data row20 col3\" >2.7574%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row21\" class=\"row_heading level0 row21\" >DE</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col0\" class=\"data row21 col0\" >2.2079%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col1\" class=\"data row21 col1\" >2.2080%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col2\" class=\"data row21 col2\" >2.2079%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row21_col3\" class=\"data row21 col3\" >2.3251%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row22\" class=\"row_heading level0 row22\" >ZION</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col0\" class=\"data row22 col0\" >2.1958%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col1\" class=\"data row22 col1\" >2.1960%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col2\" class=\"data row22 col2\" >2.1958%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row22_col3\" class=\"data row22 col3\" >2.2749%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row23\" class=\"row_heading level0 row23\" >PCAR</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col0\" class=\"data row23 col0\" >2.1672%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col1\" class=\"data row23 col1\" >2.1670%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col2\" class=\"data row23 col2\" >2.1672%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row23_col3\" class=\"data row23 col3\" >1.8956%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1level0_row24\" class=\"row_heading level0 row24\" >APA</th>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col0\" class=\"data row24 col0\" >1.4674%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col1\" class=\"data row24 col1\" >1.4670%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col2\" class=\"data row24 col2\" >1.4674%</td>\n",
" <td id=\"T_b5822758_be79_11eb_8345_28cfe94f2cb1row24_col3\" class=\"data row24 col3\" >1.4532%</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x7f8a3d6ff160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Comparando los resultados\n",
"##############################################\n",
"\n",
"w_s = pd.concat([w_1, w_2, w_3, w], axis=1)\n",
"w_s.columns = ['PortfolioLab', 'PyPortfolioOpt', 'RiskfolioLib', 'RiskfolioLib Optimal']\n",
"\n",
"display(w_s.style.format(\"{:.4%}\").background_gradient(cmap='YlGn'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. Hierarchical Equal Risk Contribution (HERC).\n",
"\n",
"Es una técnica desarrollada por Raffinot (2016), que combina la estructura jerárquica que existe entre los activos, una técnica de seleccion de clusters óptimos y la paridad de riesgo ingenua (pesos proporcionales a la inversa del riesgo).\n",
"\n",
"\n",
"## A. Hierarchical Tree Clustering\n",
"\n",
"Este paso consiste en crear una estructura jerárquica entre los activos basados en la información de la matriz de correlación. En forma práctica se construye una matriz de linkage, esta matriz puede minimizar la distancia entre las hojas o no, que se puede visualizar mediante un dedrograma."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting Hierarchical Tree\n",
"\n",
"ax = plf.plot_dendrogram(returns=Y,\n",
" correlation='pearson',\n",
" linkage='ward',\n",
" k=None,\n",
" max_k=10,\n",
" leaf_order=True,\n",
" ax=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. Optimal Number of Clusters and Seriation\n",
"\n",
"En este paso a partir del dendrograma anterior se selecciona el número óptimo de clusters, Raffinot (2018) propone usar el gap statistic, sin embargo debido a que es costoso computacionalmente, Riskfolio-Lib utiliza el two difference gap statistic (Yue, Wang, and Wei 2008) como proponen Sjöstrand and Behnejad (2020). Luego se reordena la matriz de correlación y covarianzas para que tengan el mismo orden que los activos basados en la matriz de linkage."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x864 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plotting Assets Clusters\n",
"\n",
"ax = plf.plot_clusters(returns=Y,\n",
" correlation='pearson',\n",
" linkage='ward',\n",
" k=None,\n",
" max_k=10,\n",
" leaf_order=True,\n",
" dendrogram=True,\n",
" ax=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## C. Hierarchical Recursive Bisection\n",
"\n",
"En este paso se realiza una optimización de paridad de riesgo ingenua empezando por la parte superior del dendrograma y se baja siguiendo la estructura del dendrograma hasta llegar al número óptimo de clusters. En este paso es importante el orden de los activos en el dendrograma por lo que los pesos son diferentes si se considera el orden por defecto o el orden que minimiza la distancia entre las hojas."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>weights</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>8.7890%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>7.7078%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>7.6425%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>7.3706%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>7.2470%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>6.9450%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>5.8416%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>5.7763%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>4.5549%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>4.0487%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>3.9035%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>3.6992%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>3.1867%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>2.7495%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>2.6476%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>2.2539%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>2.2513%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>2.1239%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>2.0177%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>1.8486%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>1.7341%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>1.7317%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>1.6586%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>1.6276%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>0.6426%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" weights\n",
"VZ 8.7890%\n",
"T 7.7078%\n",
"CNP 7.6425%\n",
"NI 7.3706%\n",
"MMC 7.2470%\n",
"PSA 6.9450%\n",
"CMCSA 5.8416%\n",
"MO 5.7763%\n",
"BAX 4.5549%\n",
"TMO 4.0487%\n",
"CPB 3.9035%\n",
"MSFT 3.6992%\n",
"TGT 3.1867%\n",
"JPM 2.7495%\n",
"BMY 2.6476%\n",
"HPQ 2.2539%\n",
"JCI 2.2513%\n",
"PCAR 2.1239%\n",
"SEE 2.0177%\n",
"TXT 1.8486%\n",
"DE 1.7341%\n",
"BA 1.7317%\n",
"LUV 1.6586%\n",
"ZION 1.6276%\n",
"APA 0.6426%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Building the portfolio object\n",
"port = hc.HCPortfolio(returns=Y)\n",
"\n",
"# Estimate optimal portfolio:\n",
"\n",
"model='HERC' # Could be HRP or HERC\n",
"correlation = 'pearson' # Correlation matrix used to group assets in clusters\n",
"rm = 'MV' # Risk measure used, this time will be variance\n",
"rf = 0 # Risk free rate\n",
"linkage = 'ward' # Linkage method used to build clusters\n",
"max_k = 10 # Max number of clusters used in two difference gap statistic\n",
"leaf_order = True # Consider optimal order of leafs in dendrogram\n",
"\n",
"w = port.optimization(model=model,\n",
" correlation=correlation,\n",
" rm=rm,\n",
" rf=rf,\n",
" linkage=linkage,\n",
" max_k=max_k,\n",
" leaf_order=leaf_order)\n",
"\n",
"display(w.sort_values(by=\"weights\", ascending=False, axis=0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## D. Comparison PortfolioLab and Riskfolio-Lib\n",
"\n",
"Solo dos bibliotecas en Python tienen habilitada esta técnica de optimización, por lo que vamos a comparar los resultados en los dos casos."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>6.6343%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>6.4838%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>6.1209%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>5.9031%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>5.5623%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>5.3090%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>5.0085%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>4.7580%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>4.4833%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>4.3763%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>4.3592%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>4.0893%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>4.0836%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>3.9111%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>3.8381%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>3.8379%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>3.4755%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>3.4379%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>2.9984%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>2.9087%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>2.1608%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>1.9207%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>1.7549%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.5153%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>1.0692%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"MO 6.6343%\n",
"JPM 6.4838%\n",
"CNP 6.1209%\n",
"NI 5.9031%\n",
"PSA 5.5623%\n",
"JCI 5.3090%\n",
"PCAR 5.0085%\n",
"SEE 4.7580%\n",
"CPB 4.4833%\n",
"VZ 4.3763%\n",
"TXT 4.3592%\n",
"DE 4.0893%\n",
"BA 4.0836%\n",
"LUV 3.9111%\n",
"ZION 3.8381%\n",
"T 3.8379%\n",
"BMY 3.4755%\n",
"MMC 3.4379%\n",
"TGT 2.9984%\n",
"CMCSA 2.9087%\n",
"BAX 2.1608%\n",
"TMO 1.9207%\n",
"MSFT 1.7549%\n",
"APA 1.5153%\n",
"HPQ 1.0692%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Usando PortfolioLab\n",
"##############################################\n",
"\n",
"from portfoliolab.clustering.herc import HierarchicalEqualRiskContribution\n",
"\n",
"# Calculando los pesos HERC\n",
"herc = HierarchicalEqualRiskContribution()\n",
"herc.allocate(asset_prices=data, risk_measure='variance', linkage='ward')\n",
"w_1 = herc.weights.sort_values(by=0, ascending=False, axis=1).T\n",
"\n",
"display(w_1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAHoCAYAAAC7LXLjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABEsklEQVR4nO3deZwkdX3/8dcHFhVEBWF0DIegIXgtyuwGNDGhVeRU8RYckBWQRGdIotvGK7qz3kevUTMThSi/9RgFbzGCiMeoEVHY8VjPiOYQ4oZRvDUi8Pn98a1hm3KPmT5mZpfX8/HYx85UV9e3uqe76l2f+ta3IjORJEmStNkui70CkiRJ0lJjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKlm2WKvwJbsu+++edBBBy32akiSJGkntmHDhh9n5sCWHluSIfmggw7iqquuWuzVkCRJ0k4sIv5ra4/Z3UKSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqlm22Csg3RZt2LCBjRs3LvZqSJKA5cuXs2LFisVeDS0xVpKlRbBx40Y2bdq02KshSbd5mzZtsmihLbKSLC2SwcFBVq1atdirIUm3aevXr1/sVdASZSVZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSarYbkiPigIj4TER8KyK+GRF/u4V5IiLeFBFXR8TXI2Ko7bHTI+J71b/Te/0CJEmSpF5bNod5bgRWZ+Z0RNwJ2BARl2Xmt9rmOR44pPp3JPBm4MiIuCuwBlgJZPXcizLzpz19FZIkSVIPbbeSnJk/yszp6udfAt8G9qvNdhLwjiyuAPaKiHsAxwKXZeb1VTC+DDiup69AkiRJ6rF59UmOiIOAw4Ev1R7aD/hh2+/XVNO2Nn1Lyz47Iq6KiKtmZmbms1qSJElST805JEfEnsAHgL/LzF/0ekUy87zMXJmZKwcGBnq9eEmSJGnO5hSSI2I3SkCezMwPbmGWa4ED2n7fv5q2temSJEnSkjWX0S0CeBvw7cx8/VZmuwh4WjXKxYOBn2fmj4BLgWMiYu+I2Bs4ppomSZIkLVlzGd3iz4HTgI0R8dVq2guBAwEy8y3AxcAJwNXAb4CnV49dHxEvA66snvfSzLy+Z2svSZIk9cF2Q3Jm/hsQ25kngZGtPHY+cH5HaydJkiQtAu+4J0mSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKlm2fZmiIjzgUcB12XmA7bw+HOB4bbl3RcYyMzrI+I/gV8CNwE3ZubKXq24JEmS1C9zqSSvB47b2oOZ+brMfFBmPgh4AfDZzLy+bZaHVY8bkCVJkrRD2G5IzszPAddvb77KKcB7ulojSZIkaZH1rE9yROxBqTh/oG1yAp+IiA0RcXav2pIkSZL6abt9kufh0cAXal0tHpqZ10bE3YDLIuI7VWX6D1Qh+myAAw88sIerJUmSJM1PL0e3OJlaV4vMvLb6/zrgQ8ARW3tyZp6XmSszc+XAwEAPV0uSJEman56E5Ii4C3AU8JG2aXeMiDvN/gwcA3yjF+1JkiRJ/TSXIeDeAzSAfSPiGmANsBtAZr6lmu1xwCcy89dtT7078KGImG3n3Zn58d6tuiRJktQf2w3JmXnKHOZZTxkqrn3aD4AHdrpikiRJ0mLxjnuSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqlm22CsgSZKWpg0bNrBx48bFXo2+2rRpEwDr169f3BXps+XLl7NixYrFXo0dipVkSZK0RRs3brwlRO6sBgcHGRwcXOzV6KtNmzbt9Ac7/WAlWZIkbdXg4CCrVq1a7NVQF3b2Knm/WEmWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTXbDckRcX5EXBcR39jK442I+HlEfLX695K2x46LiO9GxNUR8fxerrgkSZLUL3OpJK8HjtvOPJ/PzAdV/14KEBG7AhPA8cD9gFMi4n7drKwkSZK0ELYbkjPzc8D1HSz7CODqzPxBZt4AXACc1MFyJEmSpAXVqz7JD4mIr0XEJRFx/2rafsAP2+a5ppq2RRFxdkRcFRFXzczM9Gi1JEmSpPnrRUieBu6ZmQ8E/gn4cCcLyczzMnNlZq4cGBjowWpJkiRJnek6JGfmLzLzV9XPFwO7RcS+wLXAAW2z7l9NkyRJkpa0rkNyRAxGRFQ/H1Et8yfAlcAhEXFwRNwOOBm4qNv2JEmSpH5btr0ZIuI9QAPYNyKuAdYAuwFk5luAJwLPjIgbgd8CJ2dmAjdGxChwKbArcH5mfrMvr0KSJEnqoe2G5Mw8ZTuPjwPjW3nsYuDizlbttm3Dhg1s3LhxsVdDfbJp0yYA1q9fv7gror5avnw5K1asWOzVkCR1wDvuLVEbN268JUhp5zM4OMjg4OBir4b6aNOmTR7oStIObLuVZC2ewcFBVq1atdirIakDniWQpB2blWRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqWbZYq+AJEnSbdmGDRvYuHFj35a/adMmANavX9+X5S9fvpwVK1b0ZdmLyUqyJEnSItq4ceMtQbYfBgcHGRwc7MuyN23a1NeAv5isJEuStMT1u9K4Nf2uQG7Lzlqd3JrBwUFWrVq12Ksxb4vx2VgoVpIlSVri+l1p3Jp+ViC3ZWeuTmrHYSVZkqQdwI5aaezEzlyd1I7DSrIkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpvJiLpNmWhbu+7kLfzva3dvleSFoKVZEm3KQt1e9+Fup2vt++VpP6wkizpNmdnur2vt++VpP6wkixJkiTV3GYryQvVL7FTC9mfsRP2gZQkSTuz22wleaH6JXZqofozdsI+kJIkaWd3m60kw87VL3EhLdXqtiRJUq/cZivJkiRJ0tZsNyRHxPkRcV1EfGMrjw9HxNcjYmNEXB4RD2x77D+r6V+NiKt6ueKSJElSv8ylkrweOG4bj/8HcFRmLgdeBpxXe/xhmfmgzFzZ2SpKkiRJC2u7fZIz83MRcdA2Hr+87dcrgP17sF6SJEnSoun1hXtnApe0/Z7AJyIigXMzs15lvkVEnA2cDXDggQf2eLV2TEt1mDqHp5MkSTu7noXkiHgYJSQ/tG3yQzPz2oi4G3BZRHwnMz+3pedXAfo8gJUrV2av1mtHNjtM3VIbCm6prU+72QBvSJYkSd3oSUiOiMOAtwLHZ+ZPZqdn5rXV/9dFxIeAI4AthmRtmcPUzc9SrW5LkqQdS9dDwEXEgcAHgdMy89/bpt8xIu40+zNwDLDFETIkSZKkpWS7leSIeA/QAPaNiGuANcBuAJn5FuAlwD7AP0cEwI3VSBZ3Bz5UTVsGvDszP96H16BFshT7TC/F/tL2kZYkacczl9EtTtnO42cBZ21h+g+AB/7hM7SzWIp9ppfSuoB9pCXdNvS6aNKPgocFC83Xbfq21Oqefaa3bSlVtCWpX3pdNOl1wcOChTphSJYkSV1bykUTCxbqhCFZkqQF1EnXhE67H9jFQOpc16NbSJKkuZvtmjAfg4OD8+6CsGnTpiV3cbW0I7GSLEnSAluIrgl2MdCWeJHl3O0UIXkhT13B0vnjSZIkzYcXWc7dThGSO/mDd/pHXUp/PEmSpPnyIsu52SlCMizcH3wp/fEkSZLUH164J0mSJNXsNJVkqW4p3DZ7Kd0m2770kiTNnZVk7bQ6GWap1zoZtqkfHApKkqT5sZKsndpSvjhhIS2FSrYkSTsSK8mSJElSjSFZkiRJqjEkS5IkSTX2SZakPlmIEVYWagQVR0eRdFtjJVmS+mQhRlhZiBFUHB1F0m2RlWRJ6qOdYYQVR0eRdFtkJVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo03E5GkHVy/b3/d71tfe8trSUuRlWRJ2sH1+/bX/bz1tbe8lrRUWUmWFkm/q3/t+l0JrLMyuPB21Ntfe8trSUuVlWRpkfS7+teun5XAOiuDkqSdgZVkaRHtqNW/bbEyKEnaGVhJliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSauYUkiPi/Ii4LiK+sZXHIyLeFBFXR8TXI2Ko7bHTI+J71b/Te7XikiRJUr/MtZK8HjhuG48fDxxS/TsbeDNARNwVWAMcCRwBrImIvTtdWUmSJGkhLJvLTJn5uYg4aBuznAS8IzMTuCIi9oqIewAN4LLMvB4gIi6jhO33dLXWkvpuw4YNbNy4cd7P27RpEwDr16+f1/OWL1/OihUr5t2eJEn90Ks+yfsBP2z7/Zpq2tamS1riNm7ceEvgnY/BwUEGBwfn9ZxNmzZ1FMglSeqXOVWSF0JEnE3pqsGBBx64yGsjCUrgXbVqVd/bmW/VWYun0zMMW9PpmYdt8ayEpF7oVSX5WuCAtt/3r6ZtbfofyMzzMnNlZq4cGBjo0WpJknqp0zMMW9PJmYdt8ayEpF7pVSX5ImA0Ii6gXKT388z8UURcCryy7WK9Y4AX9KhNSdIiWKgzDJ3wrISkXplTSI6I91Auwts3Iq6hjFixG0BmvgW4GDgBuBr4DfD06rHrI+JlwJXVol46exGfJEmStFTNdXSLU7bzeAIjW3nsfOD8+a+aJEmStDiWzIV70o6sk4uZHCpNkqSly9tSSz3QycVMDpUmSdLSZSVZ6pGFuJjJi5IkSVoYVpIlSZKkGkOyJEmSVGNIliRJkmrskyxJWpIWctQYcOSYHYWfCy0UK8mSpCVpoUaNAUeO2ZH4udBCsZIsSVqyFuoW2I4cs2Pxc6GFYCVZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGke3kCRJUs/t6GNaW0mWJElSz+3oY1pbSZYkSVJf7MhjWltJliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkmjmF5Ig4LiK+GxFXR8Tzt/D4P0bEV6t//x4RP2t77Ka2xy7q4bpLkiRJfbFsezNExK7ABPBI4Brgyoi4KDO/NTtPZj67bf5zgMPbFvHbzHxQz9ZYkiRJ6rO5VJKPAK7OzB9k5g3ABcBJ25j/FOA9vVg5SZIkaTHMJSTvB/yw7fdrqml/ICLuCRwMfLpt8h0i4qqIuCIiHtvpikqSJEkLZbvdLebpZOD9mXlT27R7Zua1EXEv4NMRsTEzv19/YkScDZwNcOCBB/Z4tSRJkqS5m0sl+VrggLbf96+mbcnJ1LpaZOa11f8/AKa4dX/l9vnOy8yVmblyYGBgDqslSZIk9cdcQvKVwCERcXBE3I4ShP9glIqIuA+wN/DFtml7R8Ttq5/3Bf4c+Fb9uZIkSdJSst3uFpl5Y0SMApcCuwLnZ+Y3I+KlwFWZORuYTwYuyMxse/p9gXMj4mZKIH91+6gYkiRJ0lI0pz7JmXkxcHFt2ktqv49t4XmXA8u7WD9JkiRpwXnHPUmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqWZOd9zTzm3Dhg1s3Lhx3s/btGkTAOvXr5/X85YvX86KFSvm3Z4kSdJCsZIsNm7ceEvgnY/BwUEGBwfn9ZxNmzZ1FMglSZIWkpVkASXwrlq1qu/tzLfqLEmStBisJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklQzp5AcEcdFxHcj4uqIeP4WHl8VETMR8dXq31ltj50eEd+r/p3ey5WXJEmS+mHZ9maIiF2BCeCRwDXAlRFxUWZ+qzbrhZk5WnvuXYE1wEoggQ3Vc3/ak7WXJEmS+mAuleQjgKsz8weZeQNwAXDSHJd/LHBZZl5fBePLgOM6W1VJkiRpYcwlJO8H/LDt92uqaXVPiIivR8T7I+KAeT6XiDg7Iq6KiKtmZmbmsFqSJElSf/Tqwr2PAgdl5mGUavHb57uAzDwvM1dm5sqBgYEerZYkSZI0f3MJydcCB7T9vn817RaZ+ZPM/F3161uBFXN9riRJkrTUzCUkXwkcEhEHR8TtgJOBi9pniIh7tP36GODb1c+XAsdExN4RsTdwTDVNkiRJWrK2O7pFZt4YEaOUcLsrcH5mfjMiXgpclZkXAX8TEY8BbgSuB1ZVz70+Il5GCdoAL83M6/vwOiRJkqSe2W5IBsjMi4GLa9Ne0vbzC4AXbOW55wPnd7GOkiRJ0oLyjnuSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSauYUkiPiuIj4bkRcHRHP38Ljz4mIb0XE1yPiUxFxz7bHboqIr1b/LurlykuSJEn9sGx7M0TErsAE8EjgGuDKiLgoM7/VNttXgJWZ+ZuIeCbwWuAp1WO/zcwH9Xa1JUmSpP6ZSyX5CODqzPxBZt4AXACc1D5DZn4mM39T/XoFsH9vV1OSJElaOHMJyfsBP2z7/Zpq2tacCVzS9vsdIuKqiLgiIh67tSdFxNnVfFfNzMzMYbUkSZKk/thud4v5iIhTgZXAUW2T75mZ10bEvYBPR8TGzPx+/bmZeR5wHsDKlSuzl+slSZIkzcdcKsnXAge0/b5/Ne1WIuJo4EXAYzLzd7PTM/Pa6v8fAFPA4V2sryRJktR3cwnJVwKHRMTBEXE74GTgVqNURMThwLmUgHxd2/S9I+L21c/7An8OtF/wJ0mSJC052+1ukZk3RsQocCmwK3B+Zn4zIl4KXJWZFwGvA/YE3hcRAP+dmY8B7gucGxE3UwL5q2ujYkiSJElLzpz6JGfmxcDFtWkvafv56K0873JgeTcrKEmSJC0077gnSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSaoxJEuSJEk1hmRJkiSpxpAsSZIk1RiSJUmSpBpDsiRJklRjSJYkSZJqDMmSJElSjSFZkiRJqjEkS5IkSTWGZEmSJKnGkCxJkiTVGJIlSZKkGkOyJEmSVGNIliRJkmoMyZIkSVKNIVmSJEmqMSRLkiRJNYZkSZIkqWZOITkijouI70bE1RHx/C08fvuIuLB6/EsRcVDbYy+opn83Io7t4bpLkiRJfbHdkBwRuwITwPHA/YBTIuJ+tdnOBH6amX8M/CPwmuq59wNOBu4PHAf8c7U8SZIkacmaSyX5CODqzPxBZt4AXACcVJvnJODt1c/vBx4REVFNvyAzf5eZ/wFcXS1PkiRJWrLmEpL3A37Y9vs11bQtzpOZNwI/B/aZ43MlSZKkJSUyc9szRDwROC4zz6p+Pw04MjNH2+b5RjXPNdXv3weOBMaAKzLzXdX0twGXZOb7t9DO2cDZ1a+HAt/t7qVJkiRJ23TPzBzY0gPL5vDka4ED2n7fv5q2pXmuiYhlwF2An8zxuQBk5nnAeXNYH0mSJKmv5tLd4krgkIg4OCJuR7kQ76LaPBcBp1c/PxH4dJYS9UXAydXoFwcDhwBf7s2qS5IkSf2x3UpyZt4YEaPApcCuwPmZ+c2IeClwVWZeBLwNeGdEXA1cTwnSVPO9F/gWcCMwkpk39em1SJIkST2x3T7JkiRJ0m2Nd9yTJEmSana6kNwq4zNLkiTtkCLW3mWx16FbI8PTBy72OnRrpwvJwO3BsLyjaUX09LPYirhTL5enhdGKeGgr4iGLvR5a2mKKQ2OKeyz2ekj9ELH2eODFEWt32P3YyPD0CcCnRoanF+zeGCPD08uq/3uW/3aakNyKiFbEocDGVsS+zT53tm5F3Kefy19orYgDFiOctCIe1or4k2bmzb0Kyq2IOwJvaZWxtxfMYgXzfh4QLuTBZiviWOCNwO8Wqs1g7MHB2JHVzzvVgXVMsWdMzWmYz27aeFhMcVo/29hCmycA5wJ3WMh2+2rdTlbUGRhfmNczML4HA+O793H5BzEwvn/flr8FEWuPAV4BfDBzzS8Xsu1eGRmePhZoAadNTA5dOzI83fesOTI8/RjgTQATk0M9y387TUhuZmYz87vA54FjoPfVyVmtiOOAj7ci/rhtWs83Cq2IfVoRe/Rr+W3t3An4KvCG6rUtpD8DvtaKOKQXQbkVcQfKSCofBo5tlZvf9F0r4kTgJVVAX2i36/UCWxEPrH7cpfq9r9uKKiCfCzy/mTndz7ZqTgbO6ncjMcWLYopXVv8/fAHam91JPS6mytm1PjkQuFfVZt/3J9Xrei3wzGzwH31q44iY4rExxaNiivv1ow0A1sVBrIsB1sXurM7sW1BeF3/Gungq6+JU1sVQX9qYNTC+PwPj+zAzmm3T+vO6BsaPp2znL2Rg/G/7sPy9gCZwOgPjC1INjVh7LPAh4DuZay6vpu26EG33ysjw9DHAOyijml0PMDE5dHMvq7tbaPMRwOuBE0aGp+/Ry1C+04TkVrmJCcA3gUcCNDNv7kM7xwNrgDOamVe3Iu5ctdXTynUrYiXlroNvaUWsbF9+rwNLM/OXwFuB/wEe3Sp3WVwQzcxXAC8DvtBtRbkV8SeUG9L8OfAlyhf1Sf0Oyq2IRwKvBD7RzPz1AldfjwH+pRXx8rZg2+0yB4F/a0V8BHhRK+Le/fgutbV3IjAO3ADstsAHGu+hHFSRjPXl7FNM8f8oB4MbgIOAp8UUr+1HW1V7j6KqRAGfyUZfK/M/B46PKe6QDfr2GQGIKY4HzgfuQ9lW0etKeVWlfg/ljrF/A7wspnhFL9sAYF0cB1xM+TuNsy7u0JegvC5OBN4JHAw8Bfh71sWbe9oGlCA8MH4YsBH4KAPjf8nA+N0AmBnNngflgfFjgVdRzjz9IzDGwPjp237SvJZ/APBL4APAvsAp/a4oR6w9Gngd8Cxg34i1LwXIXHNTxNoFyWojw9NHjQxPXzAyPH3IyPD0vtW0ObddhdVx4DnA5cAZI8PTD4VS3e1HUG6rWr8A+Aqw58TkUM+2RTt8SG5FHNyKuH0z88Zq0puBla2Inh9ZtiIOo4SwtzQzP92KuCfwyVbEil63RTkK2wjsBry9FTHWijgdNof/bsNY24EFwDSwB+VmL3/Zinh8N8veTrvHtCKe14p4MEAz85WUncXlnQblVsR9gQuBK4Crm5n/DXyCMoZ334JyFVLPB05rZl7WKjfNeXYrYrd+tFdr+3jg1ZTX+QDg6T1q9/+AzwK/BjYBn25FDM/+vXqpFXEI8GLgCcApwN8DT6jOCPRFMHZEMPagYGx3yvfsz4Kxe/Wju0VMcTJw92xwYjb4ADBKOSAdjCme24f29gdeBDwrG3yCcufTnlZ5Y4oVMcXrYor7Uu6g+mXa9iUxRc8rXzHFgygHog8HzgG+F1P8STa4sVftxRSHUgLXqmzwAspn8uXAg2OKl/eiDWA2uP4D8LeU08M3ALuwLnargnJv3r91cS9KeFjF6nwF8GRKgWc/1sVET9qYNTOazIx+nbIt+jXwPOAlDIw3b3kcelNVHhgfBF4KvI+Z0Y8xM/oZynajNyF2YPzulPUfBT5HOdg8EDi5X0E5Yu0+wPHA6Zlr3k4JmQ+PWLsWIHPNzf0OyiPD07tSvl9PBp4OvGlkePqo9sBZzbMtvwBWTUwOTQIfA34PnDgyPP3n0PugPDI8/ThgDPibicmh91Xt37N6rCfv1w4dklsRBwCrgS+2Ih7Yijigmfkbyk7iwFbEXXpV1avCxw2Um6pkK+IvgbcD72xmbuhFGzW/A64CPkLpPvJpYE0r4l9aEQ9vRezVTfW66lP9T62IxwA0My+kVOEfBHwNOL4VcVKXr2FL7e4JPI1SBXhLK+LiVsSzKEfsrwI+1Yo4cK5BueqLfkfKzubNzcx/rgIyzczfApdRQuxjWxE9Pa1efSYOowSR/6y6xlwI7NLM/H0v29pC2wdXbb21mfkuykbtgcBf1uab9+e/mfkzYB1wKOXv8hjgscD/a0W8pBVx/1Z0vyNvRfw55SzCSc3Mr1ffo1cDZ1AObHoelIOxfYGHUbp2vK9qbxmwTzKWwViv+/Dehc1Vz9tVVd0vUU4TH9DjtqDslK4Dvl21lwCzVd6Y6q4fbxW2B4BByrb3PcBTgVfHFI+IKe4K9LQiX1WQzwJOzQbfzQZvpoTZz8cUh2SDm7oJyjHF7HdkL+Cr2eDzMUVkg19mg69QAtghMcVBXb2QdRGsi7sB7wYuZ3VeRtnOP5USZj/NurgHq/OmrirKm597Z+BqVufnAVidv2V1fpcSAPdiXRza+YvZqk9TQuUqymtazcD4+xgYfwYD43e/VTeMTgyM78XM6CZKdfyAqssFwBC966M+Qym2HAycTamIvo/NQbmnXS+qPsh/B3wvc81XItbumrnmG8AzgEcsVFCemBy6iVJU+hpwDSXkrh0Znn7VyPD049vm2dYyrpyYHLp8ZHh6l4nJoe9Szub+HnjUyPD0n1Xz9GT7MDI8fS9gEnjNxOTQ56vJuwJHVT9nNd+du2lnhw3J1an1x1H6p72XUmp/VVUB/RZwBHC/XnSDqPrp/lMz8zuUYLIC+H/A55uZ/9Q234OrENhpO0e1Il7TijgFuBul4vQqyt/pF5Sd+W6UW4C/txWxaxcHAU8A/gqYaEU8qxXxZOD9lL7JH6bsyJ/U64pyM/NXlL/ZGygbumnK6e7LgJuA/YBvtSIOmssp/qov+q+BXwEXwK0r5NVB05cpX6bHtyJ6toGrgvC/UDYsH6RsXP6pmdmanacVcfc+db/4BSXg/UUr4vBm5k+BnwIjrYiJVsRTWhH7zPXzX/V/37tt0uXAJ4F7ADdTTj+/DPhTysa7qw1PZQbYHfhxK+J2rYhoZn6c8pk/k1JR7tlFOcHY8ZTTme+ldH84E7iS8pl/bzA2mIzd2Iug3NYN4N8pn2uywQ1V+Po98EXgqJhi760tY57t7VP1Pd6VEmDvVLW3y2wIrEaDOLGbQJkNbs4GH88Gp2WDsyjVr3+jVKCOp3QhuCim6MmZvJjikZTtxQezwTdnK+LZ4FWUPohfqCrK3QTl2QtuZ4CBmOKA2YOLyg8oAeneHS6/WJ3J6ryOsv1+KOviHMqZz1dSKstXAZ9lXezJ6q72W3tV//8PsDvrNl87U/kh5QCt+/7WA+NDDIzfl4Hx2ff+M5R98f6U/dYNwPco++NLGBhf1nE1eWD83sDLGRhvMDM6DnwdeCID4x8A7sXM6Iu7fC2HMDB+KDOjN1P2F58CllP2k1+kBOX9gDMYGP+jrtqqRKw9kfL3/zLwBSjdK6r/v03Z1h4VsfZ11bSed2kaGZ6+2+zPE5ND/w28BbhTVQ3+AOUAdWxkePqjI8PTc7qeYrb6PDE59D3Kfv7/gJNHhqeP7OGqB+Xv8u22aZdSzojPVq1PB543Mjzd8XU7O2xIpuy0H0CpCr0GeC7wUcrR66MpG4pX1Hb881ZdUPRKSoCkmXkZJRhdBlzXirhXNd+plKOmjsJD25X9vwceTzkV99+U1/YKSnB9ZjNzFTACPK2ZedN8DwLaQvyrgFMplYy9KNWhd1Dev3tRQt/nKRu4rrUiDm2V4b3+GPg+Zedwt6r99wJHA1PV9H+H7V9s1IrYrxXx0erXO1DeN5qZN7YidqmqzPsAf0z58jy9mXltD17LIa2IP2tFPAzI6kDpUuC3lArE7HyrKDu/nl993cz8CaVC/iXgH1oR7wL2pvQHu5FyyuwjrYi5vI8nAJcA57YiXlEt/3fA/1I+dxcBI83Md1MudFtThfJu/ZiyM/2jZuYNba/tUspnvkmpYvfKYynvy3OBlcnY/yZj65OxYcrB7+XB2H7J2I3bWsj2xBSvA94UU7yYsgE/KqY4p32ebPAjSlh5dEzxF12291BKwDomG/wPpZp3YUwxUFWQZ7fzJ1KqLPMOkzHFA6v/d23/PxvM7gS/lA2alMrby4GPd/OaqjaOpxQKTs4Gn44pBilnuqjafg3loOfbMcUfZ4NtVrm20saxlFD/YOA/Kf1QbxUEssFPKf3JOw+u66LBungt6+JkSje6l1C6PvyI1fkaVuf1rM5nU/6OHRdaWBfHAJexLo6tAvnPgBNv1YVjdf6KEsq6O9s1MH4cZdu9H7A7A+PBzOi/U763r6HsP85hZvSFzIw+AziOmdEbu6gmX0cphjyWgfGHMjP6z1Ub+wL/3OVr2YdyDdDnGRgfoQTjj1GKBfsCf005GPwYcEdK6OtKxNoHUopFz8pc89HMNRur6SdHrN0dbgnK5wAPiFi7b7dt1lXDtL1xZHi6/XqW/wCOHhmefgLwTOCpE5NDh1E+m9/ewmK2qQrKFwI/ohxw9sTE5ND3KQcy7xwZnp4dU/p/oGxPR4ann0bJURdMTA7dsOWlbN8OG5Kbme+k7Az+lHKk84uqy8CxlJ3vf1OOlrvpknA0pVqxupn5yVbEPVsRq5uZ36AcVR4EHNeKeB7lS/S4Zub/dNDOYZSQ8jfNzH+gBNWjKKe7NwKNah0+1orYtZn5q2bmpg7auS+lAv1+yhHq5ZTT6o+jfIhPpYSs3ZqZ1wPrm5kb59vOFtp9FOUAZjXl/fwUJQSPA/tQPsh3bGZ+tZk5Ajy0Gqlkm6rAe7dWxCXV+u/fijiyeuzm6gDiSMpBxbJm5v/24LWcWLX1XEq3nm9UF8y9iVJRfn0r4l5Vf+FzgHOranbXWhGPbEUc3YrYF6D6DFxACcpHU0aG+DTwnGbmE4AnVGF3W8s8DnghJZS+Ejhg9sK5ZubrKVXWS5qZH60+e79uZv68i9dwUivig62I5wCHUza6f1JVkXO2i011MPpc2g46euA84F8pB2mnBWN/OvtAMvZ8yg7w0mBs1077J8cU51JO015AOeX8NOAE4CUxxd8BD4kpdospPkA5eDuOqjtGF/agHIgdG1OcSPksfoES/u4N7FP1jR4Bzs0G89phVOH032KKjwAviinuXQukP6bqOpINvp4NrsgG2/3+zsGhlIPf71fdRN5PVc1tqyi/jrJd6XRf9meUC31fQqmsvgJYHVOsiin+pGrrNEqXt8528OviWEoYmi2AnEk5g3YmsJx11dm6dfE04P4w/7Df5lBK8ajJungo5bu9CjiHdbG8auc0SiHpWx23MjD+EEqXl7OYGf0kM6O/agu/GyjdjFYzM3oRA+OzVbyZDtu6GwPj+zIz+kvKAdh1wFMZGP8LZkbXU75rxzMw/qSOh4ObGf0JZRu6L+WzNETZzj+CchBwFHA2M6OfBNYyM3p9R+1UItYOUIoqH8pc8+WItbtV019F+ax8MmLtngBVeD4pc82Pu2mzbmR4+nhKseytlJwBwMTk0Ccon/X3AS+ZmBy6rJq+dmJy6EedtDUxOfQdoDUxOdTZZ2DzOt91ZHi6/SDyjZTv0ux1YdcC140MT6+ibO9OnZgc6irDRJ+HE+6pKgD9dzPzR23Tngo8mPJHvqAaqWH2sT/qJLRWz92LEnr+r5k53Io4kPKhOb+ZeW41zyMop86OoASSb3bY1p2A9bNtVdM+QOlvekkrYh2l0ntWe8Vtnm3cn/Jl+EdK5fhw4PJm5jtbEWsoO+uTm5n/1YpY1nYhZFeqv9k7gdObmV+sKtmrKJ3tj6JsKP6asmN4e9WlZS7L3aXtAsYPUI4e30XZEH+fcproLyinjp7TzLy4B6/luGq9n9fM/Gw1bQ1lZ3dCM/MbrYhzKKE/gcc0M+d95L2Vtveg9E+/D+VzeH0z8+XVY7enXIm/EhhvZumDOBs8t7HMu1ICzhOamR9qRRxRtfFB4PbNzLOqsP9E4OxmZjc779n37/XV+v+UcnB2d0p3jo9QTtX/mHIm4eZtrftcBWP3BG5Ixn4UjO1B+Sz+mBL+lwNvTcam2+a/WzJ2XUdtTTFC6Vv4l9ngRzHFwcAl2eA+McVKyt9okHJh08+ywdNjil26HRWiCrHvouzcN1Auuvzi7LpQ+szvDfxtNvh6B8vfq1r+Lyhne15ECV8/yAZfrOb5BPDCbHBVN6+lWtZhwHezwe+q93SE8tpekQ3e2TZfL967P6J0D/gfSmB+PuWg47mU4H8tJTw/ORt8Y94NrIv7UMJog9X5OdbFgynb4L9hdV7JujiJcrZpI+Wg6Zms7mw/UrW3L+Xvcw3lb/86yhmhNZQuIz+nFHdOYXXO//WUanEyMP4s4EBmRp/PwPjelP3JI6p23025ruDxwNHMjHY+ukoZMWMDpWvFa4BrmRn9AgPjayhdDz/JzOgUA+OrKQenz2Nm9NddtPdIykHmAynbpodTzp4dQXkfH8LMaMdFAoCItSdQwt25wJMy1xxZTb83pXL7XEpQvh2lytzzkDYyPH1Hyj7y9ROTQ58YGZ7eg9Kd8/CJyaHPjgxP/zHlc/S3E5NDv6j6GPd19Jo5rPNelH3TV4DPTUwOfaSa/krgnhOTQ8PV79+jbC8ePTE51PmBYGVHqyQ/FrikVYaoAqA6BXwF5QKqe8DmPqldBORHUXZo64C7tCLeSPlAvbOZee5sH9Nm5qcooekRnQTk2ddRBfunVtPe14p4HWUD8Llq1g9QQkVHFyZU78fLgNs1M9/bzDyPcqR4dNX+WkpIuaRVxivuSUCuDADvqgLybBV8HFhLqST/kFJl/j0lvMxJ+4V9VdX0k5Sq3S8oIfxfKZXRv29mXtxtv+AqUF4MvLyZ+dnZi8qq9+58SteGPSkh7A30MCBX7fyGUun8KSWwHN+KeFMrYoTyWflHSv/aZ852sdheyKzOFjyaMr7zAylVtPMofZ2XtyLWUz6D96VU/DvW1p3otGbmmmbmGyjVuRez+TTcOZQuP2+gB2M/B2MrKKcOPxSMPYLSh+3ZbD6QuhY4Ixg7ou1pHVU6qj7I05QzQk+MKe5MOTX8w5hivyo8PgM4CTg7Gzy9w5c1296RUUaZ2CsbbKKEoKso3ZceDxyRDV5M2WY+HXhcJwEZIBv8jC1fyHl+TPHSmOIIynvZ9bjFUYZgu5BqrPtsMAFMULqxTVXz7FY91tFOO6a432yVmHIAsQulgvg2Sv/nG7LBkykHh2uAh3UYkA+nHPxfRPnbw+q8gvJe3b36/SNVmw8DRjoKyOviMNbFYdVv11P6Ad+X0gXh+cB+rM5TKX+3ZwMP6yggF7N97b8GHMHA+F9TLt58OuWs3f0on5WPUoJt511HBsYPpxxQfphyBuFBlAsB30b5mx0EPImB8SOZGV0HvLirgAwwM3oZpbvIN4BfMzP6dsq++b7ACT0IyMdS3p+nZK5pAf8ZsfZvI9Yuy1zzfeBFVSj+CuVv2fOMNjI8vdvE5NCvKcWJ71ddFdZQvnfvHBmevpiyfdyvms5iB+RqHX5G+R59FfjnkeHpV4wMTz+Schbo7iPD06dWI2e8CziuFwEZdoBKcns1rApFaykblCfVKsrvBH7QzFzTZXuzY4y+rJn5/lbE3Sk79z2Ax7ZVL59OCZlP66TC1opbKgxvBL7dzDyvOs39BuA04M7NzBuq13w7YM9m5rxPt1QXqr2J8sV/HfBfzczVrYgzKZWTZ85Wp1sRLwKmmplfmG8722j/NEr/ruOamb+qXk+yuQ/0mc3Ma1sRu1ejUcx3+e0V5fcBA83MRquMPHG3atnbrKjOo60TKQGy0cz8SasMPfi76rHPULrETLevUw/avAvw27a/0QeBdzQzP1wdvJ1C6Vr0hur/r823O0RV4b0YeGEz89XVtD2Bf519L5tdjNbRKsPkvZPSf/Af2s8WtCIeQNk4H15N2gO4UzPzh522NysYuyPlTMKxlB3t9yn97X9LObC5jlKl3AN4YTLWUcUrpjiFcrrvhZRq/lMoB2snAm/JBudt5XlRu0Bsru3dg7Lt+CklrMz2ez+Ocr3ECZQq4kXAZdngVx20sQ9wc9UflygXBb6U8ncMygHb84FhSneff6n6WXcsyk1W1gEj2eDy2mPnUM7YnJkNNnRaRa5C+IeAqynbxP+ifG/+ifLa7k05cHxzNrik4xdTxkF+NWVfchUlbNyR0u/5UODJrM7/a5t/z6qv8Hzb2YdyYHctJQD/FyVgvZHy99+bEvIuYHW+u+PXAzAwfjTlb/BVynfnN5Tvz5cpIz19g1KBHaEc8O5WdZHopK3292+aUrQ6EHgS5XN+f8p+8n6UiwVP6Kpi/YftH095Dx9SdcXoWjWKxS3bwcw134lYezLlu/qDKjQTsfYUynt4VuaaOZ1ZnauR4em/oHRR/RfKfvkcyv74M8BlE5ND7x4Znr6yevwjwF0mJof+vZfr0Asjw9N/Qhl84EhK183/An4zMTn0nF5XvXeEkLysuhBr9v9dKFXRv6AE5f+t5vsrYK9m5mu6aGuQclT8983MK1sRezQzf1Odhn415ej4DZSNzjmU7g8dHZG3Ivan9KX6KOU01SZKWNhIOU36R5SqW9dDibUiLqfstP+K8sW/O6Xa8JRO+jbPob0VlFM1T6BcOf4mqo1De3eRVsRFlIvAvtJle+1B+VIgmpmzd13sSUBua+t4SgV8ZTPzp7MBslVuvPEPvejD3dbWIyn97dcDVzUzZ6qDmzuyefzOUyk79uXAuk77XVdtjQNHNjN/Vh0EPoMSMH/V6XtYdUl6M+Xg9u6UizX/tZn5b9Xju1E+93/TzLymkzbqqmHebk7Grq/GQn4NJYQPU3Y+w8AFyVgzGDsU+HEy1vGOsOoHfDSl8vMqyob7HMrB7clZRpnYtZMLy7bQ1l2ywc9jijOqdu5N6df9A0ro+2A2OCemeB6lEvTC+YbkKkiOUQLd97LBi6rpz6Hc6GBX4G+ywUdjij2BZVW1udPXFNkgo9xg5UfZ4B+rSvzBlBEzPl69vpMp25VHd9ht5FhK0J+hHEi8kNL17C6UC9wupxwsPovST/kM4LfzPpBZF0dRurY9ldV5ZTVtT8r34PHA3qzOG6obiHR9ARjr4uGUM2kvp5yRmx2/+musznexLlZRguUzgF91NHJGCa2zB0l3q/5NAN+9VTgdGH8apap8EjOjv+jo9QyMb37/ZkavrKbtSTnLFcyMnlJNuxel+9KPqwsGe2tg/CTK92BFNeJFxyLWtm8HBynbwgspBxyPpYT/QyhnAx8KnDJ7IV+vVH2QX0fJMt+ZmBy6amR4eiWw28Tk0BdHhqeXTUwO3TgyPP184NcTk0P/tM0FLrKR4eldJyaHbhoZnn45pXB6KKUI8ste3pZ6SYfk6gKlq4ChZub1bUF5V8oX9nGUEPFASgB8ajOz4xJ7q4yEcSHlQpDvUSolDcopubtQujvMUE7zDHfTVtXe6yk7smHKl+Tkqp1Ryqm/K5uZo10svz08XkzZaZ9ZLfs/m5lnVY/t2m1/07Y2H0G5cORwSvX7idVFWisoYe/KKoQ9lVIBe1iPLqhrf60fBD5ddevouS0E5adRwtejm5kd9WfdQhuPouz0XgR8bravfSvi3pTTzvtQLhS9tJp+h2Z2t8OtXtfrKKdpTwae1elBYNsy/5RyIejlrYhDKaF+GSUof6Ga572Ug4Cu70IXjN064DH2omDszpTXdHMy9rRgbH9g92SsJyO3wC39aF9KCVpvpHT/OoUSVj6Uje6v6q5C3iuBZ2eDz1UXlD2Ackr6AkrxYBPwgmzwm5jirtlgXhcYxRTHUb6Xr6NUZ55DuQX0r6vH3w9clw2e1cPgf9dscH1MsZrNB4DPoHQjug+lS9Zbs8GHYoq/Bj4x3/ezeu/GgSdmg6/FFOdT+pk+mHINweMo3QPOonTtyGzQ2an1dfEc4CZW5xurG4T8vpp+R8rnMIAzb5neC+viEZSzI0OUbiJPpbxvZzA7UtDqzdfrzMvA+Oy1CycxM/pRBsYPpHw+LmRm9IPVPHes2joDOJWZ0c77VQ+Ml/dvZvSNDIzvxszo79vaeDPlrMmTux5zeW7rsiczo/Ov8NdErP1TYLfMNZdHrJ3dDt4OuDBzzXQ1z6MpZzV+krmmJwWDWSPD0/ennEE5c2Jy6PMjw9OxpSA5Mjz9FMo42k+tLrZbstpfQzWMXUxMDnWdJeqWdJ/kqnvBOZQ7se3dVlG+qZn5IsopgadRjvq7CsiVn1GG8mpRTscdROnf8nrKEd+7KRuLbsP4bP/Y51NOdexL6Ze5nBLOX0w5NdzVkVyt3+4JlCrD2yhBea9WlLsu9TAgP5xyiu+vKDue37ci3tUsoyRcSdlwT1UHB/9AqWT35EPdvPXNR66kHGz0RTPzEqq7MbUinkm58PDMXgTkVhm2bvaOT89uZn6sLSAva2Z+n1Ix/Egz89LqgJFuA3K1jEson8k3ULrhdBWQq2VeWQXkXZplxJJ3UA0u3yo35IHyveruVDAQjNVH6jgwGNs9GfsFZee9LBi7ALi224AcU7wmphhom/RQyinge1Pew69RRmN4IKXC0Qt/UrXx4pji2Ooitm9QTkMfkg2eQgnq/wfQQUCe7Xe/Lht8hLITfyTw2pjirdVsbwNu38OAfAzwiZjizyj9nQ+l9K//BTCRDQ6j9PM+uXpNb+kgIB9D+dx9jdlbkDc4A/gO8LFs8ArgIcCrsowD/bOOAvLmm3gcDLd8NjZf37E6f0058L1ztT69szo/RbnoawqYZHUeBbyY1XkDq/OXHQdkoBrJ4dHAqxkYvzMzo/9N+Q6X11iqvCspZ0RP6zggbx4/ecvvX+lv/DLKwVPX24s56UFABshcc2UVkHfJXDO7Hfwd8OSItQ+t5vlo5pqv9TIgt93dbhC4vD0gt9/5bmR4es+R4elXU7LHaUs9IMOt7943MTl0XT8CMizxkAzQzPwopa/VVW1BeXbs189STsE8rQcBefZCp3MplajnAH/VzHxrVfEaoIys8YxuL8hqlqGuZj+g36P0w5sdheEZlAA50pzDMGhzaKs9KB9P6WbxNsoVtAe1yqgXXasuzGpRTlVOV/1izwSiCspvoFRp1lL6h57Yy64JcMtrvT2li8eHernsLbR1CeWq+DcCz+hFoKyWm5Q+s/8DXFGF5tm/3+wO43+BfVsRD+jVAU5b+/9K6bbUeSVoy8u9ufp/dlzd/6PcrOaBzcwPd9vVIhjbHPAYmw14RwPrgrFzk7EbKBd0zo5wQZe3ob4CbhnZYZhyAPhISqVrL8pBzgbgZV31bb2191TLvwT465jiUVVQ/izw2JjijGzwk04vaKtC9aMpw9X9wYWcMcV6enQhZ5tDKcWBlwEHZINh4Ohs8ExK300ogfl3Vb/oeYkpHkGpID+HUuU/LaZ4GEA2eCIwE1NcAdyYZczn9jvwzc/mbgwfAh7MulhR3WZ6F9bdcgB/FKU73d911Ma227+Y8rm7knVxV1ZnuZCym7v3zZoZ/Rjl4HwDA+PjlO/R26vHfkX5PpzKzGjn28HNleHy/g2Mr6hG0tiFgfH+v38LYPZmIJlrZreDv6UE5V7eZKPd7JB4vwD2Ghme3q3tsQAYGZ5+GGV7+V7gMROTQz3d9vdTL7tVbM2S7m7RbgunuEcpX5RHNDP/q89tP4lSHXpKM/PqHi/7UMpObqKZ+bJeLrvWTr3rBZQRGG7stt9u1Z/1TcAZzTKKxUbKkG/T1YVnE5RTfk/uZf/gbaxPz4awm0NbezR7Nw7ybHei3SkD17+imfnB2mN7U05BH0cZbaWnn8eFUl24+jjgbb3qohKMnUip1K2iHLBdTunb+H7gP5Kxk6uL+e6SjHU7NvHszS7eR7kJwV9mg19HGeXiLyhnuD6SDT5czdvpRXqHQRl/OMrYwK+iBNT3Us6yvTkbXBxTnEXp4vHijrsJbG7zlgs5s8Grq2l7Av+aDRoxxW7Z6PJGFJvbmh2y7IeU9+3d2eB91WPLKBdnjQKnZwcjTMQU5TR3g8tjivbuPpdm45bRMi4B9sgGR3X6d7qV0q3iuZQgeSGrc0M1/WRKiH00q3vT/34r7Z9EuVBwJZBd3r3v1srFe58ABpkZvY6B8d2ZGZ33BdfbaePW79/M6IZq+ub3b2a0f+/fAopYO7sdfGvmmq7GEK6rbhTyFMo248eUv9s/TEwOXVzrqrCa0gf5Lb1sf2exw4RkuCUov4bSt/UZwCnNzK/2sb17UD5kz6AE5J5UC7fQzipK147X9ipwbaWder/dzzTbbqvd4TKXUU7zTTczv1Cd/v8E8LpmucXw7HyfAK5pZp7RTXs7q+pA4wzgm5RwdzfKxQjrm5lfbJtvlDIU0l8v1IFAv3Q7asaWVF0uSsBj7NXVtD0pV2o/uZsL9LbYXhmR4R3ZYP+2aQHcJxvzvztVbdlzHbngbdngIzHFnbNBZxdL/WHbt1zImQ1+FlPc6kLOboLkdoL/COX9/EB1ceJpwDmdBORam7tkg5tjikOqZe5GGcP6c9Xj+2WDru/GeYt1sR/lTNojKNfV/JbSV/iJXQy/Np/2OxstYy7KyA8t4GHMjPbkAHcLbWz9/eumWr0ERazdLXNNT7eDACPD02+hHBS+g1I8OJxyu+1h4PPV+MenUs6IPra6M55qdqiQDLcMw/VR4PBm5tf63NbulMHEv9vPil1VVXst5WYefQvJVVu7VN0SXgDs0sx8RQ+WecvII9WyX0q5A2KrevzxlH5m7+931X9HVA3B1n7l+N0pQfmg6t/FlKvXT6JcVPqUXneH2JkEY5sDHmM/C8ZuCXjJWOd9M7fWXhkN4o2UsYl/Wnusq8pkFcK3OHJBNnhXFV6PA86YvbiuV6pK+a0u5OxBWN1e8N+LKvhTtvN3zQa9PrA5pGpjH+DCbPCFnlSQ69bF7pQLlo+mXHPyGVbnkhtOqyNl5IfN1ep+XERX7p536/evH6NY7KRGhqdXAH9POcg4iNLVcSWl3/EvKQMSHAY8ZWJyaKc68OilHS4kQ29PcS8VC/maqn67ayg3+ejJgNvVcmdvLfw8ylBij29FnErpqvKEXvSx3tm0Nt/17qRmufXzgZQDpvMpV9sfS+lW9A3KzXKe3eu+3DujYOwPAx5jfdsRtHW9uFs26On3uOpXu62RC6JXFeQttP0oylCDh2eDnhyYzTH4Hw88vdfBv20dNp/mbnR4u+Tbuh6N/KDeGRmevidww8Tk0I+qu+jN3mH065SRcF5OueviPSk3evnhxORQ113PdmY7ZEhW9/rZb7cVcRhlB/55SkA+vZdhfGdTnR15LfCQZuYvWhHvptzU5bzq8T0oF1zu3swurlK/jQnGNgc8xvpeeY8pDutk/N45LvsESlezh2SDX8UUB2ej+zvczbHtPXam4N+2Dj3rWy0ttpHh6eWUEVy+TOnnfwXlbMnZlAtuj6ScpXzHxOTQlxdrPXc0hmT1XFUN/U/KyB2P7XY0kNuCqr/9myhDEP4RZRzu3/ZyDOvbomBsj2RsQc86RYd3g5vDck+gjITz57PDu/Wlm8ACWczgL+1MRoanD6d0oVhL6cd9EVu+w+goZcSLFwG/W4jRIXZ0hmT1XHUXtdcD43axmLtWxC1Xjjczr+vFDUK0c4kpbtUXdEcNyLN2tuAvLbSR4en6LbxHKLeevtUdRicmh5ojw9OHAj+emBzqaT//nZkhWX3Rj5ELbguqinKLcifC/lw5rh1aTLFnzvNW00vZzhb8pYUyMjx9yy28JyaHrqym3Yky7CoTk0NPGxme3h/Y3dErOmNIlpaYVtx6nNOFGFtaWkw7W/CXFsLI8PRzgJsmJofeODI8vdvE5NDvq+l3pNwYLYBT7VbRuSV/xz3ptqaZ+RHgL5uZNxuQdVtgQJbmru2W0lu8hffE5NCvKf2T70h1C+/221Br7qwkS5Ik7WBGhqcfDrwQeN7E5NCGkeHpXQAmJoduHhmePosy1OJvJyaH/ncx13NHtmyxV0CSJEnz9iXg34CnjAxPMzE5tAFgZHj6ZMpFex83IHfHSrIkSdIOaGR4equ38PZOet0zJEuSJO2gRoan/+AW3hOTQ97CuwcMyZIkSVKNo1tIkiRJNYZkSZIkqcaQLEmSJNUYkiVJkqQaQ7IkSZJUY0iWJEmSagzJkiRJUo0hWZIkSar5/w2dT1VAeAOOAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Graficando el Dendrograma\n",
"\n",
"fig, ax = plt.subplots(figsize=(12, 8))\n",
"ax = herc.plot_clusters(assets=data.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El dendrograma que produce PortfolioLab no considera el orden que minimiza la distancia entre las hojas."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Numero de Optimo de Clusters Gap Statistic: 7\n"
]
}
],
"source": [
"# Se extrae el número óptimo de clusters de acuerdo el gap statistic\n",
"\n",
"k = herc.optimal_num_clusters\n",
"print(\"Numero de Optimo de Clusters Gap Statistic:\", k)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>weights</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>MO</th>\n",
" <td>6.6343%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JPM</th>\n",
" <td>6.4838%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CNP</th>\n",
" <td>6.1209%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NI</th>\n",
" <td>5.9031%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PSA</th>\n",
" <td>5.5623%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>JCI</th>\n",
" <td>5.3090%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PCAR</th>\n",
" <td>5.0085%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SEE</th>\n",
" <td>4.7580%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CPB</th>\n",
" <td>4.4833%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>VZ</th>\n",
" <td>4.3763%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TXT</th>\n",
" <td>4.3592%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>4.0893%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BA</th>\n",
" <td>4.0836%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LUV</th>\n",
" <td>3.9111%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ZION</th>\n",
" <td>3.8381%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>T</th>\n",
" <td>3.8379%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BMY</th>\n",
" <td>3.4755%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MMC</th>\n",
" <td>3.4379%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TGT</th>\n",
" <td>2.9984%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CMCSA</th>\n",
" <td>2.9087%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BAX</th>\n",
" <td>2.1608%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TMO</th>\n",
" <td>1.9207%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MSFT</th>\n",
" <td>1.7549%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>APA</th>\n",
" <td>1.5153%</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPQ</th>\n",
" <td>1.0692%</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" weights\n",
"MO 6.6343%\n",
"JPM 6.4838%\n",
"CNP 6.1209%\n",
"NI 5.9031%\n",
"PSA 5.5623%\n",
"JCI 5.3090%\n",
"PCAR 5.0085%\n",
"SEE 4.7580%\n",
"CPB 4.4833%\n",
"VZ 4.3763%\n",
"TXT 4.3592%\n",
"DE 4.0893%\n",
"BA 4.0836%\n",
"LUV 3.9111%\n",
"ZION 3.8381%\n",
"T 3.8379%\n",
"BMY 3.4755%\n",
"MMC 3.4379%\n",
"TGT 2.9984%\n",
"CMCSA 2.9087%\n",
"BAX 2.1608%\n",
"TMO 1.9207%\n",
"MSFT 1.7549%\n",
"APA 1.5153%\n",
"HPQ 1.0692%"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Usando Riskfolio-Lib\n",
"##############################################\n",
"\n",
"w_2 = port.optimization(model=model,\n",
" correlation=correlation,\n",
" rm=rm,\n",
" rf=rf,\n",
" linkage=linkage,\n",
" k=k,\n",
" max_k=max_k,\n",
" leaf_order=False)\n",
"\n",
"w_2 = w_2.sort_values(by=\"weights\", ascending=False, axis=0)\n",
"\n",
"display(w_2)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col1,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col2{\n",
" background-color: #004529;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col2{\n",
" background-color: #3fa95c;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col1{\n",
" background-color: #004c2c;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col2{\n",
" background-color: #d6efa2;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col1{\n",
" background-color: #005e33;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col2{\n",
" background-color: #056c39;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col1,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col2{\n",
" background-color: #016937;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col2{\n",
" background-color: #0d733c;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col1{\n",
" background-color: #13773d;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col2{\n",
" background-color: #1c7e40;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col1{\n",
" background-color: #1f8142;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col2,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col1,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col2{\n",
" background-color: #e6f5ac;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col1{\n",
" background-color: #2d914b;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col2{\n",
" background-color: #eaf7af;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col1{\n",
" background-color: #389f55;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col2{\n",
" background-color: #edf8b1;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col1{\n",
" background-color: #45ad5f;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col2{\n",
" background-color: #a2d88a;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col1{\n",
" background-color: #4eb163;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col1{\n",
" background-color: #4fb264;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col2{\n",
" background-color: #f2fab5;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col1,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col1{\n",
" background-color: #66bd70;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col2,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col2{\n",
" background-color: #f5fbb8;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col1{\n",
" background-color: #74c477;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col2,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col1{\n",
" background-color: #f7fcba;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col1,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col1{\n",
" background-color: #79c679;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col2{\n",
" background-color: #f7fcbc;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col1{\n",
" background-color: #95d385;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col2{\n",
" background-color: #daf0a4;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col1{\n",
" background-color: #98d486;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col2{\n",
" background-color: #12763d;\n",
" color: #f1f1f1;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col1{\n",
" background-color: #b8e293;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col2{\n",
" background-color: #c4e799;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col1{\n",
" background-color: #bde496;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col2{\n",
" background-color: #3ea75a;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col2{\n",
" background-color: #81ca7d;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col1{\n",
" background-color: #f0f9b4;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col2{\n",
" background-color: #9ad587;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col2{\n",
" background-color: #acdd8e;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col1{\n",
" background-color: #fafdc9;\n",
" color: #000000;\n",
" }#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col2,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col0,#T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col1{\n",
" background-color: #ffffe5;\n",
" color: #000000;\n",
" }</style><table id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >PortfolioLab</th> <th class=\"col_heading level0 col1\" >RiskfolioLib</th> <th class=\"col_heading level0 col2\" >RiskfolioLib Optimal</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row0\" class=\"row_heading level0 row0\" >MO</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col0\" class=\"data row0 col0\" >6.6343%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col1\" class=\"data row0 col1\" >6.6343%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row0_col2\" class=\"data row0 col2\" >5.7763%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row1\" class=\"row_heading level0 row1\" >JPM</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col0\" class=\"data row1 col0\" >6.4838%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col1\" class=\"data row1 col1\" >6.4838%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row1_col2\" class=\"data row1 col2\" >2.7495%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row2\" class=\"row_heading level0 row2\" >CNP</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col0\" class=\"data row2 col0\" >6.1209%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col1\" class=\"data row2 col1\" >6.1209%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row2_col2\" class=\"data row2 col2\" >7.6425%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row3\" class=\"row_heading level0 row3\" >NI</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col0\" class=\"data row3 col0\" >5.9031%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col1\" class=\"data row3 col1\" >5.9031%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row3_col2\" class=\"data row3 col2\" >7.3706%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row4\" class=\"row_heading level0 row4\" >PSA</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col0\" class=\"data row4 col0\" >5.5623%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col1\" class=\"data row4 col1\" >5.5623%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row4_col2\" class=\"data row4 col2\" >6.9450%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row5\" class=\"row_heading level0 row5\" >JCI</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col0\" class=\"data row5 col0\" >5.3090%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col1\" class=\"data row5 col1\" >5.3090%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row5_col2\" class=\"data row5 col2\" >2.2513%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row6\" class=\"row_heading level0 row6\" >PCAR</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col0\" class=\"data row6 col0\" >5.0085%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col1\" class=\"data row6 col1\" >5.0085%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row6_col2\" class=\"data row6 col2\" >2.1239%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row7\" class=\"row_heading level0 row7\" >SEE</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col0\" class=\"data row7 col0\" >4.7580%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col1\" class=\"data row7 col1\" >4.7580%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row7_col2\" class=\"data row7 col2\" >2.0177%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row8\" class=\"row_heading level0 row8\" >CPB</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col0\" class=\"data row8 col0\" >4.4833%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col1\" class=\"data row8 col1\" >4.4833%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row8_col2\" class=\"data row8 col2\" >3.9035%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row9\" class=\"row_heading level0 row9\" >VZ</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col0\" class=\"data row9 col0\" >4.3763%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col1\" class=\"data row9 col1\" >4.3763%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row9_col2\" class=\"data row9 col2\" >8.7890%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row10\" class=\"row_heading level0 row10\" >TXT</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col0\" class=\"data row10 col0\" >4.3592%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col1\" class=\"data row10 col1\" >4.3592%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row10_col2\" class=\"data row10 col2\" >1.8486%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row11\" class=\"row_heading level0 row11\" >DE</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col0\" class=\"data row11 col0\" >4.0893%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col1\" class=\"data row11 col1\" >4.0893%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row11_col2\" class=\"data row11 col2\" >1.7341%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row12\" class=\"row_heading level0 row12\" >BA</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col0\" class=\"data row12 col0\" >4.0836%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col1\" class=\"data row12 col1\" >4.0836%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row12_col2\" class=\"data row12 col2\" >1.7317%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row13\" class=\"row_heading level0 row13\" >LUV</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col0\" class=\"data row13 col0\" >3.9111%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col1\" class=\"data row13 col1\" >3.9111%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row13_col2\" class=\"data row13 col2\" >1.6586%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row14\" class=\"row_heading level0 row14\" >ZION</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col0\" class=\"data row14 col0\" >3.8381%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col1\" class=\"data row14 col1\" >3.8381%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row14_col2\" class=\"data row14 col2\" >1.6276%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row15\" class=\"row_heading level0 row15\" >T</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col0\" class=\"data row15 col0\" >3.8379%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col1\" class=\"data row15 col1\" >3.8379%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row15_col2\" class=\"data row15 col2\" >7.7078%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row16\" class=\"row_heading level0 row16\" >BMY</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col0\" class=\"data row16 col0\" >3.4755%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col1\" class=\"data row16 col1\" >3.4755%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row16_col2\" class=\"data row16 col2\" >2.6476%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row17\" class=\"row_heading level0 row17\" >MMC</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col0\" class=\"data row17 col0\" >3.4379%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col1\" class=\"data row17 col1\" >3.4379%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row17_col2\" class=\"data row17 col2\" >7.2470%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row18\" class=\"row_heading level0 row18\" >TGT</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col0\" class=\"data row18 col0\" >2.9984%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col1\" class=\"data row18 col1\" >2.9984%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row18_col2\" class=\"data row18 col2\" >3.1867%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row19\" class=\"row_heading level0 row19\" >CMCSA</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col0\" class=\"data row19 col0\" >2.9087%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col1\" class=\"data row19 col1\" >2.9087%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row19_col2\" class=\"data row19 col2\" >5.8416%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row20\" class=\"row_heading level0 row20\" >BAX</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col0\" class=\"data row20 col0\" >2.1608%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col1\" class=\"data row20 col1\" >2.1608%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row20_col2\" class=\"data row20 col2\" >4.5549%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row21\" class=\"row_heading level0 row21\" >TMO</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col0\" class=\"data row21 col0\" >1.9207%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col1\" class=\"data row21 col1\" >1.9207%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row21_col2\" class=\"data row21 col2\" >4.0487%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row22\" class=\"row_heading level0 row22\" >MSFT</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col0\" class=\"data row22 col0\" >1.7549%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col1\" class=\"data row22 col1\" >1.7549%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row22_col2\" class=\"data row22 col2\" >3.6992%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row23\" class=\"row_heading level0 row23\" >APA</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col0\" class=\"data row23 col0\" >1.5153%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col1\" class=\"data row23 col1\" >1.5153%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row23_col2\" class=\"data row23 col2\" >0.6426%</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1level0_row24\" class=\"row_heading level0 row24\" >HPQ</th>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col0\" class=\"data row24 col0\" >1.0692%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col1\" class=\"data row24 col1\" >1.0692%</td>\n",
" <td id=\"T_bce76a30_be79_11eb_8345_28cfe94f2cb1row24_col2\" class=\"data row24 col2\" >2.2539%</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x7f8a3d295df0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"##############################################\n",
"# Comparando los resultados\n",
"##############################################\n",
"\n",
"w_s = pd.concat([w_1, w_2, w], axis=1)\n",
"w_s.columns = ['PortfolioLab', 'RiskfolioLib', 'RiskfolioLib Optimal']\n",
"\n",
"display(w_s.style.format(\"{:.4%}\").background_gradient(cmap='YlGn'))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment