{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#lets first import the data\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#GlobalFinMonthly\n", "url=\"https://raw.githubusercontent.com/amoreira2/Lectures/main/assets/data/GlobalFinMonthly.csv\"\n", "Data = pd.read_csv(url,na_values=-99)\n", "# tell python Date is date:\n", "Data['Date']=pd.to_datetime(Data['Date'])\n", "# set an an index\n", "Data=Data.set_index(['Date'])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "x5bPnG2RQ1tw" }, "source": [ "# Portfolios\n", "\n", "In this section we will learn how to do some basic math at portfolio level. You will know how to calculate return, expected return, and volatility given portfolio weights.\n", "\n", "\n", "A portfolio is described by a set of assets and a set of weights invested in each asset." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QOud4XOOQ1t1" }, "source": [ "## **Portfolio weights**\n", "\n", "* The portfolio weight for stock $j$ , denoted $w_j$, is the fraction of a portfolio value held in stock $j$\n", "\n", " $$w_j=\\frac{\\text{Dollar held in stock j}}{\\text{Dollar value of portfolio}}$$\n", " \n", "* By construction, the portfolio weights allways add up to one: you invest all you got somewhere, and nothing more \n", "\n", " * This doesn't mean that you can't borrow to invest, just means that you will have a negative weight somewhere offsetting the positive position in the other assets \n", " \n", " $$\\sum_{j=1}^N w_j=1$$\n", " \n", " * In matrix notation \n", " \n", " $$\\mathbf{1}'W=1$$\n", " \n", " * where $\\mathbf{1}$ is a N by 1 vector of 1's (i.e. a vector with entry 1 in each position) and $W$ is the N by 1 vector of portfolio weights" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "a87EFXrgQ1t2" }, "source": [ "## **Portfolio returns**\n", "\n", "$$ r_p=\\sum_{j=1}^N w_jr_j=W'R$$\n", "\n", "\n", "* Where $R$ is the N by 1 vector of realized asset returns\n", "\n", "* I use big R and big W here to emphasize that they are vectors, like ($[r^{RF},r^{MKT},..]$), ($[w^{RF},w^{MKT},..]$),\n", "\n", "* I use litlle $r_p$ becasue the return on a portfolio is just a scalar \n", "\n", "\n", "For example:\n", "\n", "This below is the vector of return realization for a particular date " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 111 }, "colab_type": "code", "executionInfo": { "elapsed": 318, "status": "ok", "timestamp": 1576511147554, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "7hRulOkUQ1t2", "outputId": "1a5947f4-7c39-450e-d184-083a09556695", "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RFMKTUSA30yearGovBondEmergingMarketsWorldxUSAWorldxUSAGovBond
Date
1963-02-280.0023-0.0215-0.0018780.098222-0.002773NaN
\n", "
" ], "text/plain": [ " RF MKT USA30yearGovBond EmergingMarkets WorldxUSA \\\n", "Date \n", "1963-02-28 0.0023 -0.0215 -0.001878 0.098222 -0.002773 \n", "\n", " WorldxUSAGovBond \n", "Date \n", "1963-02-28 NaN " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Data.loc['1963-02']" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3-Dc3m0JQ1t4" }, "source": [ "* Since the return on a portfolio is a weighted sum of the returns on the securities, we need to determine how the distribution of this sum of r.v. ($R_p$) is related to the orignal distribution of eah r.v. (the individual securities returns $R_j$, $j=1...N$).\n", "\n", "* The analysis of portfolio risk becomes much simpler by assuming that return distributions are normal.\n", "\n", "* This means we only need to worry about mean and variance (even if we care about these really bad tail events)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 386, "status": "ok", "timestamp": 1576511149472, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "zghS4LLsQ1t5", "outputId": "632d7720-237b-4ff1-f536-3e23fb6e6999" }, "outputs": [ { "data": { "text/plain": [ "(6,)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# lets start by constructing an equal-weighted portfolio\n", "W=np.ones(6)/6\n", "\n", "W.shape\n", "# W is a 6 by 1 matrix" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "executionInfo": { "elapsed": 718, "status": "ok", "timestamp": 1576459561666, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "Z-gH69U0Q1t6", "outputId": "e7fad873-b5f5-467f-f96f-077b80cecd44" }, "outputs": [ { "data": { "text/plain": [ "0.9999999999999999" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(W)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 317, "status": "ok", "timestamp": 1576511151677, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "4sTWL6EvVBio", "outputId": "3284c1e7-ba6a-4129-c89a-708f0b2e18e3" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RFMKTUSA30yearGovBondEmergingMarketsWorldxUSAWorldxUSAGovBond
Date
2008-09-300.0015-0.09090.023693-0.174897-0.144244-0.031262
\n", "
" ], "text/plain": [ " RF MKT USA30yearGovBond EmergingMarkets WorldxUSA \\\n", "Date \n", "2008-09-30 0.0015 -0.0909 0.023693 -0.174897 -0.144244 \n", "\n", " WorldxUSAGovBond \n", "Date \n", "2008-09-30 -0.031262 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Data.loc['9/2008']\n", "# R is a 1 by 6 matrix" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 291, "status": "ok", "timestamp": 1576511153887, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "RRZeCJSSQ1t8", "outputId": "8997c4a5-978b-4f40-facf-d3976d6574c4" }, "outputs": [ { "data": { "text/plain": [ "Date\n", "2008-09-30 -0.069352\n", "dtype: float64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Data.loc['9/2008'] @ W" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eyWqT3vdQ1t-" }, "source": [ "What do we do to construct the returns for all the months?" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(647, 6)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Data.shape" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 238 }, "colab_type": "code", "executionInfo": { "elapsed": 330, "status": "ok", "timestamp": 1576511155882, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "RlAQPwNoQ1t-", "outputId": "ab10b6fe-84a5-4f9a-95fa-e98a440535ee" }, "outputs": [ { "data": { "text/plain": [ "Date\n", "1963-02-28 NaN\n", "1963-03-31 0.009196\n", "1963-04-30 -0.015689\n", "1963-05-31 0.002154\n", "1963-06-30 -0.012909\n", " ... \n", "2016-08-31 0.002242\n", "2016-09-30 0.003725\n", "2016-10-31 -0.021774\n", "2016-11-30 -0.024827\n", "2016-12-31 0.004597\n", "Length: 647, dtype: float64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Rp=Data @ W\n", "Rp" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 296 }, "colab_type": "code", "executionInfo": { "elapsed": 533, "status": "ok", "timestamp": 1576511158401, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "ZJ1tySAaQ1uA", "outputId": "e34d6b9f-fc34-4695-fbbe-aad6ba3b078b" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "Rp.plot()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.007367453311403502" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Rp.mean()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "NJTW9iPjQ1uC" }, "source": [ "## **Portfolio Expected returns**\n", "\n", "* The expected return of a portfolio is the portfolio weighted average of the expected returns of the individual assets.\n", "\n", "\n", "$$E[R_p]=E[\\sum_{j=1}^N w_jr_j]=\\sum_{j=1}^N w_jE[r_j]=W'E[R]$$\n", "\n", "\n", "> Can you use the definition of expected values we learn in notebook 3 to verify that this is correct?\n", "\n", "\n", "* Lets compute for our EW portfolio:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "executionInfo": { "elapsed": 314, "status": "ok", "timestamp": 1576511162452, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "-dkIJdTwVymF", "outputId": "343578b1-7d6f-4ae0-b1cc-7e624fcf8dc8" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(6,)\n", "(6,)\n" ] } ], "source": [ "# To make sure we do the matrix multiplication correctly, it is good to see the shape of matrix first\n", "print(W.shape)\n", "print(Data.mean().shape)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 512, "status": "ok", "timestamp": 1576460153823, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "5EOHJvD6Q1uC", "outputId": "6ac6c770-7815-45e7-ce14-651da4f4ca97" }, "outputs": [ { "data": { "text/plain": [ "0.007376761284897114" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We use transpose function `T` to transpose W to a 1 by 6 matrix\n", "W.T @ Data.mean()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ix8Sou0NQ1uE" }, "source": [ "It should be true that taking the sample mean of our portfolio return realizations should give the same answer" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 459, "status": "ok", "timestamp": 1576511165251, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "BZzX5EkeQ1uE", "outputId": "63f87fda-5f54-4741-a7fe-4c9344d4a43c" }, "outputs": [ { "data": { "text/plain": [ "0.007367453311403502" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(Data @ W).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or more directly" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.007367453311403502" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Rp.mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **Portfolio Variance**\n", "\n", "Empirically the easiest way to compute the variance of a portfolio is to simply take the variance of the portfolio.\n", "\n", "This returns to us the Realized variance of the portfolio in the sample" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.000546192756487486" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Rp.var()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.000546192756487486" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#or also\n", "\n", "(Data @ W).var()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yaC-bM35Q1uG" }, "source": [ "When think about optimal portfolio construction is useful to have a way to go from the variance/covariances of the individual assets to variance of the portfolio\n", "\n", "**Two asset case:**\n", "\n", "$$Var(r_p)= Var(w_1r_1+w_2r_2)=Cov(w_1r_1+w_2r_2,w_1r_1+w_2r_2)$$\n", "\n", "* where we used that $Var(x)=Cov(x,x)$\n", "\n", "* We then distribute the terms\n", "\n", "$$Cov(w_1r_1,w_1r_1+w_2r_2)+Cov(w_2r_2,w_1r_1+w_2r_2)=Cov(w_1r_1,w_1r_1)+Cov(w_2r_2,w_2r_2)+Cov(w_2r_2,w_1r_1)+Cov(w_1r_1,w_2r_2)$$\n", "\n", "* This yields the classic formula\n", "\n", "$$Var(r_p)= w_1^2Var(r_1)+2w_2w_1Cov(r_2,r_1)+w_2^2Var(r_2)$$\n", "\n", "**N-asset case**\n", "\n", "From the \"term distribution\" above it is intuitive what the N asset case would look like\n", "\n", "\n", "$$Var(r_p)= Var(\\sum_{j=1}^N w_jr_j)=Cov(\\sum_{j=1}^N w_jr_j,\\sum_{i=1}^N w_ir_i)=\\sum_{j=1}^N w_j Cov(r_j,\\sum_{i=1}^N w_ir_i)=\\sum_{j=1}^N \\sum_{i=1}^N w_jw_iCov(r_j, r_i)$$\n", "\n", "\n", "* For a portfolio of 50 assets, this expression has 50 variance terms and 2450 covariance terms!\n", "\n", "\n", "\n", "* We can write\n", "\n", "$$\\sum_{j=1}^N \\sum_{i=1}^N w_jw_iCov(r_j, r_i)=W' Cov(R) W$$\n", "\n", "* where $Cov(R)$ is the N by N variance covariance matrix of the assets and W is the vector of weights\n", "\n", "*An aside*\n", "\n", "* Why is this?\n", "\n", "$$Var(r_p)=Var(W'R)=Cov(W'R,W'R)=W'Cov(R,W'R)=(W'Cov(R,W'R))'=Cov(W'R,R)W=W'Cov(R)W$$\n", "\n", "* Where we used that covariance is a linear operator(can take constants out of it, one at a time) and that it is symmetric(cov(x,y)=cov(y,x)), so the covariance is a symmetic matrix X'=X.\n", "\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "executionInfo": { "elapsed": 328, "status": "ok", "timestamp": 1576511167976, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "gYzLXmVvaAVU", "outputId": "732ce91f-b178-41ed-e688-df1b773f01a1" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(6,)\n", "(6, 6)\n" ] } ], "source": [ "print(W.shape)\n", "print(Data.cov().shape)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RFMKTUSA30yearGovBondEmergingMarketsWorldxUSAWorldxUSAGovBond
RF6.942408e-06-0.0000020.000003-0.0000031.864051e-090.000004
MKT-2.377807e-060.0019360.0001040.0012801.254553e-030.000182
USA30yearGovBond3.048525e-060.0001040.001226-0.000211-1.662154e-050.000264
EmergingMarkets-2.911724e-060.001280-0.0002110.0035441.650762e-030.000243
WorldxUSA1.864051e-090.001255-0.0000170.0016512.174723e-030.000419
WorldxUSAGovBond3.905048e-060.0001820.0002640.0002434.191618e-040.000407
\n", "
" ], "text/plain": [ " RF MKT USA30yearGovBond EmergingMarkets \\\n", "RF 6.942408e-06 -0.000002 0.000003 -0.000003 \n", "MKT -2.377807e-06 0.001936 0.000104 0.001280 \n", "USA30yearGovBond 3.048525e-06 0.000104 0.001226 -0.000211 \n", "EmergingMarkets -2.911724e-06 0.001280 -0.000211 0.003544 \n", "WorldxUSA 1.864051e-09 0.001255 -0.000017 0.001651 \n", "WorldxUSAGovBond 3.905048e-06 0.000182 0.000264 0.000243 \n", "\n", " WorldxUSA WorldxUSAGovBond \n", "RF 1.864051e-09 0.000004 \n", "MKT 1.254553e-03 0.000182 \n", "USA30yearGovBond -1.662154e-05 0.000264 \n", "EmergingMarkets 1.650762e-03 0.000243 \n", "WorldxUSA 2.174723e-03 0.000419 \n", "WorldxUSAGovBond 4.191618e-04 0.000407 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Data.cov()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 321, "status": "ok", "timestamp": 1576511169801, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "Y74YRhaKQ1uG", "outputId": "216620ee-b943-431c-b072-c6c6923cf9c5" }, "outputs": [ { "data": { "text/plain": [ "0.0005455164562658994" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "W @ Data.cov() @ W" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check that this vector notation deliver the same as the double sum by using two for loops\n", "\n", "\n", "\n", "$$\\sum_{j=1}^N \\sum_{i=1}^N w_jw_iCov(r_j, r_i)=W' Cov(R) W$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0005455164562658997" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cov=Data.cov()\n", "covariance_sum=0 #initiate the sum at zero\n", "for i in cov.index: # loop across all assets\n", " for j in cov.columns:\n", " i_pos=cov.index.get_loc(i) # this gets the position of the particular asset so we can locate the proper posiiton on the vector\n", " j_pos=cov.columns.get_loc(j) # same thing, but for the other asset in the double sum\n", " covariance_sum=covariance_sum+cov.loc[i,j]*W[i_pos]*W[j_pos]\n", " \n", " \n", "covariance_sum" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "KhotHJjCQ1uI" }, "source": [ "to get the volatility, i.e. , standard deviation:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 295, "status": "ok", "timestamp": 1576511171439, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "dF1H63YuQ1uI", "outputId": "8c43ce8a-dab9-49b9-bc54-8f63090606ad" }, "outputs": [ { "data": { "text/plain": [ "0.023356293718522624" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(W.T@ Data.cov() @ W)**0.5" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2ZUoD_7KQ1uK" }, "source": [ "Again, as we did before, the sample variance of the portfolio return realizations we constructed above should exactly match this:\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 385, "status": "ok", "timestamp": 1576511173547, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "D6M4QqYyQ1uL", "outputId": "7cfb5370-ea60-418c-afe9-aa49a7adc70d" }, "outputs": [ { "data": { "text/plain": [ "0.02337076713519447" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Rp.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Takeways**\n", "\n", "To compute the in sample variance of a portfolio you have two options\n", "\n", "1. Compute the time-series the portfolio returns. This will give you one time-series whch you can simply compute the variance (\".var()\" method\n", "\n", "2. You can estimate the covariance matrix across assets using .cov() method and apply the quadratic formula \"W @ Data.cov() @ W\"\n", "\n", "\n", "They are identical approaches and produce the same result. \n", "\n", "Option 2 is easier and more intuitive , but option 1 is important to understand portfolio maximization which we will do soon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**A comment on sample moments vs populational moments**\n", "\n", "We care about the population variance, i.e. what is the true variance of these assets going forward\n", "\n", "We use the realized variance to the extent it help us estimate this.\n", "\n", "Just like with average returns and expected returns\n", "\n", "The key assumption, which tends to be ok over long time-peridos (say acorss years) is that the volatility is kind of stable, so we use the overall variance to gauge what the population is.\n", "\n", "We will later discuss methods that deal with time-variation in these moments, but for now lets think as the population moments being constant\n", "\n", "**dealing wiht the risk-free rate**\n", "\n", "Again the risk-free rate is different, becasue as we discussed variation in the risk-free rate directly tracks what people expect to get from investing in the risk-free asset in different points in time, and not risk, so the formal way to think about it is what people call the Law of interated expectations\n", "\n", "\n", "$$Var(R)=Var(E_t[R])+E(Var_t[R])$$\n", "\n", "So the overal variance of a series is the sum of the vairance of what people expected at a point in time and the average value of the variance of the asset at a given point in time\n", "\n", "For a risky asset, we think that there is very little variation in $E_t[R]$ so the overall variance is all risk.\n", "\n", "For a risk-less asset, there is zero risk, so the second term is zero, and all the variantion of the asset is about variation in these expectations.\n", "\n", "This means that is wrong to add the risk-free rate when you do variance calculations because you are attributing to risk, which is variation in what people expected to earn (and that is not risk)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "kQawQj7VQ1uN" }, "source": [ "**Diversification**\n", "\n", "* A key concept in investing is diversification\n", "\n", "* The famous: \"don't put all your eggs in one basket\" advice\n", "\n", "* There are potential benefits of diversifcation for an investor when there are assets that are imperfecly correlated with the investor portfolio\n", "\n", "* So lets look at this from the vantage point of a US investors that is fully invested in the US equity market portfolio and is considering the benefits of investing in other world equity markets" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 111 }, "colab_type": "code", "executionInfo": { "elapsed": 312, "status": "ok", "timestamp": 1576511176438, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "OJhCMU_FQ1uN", "outputId": "9354a192-8274-4933-d0ab-47f96659c80e" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MKTWorldxUSA
MKT1.0000000.611369
WorldxUSA0.6113691.000000
\n", "
" ], "text/plain": [ " MKT WorldxUSA\n", "MKT 1.000000 0.611369\n", "WorldxUSA 0.611369 1.000000" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# here is the co-movement across the asset\n", "Data[['MKT','WorldxUSA']].corr()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1zYRuvsBQ1uP" }, "source": [ "What is noteworthy about this correlation matrix? \n", "\n", "Are there any benefits of diversification?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "TB8Jmc1nQ1uP" }, "source": [ "Lets compute how the variance of the investor portfolio varies as she varies her portfolio weight on the world market" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,\n", " 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1. ])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w=np.arange(0,1.05,0.05)\n", "w" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 374 }, "colab_type": "code", "executionInfo": { "elapsed": 342, "status": "ok", "timestamp": 1576511179021, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "vqKUY4k0Q1uQ", "outputId": "1ff39558-fc7f-4062-a989-da1cace387b1" }, "outputs": [], "source": [ "D=Data.loc[:,['MKT','WorldxUSA']]\n", "UsW=[]\n", "# w here is a vector of weights on the US MKT and 1-w is the the weight on the international market\n", "w=np.arange(0,1.05,0.05)\n", "for x in w:\n", " W=np.array([x,1-x])\n", " # save the weight on the world market as the first element of UsW\n", " # save the vol of the investor's portfolio as the second element of UsW\n", " #UsW.append([1-x,((W.T @ D.cov() @ W)**0.5)*12**0.5])\n", " Rp=D@ W\n", " UsW.append([x,1-x,Rp.std()*12**0.5])\n", " " ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "executionInfo": { "elapsed": 307, "status": "ok", "timestamp": 1576511181290, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "PE1K1pYYQ1uR", "outputId": "2f5d1e27-63a4-4334-b9e9-f166271ff9ca", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65\n", " 0.7 0.75 0.8 0.85 0.9 0.95 1. ]\n", "[1. 0.95 0.9 0.85 0.8 0.75 0.7 0.65 0.6 0.55 0.5 0.45 0.4 0.35\n", " 0.3 0.25 0.2 0.15 0.1 0.05 0. ]\n", "[0.16154465 0.15824199 0.15517892 0.15236987 0.14982914 0.14757059\n", " 0.14560735 0.1439515 0.14261376 0.14160313 0.14092665 0.14058915\n", " 0.14059308 0.14093839 0.1416226 0.14264082 0.14398597 0.145649\n", " 0.14761916 0.14988433 0.15243138]\n" ] } ], "source": [ "UsW=np.array(UsW)\n", "# The first column of UsW is the weights on the US market\n", "print(UsW[:,0])\n", "# The second column of UsW is the weights on the World market\n", "print(UsW[:,1])\n", "# The third column of UsW is the vol of the portfolio\n", "print(UsW[:,2])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 283 }, "colab_type": "code", "executionInfo": { "elapsed": 335, "status": "ok", "timestamp": 1576511183661, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "vp7XwaEDcRzu", "outputId": "6bac1dd3-a45f-4ba8-d40e-408443fe4bb1" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Make a sacatter plot\n", "plt.scatter(UsW[:,1],UsW[:,2])\n", "plt.xlabel('Weight on World')\n", "#plt.ylim([0.04,0.05])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "bJEr5jYDQ1uT" }, "source": [ "* We can also look at the investment frontier that such an investor faces: How her expected returns change with the variance\n", "\n", "* Lets also look at annualized quantities for more intution" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MKT 0.108621\n", "WorldxUSA 0.096725\n", "dtype: float64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D.mean()*12" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MKT 0.152431\n", "WorldxUSA 0.161545\n", "dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D.std()*12**0.5" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": {}, "colab_type": "code", "id": "uS_JOCT3Q1uU" }, "outputs": [], "source": [ "UsW=[]\n", "w=np.arange(0,1.05,0.05)\n", "for x in w:\n", " W=np.array([x,1-x])\n", " # save the weight on the world market as the first element of UsW\n", " # save the annulized vol of the portfolio as the second element of UsW\n", " # save the annulized expected return of the portfolio as the third element of UsW\n", " UsW.append([1-x,(W.T @ D.cov() @ W*12)**0.5,W.T @ np.array(D.mean())*12])\n", "UsW=np.array(UsW)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "colab_type": "code", "executionInfo": { "elapsed": 423, "status": "ok", "timestamp": 1576511187853, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "2u5S6B36Q1uW", "outputId": "fd227da8-376b-4bec-ca81-0a5160298173" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# UsW[:,1], the annulized vol of the portfolio\n", "# UsW[:,2], the annulized expected return of the portfolio\n", "plt.scatter(UsW[:,1],UsW[:,2])\n", "plt.xlabel('Volatility')\n", "plt.ylabel('Average return')\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "an5OX-i_Q1uY" }, "source": [ "* Can you tell which extreme dot corresponds to each asset?\n", "\n", "* How can you find out easily? " ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 296, "status": "ok", "timestamp": 1576511189822, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "CHUJ6UxaQ1uZ", "outputId": "0e3d2cec-74d8-4065-ea95-96a5dccb81d6" }, "outputs": [ { "data": { "text/plain": [ "MKT 0.108621\n", "WorldxUSA 0.096725\n", "dtype: float64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D.mean()*12" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 258, "status": "ok", "timestamp": 1576511191648, "user": { "displayName": "yuchi yao", "photoUrl": "", "userId": "00457884373990713813" }, "user_tz": 300 }, "id": "jI4-tnJFQ1ua", "outputId": "3e82086e-d20e-4843-85ed-5181d0a27198" }, "outputs": [ { "data": { "text/plain": [ "MKT 0.152431\n", "WorldxUSA 0.161545\n", "dtype: float64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "D.std()*12**0.5" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2Wm0cUZTQ1uc" }, "source": [ "* For the world investors, clearly they can benefit of holding a bit of the US market-and this does not depend on the preferences for risk as they can get higher returns and lower volatility through diversification\n", "\n", "* If you are a US investor and you are comfortable with the US market volatlity, why would you ever invest in an asset of lower expected return?\n", "\n", "\n", "\n", "> Why might the US investor want to invest in the world market even if if has a lower expected return and higher variance?" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "Notebook 4.ipynb", "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }