How to Calculate Kurtosis: Formula and Step-by-Step

Kurtosis measures how much of a dataset’s variance comes from extreme values rather than moderate ones. It’s calculated using the fourth power of each data point’s deviation from the mean, divided by the squared variance. The core formula, the specific steps, and the software shortcuts are all straightforward once you understand what’s actually being measured.

What Kurtosis Actually Measures

Kurtosis is often described as measuring how “peaked” or “flat” a distribution is, but that’s a simplification. What it really captures is tail heaviness: how likely your data is to produce extreme outliers compared to a normal (bell-curve) distribution. A dataset with high kurtosis has more of its variance driven by rare, far-from-the-mean values. A dataset with low kurtosis has its values clustered more uniformly, with fewer surprises in the tails.

This matters in fields like finance, where kurtosis helps quantify the risk of extreme market events. Risk models for indexes like the S&P 500 use kurtosis alongside skewness to improve accuracy at the tails of a distribution, which is exactly where catastrophic losses live.

The Core Formula

Kurtosis is the fourth central moment of a dataset divided by the square of the variance. In practical terms, here’s what that looks like for a population of N values:

Kurtosis = [Σ(Yᵢ − Ȳ)⁴ / N] / s⁴

Where Yᵢ is each individual value, Ȳ is the mean, and s is the standard deviation. You’re raising each deviation to the fourth power, which heavily amplifies the contribution of outliers. A value that sits two standard deviations from the mean contributes 16 times more to kurtosis than a value sitting one standard deviation away, because 2⁴ = 16.

For a normal distribution, this formula produces a value of 3. That baseline of 3 is important because it’s the reference point for interpretation.

Kurtosis vs. Excess Kurtosis

This is the single biggest source of confusion when calculating kurtosis. There are two conventions, and different tools use different ones.

Pearson’s kurtosis (sometimes called “regular” kurtosis) uses the formula above directly. A normal distribution has a Pearson kurtosis of 3.

Excess kurtosis (also called Fisher’s kurtosis) subtracts 3 from the result, so a normal distribution has an excess kurtosis of 0. The formula becomes:

Excess Kurtosis = [Σ(Yᵢ − Ȳ)⁴ / N] / s⁴ − 3

The subtraction exists purely for convenience. It makes zero the neutral benchmark, so positive values mean heavier tails than normal and negative values mean lighter tails. Most statistical software defaults to excess kurtosis, but not all. Always check which version your tool is using before interpreting results.

How to Interpret the Result

Using Pearson’s definition (where normal = 3):

  • Equal to 3 (mesokurtic): Your data’s tail behavior resembles a normal distribution.
  • Greater than 3 (leptokurtic): Your data has heavier tails, meaning more extreme values than a normal distribution would predict. Think of financial return data during volatile periods.
  • Less than 3 (platykurtic): Your data has lighter tails, with values clustering more tightly and fewer extreme outliers. A uniform distribution is a classic example.

If you’re working with excess kurtosis, the thresholds shift: zero is the benchmark, positive means heavy tails, negative means light tails. The interpretation is identical, just recentered.

Step-by-Step Manual Calculation

Say you have a small dataset: 2, 4, 4, 4, 5, 5, 7, 9. Here’s how to work through it.

Step 1: Find the mean. Add all values and divide by the count. (2 + 4 + 4 + 4 + 5 + 5 + 7 + 9) / 8 = 40 / 8 = 5.

Step 2: Calculate each deviation from the mean. Subtract 5 from each value: −3, −1, −1, −1, 0, 0, 2, 4.

Step 3: Raise each deviation to the fourth power. This is the step that makes kurtosis sensitive to outliers. You get: 81, 1, 1, 1, 0, 0, 16, 256.

Step 4: Sum those fourth powers and divide by N. (81 + 1 + 1 + 1 + 0 + 0 + 16 + 256) / 8 = 356 / 8 = 44.5. This is the fourth central moment.

Step 5: Calculate the variance. Square each deviation from Step 2: 9, 1, 1, 1, 0, 0, 4, 16. Sum and divide by N: 32 / 8 = 4. This is the population variance.

Step 6: Square the variance. 4² = 16.

Step 7: Divide the fourth central moment by the squared variance. 44.5 / 16 = 2.78. That’s your Pearson kurtosis.

Step 8 (optional): Subtract 3 for excess kurtosis. 2.78 − 3 = −0.22. This slightly negative value tells you the distribution has marginally lighter tails than a normal distribution.

Sample vs. Population Formulas

The steps above use the population formula, which works when you have every data point in the group you’re studying. When your data is a sample drawn from a larger population, you need a bias correction.

Sample kurtosis adjustments involve multiplying by a correction factor based on the sample size (n). The correction scales upward for small samples because small datasets tend to underestimate how heavy the true tails are. SPSS and SAS both apply this correction by default and return excess kurtosis (normal = 0). As your sample size grows larger, the correction factor approaches 1, and the sample and population formulas converge.

For any dataset under about 50 observations, the choice between sample and population formulas can noticeably change your result. For large datasets, it barely matters.

Calculating Kurtosis in Excel

Excel’s built-in KURT function handles the calculation for you. The syntax is simply:

=KURT(A1:A100)

where A1:A100 is your data range. Excel uses the sample standard deviation in its calculation and returns excess kurtosis. A positive result means heavier tails than normal, negative means lighter tails, and a value near zero means your data’s tail behavior is roughly normal. You need at least four data points for the function to work.

Calculating Kurtosis in Python

Python’s SciPy library has a kurtosis function with an explicit toggle between the two conventions:

from scipy.stats import kurtosis

By default, SciPy uses Fisher’s definition (excess kurtosis, where normal = 0). If you want Pearson’s definition (normal = 3), set the Fisher parameter to False:

kurtosis(data, fisher=False)

This explicit toggle is one reason Python is less likely to produce confusion than tools where the convention is buried in documentation. Pandas also provides a kurtosis method on DataFrames and Series, and it returns excess kurtosis by default.

Common Pitfalls

The most frequent mistake is misidentifying which kurtosis definition a tool is using. If you calculate a value of 2.8 in one tool and get −0.2 in another for the same data, there’s no error. One is reporting Pearson’s kurtosis, the other excess kurtosis. The 3.0 difference is the giveaway.

Kurtosis is also highly sensitive to outliers, by design. A single extreme value in a small dataset can dramatically inflate the result because deviations are raised to the fourth power. If you get a surprisingly high kurtosis value, check your data for entry errors or genuine outliers before drawing conclusions about the distribution’s shape.

Finally, kurtosis on its own doesn’t tell you whether your data is symmetric. A dataset can have high kurtosis but be heavily skewed to one side. Kurtosis and skewness measure different properties, and interpreting one without checking the other gives you an incomplete picture of your distribution.