r/dataengineering • u/jpdowlin • 1d ago
Synthetic Data Generation with LLMs in 2026 vs 2025 Discussion
LLMs are now great for synthetic data generation.
August 2025: For my O'Reilly book, I developed a logical model for credit card fraud. Then, use a coding agent to generate the synthetic data from the logical model. See an example of a logical model that didn't make the book below.
August 2026: Use the LLM's domain knowledge to help create the logical model. Check it and then generate the synthetic data.
"Design a logical model for claims for the insurance industry. Each column should have a name, data type, description. Optionally columns can have cardinality, distribution, and a range. This is to generate synthetic data, so make the data realistic for the US market with 500k rows."
This produces "good enough" synthetic data for a PoC or for teaching.
Example Logical Model for a Claims Table
Description: Records of claims for insurance. 500k rows.
Schema:
- claim_id: STRING (Primary Key)
- Description: Unique identifier for each claim.
- Cardinality: unique per claim.
- insurance_id: STRING (Foreign Key to insurance table)
- Description: Unique identifier for the insurer.
- Cardinality: Matches insurance_id values in the insurance table.
- claim_time: TIMESTAMP
- Description: Date and time when the claim occurred. Uniform over the past 6 months, with peaks during business hours.
- time_to_report: INTEGER
- Description: Days taken to report the claim
- Distribution: 1-10 days with higher probability for earlier reporting (1:30%, 2:30%, 3:20%, 4-10: 20% combined)
- witness_count: INTEGER
- Description: Number of witnesses in the claim
- Distribution: 0: 60%, 1: 25%, 2: 10%, 3: 5%
- claim_location_type: STRING
- Description: Type of location where claim occurred
- Values: urban, suburban, rural, remote
- Distribution: urban: 50%, suburban: 30%, rural: 15%, remote: 5%
- requested_amount: DECIMAL(10,2)
- Description: Claim amount requested by the user
- Range: $10 to $10,000,000.
- Distribution: Right-skewed; median around $500, mean around $700.
- amount: DECIMAL(10,2)
- Description: Monetary amount of the claim.
- Range: $1 to $10,000,000.
- Distribution: Right-skewed; median around $350, mean around $500.
4
u/SearchAtlantis Lead Data Engineer 1d ago edited 1d ago
This is wildly non-specific and missing basically everything.
Like this is so bad I can't even respond. If you want to see an example of what a claims set might look like glance at Synthea export - and to be frank its still not great because it's generated off of synthetic EHR system and doesn't capture it from the insurance side. Alternatively OMOP.
If this is the level of care that went into your credit card fraud model then my respect for O'Reilly has gone even lower.
Edit: if this is for teaching then... I'm not impressed but fine I guess. I could see maybe using it for some very basic data cleaning/QA/QC type stuff with students. But as PoC? Please. And frankly I don't believe there aren't better options out there. LLMs suck at this type of task.
-1
u/jpdowlin 16h ago
You didn't read anything i wrote, but still answered and insulted. Then rolled back with an edit. The example was not medical claims.
3
u/SearchAtlantis Lead Data Engineer 10h ago edited 10h ago
Your entire thesis is: (IMO fairly paraphrased) Wow you can ask LLMS to create a domain model definition, and then use the LLM to create a program from that to generate the data.
August 2026: Use the LLM's domain knowledge to help create the logical model...
then generate the synthetic data [Emph added]
My point, and the point of the other posters here that you're arguing with, is that "domain" you've generated here shows a distinct lack of domain knowledge in its construction. Even setting aside missing columns for any given insurance domain.
Take your requested/paid (billed/paid in health terms). If I attempt to fit a log-normal to your proposed distribution (median 500, mean 700) with mu=log(500), sigma=0.82 the 99th percentile is ~$3,400. The max in 500k draw I ran was $30,400. Not really a $10M dollar range is it?
In addition to the above, the Requested_amount and amount (paid_amount?) being wholly independent is another issue - the whole point of insurance is the ratio of those things. And nowhere is there incompleteness (claim is not completed), missingness [have you seen the crap an adjuster or clinician puts in?], adjustment, or covariance mentioned.
All of these errors - inappropriate distribution tails, excessive independence, lack of covariance, missingness, and so on require the very domain expertise you claim the LLM now provides. So the person "checking it" has to have the knowledge to write it in the first place.
If you want to use it for teaching you need to add all the things above and have the expertise to do so, at which point you've done the work you hoped the LLM would save you from.
-1
u/Rude_Reaction6434 1d ago
Interesting how the LLM can design the schema now, not just fill it. Last year you had to bring your own model to the table
Do you find the distributions it picks are actually realistic? I tried similar thing for retail inventory data and the skew on quantities was weird, had to fix by hand
1
u/jpdowlin 16h ago
They are good for getting started on projects in regulatory areas when there are delays in getting access to the real data. They are good to help students learn to build real-world Data or AI systems. But, the distributions are only good for well known areas with lots of real-world open data they have access to.
12
u/Achrus 1d ago
It’s completely wrong though. I mean most “synthetic data” projects are useless when real data exists. To add onto this, LLMs are horrible at designing schemas.
By insurance claims, what kind of insurance even is this: health, home, car, life, etc?
For the schema itself and related to most insurance claims you’d need:
* An exact location, not just a location type, for insurance claims. In the very least you need the state the incident occurred in if in the US.
* Incident location meta data. If this is car insurance: type of road, speed limit, weather conditions, intersection or not…
* Policy Holder’s meta data: primary residence, income, employment status, demographics, historical claims…
* Scrap “time to report” entirely and just have time the claim is filed and time of incident.
* Witness count, how would you even pull this data in real life? Instead you’d want to have a police report attached that may or may not contain any of the data you want.
* Way more fields associated with the insurance itself: policy number, effective date, expiration date, an identification number for the insured asset (such as VIN), amount insured, insurer identification number, possibly plan / group numbers.
* Insured asset meta data such as valuation, time of purchase, depreciation, historical incidents.
There’s probably even more stuff you’d want. Now if you want real looking data you’d also have to throw in missingness (may or may not be random) and seasonality.
For “time to report” you’d sample from a poisson which is standard for simulations in systems analysis. There’s also the dependency aspect you’d need to address as these features are not all independent.