Non-normal distribution of returns

Introduction to Portfolio Analysis in Python

Charlotte Werger

Data Scientist

In a perfect world returns are distributed normally

Normal distribution of S&P500 returns

1 Source: Distribution of monthly returns from the S&P500 from evestment.com
Introduction to Portfolio Analysis in Python

But using mean and standard deviations can be deceiving

Two distributions with same mean and standard deviation

1 Source: “An Introduction to Omega, Con Keating and William Shadwick, The Finance Development Center, 2002
Introduction to Portfolio Analysis in Python

Skewness: leaning towards the negative

Distributions with differing skewness

Introduction to Portfolio Analysis in Python

Pearson’s Coefficient of Skewness

$ $ $ Skewness = \frac{3(mean - median)}{\sigma} $ $ $

Rule of thumb:

  • $ Skewness < -1 $ or $ Skewness > 1 \Rightarrow$ Highly skewed distribution
  • $ -1 < Skewness < -0.5 $ or $ 0.5 < Skewness < 1 \Rightarrow$ Moderately skewed distribution
  • $ -0.5 < Skewness < 0.5 \Rightarrow$ Approximately symmetric distribution
1 Source: https://brownmath.com/stat/shape.htm
Introduction to Portfolio Analysis in Python

Kurtosis: Fat tailed distribution

Fat tailed distribution compared to normal distribution

1 Source: Pimco
Introduction to Portfolio Analysis in Python

Interpreting kurtosis

Higher kurtosis means more of the variance is the result of infrequent extreme deviations, as opposed to frequent modestly sized deviations.

  • A normal distribution has kurtosis of exactly 3 and is called (mesokurtic)
  • A distribution with kurtosis <3 is called platykurtic. Tails are shorter and thinner, and central peak is lower and broader.
  • A distribution with kurtosis >3 is called leptokurtic: Tails are longer and fatter, and central peak is higher and sharper (fat tailed)
1 Source: https://brownmath.com/stat/shape.htm
Introduction to Portfolio Analysis in Python

Calculating skewness and kurtosis

apple_returns=apple_price.pct_change()
apple_returns.head(3)

date
2015-01-02         NaN
2015-01-05   -0.028172
2015-01-06    0.000094
Name: AAPL, dtype: float64
apple_returns.hist()
Introduction to Portfolio Analysis in Python

Histogram of recent Apple returns

Introduction to Portfolio Analysis in Python

Calculating skewness and kurtosis

print("mean : ", apple_returns.mean())
print("vol  : ", apple_returns.std())
print("skew : ", apple_returns.skew())
print("kurt : ", apple_returns.kurtosis())
mean :  0.0006855391415724799
vol  :  0.014459504468360529
skew :  -0.012440851735057878
kurt :  3.197244607586669
Introduction to Portfolio Analysis in Python

Let's practice!

Introduction to Portfolio Analysis in Python

Preparing Video For Download...