Notes · Data quality

Percentiles: the 10th tells you who's suffering.

The median shows you the typical test. The 10th percentile shows you the people having a rough time.

In Averages lie I learned from the best to lead with the median, and I still stand by that one! The median tells you what a typical person gets. The catch is that the median hides the people having a rough time.

Those folks are down at the bottom of the pile. That's where the 10th percentile comes in.

What the 10th percentile is

Line up 100 speed tests from slowest to fastest. The 10th one from the slow end is your 10th percentile. One test in ten came in at or below that number, and the other nine did better.

That's the whole thing. No fancy math, just a different spot in the same line.

The 10th test from the slow end is the 10th percentile

100 speed tests lined up slowest to fastest (an illustration, not real data)

100 speed tests in a 10 by 10 grid, slowest at top left and fastest at bottom right. The top row is the slowest 10 percent; its last dot is the 10th percentile. The 50th dot is the median. slowest test fastest test Test 1 of 100 Test 2 of 100 Test 3 of 100 Test 4 of 100 Test 5 of 100 Test 6 of 100 Test 7 of 100 Test 8 of 100 Test 9 of 100 Test 10 of 100 (10th percentile) Test 11 of 100 Test 12 of 100 Test 13 of 100 Test 14 of 100 Test 15 of 100 Test 16 of 100 Test 17 of 100 Test 18 of 100 Test 19 of 100 Test 20 of 100 Test 21 of 100 Test 22 of 100 Test 23 of 100 Test 24 of 100 Test 25 of 100 Test 26 of 100 Test 27 of 100 Test 28 of 100 Test 29 of 100 Test 30 of 100 Test 31 of 100 Test 32 of 100 Test 33 of 100 Test 34 of 100 Test 35 of 100 Test 36 of 100 Test 37 of 100 Test 38 of 100 Test 39 of 100 Test 40 of 100 Test 41 of 100 Test 42 of 100 Test 43 of 100 Test 44 of 100 Test 45 of 100 Test 46 of 100 Test 47 of 100 Test 48 of 100 Test 49 of 100 Test 50 of 100 (median) Test 51 of 100 Test 52 of 100 Test 53 of 100 Test 54 of 100 Test 55 of 100 Test 56 of 100 Test 57 of 100 Test 58 of 100 Test 59 of 100 Test 60 of 100 Test 61 of 100 Test 62 of 100 Test 63 of 100 Test 64 of 100 Test 65 of 100 Test 66 of 100 Test 67 of 100 Test 68 of 100 Test 69 of 100 Test 70 of 100 Test 71 of 100 Test 72 of 100 Test 73 of 100 Test 74 of 100 Test 75 of 100 Test 76 of 100 Test 77 of 100 Test 78 of 100 Test 79 of 100 Test 80 of 100 Test 81 of 100 Test 82 of 100 Test 83 of 100 Test 84 of 100 Test 85 of 100 Test 86 of 100 Test 87 of 100 Test 88 of 100 Test 89 of 100 Test 90 of 100 Test 91 of 100 Test 92 of 100 Test 93 of 100 Test 94 of 100 Test 95 of 100 Test 96 of 100 Test 97 of 100 Test 98 of 100 Test 99 of 100 Test 100 of 100 10th percentile Top row = slowest 10%. Nine in ten did better. median (the 50th test) What a typical test looks like. 100 speed tests in a 10 by 10 grid, slowest at top left and fastest at bottom right. The top row is the slowest 10 percent; its last dot is the 10th percentile. The 50th dot is the median. slowest test fastest test Test 1 of 100 Test 2 of 100 Test 3 of 100 Test 4 of 100 Test 5 of 100 Test 6 of 100 Test 7 of 100 Test 8 of 100 Test 9 of 100 Test 10 of 100 (10th percentile) Test 11 of 100 Test 12 of 100 Test 13 of 100 Test 14 of 100 Test 15 of 100 Test 16 of 100 Test 17 of 100 Test 18 of 100 Test 19 of 100 Test 20 of 100 Test 21 of 100 Test 22 of 100 Test 23 of 100 Test 24 of 100 Test 25 of 100 Test 26 of 100 Test 27 of 100 Test 28 of 100 Test 29 of 100 Test 30 of 100 Test 31 of 100 Test 32 of 100 Test 33 of 100 Test 34 of 100 Test 35 of 100 Test 36 of 100 Test 37 of 100 Test 38 of 100 Test 39 of 100 Test 40 of 100 Test 41 of 100 Test 42 of 100 Test 43 of 100 Test 44 of 100 Test 45 of 100 Test 46 of 100 Test 47 of 100 Test 48 of 100 Test 49 of 100 Test 50 of 100 (median) Test 51 of 100 Test 52 of 100 Test 53 of 100 Test 54 of 100 Test 55 of 100 Test 56 of 100 Test 57 of 100 Test 58 of 100 Test 59 of 100 Test 60 of 100 Test 61 of 100 Test 62 of 100 Test 63 of 100 Test 64 of 100 Test 65 of 100 Test 66 of 100 Test 67 of 100 Test 68 of 100 Test 69 of 100 Test 70 of 100 Test 71 of 100 Test 72 of 100 Test 73 of 100 Test 74 of 100 Test 75 of 100 Test 76 of 100 Test 77 of 100 Test 78 of 100 Test 79 of 100 Test 80 of 100 Test 81 of 100 Test 82 of 100 Test 83 of 100 Test 84 of 100 Test 85 of 100 Test 86 of 100 Test 87 of 100 Test 88 of 100 Test 89 of 100 Test 90 of 100 Test 91 of 100 Test 92 of 100 Test 93 of 100 Test 94 of 100 Test 95 of 100 Test 96 of 100 Test 97 of 100 Test 98 of 100 Test 99 of 100 Test 100 of 100 10th percentile Top row = slowest 10%. Nine in ten did better. median (the 50th test) What a typical test looks like.
Read left to right, row by row. The last dot in the top row is the 10th percentile. The 50th dot is the median.

Two towns with the same median

Here's a made-up example. Town A and Town B both have a median download speed of 100 Mbps. Put that on a slide and they look identical.

Example (made up)Town ATown B
10th percentile70 Mbps2 Mbps
Median100 Mbps100 Mbps

In Town A, even a bad test is pretty usable. In Town B, one test in ten comes in around 2 Mbps, which is rough territory for a house where somebody's on a video call and somebody else is streaming. Town B has a problem, and the median will never tell you about it.

Signal strength does this too

The same thing happens with signal strength (RSSI or RSRP). Say most readings in an area sit around -90 dBm, which is fine. The bottom 10% might be down near -115 dBm, deep inside buildings or out at the edge of a cell. Those are the people with dropped calls and the spinning wheel, and they're invisible if all you report is the middle.

Before we go further, let's define "bad internet," because a single speed test can fool you. A test is a snapshot. It measures one moment, on one device, from one spot in your house.

Let's run a quick thought experiment. Maria runs a test from her couch on a Tuesday night and gets 4 Mbps. What she can't see is that her son is downloading a big game update, and she's two rooms away from the router. Next door, Sam tests at 6 a.m. right next to his router and gets 900 Mbps. Yet his video calls freeze in the evenings.

So who has bad internet? From those two tests alone, you can't tell. One slow result doesn't prove Maria's connection is bad, and one fast result doesn't prove Sam's is good. To actually know, you need lots of tests over time, and that's the job percentiles do.

Here's how that plays out. If Maria's 10th percentile over a month looks healthy, Tuesday was a one-off. If Sam's 10th percentile keeps coming in low, his problem is real, and that one great test was covering for it.

How I pull it

It's one line in SQL:

select
  percentile_cont(0.5) within group (order by download_mbps) as median_mbps,
  percentile_cont(0.1) within group (order by download_mbps) as p10_mbps
from speed_tests;

And in pandas:

df["download_mbps"].quantile([0.1, 0.5])

(When should someone use SQL or Python? Coming to a theater near you!)

These days the 10th percentile sits right next to the median whenever I share speeds. If the gap between them is big, that gap is usually the story.

The median tells you how most people are doing. The 10th percentile tells you who's suffering. I report both.

Update: I found Town A and Town B

After this went up, I ran the same idea on real data: Ookla's open speed test tiles for every Texas county in Q4 2025. I was looking for two counties with nearly the same median and a very different 10th percentile.

They turned up right next to each other, west of Houston.

Same median, very different bottom 10%

Fixed download speed in Q4 2025, Mbps (percentiles of speed tests). Pick any two Texas counties to compare.

10th percentileMedian90th percentile
Q4 2025 download speeds for two Texas counties: 10th percentile, median and 90th percentile. 0 100 200 300 400 500 600 700 Fort Bend County median 443 p10 310 Waller County median 424 p10 106 Q4 2025 download speeds for two Texas counties: 10th percentile, median and 90th percentile. 0 200 400 600 Mbps Fort Bend County median 443 p10 310 Waller County median 424 p10 106

Source: Speedtest® by Ookla® Global Fixed and Mobile Network Performance Maps, fixed tiles, CC BY-NC-SA 4.0. The 89 Texas counties with 2,000+ tests in Q4 2025; smaller counties are left out because a handful of tests can swing their percentiles. Defaults to the pair with the closest medians and the biggest 10th-percentile gap.

The medians are within 20 Mbps of each other. But one test in ten in Waller County comes in around 106 Mbps or slower, versus 310 in Fort Bend. The median says these two counties are the same. The bottom 10% says they really aren't.

A quick note on the numbers: these are percentiles of tests, so busy tiles count more. Count every tile once instead and you get lower numbers, which is the tile-versus-test question I dig into in SQL or Python? Yes. The code and both charts are on GitHub if you want to rerun it.

NEXT · DATA QUALITYAverages lie

Why the median tells you more about your internet speed than the mean ever will.

NEXT · MENTORINGI was a terrible student

Remedial math, three tries at Circuits 1, and what failing taught me.