Cursus

Wat is synthetische data?
Synthetische data is door de computer gegenereerde data die lijkt op echte data. Het primaire doel van synthetische data is het vergroten van de privacy en integriteit van systemen. Zo moeten bedrijven om Persoonlijk Identificeerbare Informatie (PII) of Persoonlijke Gezondheidsinformatie (PHI) van gebruikers te beschermen, strategieën voor gegevensbescherming implementeren. Met synthetische data kunnen bedrijven nieuwe applicaties testen en de privacy van gebruikers waarborgen.
Bij machine learning gebruiken we synthetische data om de modelprestaties te verbeteren. Dit geldt ook voor situaties waarin data schaars of uit balans is. Typische toepassingen van synthetische data in machine learning zijn zelfrijdende voertuigen, beveiliging, robotica, fraudebescherming en zorg.

Afbeelding van Nvidia
Volgens gegevens van Gartner zal in 2024 60% van de data die wordt gebruikt om machinelearning- en analytische applicaties te ontwikkelen, synthetisch zijn. Maar waarom zien we een opwaartse trend in synthetische data?
Het is kostbaar om echte data te verzamelen en op te schonen, en in sommige gevallen is die schaars. Fraude bij banken, borstkanker, data van zelfrijdende auto's en malware-aanvallen zijn bijvoorbeeld zeldzaam in de echte wereld. Zelfs als je de data hebt, kost het tijd en middelen om die te schonen en te verwerken voor machinelearningtaken.
In het eerste deel van de tutorial leren we waarom we synthetische data nodig hebben, welke toepassingen er zijn en hoe je die genereert. In het laatste deel verkennen we de Python Faker-bibliotheek en gebruiken we die om synthetische data te maken voor testen en het behouden van gebruikersprivacy.
Waarom moeten we synthetische data genereren?

Afbeelding door de auteur
We hebben synthetische data nodig voor gebruikersprivacy, applicatietests, het verbeteren van modelprestaties, het representeren van zeldzame gevallen en het verlagen van operationele kosten.
- Privacy: om gegevens van gebruikers te beschermen. Je kunt namen, e-mails en adressen vervangen door synthetische data. Dit helpt cyber- en blackboxaanvallen te voorkomen waarbij modellen details van trainingsdata afleiden.
- Testen: applicaties testen op echte data is duur. Databases, UI en AI-applicaties testen op synthetische data is goedkoper en veiliger.
- Modelprestaties: gegenereerde synthetische data kan de prestaties van een model verbeteren. Bijvoorbeeld: bij beeldclassificatie gebruiken we schuin trekken, verschuiven en roteren van afbeeldingen om de dataset te vergroten en de nauwkeurigheid te verbeteren.
- Zeldzame gevallen: we kunnen niet wachten tot een zeldzame gebeurtenis zich voordoet om echte data te verzamelen. Voorbeelden: detectie van kredietfraude, auto-ongelukken en kankergegevens.
- Kosten: dataverzameling kost tijd en middelen. Het is duur om echte data te verkrijgen, op te schonen, te labelen en voor te bereiden voor testen of het trainen van modellen.
Wat zijn toepassingen van synthetische data?
In deze sectie leren we hoe bedrijven synthetische data gebruiken om kostenefficiënte, privacyvriendelijke en krachtige applicaties te bouwen.
- Gegevensdeling: synthetische data stelt organisaties in staat om gevoelige data intern en met derden te delen. Het helpt ook om privédata naar de cloud te verplaatsen en data te behouden voor analytics.
- Financiële dienstverlening: synthetische data wordt gegenereerd om zeldzame gebeurtenissen na te bootsen, zoals frauduleuze transacties, anomaliedetectie en economische recessies. Het wordt ook gebruikt om klantgedrag te begrijpen met analysetools.
- Quality Assurance: het onderhouden en testen van de kwaliteit van applicaties of datasystemen. De synthetische data wordt gebruikt om systemen te testen op zeldzamere anomalieën en prestaties te verbeteren.
- Zorg: stelt ons in staat om medische dossiers intern en extern te delen met behoud van de vertrouwelijkheid van patiënten. Je kunt het ook gebruiken voor klinische proeven en het detecteren van zeldzame ziekten. Leer gevoelige informatie verwerken met een cursus over gegevensprivacy en anonimisering in Python of R.
- Automotive: het is moeilijk en traag om echte data te krijgen voor robots, drones en zelfrijdende auto's. Bedrijven testen en trainen hun systemen op synthetische simulatiegegevens en besparen kosten bij het bouwen van oplossingen zonder in te leveren op prestaties.
- Machine learning: we kunnen synthetische data gebruiken om de trainingsdataset te vergroten, ongebalanceerde data op te lossen en modellen te testen om prestaties en nauwkeurigheid te borgen. Het wordt ook gebruikt om vooroordelen in bestaande beeld- en tekstdata te verminderen. Dit helpt om systemen te testen en gebruikersprivacy te behouden. DeepFake wordt bijvoorbeeld gebruikt om gezichtsherkenningssystemen te testen.
Hoe genereer je synthetische data
We kunnen nepdatasetgeneratoren, statistische tools, neurale netwerken en generative adversarial networks gebruiken om synthetische data te genereren.
Nepdatabases genereren met de Faker-bibliotheek om databases en systemen te testen. Het kan nepgebruikersprofielen genereren met adressen en alle essentiële informatie. Je kunt het ook gebruiken om willekeurige tekst en alinea's te genereren. Dit helpt bedrijven de privacy van gebruikers te beschermen in de testfase en geld te besparen op het verwerven van echte datasets.
Dataverdeling begrijpen om een volledig nieuwe dataset te genereren met statistische tools zoals Gauss, Exponentieel, Chi-kwadraat, t, lognormaal en Uniform. Je hebt domeinkennis nodig om distributiegebaseerde synthetische data te genereren.
Variational Autoencoder is een unsupervised leermethode die een encoder en decoder gebruikt om de oorspronkelijke dataset te comprimeren en een representatie van de originele dataset te genereren. Het is ontworpen om de correlatie tussen input- en outputdatasets te optimaliseren.
Generative Adversarial Network is de populairste manier om data te genereren. Je kunt het gebruiken om synthetische afbeeldingen, geluid, tabeldata en simulatiegegevens te maken. Het gebruikt een generator- en discriminator-architectuur uit deep learning om synthetische data te genereren door willekeurige samples te vergelijken met echte data. Lees onze tutorial Demystifying Generative Adversarial Nets om je eigen synthetische data te maken met Keras.
Wat is Python Faker?
Python Faker is een open-source Python-pakket dat wordt gebruikt om een nepdataset te maken voor applicatietests, het vullen van de database en het behouden van gebruikersanonimiteit.

Afbeelding door de auteur
Je kunt Faker installeren met:
pip install faker
Faker biedt ondersteuning voor de command line, Pytest fixtures, lokalisatie (ondersteuning voor verschillende regio's), reproduceerbaarheid en dynamische providers (aan te passen aan je behoeften).
Je kunt ook de basisfunctionaliteit van Faker gebruiken om snel een dataset te maken en die aan te passen aan jouw wensen. In de onderstaande tabel zie je verschillende Faker-functies en hun doel.
|
Faker-functie |
Doel |
|
name() |
Genereert een nep volledige naam |
|
credit_card_full() |
Genereert een creditcardnummer met verloopdatum en CVV |
|
email() |
Genereert een nepmailadres |
|
url() |
Genereert een nep-URL |
|
phone_number() |
Genereert een neptelefoonnummer met landcode |
|
address() |
Genereert een nep volledig adres |
|
license_plate() |
Genereert een nepkenteken |
|
currency() |
Genereert een tuple met valutacode en voluit |
|
color_name() |
Genereert een willekeurige kleurnaam |
|
local_latlng() |
Genereert breedtegraad, lengtegraad, gebied, land en deelstaten |
|
domain_name() |
Genereert een nepwebsite op basis van een nepnaam |
|
text() |
Genereert korte neptekst |
|
company() |
Genereert een nepbedrijfsnaam |
Voor meer geavanceerde functies, bekijk de Faker-documentatie.
Het is belangrijk om deze functies te bekijken, omdat we ze gaan gebruiken om verschillende voorbeelden en dataframes te maken.
Synthetische data genereren met Python Faker
In deze sectie gebruiken we Python Faker om synthetische data te genereren. Het bestaat uit 5 voorbeelden van hoe je Faker voor verschillende taken kunt inzetten. Het hoofddoel is een privacygerichte aanpak ontwikkelen voor het testen van systemen. In het laatste deel genereren we nepdata om de oorspronkelijke data aan te vullen met de gelokaliseerde provider van Faker.
Je vindt alle code voor deze tutorial in deze DataLab-werkmap; je kunt eenvoudig je eigen kopie maken om alle code in de browser uit te voeren, zonder iets op je computer te installeren.
Eerst starten we een nep-generator met `Faker()`. Standaard wordt de “en_US”-locale gebruikt.
from faker import Faker
fake = Faker()
Voorbeeld 1
Het “fake”-object kan data genereren met behulp van eigenschapsnamen. Zo wordt `fake.name()` gebruikt om de volledige naam van een willekeurig persoon te genereren.
print(fake.name())
>>> Jessica Robinson
Op dezelfde manier kunnen we een nep e-mailadres, landnaam, tekst, geolocatie en URL genereren, zoals hieronder getoond.
print(fake.email())
print(fake.country())
print(fake.name())
print(fake.text())
print(fake.latitude(), fake.longitude())
print(fake.url())
Output
ybanks@example.com
Mayotte
Mr. Jose Browning DDS
Dog might bank dog total life financial. Dark view doctor time just.
Stay second treatment language theory. Space seek adult create matter imagine lay.
51.7514185 -148.802970
http://fischer.info/
Voorbeeld 2
Je kunt verschillende locales gebruiken om data te genereren in diverse talen en voor verschillende regio's.
In het onderstaande voorbeeld genereren we data in het Spaans en de regio is Spanje.
fake = Faker("es_ES")
print(fake.email())
print(fake.country())
print(fake.name())
print(fake.text())
print(fake.latitude(), fake.longitude())
print(fake.url())
Output
Zoals we zien, is de naam van de persoon veranderd en is de tekst in het Spaans.
casandrahierro@example.com
Tonga
Juan Solera-Mancebo
Cumque adipisci eligendi aperiam. Quas laboriosam amet at dignissimos. Excepturi pariatur ipsam esse.
89.180798 -2.274117
https://corbacho-galan.net/
Laten we het nog eens proberen met de Duitse taal en Duitsland als land. Om een volledig gebruikersprofiel te genereren, gebruiken we de functie `profile()`.
fake = Faker("de_DE")
fake.profile()
Output
Het is duidelijk hoe we Faker kunnen gebruiken om data te genereren in verschillende talen voor verschillende landen. Het wijzigen van de locale verandert naam, functie, adres, bedrijf en andere identificerende gegevens op basis van taal en land.
{'job': 'Erzieher',
'company': 'Stadelmann Thanel GmbH',
'ssn': '631-64-0521',
'residence': 'Leo-Schinke-Allee 298\n26224 Altötting',
'current_location': (Decimal('51.5788595'), Decimal('29.780659')),
'blood_group': 'B+',
'website': ['https://www.schmidtke.de/',
'https://roskoth.com/',
'http://www.textor.de/',
'https://www.zirme.com/'],
'username': 'vdoerr',
'name': 'Francesca Fröhlich',
'sex': 'F',
'address': 'Steinbergallee 13\n84765 Saarbrücken',
'mail': 'smuehle@gmail.com',
'birthdate': datetime.date(1998, 3, 19)}
Voorbeeld 3
In dit voorbeeld maken we een pandas-dataframe met Faker.
- Maak een leeg pandas-dataframe (data)
- Haal het door x aantal lussen om meerdere rijen te maken
- Gebruik `randint()` om een unieke id te genereren
- Gebruik Faker om een naam, adres en geolocatie te maken
- Voer de functie `input_data()` uit met x=10
from random import randint
import pandas as pd
fake = Faker()
def input_data(x):
# pandas dataframe
data = pd.DataFrame()
for i in range(0, x):
data.loc[i,'id']= randint(1, 100)
data.loc[i,'name']= fake.name()
data.loc[i,'address']= fake.address()
data.loc[i,'latitude']= str(fake.latitude())
data.loc[i,'longitude']= str(fake.longitude())
return data
input_data(10)
De output ziet er uitstekend uit. We hebben kolommen id, name, address, latitude en longitude met unieke gebruikersdata.

Om het resultaat te reproduceren, moeten we de seed instellen. Zo krijgen we vergelijkbare resultaten wanneer we de codecel opnieuw uitvoeren.
Faker.seed(2)
input_data(10)
Voorbeeld 4
We kunnen ook een zin genereren die door ons gekozen trefwoorden bevat. Vergelijkbaar met `text(), texts(), paragraph(), word(), en words()`. Je kunt het aantal woorden in een zin verhogen door het argument nb_words in te stellen.
In het onderstaande voorbeeld genereren we vijf zinnen met een woordenlijst. Het is niet perfect, maar het kan helpen bij het testen van applicaties die veel tekstdata vereisen.
word_list = ["DataCamp", "says", "great", "loves", "tutorial", "workplace"]
for i in range(0, 5):
print(fake.sentence(ext_word_list=word_list))
Output
Loves great says.
Says workplace workplace tutorial great loves.
Loves workplace workplace loves workplace loves great DataCamp.
Loves says workplace great.
Workplace great DataCamp.
Synthetische en echte data combineren
In dit deel gebruiken we E-Commerce Data uit de dataset-repository van DataCamp en voegen we nepgebruikersdata toe aan de hand van de kolommen CustomerID en Country. Dit helpt om de privacy van gebruikers te behouden en het systeem te testen op extra parameters.
Om een CSV-bestand te laden, gebruiken we de pandas-functie `read_csv()` en tonen we de bovenste vijf rijen met `head()`
# Loading CSV file
Ecommerce = pd.read_csv("e-commerce.csv")
Ecommerce.head()
De dataset bestaat uit de kolommen InvoiceNo, StockCode (product-ID), Description, Product (item) name, Quantity (per transactie), InvoiceDate, UnitPrice (in Pounds), CustomerID en Country.

Om een gelokaliseerd faker-object te maken, tonen we unieke landnamen en gebruiken we die om een woordenboek te maken. Zoals we zien hebben we zeven landen, en in het volgende deel maken we zeven gelokaliseerde faker-generators.
Ecommerce.Country.dropna().unique()
>>> array(['United Kingdom', 'France', 'Australia', 'Netherlands', 'Germany',
'Norway', 'EIRE'], dtype=object)
In de functie `anonymous` hebben we:
- Unieke klant-id's geëxtraheerd en missende waarden verwijderd
- Een woordenboek gemaakt met landnamen en afgekorte locale
- Rij-index en landnaam voor een unieke klant-id geëxtraheerd
- Woordenboek en landnaam gebruikt om een gelokaliseerde faker-generator te initialiseren
- Klantnaam, adres en geolocatie toegevoegd aan het bestaande dataframe.
De onderstaande functie gebruikt het dataframe en voegt vier nieuwe kolommen toe met gebruikersdata op basis van de kolommen CustomerID en Country.
def anonymous(df):
# Extracting unique CustomerID
unique_id = df.CustomerID.dropna().unique()
# Creating the dictionary for Faker localized providers
local = {
"United Kingdom": "en_GB",
"France": "fr_FR",
"Australia": "en_AU",
"Netherlands": "nl_NL",
"Germany": "de_DE",
"Norway": "no_NO",
"EIRE": "ga_IE",
}
for i in unique_id:
# Extracting row index
row_id = df[df["CustomerID"] == i].index
# Extracting country name for faker locale
CountryName = Ecommerce.loc[
Ecommerce["CustomerID"] == i, "Country"
].to_numpy()[0]
# Using locale dictionary to create faker locale generator
code = local[CountryName]
fake = Faker(code)
# Generating fake data and adding it to dataframe
CustomerName = fake.name()
Address = fake.address()
Latitude = str(fake.latitude())
Longitude = str(fake.longitude())
for x in row_id:
df.loc[x, "CustomerName"] = CustomerName
df.loc[x, "Address"] = Address
df.loc[x, "Latitude"] = Latitude
df.loc[x, "Longitude"] = Longitude
return df
We gebruiken seed(5) voor reproduceerbaarheid en draaien de functie `anonymous` op het Ecommerce-dataframe.
# Using seed for reproducibility
Faker.seed(5)
secure_db = anonymous(Ecommerce)
secure_db
De eerste resultaten tonen de data van 17850, United Kingdom en Pamela Cox-James.

Om de gelokaliseerde resultaten van de functie te visualiseren, moeten we de data bekijken voor een unieke Country-kolom.
display_db = []
for i in Ecommerce.Country.dropna().unique():
display_db.append(secure_db[secure_db["Country"] == i].to_numpy()[0])
pd.DataFrame(display_db, columns=Ecommerce.columns)
Het resultaat is veelbelovend. Je ziet verschillende namen per regio en taal. De adressen komen overeen met het land. Met deze methode kun je persoonsgegevens weglaten en gelokaliseerde data maken met Faker om de privacy van gebruikers te beschermen en geld te besparen.

De broncode is beschikbaar in deze DataLab-werkmap.
Conclusie
Een van de nadelen van Python Faker is dat het data van matige kwaliteit oplevert. Het werkt voor applicatietests, maar het ontbreekt aan datanauwkeurigheid. Namen komen bijvoorbeeld niet overeen met e-mail, domeinnaam of gebruikersnaam.
Je kunt de provider aanpassen of een nieuwe maken op basis van je voorkeur, maar het kost extra tijd om het systeem te perfectioneren. In die tijd kun je ook je eigen Python-pakket maken met `random.choice()`.
In big tech gebruiken data scientists verschillende tools om gevoelige data te verwerken en gegevensprivacy te behouden. Ze gebruiken ook synthetische data om modelprestaties te verbeteren, bias te verminderen, applicaties te testen en kosten te besparen bij het ontwikkelen van geavanceerde AI-oplossingen.
Ben je geïnteresseerd om meer te leren? Bekijk dan het carrièrepad Data Scientist with Python en start je reis om een zelfverzekerde data scientist te worden.
In deze tutorial hebben we het belang van synthetische data en de toepassingen ervan geleerd. We hebben ook vanaf nul nepdata gegenereerd met Python Faker om datasystemen te testen en de privacy van gebruikers te behouden.

