learn.aathan.in

Skewness & Kurtosis: The Shape of a Distribution

The third and fourth moments explained with graphs — every skewness type (right, left, symmetric) and kurtosis type (lepto, meso, platy), their formulas, how to read the numbers, and how to fix skewed data.

The mean tells you where a distribution sits. The standard deviation tells you how spread out it is. But two data sets can share both and still look nothing alike — one leaning hard to the right, the other loaded with extreme outliers.

Skewness and kurtosis are the two numbers that capture that difference. Together with the mean and variance they’re known as the four moments of a distribution:

MomentNameAnswers
1stMeanWhere is the centre?
2ndVariance / SDHow spread out is it?
3rdSkewnessWhich way does it lean?
4thKurtosisHow heavy are the tails?

This page covers the 3rd and 4th in full.


Part 1 — Skewness

What skewness measures

Skewness measures the asymmetry of a distribution around its mean. A perfectly symmetric distribution has skewness 0. Any lean to one side produces a non-zero value, and the sign tells you which way the long tail points.

Left / Negative tail points left Symmetric no tail bias Right / Positive tail points right Mode Median Mean
The mean is always dragged furthest toward the tail; the mode stays at the peak; the median sits between them.

The three types

1. Symmetric (skewness ≈ 0)

Both halves mirror each other. Mean = Median = Mode, all sitting at the peak.

  • Looks like: the classic bell curve.
  • Real examples: heights of adults, measurement errors, IQ scores, dice-roll sums.
  • What to use: the mean is safe and is the most informative average.

2. Right-skewed / Positively skewed (skewness > 0)

A long tail stretching to the right. Most values bunch at the low end, with a few very large values pulling the average up. Mean > Median > Mode.

  • Looks like: a peak on the left with a tail trailing right.
  • Real examples: income and wealth, house prices, city populations, website session durations, hospital length-of-stay, word frequencies.
  • Why it happens: there’s a hard floor (you can’t earn less than 0) but no ceiling — so the only room to be extreme is upward.
  • What to use: the median. This is exactly why “median household income” is the standard reported figure rather than mean income.

3. Left-skewed / Negatively skewed (skewness < 0)

A long tail stretching to the left. Most values bunch at the high end, with a few very small values pulling the average down. Mean < Median < Mode.

  • Looks like: a peak on the right with a tail trailing left.
  • Real examples: scores on an easy exam, age at death in a developed country, product ratings that cluster at 5 stars, the percentage of a task completed.
  • Why it happens: there’s a hard ceiling (you can’t score above 100%) but failures can be arbitrarily bad.
  • What to use: the median again.

The memory hook: “The mean chases the tail.” The mean uses every value, so the extreme values in the tail drag it in their direction. The mode can’t move — it’s the peak by definition. The median only shifts by rank, so it lands in between.

The formulas

Pearson’s moment coefficient (the standard)

This is what software reports. It’s the average cubed z-score:

g1=1ni=1n(xixˉs)3g_1 = \frac{1}{n}\sum_{i=1}^{n}\left(\frac{x_i - \bar{x}}{s}\right)^3

Why cubing? Cubing preserves the sign — values below the mean stay negative, values above stay positive — so the two sides can cancel. It also amplifies distance: a point 3 SDs out contributes 27x more than one 1 SD out. So a few far-flung values in one tail dominate the sum, which is precisely what “skewness” should detect.

Pearson’s second coefficient (median skewness)

A quick approximation you can do by hand from numbers you already have:

Sk=3(xˉmedian)sSk = \frac{3(\bar{x} - \text{median})}{s}

If the mean sits above the median the result is positive (right-skewed) — a direct translation of the “mean chases the tail” hook into arithmetic.

Reading the number

Skewness valueInterpretationAction
−0.5 to +0.5Fairly symmetricMean is fine
−1 to −0.5 or +0.5 to +1Moderately skewedPrefer the median; consider transforming
< −1 or > +1Highly skewedUse the median; transform before modelling

Sign = direction of the tail. Magnitude = how severe.

Computing it

import pandas as pd
from scipy.stats import skew

df = pd.read_csv('data.csv')

df['income'].skew()        # pandas - sample skewness
skew(df['income'])         # scipy equivalent

df.skew()                  # skewness of every numeric column at once
Excel:  =SKEW(range)          sample skewness
        =SKEW.P(range)        population skewness

Fixing skew: transformations

Many models (linear regression, and anything assuming normality) behave badly on heavily skewed inputs. The standard fix is to transform the column so it becomes more symmetric.

SkewTransformationNotes
Right (positive)log(x)The workhorse — perfect for income, prices. Needs x > 0
Rightsqrt(x)Gentler than log; works with 0
Right (severe)1/x (reciprocal)Aggressive; reverses the order
Left (negative) or Pulls the low tail in
Leftreflect then log: log(max+1−x)Flip it, then treat it as right-skewed
EitherBox-Cox / Yeo-JohnsonFinds the best power automatically
import numpy as np

df['income_log'] = np.log(df['income'])       # right-skew -> ~symmetric
df['income'].skew()      # => 2.1   heavily right-skewed
df['income_log'].skew()  # => 0.15  now nearly symmetric

Part 2 — Kurtosis

What kurtosis measures

Kurtosis measures the heaviness of a distribution’s tails — how much of the data lives in the extremes compared to a normal distribution.

The big misconception: kurtosis is usually taught as “peakedness”. That’s misleading. A distribution can have a sharp peak and still have low kurtosis. What kurtosis really tracks is tail weight — the propensity to produce outliers. The peak shape is a side effect: if more probability sits in the tails, less is left for the shoulders, which makes the centre look sharper.

heavier tail heavier tail Leptokurtic (excess > 0) Mesokurtic (= 0) Platykurtic (excess < 0)
All three can share the same mean and standard deviation. The leptokurtic curve peaks higher and keeps more weight far out in the tails — that combination is what high kurtosis means.

The three types

1. Mesokurtic (kurtosis = 3, excess = 0)

The normal distribution and anything shaped like it. This is the reference point every other distribution is measured against.

  • Tails: exactly as heavy as a bell curve’s.
  • Outliers: the familiar amounts — about 5% of values beyond 2 SD, about 0.3% beyond 3 SD.
  • Examples: heights, measurement error.

2. Leptokurtic (kurtosis > 3, excess > 0) — “fat tails”

A sharper peak and heavier tails than normal. More values cluster near the mean, and more sit far out — with fewer in the shoulders between.

  • Tails: heavy. Outliers are much more common than a normal curve predicts.
  • Examples: stock market returns (the classic case), insurance claim sizes, city sizes, earthquake magnitudes, network traffic bursts.
  • Why it matters: this is the shape behind most financial risk failures. If you model returns as normal, a “once in 10,000 years” crash is actually a once-in-a-decade event. Fat tails are why the 2008 crisis broke models that assumed normality.
  • Memory hook: lepto- is Greek for slender — think of the slender, leaping peak.

3. Platykurtic (kurtosis < 3, excess < 0) — “thin tails”

A flatter, broader peak with lighter tails. Values spread more evenly; extremes are rarer than normal.

  • Tails: thin. Fewer outliers than a normal distribution.
  • Examples: the uniform distribution (a fair die, a random number in a range) is the extreme case, along with tightly-controlled manufacturing tolerances.
  • Memory hook: platy- is Greek for flat — think plateau, or the flat-billed platypus.

The formula and “excess” kurtosis

g2=1ni=1n(xixˉs)4g_2 = \frac{1}{n}\sum_{i=1}^{n}\left(\frac{x_i - \bar{x}}{s}\right)^4

Now the fourth power. Because it’s even, every deviation becomes positive — kurtosis has no direction, only magnitude. And the amplification is even more extreme than skewness: a point 3 SDs out contributes 81x more than one at 1 SD. That’s why kurtosis is effectively an outlier detector: distant points dominate the sum.

A normal distribution gives exactly 3, which is an awkward baseline — so almost all software reports excess kurtosis:

excess kurtosis=g23\text{excess kurtosis} = g_2 - 3

That shifts the normal reference to a clean 0.

Raw kurtosisExcess kurtosisTails
Leptokurtic> 3> 0Heavy — more outliers
Mesokurtic= 30Normal
Platykurtic< 3< 0Light — fewer outliers

⚠️ Always check which one your tool reports. pandas.kurt(), scipy.stats.kurtosis() and Excel’s KURT() all return excess kurtosis (normal = 0). Some textbooks and older packages report raw kurtosis (normal = 3). A reported “0” and a reported “3” can mean the same thing.

Reading the number

Excess kurtosisInterpretation
≈ 0 (−0.5 to 0.5)Normal-ish tails
> 1Noticeably fat tails — expect outliers
> 3Very heavy tails — outlier-driven data, be careful with any normality assumption
< −1Distinctly flat, thin-tailed — outliers are rare

Computing it

import pandas as pd
from scipy.stats import kurtosis

df['returns'].kurt()               # pandas -> EXCESS kurtosis (normal = 0)
kurtosis(df['returns'])            # scipy  -> excess by default
kurtosis(df['returns'], fisher=False)   # raw kurtosis (normal = 3)
Excel:  =KURT(range)     returns EXCESS kurtosis (normal = 0)

Putting both together

The complete shape reference

MeasureWhat it detectsNormal valuePositive meansNegative means
SkewnessAsymmetry / lean0Tail to the rightTail to the left
Excess kurtosisTail weight / outliers0Fatter tails than normalThinner tails than normal

A worked read

df.describe()
df[['income', 'height', 'returns']].agg(['skew', 'kurt'])

#           income    height   returns
# skew        2.14      0.02     -0.31
# kurt        6.80     -0.09     8.42

How to interpret that in one pass:

  • income — skew 2.14 (heavily right-skewed) with excess kurtosis 6.80 (very fat tails). A handful of very high earners. Report the median, and log-transform before modelling.
  • height — skew 0.02, kurtosis −0.09. Textbook normal. The mean and SD describe it perfectly.
  • returns — skew −0.31 (mildly left-leaning: crashes are sharper than rallies) but kurtosis 8.42extremely fat tails. Nearly symmetric yet wildly outlier-prone. This is the dangerous case: the mean and SD look reasonable and hide enormous tail risk.

That last row is the whole point of this page. Skewness and kurtosis are independentreturns is almost symmetric, so skewness alone says “looks fine”. Only kurtosis reveals the risk.

Why both matter in practice

  1. Choosing the average. Skewed data ⇒ the median beats the mean. This is the mechanism behind the missing-value rules.
  2. Outlier expectations. High kurtosis means the 1.5 × IQR rule will flag many points that are genuinely part of the distribution, not errors.
  3. Model assumptions. Linear regression, t-tests and ANOVA assume roughly normal residuals. Strong skew or kurtosis invalidates their p-values.
  4. Risk. Underestimating kurtosis means underestimating how often extreme events happen. In finance, insurance or capacity planning, that’s the difference between a safe model and a catastrophic one.
  5. Feature engineering. Transforming skewed features to symmetry usually improves model performance directly.

Quick decision guide

Compute skew and excess kurtosis for each numeric column.

|skew| < 0.5  and  |excess kurt| < 1
    -> Approximately normal. Mean + SD are trustworthy.

|skew| > 1
    -> Report the MEDIAN. Log/sqrt transform before modelling.

excess kurt > 1
    -> Expect outliers. Don't trust normality-based tests or
       tail-risk estimates. Investigate the extremes.

Both large
    -> Skewed AND outlier-heavy (income, claims, prices).
       Median + IQR, transform, and use robust methods.

Takeaways

  • Skewness and kurtosis are the 3rd and 4th moments — the shape measures that pick up where the mean and SD leave off.
  • Skewness = lean. Positive ⇒ tail right (income); negative ⇒ tail left (easy exam scores); zero ⇒ symmetric. The mean chases the tail.
  • Kurtosis = tail weight, not peakedness. Leptokurtic (excess > 0) ⇒ fat tails and frequent outliers; platykurtic (excess < 0) ⇒ thin tails; mesokurtic ⇒ normal.
  • Most tools report excess kurtosis, where normal = 0 rather than 3.
  • The two are independent — always check both. A symmetric distribution can still be dangerously outlier-prone.