Data Accuracy & Sources
Summary
- The generator is calibrated against publicly available survey data.
- Bundled distributions are hand-calibrated approximations derived from published reports — not raw census tables.
- All data is synthetic mock data. Names, IDs and numbers are randomly generated and do not correspond to any real individuals.
- No file I/O at runtime — the Excel files in the repo's
data/folder are build-time reference material only and are not compiled into the package.
Sources
- Census of India 2011 (D-Series & C-Series tables): reference material for religion shares, state populations and mother tongue frequencies; distributions are hand-calibrated approximations.
- National Family Health Survey (NFHS-5): dietary preferences, BMI, blood groups, height/weight-by-age statistics.
- MSME Census: community-level occupational sectors, vocational rates, industry divisions.
- UIDAI & RTO records: structural syntax for Aadhaar, Voter ID, PAN, IFSC and RTO registrations. Aadhaar uses a true Verhoeff checksum; PAN's 10th character is self-consistent but not the official check digit.
- CSDS/Lokniti election studies: political leanings and religiosity index biases.
What "statistically consistent" means
Every profile is generated by chaining conditional draws:
nationalReligionFreq → stateGivenReligion → casteGivenContext
→ lastNameGivenCaste → socialCategory → education → occupation
The probabilityMetrics field in each profile exposes this
chain, ending in a jointProbability. Because draws are
conditional, impossible combinations are structurally prevented — a Sikh
person cannot draw a Muslim surname, and a person from Mizoram will not get
a Punjabi Jat background.
Known caveats
- Cross-runtime seeds differ: the same seed reproduces the same profile within one implementation (TS or Python), but the two runtimes draw RNG streams differently — outputs are not identical across Python and Node.
- State-conditioned religion shares are hand-calibrated approximations, not census figures.
- PAN check digit is self-consistent but not the official algorithm.
- District lists contain real districts; large metro areas appear via their official district names (e.g. Gautam Buddha Nagar for Noida).
Honesty statement
This project deliberately documents where data is approximated rather than exact, and keeps raw census microdata separate from the shipped package. If you find a distribution that looks wrong, open an issue — calibration fixes are welcome.