Comparison of Outlier Detection Algorithms on String Data

Deze thesis vergelijkt twee algoritmen voor het detecteren van afwijkende waarden in string-data: een aangepaste Local Outlier Factor-methode die gebruikmaakt van een gewogen Levenshtein-afstand, en een nieuwe aanpak gebaseerd op het afleiden van reguliere expressies, waarbij experimenten aantonen dat de reguliere expressie-methode effectiever is bij gestructureerde data en de LOF-methode beter presteert wanneer de afwijkingen zich kenmerken door een grotere bewerkingsafstand.

Philip Maus

Gepubliceerd 2026-03-13
📖 6 min leestijd🧠 Diepgaand

Each language version is independently generated for its own context, not a direct translation.

De Opdracht: De "Vreemdeling" vinden in een menigte

Stel je voor dat je een enorme stapel post hebt ontvangen. De meeste brieven zijn normale facturen of uitnodigingen. Maar ergens tussen die duizenden brieven zitten een paar rare briefjes: een brief die in het Chinees is geschreven terwijl de rest Nederlands is, of een brief die helemaal geen tekst heeft, maar alleen een tekening van een koe.

Het vinden van die rare briefjes noemen we uitreizerdetectie (of outlier detection). In de computerwereld is dit al lang een bekend probleem, maar meestal kijken computers alleen naar cijfers (zoals temperaturen of prijzen). Wat als de data niet uit cijfers bestaat, maar uit woorden en zinnen (zoals adresgegevens, logbestanden of e-mails)? Dat is waar deze bachelorproef van Philip Maus over gaat.

Hij heeft twee verschillende manieren bedacht om die "rare briefjes" in een stapel tekst te vinden. Laten we ze eens bekijken.


Manier 1: De "Burencheck" (De LOF-algoritme)

De eerste methode is gebaseerd op een idee dat we allemaal kennen: "Je bent wat je omgeving is."

Stel je voor dat je in een drukke stad loopt.

  • Als je in een dichte menigte staat, voel je je "normaal". Je hebt veel buren om je heen.
  • Als je echter alleen in een groot, leeg veld staat, voel je je opvallend. Je hebt geen buren.

De computer doet precies hetzelfde met tekst:

  1. De Meting: De computer kijkt naar twee teksten en vraagt zich af: "Hoeveel moeite kost het om tekst A om te vormen tot tekst B?" Dit heet de Levenshtein-afstand. Denk hierbij aan het veranderen van letters (bijvoorbeeld: "Huis" naar "Huisje" kost één stapje).
  2. De Buren: De computer kijkt naar de k dichtstbijzijnde buren van een tekst. Als een tekst heel ver weg staat van al zijn buren, is het een uitreizer.
  3. De Slimme Weegschaal: De auteur heeft een slimme toevoeging bedacht. Niet alle letters zijn even belangrijk.
    • Voorbeeld: Als je een cijfer vervangt door een ander cijfer (bijv. '1' naar '2'), is dat niet zo'n groot verschil. Maar als je een cijfer vervangt door een letter (bijv. '1' naar 'A'), is dat een enorme verandering.
    • De computer gebruikt een hiërarchie (een stamboom van tekens) om te weten dat '1' en '2' familie zijn, maar '1' en 'A' verre buren. Hierdoor wordt de meting veel nauwkeuriger.

Wanneer werkt dit goed?
Als de "normale" teksten allemaal ongeveer hetzelfde formaat hebben, maar de "rare" teksten er heel anders uitzien (bijvoorbeeld: een lange rij cijfers versus een korte zin).


Manier 2: De "Stempel" (De HiLRE-algoritme)

De tweede methode werkt heel anders. In plaats van te kijken naar buren, probeert deze computer een stempel (een patroon) te maken dat precies past op de "normale" brieven.

Stel je voor dat je duizenden brieven hebt met een adres.

  • De computer probeert een regel op te stellen, bijvoorbeeld: "Elk adres moet bestaan uit 5 cijfers."
  • Als een brief aan die regel voldoet, is hij normaal.
  • Als een brief niet aan die regel voldoet (bijvoorbeeld omdat er letters in staan), is het een uitreizer.

De slimme truc hier is dat de computer niet zomaar één regel kiest. Hij probeert duizenden mogelijke regels te maken en zoekt de beste regel.

  • Hij wil een regel die zo veel mogelijk normale brieven accepteert.
  • Maar hij wil ook dat de regel zo specifiek is dat hij rare brieven niet accepteert.
  • Hij gebruikt een parameter (een knopje) om te zeggen: "Ik wil dat mijn regel minstens 90% van de brieven accepteert, maar niet meer."

Wanneer werkt dit goed?
Als de normale data een heel strak patroon heeft. Bijvoorbeeld: alle telefoonnummers zijn precies 10 cijfers lang. De computer maakt dan een stempel voor "10 cijfers" en gooit alles wat anders is weg.


De Grote Wedstrijd: Wie wint er?

De auteur heeft deze twee methoden getest op echte data van Duitse ziekenhuizen (adressen, data, tijden). Het resultaat was verrassend: Het hangt af van de situatie.

Scenario A: De strakke structuur (Postcodes)

  • De situatie: Normale data zijn postcodes (altijd 5 cijfers). Uitreizers zijn stadsnamen (verschillende lengtes, letters).
  • De winnaar: De Stempel-methode (HiLRE).
  • Waarom? Omdat postcodes zo strak zijn, kon de computer een perfecte stempel maken ("5 cijfers"). Alles wat niet 5 cijfers was, viel er direct uit. De "Burencheck" had het iets moeilijker, omdat sommige stadsnamen ook 5 letters lang zijn en daardoor verward werden met postcodes.

Scenario B: De chaotische structuur (Stadsnamen)

  • De situatie: Normale data zijn stadsnamen (Bonn, Frankfurt, München...). Uitreizers zijn postcodes.
  • De verliezer: De Stempel-methode.
  • Waarom? Stadsnamen zijn chaotisch. Sommige zijn kort, sommige lang, sommige met haakjes. De computer kon geen enkele regel bedenken die alle stadsnamen dekte zonder ook de postcodes erbij te halen. De stempel was te vaag.
  • De winnaar: De Burencheck (LOF).
  • Waarom? Omdat de postcodes (de uitreizers) vaak een heel ander "gevoel" hadden dan de stadsnamen, merkte de burencheck dat ze niet in de groep pasten, zelfs zonder een strakke regel.

Scenario C: De lengte-verschillen (Huisnummers)

  • De situatie: Normale data zijn postcodes. Uitreizers zijn huisnummers (soms lang, soms kort, soms met letters).
  • De winnaar: De Burencheck.
  • Waarom? De uitreizers hadden vaak dezelfde tekens (cijfers) maar een heel andere lengte. De burencheck zag dit verschil in "afstand" heel goed. De stempel-methode raakte in de war en dacht soms dat alles raar was, of niets.

Conclusie: Geen "één maat voor alles"

De kernboodschap van dit werkstuk is simpel: Er is geen magische knop die altijd werkt.

  • Als je data een strak patroon heeft (zoals een barcode of een datum), gebruik dan de Stempel-methode. Die is dan super snel en precies.
  • Als je data verschilt in structuur of lengte, maar wel op elkaar lijkt, gebruik dan de Burencheck. Die is beter in het voelen van de "atmosfeer" van de data.

Philip Maus heeft laten zien dat we computers beter kunnen leren om niet alleen naar cijfers te kijken, maar ook naar de vorm en structuur van woorden. Dit helpt bijvoorbeeld bij het opschonen van databases of het vinden van hackers die vreemde tekens in systeemlogboeken zetten.

Kort samengevat:

  • LOF (Burencheck): Kijkt naar wie je vrienden zijn. Als je geen vrienden hebt in de buurt, ben je raar.
  • HiLRE (Stempel): Kijkt of je in het juiste kostuum zit. Als je kostuum niet past bij het patroon, ben je een uitreizer.

Beide methoden zijn nuttig, maar je moet kiezen welke je gebruikt op basis van hoe je "menigte" eruitziet.