This page explains, for a general reader, why a synthetic population is needed, how the Synthetic Population of Portugal (release 1.0.3) was generated, what it can and cannot be used for, and where its limits are. The full technical account is the model card.

Generated people, not real ones

A synthetic population is a set of computer-generated people and households, one record per person, whose totals follow the tables INE published from the 2021 Census for each parish. No record is a real person. It can serve as a foundation layer for demographic analysis, but it does not replace official statistics.

Generated people and households, not real people, families, or addresses.

To the best of our knowledge, the first open-access synthetic population to cover every parish in Portugal, generated from the 2021 Census.

The drawing that follows uses an invented parish to tell why it is needed and how it is made: as you scroll down the page, it moves on.

With your phone upright, a drawing follows these steps. The fixed drawings are at the end of this section.

Why a synthetic population is needed

Picture a small parish with 10 homes and 23 people. In the 2021 Census, each person answered questions about their age, their education, their work and who they live with. INE keeps those answers, one by one.

But it does not publish them that way: it protects the people who answered (statistical confidentiality). What leaves INE is counts, table by table: how many people there are in each age group, how many households of each size. In this parish, 3 people live alone and 8 are aged 65 or over. Who lives in which home, and with whom, is left out.

Many questions cross two tables. How many of the 8 people aged 65 or over live alone? One table says 3 people live alone, the other that 8 are aged 65 or over; neither says how many are both. INE publishes some cross-tabulations by parish, but not all: there would be too many tables, with many cells of one or two people.

And arithmetic on the tables is not enough. The same 23 people fit into the same 10 homes in many ways, and every one of them gives exactly the same tables. In one, nobody aged 65 or over lives alone; in another, 3 of them do. The tables on their own cannot choose between them.

INE also publishes a sample of answers, the 2021 Census Public Use File: about 1 in 20 households in the country, with each person's answers kept together, but without the parish (only the region, NUTS II). The sample shows how people live together; the tables, how many there are in each parish. Neither, on its own, gives the people of a parish.

A synthetic population joins the two: households that look like the sample's, chosen so that their counts give each parish's tables. With it, any cross-tabulation is a matter of counting people.

Five steps to generate it

1. Learn how attributes go together

The computer learns, from that sample, which combinations of age, education, work and family are common in a person and their household. That model (an autoregressive generator) is trained once and then frozen. Single-year ages and the type of workplace are generated by it, not derived afterwards.

The generator writes each household like a sentence, one attribute at a time, and every choice reads everything already written: the second person's age tends to stay close to the first's, and a four-year-old cannot have a degree or a job.

2. Fit each parish to its tables

The result does not come straight out of the generator: it invents possible people and households, and then the ones whose totals come as close as possible to INE's tables are chosen (a constrained generative process). For the invented parish it invents 24 candidate households, all with the same weight. The bars show what they add up to; the black squares, what the parish's tables ask for: 10 households and 23 people.

The model avoids the combinations INE publishes as zero in that parish (a mask). This one has no households of 5 or more people, so 3 candidates are left out. The mask restricts the candidates, but the result can still leave some people in those combinations: in the fitted person tables, about 7,900 entries (see "Where the data are weakest").

It then gives more weight to the candidates that bring the totals closer to INE's tables for the parish, changing each one's weight as little as possible (a maximum-entropy tilt). Before that, a check would refuse any parish whose tables imply totals that are inconsistent with one another; none of the 3,092 was refused.

Here the candidates came out too young for the parish: as you scroll, the households of people aged 65 or over grow, the young couples shrink and the bars reach the squares.

3. Draw whole households

A person cannot be split: whole households are drawn from the candidates, as close as possible to the counts the parish's tables ask for (an integer allocation). In parishes of under 500 people that draw is solved to the optimum (an exact selection, with no approximation), which still does not guarantee INE's total. The generated total is not always INE’s: in 762 parishes it differs, from 119 people fewer to 30 more; nationally, there are 2,625 people fewer (10,340,441 generated, against 10,343,066 residents according to INE). The quality tiers use the smaller of the two counts, the publication count. Parish by parish, in the quality file.

Here 10 of the 21 candidates stay, the household written in step 1 among them, and the sums match both tables exactly.

Now the opening question has an answer, and it only takes counting: in this population, 3 of the 8 people aged 65 or over live alone. The tables only guaranteed that the answer lay between 0 and 3; the number comes from what the generator learned from the sample about who lives with whom.

In the parish we began with, it was 2. The synthetic population gives a possible answer, consistent with the tables, not the true one, and for a real parish we do not have the true one to compare. That is why the site says, for every answer, whether it comes from a field fitted to the tables or from a cross-tabulation no table in the fit checks (see "Fitted fields and derived fields"), and why every parish has a quality tier. This is how each parish's page answers this very question.

4. Add the residents of collective quarters

People living in care homes and other collective quarters are appended after the fit, from INE's published counts, as partial records: sex and age come from those counts, education is imputed from similar records, and the family nucleus and the work fields are left empty (the column dictionary says which). Fine occupation codes are derived at this stage.

In the invented parish, besides the 10 homes, INE counts 5 people in a care home.

5. Publish with a declared schema and a quality tier

Every published column has a declared meaning, and the column dictionary explains each one; everything else is dropped, with the reason recorded. The release carries no link between partners. Each person takes one row, and every column says where it comes from.

Each parish comes out with a quality tier, A, B or C (see "Every parish answers, with a quality tier"). With 28 residents, the invented parish is tier C, like every parish under 500.

View the story as fixed drawings, with the tables
The same tables fit parishes where 0, 2 or 3 people aged 65 or over live aloneINE publishes counts, table by table. These two say that 3 people live alone and 8 are aged 65 or over, but not how many are both. The same 23 people fit the same 10 homes in many ways that give these tables; three of them below.
Households by number of people
PeopleHouseholds
1 person3
2 people3
3 people2
4 people2
5 or more0
Total10
People by age
AgePeople
Ages 0–144
Ages 15–242
Ages 25–649
Ages 65+8
Total23
How many of the 8 people aged 65 or over live alone?
People65 or overUnder 65Total
Live aloneunknownunknown3
Do not live aloneunknownunknown20
Total81523

The parish we began with: 2 aged 65 or over living alone

  • 84alone, 65+
  • 77 · 74
  • 45 · 43 · 12 · 9
  • 79alone, 65+
  • 36 · 34 · 2
  • 72 · 70
  • 58
  • 41 · 39 · 16 · 6
  • 30 · 28
  • 68 · 66 · 19

Another way: 0 aged 65 or over living alone

  • 30
  • 77 · 74
  • 45 · 43 · 12 · 9
  • 28
  • 36 · 34 · 2
  • 72 · 70
  • 58
  • 41 · 39 · 16 · 6
  • 84 · 79
  • 68 · 66 · 19

And another: 3 aged 65 or over living alone

  • 84alone, 65+
  • 77 · 74
  • 45 · 43 · 12 · 9
  • 79alone, 65+
  • 36 · 34 · 2
  • 72 · 70
  • 66alone, 65+
  • 41 · 39 · 16 · 6
  • 30 · 28
  • 68 · 58 · 19
  • Ages 0–14
  • Ages 15–24
  • Ages 25–64
  • Ages 65+

Diagram with an invented parish: homes, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census).

View the three ways as a table: Three ways of living in the same homes, with the same tables
Three ways of living in the same homes, with the same tables
WayAges, home by homeAged 65 or over, living alone
The parish we began with84 | 77, 74 | 45, 43, 12, 9 | 79 | 36, 34, 2 | 72, 70 | 58 | 41, 39, 16, 6 | 30, 28 | 68, 66, 192
Another way30 | 77, 74 | 45, 43, 12, 9 | 28 | 36, 34, 2 | 72, 70 | 58 | 41, 39, 16, 6 | 84, 79 | 68, 66, 190
And another84 | 77, 74 | 45, 43, 12, 9 | 79 | 36, 34, 2 | 72, 70 | 66 | 41, 39, 16, 6 | 30, 28 | 68, 58, 193
The public sample shows whole households, without the parishThe 2021 Census Public Use File keeps each person’s answers together, for about 1 in 20 households in the country, and gives only the region (NUTS II). It shows how people live together; the tables, how many there are in each parish.
  • 81
  • 34 · 31 · 5
  • 67 · 65
  • 29
  • 52 · 49 · 17
  • 38 · 36 · 7 · 4
  • 76
  • 44 · 42 · 15 · 11 · 8
  • 88 · 61
  • 23 · 22
  • 70 · 69
  • 41 · 13
  • 33
  • 58 · 55 · 26
  • 79 · 77
  • 36 · 35 · 3
  • 64
  • 72 · 70 · 44
  • 27 · 25 · 1
  • 55 · 53
  • 85
  • 40 · 38 · 12 · 9
  • 47 · 45 · 20
  • 91
  • 31 · 30
  • 62 · 60 · 33 · 6
  • 74
  • 50 · 18
  • 39 · 37 · 10 · 8 · 2
  • 68 · 66
  • Ages 0–14
  • Ages 15–24
  • Ages 25–64
  • Ages 65+

Households invented for this example (30); INE’s sample records may not be redistributed.

A household is written like a sentence, one attribute at a timeThe generator chooses each attribute after reading everything it has already written about the household. It learnt those rules from the 2021 Census public-use sample, once, and was then frozen.
  1. Person 1Man44SecondaryEmployed
  2. Person 2Woman41DegreeEmployed
  3. Person 3Manage?

Person 3’s age, after reading the first two

  • Ages 0–14
  • Ages 15–24
  • Ages 25–64
  • Ages 65+

Likeliest: a child. The choice is drawn with these odds, so no two households are forced to come out the same.

Diagram: the household and the bar lengths are invented to show the idea; the real generator writes more attributes per person (marital status, occupation and place of work, for example) and single-year ages.

The generator proposes 24 households; 3 are out at onceIt reads the parish’s tables and invents candidates. The size table publishes zero households of 5 or more people, so no candidate of that size can enter (the mask).
Households by number of people
PeopleHouseholds
1 person3
2 people3
3 people2
4 people2
5 or more0
Total10
People by age
AgePeople
Ages 0–144
Ages 15–242
Ages 25–649
Ages 65+8
Total23

the generator reads the tables and invents candidates

  • 34
  • 81
  • 72
  • 27
  • 70 · 68
  • 31 · 29
  • 77 · 74
  • 45 · 19
  • 38 · 36 · 4
  • 52 · 49 · 17
  • 79 · 54 · 50
  • 33 · 30 · 2
  • 44 · 42 · 12 · 9
  • 40 · 37 · 7 · 3
  • 48 · 46 · 20 · 16
  • 66 · 64 · 38 · 10
  • 39 · 36 · 11 · 8 · 5out
  • 71 · 45 · 43 · 15 · 13out
  • 35 · 33 · 6 · 4 · 1out
  • 26
  • 36 · 34 · 1
  • 41 · 39 · 13 · 10
  • 85
  • 58 · 57
  • Ages 0–14
  • Ages 15–24
  • Ages 25–64
  • Ages 65+

Diagram with an invented parish: households, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census) and the candidates are many more.

The weights move as little as possible until the sums give the tablesAll start with the same weight (the thin tick). The candidates came out too young for this parish, so households of people aged 65 or over gain weight and young couples lose it.
  • 34
  • 81
  • 72
  • 27
  • 70 · 68
  • 31 · 29
  • 77 · 74
  • 45 · 19
  • 38 · 36 · 4
  • 52 · 49 · 17
  • 79 · 54 · 50
  • 33 · 30 · 2
  • 44 · 42 · 12 · 9
  • 40 · 37 · 7 · 3
  • 48 · 46 · 20 · 16
  • 66 · 64 · 38 · 10
  • 26
  • 36 · 34 · 1
  • 41 · 39 · 13 · 10
  • 85
  • 58 · 57

weight after the fit; the thin tick marks the starting weight, the same for all

People by age

  • Ages 0–144
  • Ages 15–242
  • Ages 25–649
  • Ages 65+8

the table (number on the right)beforeafter

Households by number of people

  • 1 person3
  • 2 people3
  • 3 people2
  • 4 people2

the table (number on the right)beforeafter

Diagram with an invented parish: households, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census) and the candidates are many more.

View the weights as a table: Each candidate’s weight, before and after the fit
Each candidate’s weight, before and after the fit
CandidateAgesWeight beforeWeight after
1340.480.14
2810.480.86
3720.480.86
4270.480.14
570, 680.481.25
631, 290.480.03
777, 740.481.25
845, 190.480.44
938, 36, 40.480.43
1052, 49, 170.480.49
1179, 54, 500.480.22
1233, 30, 20.480.43
1344, 42, 12, 90.480.42
1440, 37, 7, 30.480.42
1548, 46, 20, 160.480.54
1666, 64, 38, 100.480.22
17260.480.14
1836, 34, 10.480.43
1941, 39, 13, 100.480.42
20850.480.86
2158, 570.480.03
View the sums as a table: The example parish’s tables, before and after the weights
The example parish’s tables, before and after the weights
CellTableBeforeAfter
1 person32.93
2 people32.43
3 people22.42
4 people22.42
Ages 0–1444.84
Ages 15–2421.92
Ages 25–64913.39
Ages 65+84.38
10 whole households stay, with 23 peopleA weight of 0.4 is not a household. Whole households are chosen, each either in or out, and the choice tries to come as close to the tables as it can. In a parish this small every combination is tried; here one matches both tables, which does not always happen in a real parish.
  • 34
  • 81chosen
  • 72chosen
  • 27
  • 70 · 68chosen
  • 31 · 29
  • 77 · 74chosen
  • 45 · 19chosen
  • 38 · 36 · 4chosen
  • 52 · 49 · 17chosen
  • 79 · 54 · 50
  • 33 · 30 · 2
  • 44 · 42 · 12 · 9chosen
  • 40 · 37 · 7 · 3
  • 48 · 46 · 20 · 16
  • 66 · 64 · 38 · 10chosen
  • 26
  • 36 · 34 · 1
  • 41 · 39 · 13 · 10
  • 85chosen
  • 58 · 57

People by age

  • Ages 0–144
  • Ages 15–242
  • Ages 25–649
  • Ages 65+8

the table (number on the right)the chosen

Households by number of people

  • 1 person3
  • 2 people3
  • 3 people2
  • 4 people2

the table (number on the right)the chosen

Diagram with an invented parish: households, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census) and the candidates are many more.

View the chosen ones as a table: The households chosen in the example parish
The households chosen in the example parish
HouseholdPeopleAges
1181
2172
3270, 68
4277, 74
5245, 19
6338, 36, 4
7352, 49, 17
8444, 42, 12, 9
9466, 64, 38, 10
10185
In this synthetic population, 3 of the 8 people aged 65 or over live aloneThe tables only guaranteed an answer between 0 and 3; in the parish we began with, it was 2. The synthetic population gives a possible answer, consistent with the tables, not the true one.
  • The parish we began with: 2
  • The synthetic population: 3, one model run

Diagram with an invented parish: households, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census) and the candidates are many more.

View as a table: People aged 65 or over who live alone, in the example parish
People aged 65 or over who live alone, in the example parish
People
What the two tables allow0 to 3
The parish we began with2
The synthetic population, one model run3
The care home’s residents join afterwards, as partial recordsINE counts 5 people in this example parish’s care home. They join the 10 chosen households in one collective dwelling, and do not go through the fit.
  • 81
  • 72
  • 70 · 68
  • 77 · 74
  • 45 · 19
  • 38 · 36 · 4
  • 52 · 49 · 17
  • 44 · 42 · 12 · 9
  • 66 · 64 · 38 · 10
  • 85
  • 93 · 88 · 86 · 84 · 79care home
Sex and age
from INE’s counts
Education
imputed from similar records
Family nucleus and work fields
empty

Diagram with an invented parish: households, ages and tables written for this example; in a real parish the tables are INE’s (2021 Census) and the candidates are many more.

Every column says where it comes from, and every parish its tierSome of the person and household files’ columns, with the origin the column dictionary gives them; what is internal to the model is left out.
Published columns and their origin
Column (file)Origin
freguesia (persons)Xfrom the geographic code
sex (persons)Ggenerated
age (persons)Ggenerated
age_5y (persons)Dderived
education_level_code (persons)Ggenerated
employment_status_code (persons)Ggenerated
hh_size (households)G/Cgenerated, then made coherent
is_institutional (persons)flagflag
links to the sample’s recordsremoved
links between spousesnot included

The example parish has 28 people: it is tier C, like every parish under 500 residents.

Columns and origins taken from this release’s dictionary; the example parish is invented.

Fitted fields and derived fields

The figures on this site use nine fields. Six are groupings of a generated field whose INE table is in the fit (five-year age bands group the generated single-year age, and the age bands join those groups); two are derived by a fixed rule and no table in the fit checks them (for example, "lives alone" means the household has one person); and one is a flag. The table gives, for each, the microdata column or the rule that computes it from the columns, with the same letters as the column dictionary.

AgeGrouping of a fitted field
age_5y (D)Five-year band of the generated age. INE’s sex × five-year-age table is in the fit.
EducationGrouping of a fitted field
education_level_coarse5 (D)Five levels from the generated education code (11 levels). The education table is in the fit.
Employment statusGrouping of a fitted field
employment_status_coarse3 (D)Employed, unemployed or inactive, from the generated code (7 categories). Labour-force status is in the fit.
People in the householdGrouping of a fitted field
hh_size_bin (D)The household’s number of people, 5 or more together. The household-size table is in the fit.
Family nucleiGrouping of a fitted field
hh_type_top (D)The number of family nuclei, counted from the household’s people. The nuclei-per-household table is in the fit.Note on “Family nuclei per household”. These figures can differ slightly from what you get from the downloadable microdata. We will correct them in the next release.
Collective living quartersFlag
is_institutional (flag)1 for a collective living quarter appended from INE’s counts, 0 for a private household.
Lives aloneDerived, outside the fit
Not a column:“Yes” when the person’s household has one person (hh_size = 1). No table in the fit checks it.
Child and someone 65+ in the householdDerived, outside the fit
Not a column:“Yes” when the household has at least one person under 15 (age < 15) and another aged 65 or over (age ≥ 65). No table in the fit checks it.
Age bandGrouping of a fitted field
Not a column:Under 45, 45 to 64, 65 or over, from age: each band joins whole five-year groups, and the five-year table is in the fit.

The household questions (people per household, family nuclei, several generations), "who lives alone" and "people aged 65 or over who live alone" count private households only, INE's household universe: people living in a care home or other collective living quarters are not part of them.

In the downloadable microdata, each column also carries its provenance: generated by the model (G), derived from another column (D), made consistent after generation (C), or assigned from the geographic code (X). The column dictionary explains each one, and the quality page says which tables were fitted and which were only scored.

To see the idea with invented people, in an imagined neighbourhood, there is an illustrated example. It uses no data from this population.

Every parish answers, with a quality tier

Always. All 3,092 parishes are published, and every one answers every question with its own figures. Each has a quality tier, which combines how close the generated population comes to INE's tables and the number of residents. The tier is a reading guide, not a filter: it hides no figure, it says how carefully to read it. A small parish has few people in each table, and each person weighs more.

Parishes with fewer than 500 residents always sit in tier C. Among the tier C parishes of 500 or more, the worst table is almost always single-year age, which is scored but is not one of the fitted person tables, and which the site's answers do not use: in those parishes the tier C caution applies mostly to anyone using single-year age from the microdata. Each parish page says what put it in its tier. The terms used to measure the fit (typical error, worst table) are explained, with an example, in the quality page's glossary.

The tier comes from two measures: residents and typical errorThe more ink, the more care in reading, as on the map. Under 500 residents the tier is always C, however good the fit.
Quality tier by residents and typical error
Typical error ↓ · residents →Under 500500–1,9992,000 or more
Up to 0.10CBA
0.10 to 0.15CBB
Above 0.15CCC

And the worst table may not pass 0.18 in tier A, nor 0.26 in B; if it does, the parish drops a tier. In this release: 776 parishes in tier A, 705 in B and 1,611 in C.

Thresholds from this release’s tier policy (release.json).

  • Tier A776 parishes

    A parish of 2,000 or more residents where the generated population closely reproduces the tables INE publishes.

  • Tier B705 parishes

    A parish of 500 or more residents with a close fit to INE’s tables. Under 2,000 residents a parish sits in B even when its fit is as close as tier A’s.

  • Tier C1,611 parishes

    A parish of under 500 residents, or one whose typical error or worst table (in the larger ones, almost always single-year age, which the site’s answers do not use) is past the tier B thresholds: read the numbers with more care.

In this release, every question is answered with the parish’s own figures, and each parish page states its quality tier.

No cell is suppressed: every category of a question appears, empty ones included. “0.0%”: no generated person or household in that category, or so few that the share rounds to zero.

This is release 1.0.3, which replaced three releases dated 5 October 2026 (1.0.2 never reached GitHub); the generated population is the same in all of them. What changed between them.

A single run: no intervals, no rankings

This version publishes a single model run: there is no across-run range, and no directional comparison between cells is permitted.

That is why the site's figures carry no intervals, no rankings of parishes and no "more than" comparisons between results. A second run will follow publication, as a measurement; from two runs onward, the variation between them can be shown again. Even then, we will only call it a confidence interval if its coverage is demonstrated.

The privacy of the people who answered the Census

The records are generated and are not intended to represent identifiable people: they carry no names or addresses, and the internal pointers to sample records have been dropped.

In the national audit, 10.5% of people and 0.8% of households match a sample record on 13 attributes. A replay that reuses sample records (the SA/CO benchmark, which the audit itself flags as not ready for use) reaches 99.1% of people and 99.9% of households. On the 11 attributes the model generates, 80% of synthetic persons share an attribute combination with some sample person: those are common profiles, and the distance to the closest record is still larger than between the sample’s own people. There is no excess membership-inference signal (guessing whether someone was in the sample used for training) and no attribute-inference advantage (guessing someone’s attribute from the others). The audit passed.

Synthetic does not mean that accidental attribute matches are impossible.

The details are on the quality page.

What it is for and what it is not for

Suitable for

  • Descriptive demographic exploration.
  • Small-area household and population analysis within the published quality rules.
  • Journalism and civic-data applications.
  • Education and reproducible research.
  • Aggregate scenario and poststratification work (reweighting a survey so it matches the population). This release publishes no uncertainty (a single run): treat the figures as point values.
  • Testing tools that require realistic but non-identifying population records.

Not suitable for

  • Identifying, locating, or making decisions about real people.
  • Treating a synthetic row as an individual, family, or address.
  • Unrestricted cross-tabulation in tiny or weak-quality parishes.
  • Parish-level claims based on fields that are not fitted per parish: industry, occupation, place of work, means of transport, tenure and number of rooms (the column dictionary says which they are).
  • Causal conclusions about policy effects.
  • Behavioural prediction or agent-based simulation without a separate validated model.
  • Replacing official Census statistics.
  • Legal, credit, insurance, employment, policing, or eligibility decisions.

Where the data are weakest

These are the limitations of the generated population, the same from release 1.0.0 to 1.0.3, declared rather than hidden:

  1. Workplace and commuting are the weakest attributes. Work or study location, transport mode, industry (CAE section) and occupation (CPP major group) sit much further from the published tables than the demographic and household tables do. They are scored but, by design, not fitted: the model generates them, conditioned on the region. Of the work fields, labour-force status, the four-group activity sector and status in employment are fitted (see “Which tables were used?”).
  2. Some combinations INE publishes as zero. About 22,000 people sit in a combination that INE publishes as zero for their parish. Most are in the household-activity table, which is held out of the fit as an independent check. In the fitted person tables there are about 7,900 such entries (at most 0.08% of people; one person can count in more than one table), mostly in labour × education, education, labour-force status and marital status. The model card links them to combinations that do not occur in the training sample.
  3. Small published cells may be missing. About 47,000 small published cells are not reproduced; 87% of them hold a single person.
  4. A few unusual families. Well under 1% of family units have a shape that real households in the sample do not have: for example a family unit without a member aged 15 or over, or a mother–child gap above 50 years.
  5. Clock-bound optimisation. In 116 large parishes the final search stopped at its time budget rather than at convergence. These results depend on machine speed; our internal record names how each one ended (it is not part of the published files).
  6. Residents of collective quarters are partial records. People living in care homes and other collective quarters are appended after the fit, from INE’s published counts. Sex and age come from those counts and education is imputed from similar records; employment status, marital status and nationality are filled. By design, the family nucleus and the work fields (status in employment, sector, occupation, industry, place of work and means of transport) are left empty.
  7. Housing and family nuclei. Tenure (owner or tenant) and the number of rooms are published in the microdata but not fitted per parish: in villages the generated population has more renters than the real one. And some generated family nuclei have a single member, where INE’s nucleus always has at least two.

Corrections and new releases

  • The releases published on GitHub (1.0.0, 1.0.1 and 1.0.3) stay available and citable; 1.0.2 was never published. Each answer's permanent link names the release it refers to; a parish page always shows the current release, so cite it with the date you read it.
  • Corrections are recorded in a public errata log.
  • A revision of INE's sources triggers a documented patch or a new evaluation.
  • The next release (1.1) will be a corrected synthetic population for 2021. A later release, with 2025 data, will say which fields were updated to 2025, which were carried forward from 2021, and which are newly modelled.
  • The model weights are not published: that would require its own memorisation, privacy and licence review.

How to cite

estimador.pt publishes the synthetic population under the CC BY-NC 4.0 licence (Attribution-NonCommercial 4.0 International): commercial use is not covered. The INE data it is based on are reused under INE’s CC BY 4.0 licence. When you redistribute the data (the files, or tables taken from them), include this attribution:

Source: Instituto Nacional de Estatística, IP – Portugal (2021 Population and Housing Census; reference period: 2021). Modified information: this is a synthetic population produced by estimador.pt from the Census 2021 published marginals and Public Use File (FUP), INE information reused under the CC BY 4.0 licence; it is not official INE microdata and INE is not responsible for its content. The synthetic population is published by estimador.pt under the CC BY-NC 4.0 licence (Attribution-NonCommercial 4.0 International).

In a news story, a chart or a card, the short form is enough, with a link to the data page: Source: INE, 2021 Census (CC BY 4.0) · information modified by estimador.pt (CC BY-NC 4.0)

Cite as: estimador.pt, População Sintética de Portugal v1.0.3 (2026), CC BY-NC 4.0.

The files, the column dictionary, the checksums and the citation file are on the data page.