How the standout figures are picked

A commune page can show the figures where it stands furthest from others, with the communes it borders and 2014 beside each one. This is how they’re picked and where every number comes from. No language model writes any of it.

What stands out

A commune of 5,000 people or more stands out when it’s in the top or bottom 1% of those communes on a measure. A unit stands out when its figure moved since 2014 by 3 standard deviations or more from the average change across its level, for a level of 10 units or more and a measure the 2014 census asked the same way. A commune or a province also stands out when its gap from its province’s or région’s figure is 3 standard deviations or more from the average gap under that parent, where the parent holds 8 units or more. Changes and gaps count only for communes of 2,000 people or more, where a few households can’t swing a share on their own.

Every measure is a rate, a share or an average, since a raw count would pick out a big place for being big. A commune matched to 2014 through the crosswalk has no change to compare, since its 2014 figure covers other ground. The 300 figures that stand out most are kept, at most 3 for any one place. Only a commune’s are published, since a commune page is where they show.

What’s left out

A possible error in the data is left out. The languages people speak, read and write, education and illiteracy move slowly. When one of them swings in a place whose population moved by less than 10%, and no neighbour moved the same way by at least half as much, the figure may be an error in the data. So may every figure in a record that can’t be right, such as more than 8 people per room or a household of more than 15.

So is a commune with any figure the two censuses disagree on. For a local language, that’s a share that moved more than 30 points between 2014 and 2024, either way. For running water, electricity, the public sewer, a toilet and a kitchen, it’s a share that fell more than 30 points. Either way, the move has to be larger than the population itself changed, in percent. Both figures are HCP’s, as published. The two censuses disagree, so the commune isn’t set against a neighbour, and it has no section here.

The shares of men and women are left out too, since several southern communes count special populations. Where a list of private terms is set up, a figure whose line uses one is held back.

What’s beside each figure

The commune’s other figures. A commune’s figures that stand out are shown together, and each one’s record in the API lists the others.

The communes it borders. Two communes border each other when their OpenStreetMap boundaries share a segment. Beside each figure is the median of the same figure across those communes, and the one furthest from this commune’s own. A neighbour of fewer than 2,000 people is left out, and so is one with any figure the two censuses disagree on. For a change since 2014, their change is compared, and a neighbour matched to 2014 through the crosswalk is left out.

2014 and Morocco. Where the 2014 census asked the figure the same way, the page gives the commune’s 2014 figure and how Morocco’s moved, in whole points for a share. It doesn’t for a commune matched through the crosswalk.

No model

Every line is a fixed sentence in English and French with the numbers put in, and every number is HCP’s or worked out from HCP’s. pnpm insights builds it all from the dataset with no model and no network call, and the same dataset always gives the same files.

The earlier design

An earlier design had a language model propose possible reasons for each figure, and a second model argue against them. The 2026 pilot that chose its models is published as a study, with its preregistration, ratings and results, in insights/pilot/. The full run that followed left nearly half the figures with no reason that held, and whether a reason was sound couldn’t be graded reliably. So this version shows the figures with their context instead.

Where it lives

The pipeline is in insights/, and what it publishes is in data/v1/insights/.