- Je berekent sensitiviteit en Laplace-schaal bij een vooraf publieke vaste grootte en publieke begrenzing.
- Je vergelijkt log-dichtheden en houdt aangenomen epsilonbudgetten exact bij zonder een softwareprivacygarantie te claimen.
Je wilt een gemiddelde begrijpen zonder dat de uitkomst sterk afhangt van één bijdrage. Alleen namen weghalen verandert die invloed niet. Differential privacy begint daarom bij een precieze vraag: hoe verschillend mogen de uitkomstverdelingen zijn wanneer één bijdrage verandert?
Denk aan twee bijna gelijke bakken met meetwaarden. Je schuift dezelfde brede verdelingsvorm rond hun gemiddelden; als de middelpunten dicht genoeg bij elkaar liggen, overlappen de verdelingen sterk. De breedte moet bij de maximaal mogelijke verschuiving passen.
Je berekent parameters, log-dichtheden en een budgettabel voor het ideale Laplace-mechanisme. De code bevat geen sampling- of gegevensreleasefunctie. De wiskundige afleiding en een veilige implementatie op echte gegevens zijn afzonderlijke eisen.
1. Leg eerst vast wat één verandering betekent
Onze twee bakken hebben dezelfde vooraf publieke grootte n. Precies één bijdrage wordt vervangen door een andere waarde binnen het vooraf gekozen bereik van a tot b. Dit burenmodel voegt geen bijdrage toe en verwijdert er geen.
Een bijdrage is hier de privacy-eenheid. Meerdere bijdragen van dezelfde persoon vallen zonder extra begrenzing niet automatisch onder dezelfde bescherming. Ook de grootte n mag in dit model publiek zijn; bij andere burenmodellen kan juist die grootte gevoelig zijn.
De gevoeligheid Δ is de grootste mogelijke verandering van het gemiddelde. Eén tellerterm kan maximaal b min a veranderen; het gemiddelde deelt die verandering door n. Het ideale Laplace-mechanisme gebruikt schaal s bij privacyparameter ε.
Neem vier bijdragen tussen nul en één. Het gemiddelde van vier nullen is nul; vervang één nul door één en het gemiddelde wordt een kwart. Dus Δ is een kwart en bij ε gelijk aan één is s eveneens een kwart.
cal = laplace_calibration(4)
print(cal['sensitivity'])
print(cal['scale'])
# 0.25
# 0.25
Kleinere ε vraagt bij dezelfde gevoeligheid een grotere schaal. De ideale verdeling wordt breder en de uitkomst doorgaans minder nauwkeurig. Kies a en b vooraf: uit private data afgeleide grenzen kunnen zelf informatie prijsgeven.
012. Vergelijk verdelingen, geen willekeurige losse ruiswaarde
In het beeld verschuift het middelpunt en verandert de schaal. De uitkomst z kan overal op de reële lijn liggen; het zichtbare tekenbereik is slechts een uitsnede. Een hoge curve betekent meer dichtheid in de buurt van dat punt.
Vergelijk n nullen met dezelfde n bijdragen waarvan één nul een één wordt. De publieke grenzen zijn vooraf 0 en 1. Verander n en ε en volg gevoeligheid, schaal en de twee ideale verdelingen.
- Gevoeligheid Δ
- 0,25
- Schaal s = Δ / ε
- 0,25
- Middelpunt A
- 0
- Middelpunt B
- 0,25
━━ A: gemiddelde 0┄┄ B: gemiddelde 0,25
Grootste getoonde absolute log-dichtheidsverschil: 1 bij ε = 1. De analytische grens geldt voor ieder z; deze eindige plotpunten bewijzen die grens niet.
Herhaalde uitgiftes tellen op
De som veronderstelt hetzelfde burenmodel en dezelfde privacy-eenheid, met een passende garantie voor elke volgende uitgifte gegeven eerdere uitkomsten. Willekeurig gedeelde ruis volstaat niet.
- Uitgiftes
- 1
- Getoond totaal E
- 1
- Publieke cap
- 1
- Na uitgifte 1: 1
De exacte binaire som past binnen de gekozen cap, inclusief gelijkheid.
Dit beeld berekent alleen ideale verdelingen en een numerieke ledger. Het maakt geen ruisuitgifte en levert geen software-DP-garantie. Het plot is een uitsnede; de ideale Laplace-verdeling loopt over de hele reële lijn.
Noem het middelpunt μ en de natuurlijke log van de kansdichtheid ℓ. De getallen voor a, b, μ, Δ en s gebruiken dezelfde vaste meeteenheid: hier een punt op de scoreschaal. Een dichtheid is geen kans op exact één punt; kansen horen bij oppervlakten over verzamelingen.
Vergelijk de realiseerbare gemiddelden nul en een kwart uit het handvoorbeeld. Bij z gelijk aan nul is de eerste log-dichtheid ongeveer 0,693 en de tweede ongeveer −0,307. Het logverschil is één; de verhouding van de dichtheden is dus e tot de macht één.
import numpy as np
left = laplace_log_density(
[0,.25],center=0,scale=.25)
right = laplace_log_density(
[0,.25],center=.25,scale=.25)
ratio = left-right
print(np.round(left,3).tolist())
print(np.round(ratio,3).tolist())
# [0.693, -0.307]
# [1.0, -1.0]
Twee testpunten bewijzen nog geen garantie. De driehoeksongelijkheid begrenst het logverschil voor iedere z door de afstand tussen de middelpunten gedeeld door s. Bij naburige datasets D en D′ is die afstand maximaal Δ, zodat de grens ε wordt.
Deze puntgewijze grens leidt in het ideale model tot een overeenkomstige vermenigvuldigingsgrens voor kansen op iedere uitkomstverzameling. In software kunnen eindige precisie, randombronnen en andere informatiekanalen die belofte doorbreken. Een vaste seed of een geslaagd histogramtestje vervangt zo’n analyse niet.
023. Herhaalde uitgiftes vragen een gezamenlijke begroting
Stel dat m uitgiftes hetzelfde burenmodel en dezelfde privacy-eenheid gebruiken. Iedere volgende uitgifte moet haar ε-garantie ook behouden wanneer eerdere uitkomsten al bekend zijn. Bij vaste mechanismen kan verse onafhankelijke randomisatie dit ondersteunen; gedeelde ruis kan deze voorwaarde juist breken.
Noem de parameter van uitgifte j ε_j en de eenvoudige gezamenlijke bovengrens E. Epsilon, E en cap zijn dimensieloos; n en m tellen respectievelijk bijdragen en uitgiftes. Onder de genoemde voorwaarden is E de som; het boekhouden herstelt geen onjuist afzonderlijk mechanisme.
Drie geplande uitgiftes met parameters een kwart, een kwart en een half passen precies onder een publieke cap van één. De code toont de som als epsilon_total en de tussenstanden als epsilon_prefix. Gelijkheid aan de cap is toegestaan.
budget = basic_composition(
[.25,.25,.5],cap=1.)
print(budget['epsilon_prefix'].tolist())
print(budget['within_cap'])
# [0.25, 0.5, 1.0]
# True
Een computerafdruk kan kleine bijdragen wegafronden. Daarom vergelijkt onze capbeslissing de exacte som van de reeds geconverteerde binaire getallen; het getoonde totaal blijft een float. Dit is een precieze boekhoudkeuze, geen implementatie van een veilig DP-systeem.
tiny = basic_composition(
[1.,2**-60],cap=1.)
print(tiny['epsilon_total'])
print(tiny['within_cap'])
# 1.0
# False
03Wat je nu kunt
- Je koppelt een vastgelegd burenmodel en publieke grenzen aan gevoeligheid en schaal.
- Je onderscheidt log-dichtheden, een analytische grens en een softwaregarantie.
- Je telt aangenomen budgetten samen en bewaart kleine bijdragen voor de capbeslissing.
Hierna kijk je naar fairness: welke groepsuitkomsten je vergelijkt, welke noemers daarbij horen en waarom één mooie maat nog niet alle relevante vragen beantwoordt.