26 lines
798 B
Python
26 lines
798 B
Python
"""Privacy-preserving statistics utilities.
|
|
|
|
This module provides a simple differential-privacy-friendly aggregate function
|
|
by adding Laplace noise to the sum. The actual privacy guarantees are simplified
|
|
for MVP purposes and should be upgraded for production.
|
|
"""
|
|
from __future__ import annotations
|
|
import random
|
|
import math
|
|
|
|
|
|
def laplace_noise(scale: float) -> float:
|
|
# Inverse transform sampling for Laplace(0, scale)
|
|
u = random.uniform(-0.5, 0.5)
|
|
return scale * math.copysign(1.0, u) * math.log(1 - 2 * abs(u))
|
|
|
|
|
|
def privacy_aggregate(values, epsilon: float) -> float:
|
|
if not values:
|
|
return 0.0
|
|
true_sum = sum(values)
|
|
# Simple Laplace mechanism; scale = 1/epsilon
|
|
scale = 1.0 / max(epsilon, 1e-9)
|
|
noise = laplace_noise(scale)
|
|
return true_sum + noise
|