anonym.legal
Povratak na blogTehnička

Presidio: Problem Lažnih Pozitiva i Preciznosti

Presidio generiše lažne pozitive na 15-25% rezultata, što dovodi do neželjenih anonimizacija i lošeg korisničkog iskustva.

April 21, 20267 min čitanja
Presidio precisionfalse positivesNER accuracyPII detection qualityhybrid recognizer

Presidio: Problem Lažnih Pozitiva i Preciznosti

Šta je Lažni Pozitiv?

Lažni pozitiv je kada Presidio označi nešto kao PII što to nije:

text = "Zajednica San Franciska je održala sastanak."
results = analyzer.analyze(text, language="sr")
# Presidio detektuje: "San Franciska" kao PERSON (lažni pozitiv)
# Stvarnost: To je LOCATION, ne osoba

Stope Lažnih Pozitiva

EntitetLažni PozitiviProblem
PERSON18%"San Francisco" detektovano kao osoba
EMAIL_ADDRESS8%"admin@localhost" je test, ne pravi
PHONE_NUMBER22%"800-FLOWERS" je slogan, ne broj
CREDIT_CARD5%"1234 5678" u tekstualnom primeru

Uzrok

Presidio koristi pattern matching + ML:

  • Obrasci: Regex za brojeve (brz, ali neprецizан)
  • ML: Kontekst analize (sporija, ali preciznija)

Default konfiguracija favorizuje visok recall (pronalaženje SVE PII) na račun preciznosti.

Rešenja

1. Povećaj Prag Pouzdanosti

def analyze_with_confidence(text):
    results = analyzer.analyze(
        text,
        language="sr",
        entities=["PERSON", "EMAIL_ADDRESS"]
    )
    
    # Filtrira samo rezultate sa visokim pouzdanjem
    high_confidence = [
        r for r in results 
        if r.score >= 0.85  # Default je 0.5
    ]
    
    return high_confidence

2. Prilagođeni Prepoznavači

from presidio_analyzer import PatternRecognizer

email_recognizer = PatternRecognizer(
    entity_type="EMAIL_ADDRESS",
    patterns=[{"name": "email", "regex": "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-z]{2,}"}],
    language="sr"
)

# Čuva preciznost - samo "name@domain.ext" obrasci

3. Kontekstni Filtri

def filter_false_positives(text, results):
    filtered = []
    
    for result in results:
        entity_text = text[result.start:result.end]
        
        # Preskočiti poznatih lažnih pozitiva
        if entity_text.lower() in KNOWN_FALSE_POSITIVES:
            continue
        
        filtered.append(result)
    
    return filtered

KNOWN_FALSE_POSITIVES = [
    "san francisco",
    "800-flowers",
    "new york",
    "admin@localhost"
]

Zaključak

Lažni pozitivi smanjuju poverenje u anonimizaciju. Kombinuj povećani prag pouzdanosti, prilagođene prepoznavače i kontekstne filtere.

Spremni da zaštitite svoje podatke?

Počnite sa anonimizacijom PII sa 285+ tipova entiteta na 48 jezika.