{"id":15399,"date":"2020-11-05T13:11:00","date_gmt":"2020-11-05T13:11:00","guid":{"rendered":"https:\/\/timi.eu\/?p=15399"},"modified":"2021-06-07T13:51:24","modified_gmt":"2021-06-07T13:51:24","slug":"fuzzy-matching-4-methoden-om-een-koppeling-te-makken-in-anatella","status":"publish","type":"post","link":"https:\/\/timi.eu\/nl\/blog-nl\/fuzzy-matching-4-methoden-om-een-koppeling-te-makken-in-anatella\/","title":{"rendered":"Fuzzy matching: 4 methoden om een koppeling te makken in Anatella"},"content":{"rendered":"\n<div\n\t class=\"wpml-ls-statics-shortcode_actions wpml-ls wpml-ls-legacy-dropdown js-wpml-ls-legacy-dropdown\">\n\t<ul>\n\n\t\t<li tabindex=\"0\" class=\"wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-nl wpml-ls-current-language wpml-ls-item-legacy-dropdown\">\n\t\t\t<a href=\"#\" class=\"js-wpml-ls-item-toggle wpml-ls-item-toggle\">\n                                                    <img\n            class=\"wpml-ls-flag\"\n            src=\"https:\/\/timi.eu\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/nl.png\"\n            alt=\"\"\n            width=18\n            height=12\n    \/><span class=\"wpml-ls-native\">Nederlands<\/span><\/a>\n\n\t\t\t<ul class=\"wpml-ls-sub-menu\">\n\t\t\t\t\n\t\t\t\t\t<li class=\"wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-en wpml-ls-first-item\">\n\t\t\t\t\t\t<a href=\"https:\/\/timi.eu\" class=\"wpml-ls-link\">\n                                                                <img\n            class=\"wpml-ls-flag\"\n            src=\"https:\/\/timi.eu\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/en.png\"\n            alt=\"\"\n            width=18\n            height=12\n    \/><span class=\"wpml-ls-display\">Engels<\/span><\/a>\n\t\t\t\t\t<\/li>\n\n\t\t\t\t\n\t\t\t\t\t<li class=\"wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-fr\">\n\t\t\t\t\t\t<a href=\"https:\/\/timi.eu\/fr\/\" class=\"wpml-ls-link\">\n                                                                <img\n            class=\"wpml-ls-flag\"\n            src=\"https:\/\/timi.eu\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/fr.png\"\n            alt=\"\"\n            width=18\n            height=12\n    \/><span class=\"wpml-ls-display\">Frans<\/span><\/a>\n\t\t\t\t\t<\/li>\n\n\t\t\t\t\n\t\t\t\t\t<li class=\"wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-es\">\n\t\t\t\t\t\t<a href=\"https:\/\/timi.eu\/es\/\" class=\"wpml-ls-link\">\n                                                                <img\n            class=\"wpml-ls-flag\"\n            src=\"https:\/\/timi.eu\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/es.png\"\n            alt=\"\"\n            width=18\n            height=12\n    \/><span class=\"wpml-ls-display\">Spaans<\/span><\/a>\n\t\t\t\t\t<\/li>\n\n\t\t\t\t\n\t\t\t\t\t<li class=\"wpml-ls-slot-shortcode_actions wpml-ls-item wpml-ls-item-ru wpml-ls-last-item\">\n\t\t\t\t\t\t<a href=\"https:\/\/timi.eu\/ru\/\" class=\"wpml-ls-link\">\n                                                                <img\n            class=\"wpml-ls-flag\"\n            src=\"https:\/\/timi.eu\/wp-content\/plugins\/sitepress-multilingual-cms\/res\/flags\/ru.png\"\n            alt=\"\"\n            width=18\n            height=12\n    \/><span class=\"wpml-ls-display\">Russisch<\/span><\/a>\n\t\t\t\t\t<\/li>\n\n\t\t\t\t\t\t\t<\/ul>\n\n\t\t<\/li>\n\n\t<\/ul>\n<\/div>\n\n<h1>Fuzzy matching: 4 methoden om een koppeling te makken<\/h1>\n<p>In een vorig artikel liet ik u kennismaken met een oplossing voor een fuzzy matching tussen 2 verschillende tabellen. Daarin vergeleek ik 2 ETL-oplossingen (Extract Transform Load). Tableau Prep Builder gaf niet het gewenste resultaat en daarom wendde ik me tot Anatella. In het artikel van vandaag onderzoek ik de verschillende algoritmes van Fuzzy Matching die beschikbaar zijn in deze tool evenals de resultaten ervan. Zoals u zult merken, komt \u00e9\u00e9n algoritme eruit als winnaar.<\/p>\n<hr class=\"clearfix\">\n<h2><img decoding=\"async\" class=\"aligncenter size-large wp-image-13404\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner-1024x341.jpg\" alt=\"\" width=\"600\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner-1024x341.jpg 1024w, https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner-600x200.jpg 600w, https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner-300x100.jpg 300w, https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner-768x256.jpg 768w, https:\/\/timi.eu\/wp-content\/uploads\/2021\/04\/introduction-banner.jpg 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>Inleiding<\/h2>\n<p>Wanneer u een koppeling wilt maken tussen meerdere tabellen zijn er 2 mogelijkheden. Ofwel volgt uw verbindingssleutel exact dezelfde benamingen in beide tabellen, ofwel niet. Als u in het gezegende geval van de 1e situatie bent, ga dan gerust door met wat u bezig was. Dit artikel zal u dan niets bijbrengen. Als u daarentegen in het tweede geval  zit (of gewoon nieuwsgierig bent), wens ik u veel leesplezier.<\/p>\n<hr>\n<h2><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-14498\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/algorithme-banner-470x157-1.jpg\" alt=\"\" width=\"470\" height=\"157\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/algorithme-banner-470x157-1.jpg 470w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/algorithme-banner-470x157-1-300x100.jpg 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/>Fuzzy matching algoritmes<\/h2>\n<p>In de casestudy die ik voorstel, wordt fuzzy matching uitgevoerd op een verbindingssleutel met landnamen erin.<br \/>\nEr bestaan heel wat methoden om de gelijkenis tussen 2 entiteiten te berekenen. Wat ik mooi vind aan Anatella is dat het je, in tegenstelling tot andere ETL\u2019s, de keuze biedt tussen 4 methoden:<\/p>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Damerau%E2%80%93Levenshtein_distance\" target=\"_blank\" rel=\"noopener noreferrer\">Damereau Levenshtein-afstand<\/a><\/li>\n<li>Damereau Levenshtein-gelijkenis (hetzelfde als de afstand, zelfs tussen 0 en 1)<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Jaro%E2%80%93Winkler_distance\" target=\"_blank\" rel=\"noopener noreferrer\">Jaro-Winkler-gelijkenis<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/S%C3%B8rensen%E2%80%93Dice_coefficient\" target=\"_blank\" rel=\"noopener noreferrer\">Dice-gelijkenis<\/a><\/li>\n<\/ul>\n<p>Er bestaan natuurlijk andere methoden om de overeenkomst te berekenen.&nbsp;<a href=\"https:\/\/www.joyofdata.de\/blog\/comparison-of-string-distance-algorithms\/\" target=\"_blank\" rel=\"noopener noreferrer\">Raffael Vogler<\/a>&nbsp;(Engelse site) geeft een goed overzicht van de verschillende technieken die beschikbaar zijn in het \u201cstringdist\u201d-pakket voor R.<\/p>\n<h3 style=\"padding-left: 40px;\">Jaro-Winkler-gelijkenis<\/h3>\n<p style=\"padding-left: 40px;\">Deze methode dateert uit 1999 en vloeit voort uit de methode van Jaro (1989). De verkregen score varieert tussen 0 en 1 en wordt berekend door de overeenkomstige karakters in de ene string en vervolgens in de andere string te vergelijken, rekening houdend met de karaktertransposities.<\/p>\n<h3 style=\"padding-left: 40px;\">Damereau Levenshtein-afstand<\/h3>\n<p style=\"padding-left: 40px;\">Dit is een oude methode (1964) die het mogelijk maakt om het aantal stappen te berekenen dat nodig is om een string a om te zetten in een string b. De toegestane bewerkingen zijn verwijderen, invoegen, vervangen van een enkel karakter, transpositie van 2 aangrenzende karakters. De berekende afstand is dus een geheel getal dat overeenkomt met het aantal stappen dat nodig is voor de transformatie (0 als strings a en b identiek zijn).<\/p>\n<h3 style=\"padding-left: 40px;\">DICE-gelijkenis<\/h3>\n<p style=\"padding-left: 40px;\">Ook dit is een oude methode (1948). Ze bestaat uit een eenvoudige vergelijking van de cijfers. De co\u00ebffici\u00ebnt ligt dicht bij de Jaccard-index. Ik verwijs u naar de Wikipedia voor enkele veelzeggende voorbeelden.<\/p>\n<hr class=\"clearfix\">\n<h2><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-14510\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/results-banner-470x157-1.jpg\" alt=\"\" width=\"470\" height=\"157\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/results-banner-470x157-1.jpg 470w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/results-banner-470x157-1-300x100.jpg 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/>De resultaten<\/h2>\n<p>Hieronder de resultaten. Ik herinner u eraan dat deze resultaten niet in elke situatie kunnen worden omgezet. Elk geval moet vooraf worden onderzocht om de meest geschikte methode te vinden. In dit geval hebben we het over fuzzy matching tussen landnamen die overeenkomen met verschillende benamingen. Ik verwijs u naar mijn artikel van vorige week voor de lijst.<\/p>\n<p>Om de resultaten van de verschillende algoritmen te kunnen vergelijken heb ik gewoon de stroom in de ETL (Anatella) lichtjes aangepast om de 4 voorgestelde \u201cfuzzy joints\u201d te kunnen vergelijken. Het proces is op onderstaand diagram in blauw weergegeven (klik erop om het te vergroten).<\/p>\n<p><a class=\"single-popup-image\" href=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-14504\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-1024x382.jpg\" alt=\"\" width=\"1024\" height=\"382\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-1024x382.jpg 1024w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-600x224.jpg 600w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-300x112.jpg 300w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-768x287.jpg 768w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1-1536x573.jpg 1536w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-1.jpg 2041w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Om het lezen te vergemakkelijken, heb ik de resultaten ge\u00ebxporteerd naar een Excel-bestand (<a href=\"https:\/\/www.intotheminds.com\/blog\/app\/uploads\/comparison-agorithms-fuzzy-matching.xlsx\" target=\"_blank\" rel=\"noopener noreferrer\">hier<\/a> te downloaden).<\/p>\n<p>De resultaten zijn soms verrassend.<\/p>\n<p><a class=\"single-popup-image\" href=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-14507\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results-1024x528.jpg\" alt=\"\" width=\"1024\" height=\"528\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results-1024x528.jpg 1024w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results-600x310.jpg 600w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results-300x155.jpg 300w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results-768x396.jpg 768w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/fuzzy-matching-comparison-anatella-results.jpg 1180w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Methode 2 lijkt de voorkeur te hebben voor Zimbabwe en verschilt van methode 1 (a priori dichtbij). De fouten in classificatie zijn soms groot (South Sudan \/ South Korea).<\/p>\n<p>Methode 3 (Jaro Winkler) werkt iets beter, maar nog altijd met te veel foute classificaties. Het heeft wel een groot voordeel (zie volgende paragraaf).<\/p>\n<p>Methode 4 (Dice-overeenkomst) geeft de beste resultaten. De slechte classificatie van Hongkong (zie vermelding in de referentietabel) kan te wijten zijn aan voor de hand liggende redenen. De fout met \u201cGambia\u201d is gemakkelijk te verklaren door de digrammatische benadering van de Dice-Sorensen methode.<\/p>\n<hr class=\"clearfix\">\n<h2>Definitie van een drempelco\u00ebffici\u00ebnt<\/h2>\n<p>Om te voorkomen dat er fout-positieve of fout-negatieve resultaten ontstaan, is het nuttig om een drempelwaardeco\u00ebffici\u00ebnt te bepalen voor het verwerpen van resultaten die handmatig moeten worden verwerkt.<\/p>\n<p>Voor de methode van Damereau-Levenshtein (methode 1 en 2) zien we dat deze aanpak niet erg effici\u00ebnt is, omdat het algoritme valse positieven geeft met lage berekende afstanden (zie Bahamas, Gambia, North Macedonia, South Sudan).<\/p>\n<p>Voor Dice zou het defini\u00ebren van een drempel rond 0,5 de 2 vals-positieven niet hebben gedetecteerd en zou het ook een vals negatief hebben opgeleverd (Congo).<\/p>\n<p>Voor methode 3 zou het instellen van de drempel op 0,8 alle gemiste overeenkomsten hebben ge\u00eblimineerd, maar zou eveneens een fout-negatief hebben opgeleverd (Trinidad en Tobago).<\/p>\n<hr class=\"clearfix\">\n<h2><a class=\"single-popup-image\" href=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/conclusion-banner-470x116-1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-14501\" src=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/conclusion-banner-470x116-1.jpg\" alt=\"\" width=\"470\" height=\"116\" srcset=\"https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/conclusion-banner-470x116-1.jpg 470w, https:\/\/timi.eu\/wp-content\/uploads\/2020\/11\/conclusion-banner-470x116-1-300x74.jpg 300w\" sizes=\"(max-width: 470px) 100vw, 470px\" \/><\/a>Conclusie<\/h2>\n<p>De methode van Dice (ook wel de methode van Sorensen genoemd) levert in deze oefening de beste resultaten op om een fuzzy matching tussen landnamen te realiseren. De Jaro-Winkler methode maakt het mogelijk om een drempelwaarde van 0,8 te defini\u00ebren, waardoor de niet overeenkomende resultaten nauwkeurig worden verwijderd.<\/p>\n<p style=\"margin-top: 30px;\">Source: <a href=\"https:\/\/www.intotheminds.com\/blog\/nl\/fuzzy-matching-vergelijking-van-4-methoden-om-een-koppeling-te-makken\/\" target=\"_blank\" rel=\"noopener\">IntoTheMind<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Ontdek de verschillende Fuzzy Matching algoritmes die beschikbaar zijn in Anatella en hun prestaties.","protected":false},"author":1,"featured_media":15414,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[736,735],"tags":[746,747,748,749],"_links":{"self":[{"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/posts\/15399"}],"collection":[{"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/comments?post=15399"}],"version-history":[{"count":5,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/posts\/15399\/revisions"}],"predecessor-version":[{"id":15435,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/posts\/15399\/revisions\/15435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/media\/15414"}],"wp:attachment":[{"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/media?parent=15399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/categories?post=15399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/timi.eu\/nl\/wp-json\/wp\/v2\/tags?post=15399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}