ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

lab_106.ipynb

(48511B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {},
      6    "source": [
      7     "# Downside Measures: SemiDeviation, VaR and CVaR\n",
      8     "\n",
      9     "We're going to look at a few measures of downside risk. We've already seen how to compute drawdowns, but we're going to look at 3 popular measures, and we are going to develop code to compute these and add them to our toolbox.\n",
     10     "\n",
     11     "The first measure is the simplest, which is the semideviation, which is nothing more than the volatility of the subset of returns that are negative.\n",
     12     "\n",
     13     "The code is very simple:\n",
     14     "\n",
     15     "```python\n",
     16     "def semideviation(r):\n",
     17     "    \"\"\"\n",
     18     "    Returns the semideviation aka negative semideviation of r\n",
     19     "    r must be a Series or a DataFrame, else raises a TypeError\n",
     20     "    \"\"\"\n",
     21     "    is_negative = r < 0\n",
     22     "    return r[is_negative].std(ddof=0)\n",
     23     "```\n"
     24    ]
     25   },
     26   {
     27    "cell_type": "code",
     28    "execution_count": 1,
     29    "metadata": {},
     30    "outputs": [],
     31    "source": [
     32     "import pandas as pd\n",
     33     "import edhec_risk_kit_106 as erk\n",
     34     "%load_ext autoreload\n",
     35     "%autoreload 2\n",
     36     "%matplotlib inline"
     37    ]
     38   },
     39   {
     40    "cell_type": "code",
     41    "execution_count": 2,
     42    "metadata": {},
     43    "outputs": [],
     44    "source": [
     45     "hfi = erk.get_hfi_returns()"
     46    ]
     47   },
     48   {
     49    "cell_type": "code",
     50    "execution_count": 3,
     51    "metadata": {},
     52    "outputs": [],
     53    "source": [
     54     "def semideviation(r):\n",
     55     "    \"\"\"\n",
     56     "    Returns the semideviation aka negative semideviation of r\n",
     57     "    r must be a Series or a DataFrame, else raises a TypeError\n",
     58     "    \"\"\"\n",
     59     "    is_negative = r < 0\n",
     60     "    return r[is_negative].std(ddof=0)\n"
     61    ]
     62   },
     63   {
     64    "cell_type": "code",
     65    "execution_count": 4,
     66    "metadata": {},
     67    "outputs": [
     68     {
     69      "data": {
     70       "text/plain": [
     71        "Convertible Arbitrage     0.019540\n",
     72        "CTA Global                0.012443\n",
     73        "Distressed Securities     0.015185\n",
     74        "Emerging Markets          0.028039\n",
     75        "Equity Market Neutral     0.009566\n",
     76        "Event Driven              0.015429\n",
     77        "Fixed Income Arbitrage    0.017763\n",
     78        "Global Macro              0.006579\n",
     79        "Long/Short Equity         0.014051\n",
     80        "Merger Arbitrage          0.008875\n",
     81        "Relative Value            0.012244\n",
     82        "Short Selling             0.027283\n",
     83        "Funds Of Funds            0.012122\n",
     84        "dtype: float64"
     85       ]
     86      },
     87      "execution_count": 4,
     88      "metadata": {},
     89      "output_type": "execute_result"
     90     }
     91    ],
     92    "source": [
     93     "erk.semideviation(hfi)"
     94    ]
     95   },
     96   {
     97    "cell_type": "code",
     98    "execution_count": 5,
     99    "metadata": {},
    100    "outputs": [
    101     {
    102      "data": {
    103       "text/plain": [
    104        "Convertible Arbitrage     0.019540\n",
    105        "CTA Global                0.012443\n",
    106        "Distressed Securities     0.015185\n",
    107        "Emerging Markets          0.028039\n",
    108        "Equity Market Neutral     0.009566\n",
    109        "Event Driven              0.015429\n",
    110        "Fixed Income Arbitrage    0.017763\n",
    111        "Global Macro              0.006579\n",
    112        "Long/Short Equity         0.014051\n",
    113        "Merger Arbitrage          0.008875\n",
    114        "Relative Value            0.012244\n",
    115        "Short Selling             0.027283\n",
    116        "Funds Of Funds            0.012122\n",
    117        "dtype: float64"
    118       ]
    119      },
    120      "execution_count": 5,
    121      "metadata": {},
    122      "output_type": "execute_result"
    123     }
    124    ],
    125    "source": [
    126     "hfi[hfi<0].std(ddof=0)"
    127    ]
    128   },
    129   {
    130    "cell_type": "code",
    131    "execution_count": 6,
    132    "metadata": {},
    133    "outputs": [
    134     {
    135      "data": {
    136       "text/plain": [
    137        "Global Macro              0.006579\n",
    138        "Merger Arbitrage          0.008875\n",
    139        "Equity Market Neutral     0.009566\n",
    140        "Funds Of Funds            0.012122\n",
    141        "Relative Value            0.012244\n",
    142        "CTA Global                0.012443\n",
    143        "Long/Short Equity         0.014051\n",
    144        "Distressed Securities     0.015185\n",
    145        "Event Driven              0.015429\n",
    146        "Fixed Income Arbitrage    0.017763\n",
    147        "Convertible Arbitrage     0.019540\n",
    148        "Short Selling             0.027283\n",
    149        "Emerging Markets          0.028039\n",
    150        "dtype: float64"
    151       ]
    152      },
    153      "execution_count": 6,
    154      "metadata": {},
    155      "output_type": "execute_result"
    156     }
    157    ],
    158    "source": [
    159     "erk.semideviation(hfi).sort_values()"
    160    ]
    161   },
    162   {
    163    "cell_type": "code",
    164    "execution_count": 7,
    165    "metadata": {},
    166    "outputs": [
    167     {
    168      "data": {
    169       "text/plain": [
    170        "SmallCap    0.051772\n",
    171        "LargeCap    0.040245\n",
    172        "dtype: float64"
    173       ]
    174      },
    175      "execution_count": 7,
    176      "metadata": {},
    177      "output_type": "execute_result"
    178     }
    179    ],
    180    "source": [
    181     "ffme = erk.get_ffme_returns()\n",
    182     "erk.semideviation(ffme)"
    183    ]
    184   },
    185   {
    186    "cell_type": "code",
    187    "execution_count": 8,
    188    "metadata": {},
    189    "outputs": [],
    190    "source": [
    191     "# This will not work: erk.semideviation([1,2,3,4])"
    192    ]
    193   },
    194   {
    195    "cell_type": "markdown",
    196    "metadata": {},
    197    "source": [
    198     "# VaR and CVaR\n",
    199     "\n",
    200     "We'll look at three different ways to compute Value At Risk\n",
    201     "\n",
    202     "1. Historic VaR\n",
    203     "2. Parametric Gaussian VaR\n",
    204     "3. Modified (Cornish-Fisher) VaR\n",
    205     "\n",
    206     "To compute the historic VaR at a certain level, say 5%, all we have to do is to find the number such that 5% of the returns fall below that number and 95% of the returns fall above that number. In other words, we want the 5 percentile return.\n",
    207     "\n",
    208     "Fortunately, numpy has a `np.percentile` function that computes exactly that.\n",
    209     "\n",
    210     "Add the following code to the `edhec_risk_kit.py` file:\n",
    211     "\n",
    212     "```python\n",
    213     "\n",
    214     "def var_historic(r, level=5):\n",
    215     "    \"\"\"\n",
    216     "    Returns the historic Value at Risk at a specified level\n",
    217     "    i.e. returns the number such that \"level\" percent of the returns\n",
    218     "    fall below that number, and the (100-level) percent are above\n",
    219     "    \"\"\"\n",
    220     "    if isinstance(r, pd.DataFrame):\n",
    221     "        return r.aggregate(var_historic, level=level)\n",
    222     "    elif isinstance(r, pd.Series):\n",
    223     "        return -np.percentile(r, level)\n",
    224     "    else:\n",
    225     "        raise TypeError(\"Expected r to be a Series or DataFrame\")        \n",
    226     "```\n"
    227    ]
    228   },
    229   {
    230    "cell_type": "code",
    231    "execution_count": 19,
    232    "metadata": {},
    233    "outputs": [],
    234    "source": [
    235     "import numpy as np\n",
    236     "np.percentile(hfi, a=)"
    237    ]
    238   },
    239   {
    240    "cell_type": "code",
    241    "execution_count": 18,
    242    "metadata": {},
    243    "outputs": [
    244     {
    245      "data": {
    246       "text/plain": [
    247        "Convertible Arbitrage     0.031776\n",
    248        "CTA Global                0.049542\n",
    249        "Distressed Securities     0.046654\n",
    250        "Emerging Markets          0.088466\n",
    251        "Equity Market Neutral     0.018000\n",
    252        "Event Driven              0.048612\n",
    253        "Fixed Income Arbitrage    0.041672\n",
    254        "Global Macro              0.024316\n",
    255        "Long/Short Equity         0.049558\n",
    256        "Merger Arbitrage          0.025336\n",
    257        "Relative Value            0.026660\n",
    258        "Short Selling             0.113576\n",
    259        "Funds Of Funds            0.039664\n",
    260        "dtype: float64"
    261       ]
    262      },
    263      "execution_count": 18,
    264      "metadata": {},
    265      "output_type": "execute_result"
    266     }
    267    ],
    268    "source": [
    269     "erk.var_historic(hfi, level=1)"
    270    ]
    271   },
    272   {
    273    "cell_type": "markdown",
    274    "metadata": {},
    275    "source": [
    276     "Note that for reporting purposes, it is common to invert the sign so we report a positive number to represent the _loss_ i.e. the amount that is at risk."
    277    ]
    278   },
    279   {
    280    "cell_type": "markdown",
    281    "metadata": {},
    282    "source": [
    283     "# Conditional VaR aka Beyond VaR\n",
    284     "\n",
    285     "Now that we have the VaR, the CVaR is very easy. All we need is to find the mean of the numbers that fell below the VaR!"
    286    ]
    287   },
    288   {
    289    "cell_type": "code",
    290    "execution_count": 20,
    291    "metadata": {},
    292    "outputs": [
    293     {
    294      "data": {
    295       "text/plain": [
    296        "Global Macro              0.029333\n",
    297        "Equity Market Neutral     0.036100\n",
    298        "Merger Arbitrage          0.036233\n",
    299        "Relative Value            0.052367\n",
    300        "CTA Global                0.054767\n",
    301        "Funds Of Funds            0.061133\n",
    302        "Long/Short Equity         0.061867\n",
    303        "Distressed Securities     0.070967\n",
    304        "Event Driven              0.071267\n",
    305        "Fixed Income Arbitrage    0.072467\n",
    306        "Convertible Arbitrage     0.086100\n",
    307        "Short Selling             0.123867\n",
    308        "Emerging Markets          0.141167\n",
    309        "dtype: float64"
    310       ]
    311      },
    312      "execution_count": 20,
    313      "metadata": {},
    314      "output_type": "execute_result"
    315     }
    316    ],
    317    "source": [
    318     "erk.cvar_historic(hfi, level=1).sort_values()"
    319    ]
    320   },
    321   {
    322    "cell_type": "code",
    323    "execution_count": 11,
    324    "metadata": {},
    325    "outputs": [
    326     {
    327      "data": {
    328       "text/plain": [
    329        "SmallCap    0.002643\n",
    330        "LargeCap   -0.002131\n",
    331        "dtype: float64"
    332       ]
    333      },
    334      "execution_count": 11,
    335      "metadata": {},
    336      "output_type": "execute_result"
    337     }
    338    ],
    339    "source": [
    340     "erk.cvar_historic(ffme)"
    341    ]
    342   },
    343   {
    344    "cell_type": "markdown",
    345    "metadata": {},
    346    "source": [
    347     "## Parametric Gaussian VaR\n",
    348     "\n",
    349     "The idea behind this is very simple. If a set of returns is normally distributed, we know, for instance, that 50% of the returns are below the mean and 50% are above.\n",
    350     "\n",
    351     "We also know that approx two thirds of the returns lie within 1 standard deviation. That means one third lie beyond one standard deviation from the mean. Since the normal distribution is symmetric, approximately one sixth (approx 16%) lie below one standard deviation away from the mean. Therefore, if we know the mean and standard deviation and if we assume that the returns are normally distributed, the 16% VaR would be the mean minus one standard deviation.\n",
    352     "\n",
    353     "In general we can always convert a percentile point to a z-score (which is the number of standard deviations away from the mean that a number is). Therefore, if we can convert the VaR level (such as 1% or 5%) to a z-score, we can calculate the return level where that percent of returns lie below it.\n",
    354     "\n",
    355     "`scipy.stat.norm` contains a function `ppf()` which does exactly that. It takes a percentile such as 0.05 or 0.01 and gives you the z-score corresponding to that in the normal distribution."
    356    ]
    357   },
    358   {
    359    "cell_type": "code",
    360    "execution_count": 12,
    361    "metadata": {},
    362    "outputs": [
    363     {
    364      "data": {
    365       "text/plain": [
    366        "0.0"
    367       ]
    368      },
    369      "execution_count": 12,
    370      "metadata": {},
    371      "output_type": "execute_result"
    372     }
    373    ],
    374    "source": [
    375     "from scipy.stats import norm\n",
    376     "norm.ppf(.5)"
    377    ]
    378   },
    379   {
    380    "cell_type": "code",
    381    "execution_count": 13,
    382    "metadata": {},
    383    "outputs": [
    384     {
    385      "data": {
    386       "text/plain": [
    387        "-0.994457883209753"
    388       ]
    389      },
    390      "execution_count": 13,
    391      "metadata": {},
    392      "output_type": "execute_result"
    393     }
    394    ],
    395    "source": [
    396     "norm.ppf(.16)"
    397    ]
    398   },
    399   {
    400    "cell_type": "markdown",
    401    "metadata": {},
    402    "source": [
    403     "Therefore, all we need to do to estimate the VaR using this method is to find the z-score corresponding to percentile level, and then add that many standard deviations to the mean, to obtain the VaR.\n",
    404     "\n",
    405     "```python\n",
    406     "from scipy.stats import norm\n",
    407     "def var_gaussian(r, level=5):\n",
    408     "    \"\"\"\n",
    409     "    Returns the Parametric Gauusian VaR of a Series or DataFrame\n",
    410     "    \"\"\"\n",
    411     "    # compute the Z score assuming it was Gaussian\n",
    412     "    z = norm.ppf(level/100)\n",
    413     "    return -(r.mean() + z*r.std(ddof=0))\n",
    414     "```"
    415    ]
    416   },
    417   {
    418    "cell_type": "code",
    419    "execution_count": 14,
    420    "metadata": {},
    421    "outputs": [
    422     {
    423      "data": {
    424       "text/plain": [
    425        "Convertible Arbitrage     0.021691\n",
    426        "CTA Global                0.034235\n",
    427        "Distressed Securities     0.021032\n",
    428        "Emerging Markets          0.047164\n",
    429        "Equity Market Neutral     0.008850\n",
    430        "Event Driven              0.021144\n",
    431        "Fixed Income Arbitrage    0.014579\n",
    432        "Global Macro              0.018766\n",
    433        "Long/Short Equity         0.026397\n",
    434        "Merger Arbitrage          0.010435\n",
    435        "Relative Value            0.013061\n",
    436        "Short Selling             0.080086\n",
    437        "Funds Of Funds            0.021292\n",
    438        "dtype: float64"
    439       ]
    440      },
    441      "execution_count": 14,
    442      "metadata": {},
    443      "output_type": "execute_result"
    444     }
    445    ],
    446    "source": [
    447     "erk.var_gaussian(hfi)"
    448    ]
    449   },
    450   {
    451    "cell_type": "code",
    452    "execution_count": 15,
    453    "metadata": {},
    454    "outputs": [
    455     {
    456      "data": {
    457       "text/plain": [
    458        "Convertible Arbitrage     0.01576\n",
    459        "CTA Global                0.03169\n",
    460        "Distressed Securities     0.01966\n",
    461        "Emerging Markets          0.04247\n",
    462        "Equity Market Neutral     0.00814\n",
    463        "Event Driven              0.02535\n",
    464        "Fixed Income Arbitrage    0.00787\n",
    465        "Global Macro              0.01499\n",
    466        "Long/Short Equity         0.02598\n",
    467        "Merger Arbitrage          0.01047\n",
    468        "Relative Value            0.01174\n",
    469        "Short Selling             0.06783\n",
    470        "Funds Of Funds            0.02047\n",
    471        "dtype: float64"
    472       ]
    473      },
    474      "execution_count": 15,
    475      "metadata": {},
    476      "output_type": "execute_result"
    477     }
    478    ],
    479    "source": [
    480     "erk.var_historic(hfi)"
    481    ]
    482   },
    483   {
    484    "cell_type": "markdown",
    485    "metadata": {},
    486    "source": [
    487     "# Cornish-Fisher Modification\n",
    488     "\n",
    489     "The Cornish-Fisher modification is an elegant and simple adjustment.\n",
    490     "\n",
    491     "The z-score tells us how many standard deviations away from the mean we need to go to find the VaR. If the returns arent normal, we know that z-score will give us an inaccurate number. The basic idea is that since we can observe the skewness and kurtosis of the data, we can adjust the z-score up or down to come up with a modifed z-score. e.g. intuitively, all other things being equal, if the skewness is negative, we'll decrease the z-score further down, and if the skewness is positive, we'll push it up.\n",
    492     "\n",
    493     "The adjusted z-score which we'll call $z_{cornishfisher}$ given by:\n",
    494     "\n",
    495     "$$ z_{cornishfisher} = z +\\frac{1}{6}(z^2-1)S + \\frac{1}{24}(z^3-3z)(K-3)-\\frac{1}{36}(2z^3-5z)S^2 $$\n",
    496     "\n",
    497     "\n",
    498     "We can modify the previous function by adding a \"modified\" parameter with a default value of `True` as follows. If `True` then the following piece of code is executed, which modifes `z`:\n",
    499     "\n",
    500     "```python\n",
    501     "    if modified:\n",
    502     "        # modify the Z score based on observed skewness and kurtosis\n",
    503     "        s = skewness(r)\n",
    504     "        k = kurtosis(r)\n",
    505     "        z = (z +\n",
    506     "                (z**2 - 1)*s/6 +\n",
    507     "                (z**3 -3*z)*(k-3)/24 -\n",
    508     "                (2*z**3 - 5*z)*(s**2)/36\n",
    509     "            )\n",
    510     "```\n",
    511     "\n",
    512     "The rewritten function is:\n",
    513     "\n",
    514     "```python\n",
    515     "from scipy.stats import norm\n",
    516     "def var_gaussian(r, level=5, modified=False):\n",
    517     "    \"\"\"\n",
    518     "    Returns the Parametric Gauusian VaR of a Series or DataFrame\n",
    519     "    If \"modified\" is True, then the modified VaR is returned,\n",
    520     "    using the Cornish-Fisher modification\n",
    521     "    \"\"\"\n",
    522     "    # compute the Z score assuming it was Gaussian\n",
    523     "    z = norm.ppf(level/100)\n",
    524     "    if modified:\n",
    525     "        # modify the Z score based on observed skewness and kurtosis\n",
    526     "        s = skewness(r)\n",
    527     "        k = kurtosis(r)\n",
    528     "        z = (z +\n",
    529     "                (z**2 - 1)*s/6 +\n",
    530     "                (z**3 -3*z)*(k-3)/24 -\n",
    531     "                (2*z**3 - 5*z)*(s**2)/36\n",
    532     "            )\n",
    533     "        \n",
    534     "    return -(r.mean() + z*r.std(ddof=0))\n",
    535     "\n",
    536     "```\n",
    537     "\n",
    538     "We can now compare the different methods:"
    539    ]
    540   },
    541   {
    542    "cell_type": "code",
    543    "execution_count": 16,
    544    "metadata": {},
    545    "outputs": [
    546     {
    547      "data": {
    548       "text/plain": [
    549        "<matplotlib.axes._subplots.AxesSubplot at 0x10db59ac8>"
    550       ]
    551      },
    552      "execution_count": 16,
    553      "metadata": {},
    554      "output_type": "execute_result"
    555     },
    556     {
    557      "data": {
    558       "image/png": "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HcdxSghX+o7jOCWEK/1a8N///pchQ4aw9dZb07VrV370ox/x1ltv1bndCy64gCeffLLK4yeddBL33ntvje2MHDmSNm3a0Lt3b3r37s3554eF0aeeemq1oSH22WefamMFOY6z/lCci7NGtojc3tIaq5gZRxxxBMOGDeOuu+4CQpCzjz76iG233bbac1etWkVZWVmVx0eNGlW7/lbD2WefXRG1M8MNN9wQrf1saro2x3HWLXyknydPP/00G2ywQaXQyr1792aPPfbg3HPPpXv37vTo0YMJEyYAISTyvvvuy7HHHkuPHj1YuHAhO+ywA6eddhrdunXjwAMP5KuvvgIqj+RzhVwGeO655+jfvz+dO3fOa9SfJjOSX7VqFSeddFJFXzMrgSGEde7Xrx/bbrst//rXv4Cg0M8991x23nlnevbsybXXXpvz2hzHKR6Kc6TfAMyZM4eddtppjfL777+fWbNmMXv2bD7++GN23nnnilj4U6dOZc6cOXTq1ImFCxfy9ttvc+edd3L99ddz9NFHc99993H88cdXtFVVyGWADz/8kOeff54333yTww47jEGDBuXs5+WXX85tt90GwMUXX8xBBx1UcWzWrFm8//77zJkzB6BS+ytXrmTq1KlMmjSJCy+8kCeffJJx48bRokULpk2bxtdff83uu+/OgQceuMa1OY5TPPhIv448//zzDB06lLKyMrbaaiv23ntvpk2bBkC/fv0qKcVOnTrRu3dvAHbaaScWLlxYqa2qQi4DHH744TRq1IiuXbvy0UcfVdmfs88+m1mzZjFr1qxKCh+gc+fOLFiwgDPPPJPHHnuM5s2bVxw78sgj1+jX448/zi233ELv3r3ZZZddWLJkCW+//XbOa3McpzhwpZ8n3bp1Y8aMGWuUVxe7KBN4LUNN4Y+rCrmcfW5G5u9///uKSdt82GyzzZg9ezb77LMP11xzDaeeeuoa7af7ZWZcddVVFQ+Rd999t2Kkn31tjuMUB67082S//fbj66+/5vrrr68omzZtGpttthkTJkxg1apVLF68mOeee45+/fqtlYyqQi5XxZ///OcKhZwPH3/8Md999x1HHXUUf/rTnyrlB8jFQQcdxJgxY/j2228BeOutt/jiiy/yuxjHcdZJ3KafJ5J44IEHOOussxg9ejTNmjWjY8eO/P3vf2f58uX06tULSVxyySV873vf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\n",
    559       "text/plain": [
    560        "<Figure size 432x288 with 1 Axes>"
    561       ]
    562      },
    563      "metadata": {
    564       "needs_background": "light"
    565      },
    566      "output_type": "display_data"
    567     }
    568    ],
    569    "source": [
    570     "var_table = [erk.var_gaussian(hfi), \n",
    571     "             erk.var_gaussian(hfi, modified=True), \n",
    572     "             erk.var_historic(hfi)]\n",
    573     "comparison = pd.concat(var_table, axis=1)\n",
    574     "comparison.columns=['Gaussian', 'Cornish-Fisher', 'Historic']\n",
    575     "comparison.plot.bar(title=\"Hedge Fund Indices: VaR at 5%\")"
    576    ]
    577   },
    578   {
    579    "cell_type": "markdown",
    580    "metadata": {},
    581    "source": [
    582     "Note that in some cases, the cornish-fisher VaR is lower i.e. estimates a smaller loss than you would get from a pure gaussian assumption. That can happen if the observed skewness is positive, as is the case for \"Short Selling\" and \"Global Macro\""
    583    ]
    584   },
    585   {
    586    "cell_type": "code",
    587    "execution_count": 17,
    588    "metadata": {},
    589    "outputs": [
    590     {
    591      "data": {
    592       "text/plain": [
    593        "Global Macro              0.982922\n",
    594        "Short Selling             0.767975\n",
    595        "CTA Global                0.173699\n",
    596        "Funds Of Funds           -0.361783\n",
    597        "Long/Short Equity        -0.390227\n",
    598        "Emerging Markets         -1.167067\n",
    599        "Distressed Securities    -1.300842\n",
    600        "Merger Arbitrage         -1.320083\n",
    601        "Event Driven             -1.409154\n",
    602        "Relative Value           -1.815470\n",
    603        "Equity Market Neutral    -2.124435\n",
    604        "Convertible Arbitrage    -2.639592\n",
    605        "Fixed Income Arbitrage   -3.940320\n",
    606        "dtype: float64"
    607       ]
    608      },
    609      "execution_count": 17,
    610      "metadata": {},
    611      "output_type": "execute_result"
    612     }
    613    ],
    614    "source": [
    615     "erk.skewness(hfi).sort_values(ascending=False)"
    616    ]
    617   }
    618  ],
    619  "metadata": {
    620   "kernelspec": {
    621    "display_name": "Python 3",
    622    "language": "python",
    623    "name": "python3"
    624   },
    625   "language_info": {
    626    "codemirror_mode": {
    627     "name": "ipython",
    628     "version": 3
    629    },
    630    "file_extension": ".py",
    631    "mimetype": "text/x-python",
    632    "name": "python",
    633    "nbconvert_exporter": "python",
    634    "pygments_lexer": "ipython3",
    635    "version": "3.8.8"
    636   }
    637  },
    638  "nbformat": 4,
    639  "nbformat_minor": 2
    640 }