„Deduplikacja danych w systemach typu CRM”
Transkrypt
„Deduplikacja danych w systemach typu CRM”
Marcin Żyła Elbląg dn. 30.03.2008 Mątawy 59 86-170 Nowe „Deduplikacja danych w systemach typu CRM” W dzisiejszym świecie każda firma opiera się na kontaktach z dostawcami i odbiorcami. Większe organizacje posiadają swoich przedstawicieli poza siedzibą firmy (często na całym świecie) i to właśnie dzięki nim te firmy mają zamówienia produkcyjne, czyli istnieją. Taka sytuacja przyczynia się do powstawania systemów typu Customer Relationship Management (zwanych dalej CRM). CRM’u nie można zdefiniować jako pojedynczego narzędzia służącego do usprawnienia pracy w firmie. Jest to „zestaw narzędzi służący do zarządzania kontaktami z klientami”1, które możemy wykorzystywać do kontaktów z kontrahentami. Systemy zarządzające kontaktami z organizacjami powiązanymi obsługujące około 400 kontaktów w 60 firmach 2 są bezustannie narażone na błędne dane, które jest trudno wykryć normalnemu użytkownikowi. Problem ten nie jest znaczący przy małej ilości rekordów z racji łatwości zarządzania, jednak powiększa się wraz z ilością danych w systemie. Przykłady błędnych danych możemy podzielić na następujące grupy: błędy wprowadzania danych – literówki (np. „MarIT” i „MarIR”) bądź spacje w nazwach (np. „MarIT” i „Mar IT”) nieustandaryzowany sposób wprowadzania danych – nazwy ulic (np. „ul Morska” i „ul.Morska” lub „Morska”), numery telefonów (np. „12-34-56-789” i „(+12)2345678”) albo informacje o rodzaju spółki (np. „MarIT” i „MarIT sp zo.o”) niedbałość – dodanie nowego rekordu mimo ostrzeżenia systemowego (o ile system ostrzeżeń istnieje) 3 Występowanie w systemie dwóch firm bądź kontaktów, których detale są podobne np. w bazie danych firmy „ChromeCRM” może spowodować, że dane szczegółowe, raporty bądź 1 http://pl.wikipedia.org/wiki/Zarządzanie_relacjami_z_klientami źródło: przybliżona ilość osób i firm korzystających z „ChromeCRM” 3 według własnych doświadczeń w firmie „ChromeCRM” 2 1 relacje do innych encji w systemie będą nieaktualne. Operacja w czasie której mogą pojawić się duplikaty, czyli rekordy w systemie zakwalifikowane jako podobne, jest importowanie danych z innej tabeli 4 do naszego systemu. Taka czynność jest wykonywana podczas zmiany dostawcy CRM’a lub gdy firma pozyska nowego kontrahenta. Przekopiowanie danych wykonane przez system zawsze jest bezbłędne, w przeciwieństwie do przepisywania przez człowieka, gdzie literówki mogą się pojawić w każdym z przepisanych wyrazów. Wykrywanie duplikatów (zwane dalej deduplikacją) jest kłopotliwe dla wsparcia ze strony producenta, gdyż nie zna on wszystkich kontrahentów, a osoby odpowiedzialne za wprowadzanie firm powiązanych, zwyczajnie nie mają na to czasu lub nie przywiązują do tego uwagi 5. W takich przypadkach, aby zapobiec nieporozumieniom, posiadanie w CRM’ie deduplikatora danych (jako modułu systemu, osobnego programu bądź dodatkowej strony internetowej działającej na zasadzie np. Web Service 6) znacznie upraszcza wyszukiwanie rekordów podobnych i wybranie rekordu głównego. Proces deduplikacji może odbywać się na wszelakich typach baz danych niezależnie od typu kolumny 8 7 i porównującej (w tabeli importowanej) i porównywanej (w tabeli do której będą kopiowane dane). Ważne jest jednak, aby wartości z kolumn można było doprowadzić do identycznego formatu danych pozwalającego na porównywanie, najczęściej jest to nvarchar z racji wsparcia wielu silników baz danych (np. SQL i jego pochodne). Proces samego porównywania jest podobny w każdym z deduplikatorów danych i w zasadzie różni się tylko szczegółami (wygląd interfejsu, proces poruszania się pomiędzy etapami). Operacja na danych zaczyna się nawiązaniem połączenia z bazą danych (lub bazami, jeśli importujemy dane z innego systemu) i wybraniem encji źródłowej i docelowej. Z zainicjowanej bazy wybieramy kolumny do porównania, gdyż system nie powinien filtrować po danych, które są nieistotne (np. dane relacyjne, czy też ostatni modyfikujący użytkownik). Wszystkie kolumny z pierwszej i drugiej bazy danych są następnie mapowane, czyli użytkownik wybiera, która kolumna z tabeli zewnętrznej odpowiada kolumnie w tabeli docelowej. Jeśli kolumna w tabeli zewnętrznej nie zostanie zmapowana, jej dane nie będą kopiowane do tabeli docelowej. Kolejnym krokiem jest wykrywanie duplikatów, podczas którego system porównuje dane i informuje użytkownika, które rekordy są do siebie podobne, oraz prosi użytkownika o wybranie wierszy podlegających deduplikacji i wiersza, który 4 czyli tabeli zawierającej dane szczegółowe tej samej encji według własnych doświadczeń w firmie „ChromeCRM” 6 Web Sernice – usługa sieciowa pozwalająca na przesyłanie danych za pomocą protokołu SOAP (protokół przesyłania danych w języku XML pozwalający na zdalny dostęp do obiektów), głównie wykorzystywana na platformie „Microsoft .Net” 7 np. MSSQL, MySQL, XML 8 typy kolumn w tabeli które mogą zawierać litery np. varchar, nvarchar, ntext 5 2 zostanie niezmieniony (głównego). Proces kończy się usunięciem wierszy podlegających deduplikacji (oprócz wiersza głównego). Jeśli wybrany wiersz główny znajduje się w zewnętrznej tabeli, wtedy jest kopiowany do tabeli docelowej. Przeszukiwanie danych z reguły odbywa się na poziomie serwera aplikacji, czyli na danych bezpośrednio odczytanych z bazy. Jednak niekiedy deduplikacja zaczyna się już na poziomie bazy danych, a wtedy ostateczne wykrywanie duplikatów następuje na wstępnie przefiltrowanych danych przekazanych do aplikacji (sposób połączenia i przekazania danych jest bez znaczenia dla deduplikatora danych). Do znajdywania duplikatów wykorzystywane są słowniki fonetyczne, gramatyczne, ortograficzne i predefiniowane (czyli takie, w których użytkownik sam definiuje jakie słowa, lub ich część są do siebie podobne i mają być interpretowane jako identyczne). Wykorzystywany słownik może być w dowolnym formacie danych kompatybilnym z danymi docelowymi (np. MSSQL i XML). Poza słownikami deduplikacja opiera się na algorytmach, które obliczają czy ponad połowa znaków w porównywanych wyrazach następuje po sobie (prawdopodobieństwo deduplikatu). Proces wyszukiwania duplikatów w przypadku deduplikacji na 1 bazie danych polega na porównywaniu wierszy na zasadzie każdy z każdym kolejnym wierszem (wartości do porównania są pobierane z wcześniej wybranych kolumn). Jeśli deduplikacja dotyczy importu rekordów z zewnętrznej bazy danych, kolejne wartości z importowanego wiersza są porównywane z wszystkimi w tabeli docelowej. Jednakże w większości deduplikatorów umożliwiających importowanie danych z zewnętrznej bazy danych, dane zewnętrzne są kopiowane bezpośrednio do tabeli docelowej i na tabeli wynikowej jest przeprowadzany proces deduplikacji. Obliczenia prawdopodobieństwa duplikatu polegają na porównywaniu dwóch ciągów znaków pod względem ilości identycznych fraz 9 ustawionych w odpowiedniej kolejności. Porównywanie ciągów znaków jest zależne od typu zastosowanego słownika bądź algorytmów, gdyż mogą one zmienić wyraz pod wieloma względami (gramatycznie, fonetycznie, lub mogą zostać zastąpione części wyrazu). Słownik fonetyczny porównuje całe wyrazy w krotce, słownik gramatyczny porównuje wybrane litery, a słownik predefiniowany bada złożenia kilku liter (w zależności od ilości zdefiniowanych), niezależnie od miejsca w wyrazie. Po zdefiniowaniu źródłowego i odpowiadającego mu ciągu znaków (np. “x” i “ks”), algorytm wykorzystujący słownik predefiniowany podczas porównywania zamienia(w wyrazie z wiersza głównego) znaleziony ciąg znaków (np. „max”) na jego odpowiednik (np. „maks”) i porównuje oba wyrazy z potencjalnym duplikatem. Algorytmy porównują wyrazy pod kątem identycznych liter następujących po sobie. Ważne jest, aby porównywane litery 9 ciągi znaków w wyrazie (np. w wyrazie „Marcin” jest fraza „rci”) 3 następowały po sobie, ponieważ porównywanie losowych liter w wyrazie nie ma sensu. Wyraz „Mars” i „Sam” nie są duplikatami pomimo, że pierwszy wyraz zawiera wszystkie litery wyrazu drugiego. Deduplikator nie powinien oznaczyć tych wyrazów jako duplikatów, gdyż nie ma podobnych złożeń liter w obydwu wyrazach. Wielkość liter nie jest brana pod uwagę gdyż „MarIT” oraz „marit” i tak zostaną wykryte jako duplikat. Za duplikat są uznawane wyrazy które posiadają ponad połowę liter 10 podobnych z zachowaniem kolejności ich występowania. Ilość wystąpień liter podobnych (z zachowaniem kolejności) jest obliczana na podstawie miejsca występowania litery w porównywanym wyrazie (np. „kwoka”) względem miejsca występowania w pierwszym wyrazie (np. „krowa”). Wyraz „krowa” posiada trzy wspólne litery z wyrazem „kwoka”, które następują po sobie. Litery „k”, „o” i „a” są na tej samej pozycji w obydwu wyrazach (odpowiednio pierwszej, trzeciej i piątej). Litera „w” mimo że występuje na miejscu czwartym w pierwszym wyrazie i na miejscu drugim w wyrazie porównywanym, nie jest zaliczana do liter podobnych. W pierwszym i drugim wyrazie występuje identyczna litera na miejscu trzecim, przez co litera “w” nie jest kolejną, a poprzednią względem “o” w wyrazie drugim 11 . Samo przeszukiwanie z racji swojego skomplikowania nigdy nie daje nam pewności, że rekordy zwrócone są duplikatami. Przykładem danych podobnych nie będących duplikatami mogą być nazwy firm „MarIT” 12 oraz „MarWit” 13. Podobieństwo tych nazw zdecydowanie sugeruje duplikat, ponieważ różnią się tylko jedną literą w środku wyrazu, co może być zakwalifikowane jako literówka. Poza tym algorytm porównujący może wykryć podobieństwo na podstawie identyczności 3 pierwszych liter („Mar”) oraz 2 ostatnich(„it”). W takich przypadkach użytkownik kontrolujący proces deduplikacji nie może wybrać takiego rekordu do zdeduplikowania (kopiowanie danych relacyjnych i usunięcie rekordu z bazy danych). Po porównaniu wszystkich kolumn obliczana jest ilość kolumn podobnych i dzielona przez całkowitą ilość kolumn. W bardziej zaawansowanych deduplikatorach danych użytkownik może sam ustawić wagę poszczególnej kolumny („system wagowy”)14 oraz procentową wartość od której stosunek duplikatów i ilości kolumn będzie zatwierdzany jako duplikat (zwanej dalej „case sensitive”). W systemach nie dostosowanych do zmian parametrów porównywania przez użytkownika waga każdej z kolumn jest równa (nie brana pod uwagę), a stosunek kolumn posiadających duplikat do całkowitej ilości kolumn wynosi 50% (więc jeśli połowa kolumn jest oznaczona jako duplikat, cały wiersz także jest duplikatem). W takim przypadku każda z kolumn oznaczona jako duplikat jest przemnażana przez swoją wagę. Suma kolumn będących 10 liczba ta jest pobierana z wyrazu posiadającego więcej liter z porównywanej pary jeśli nie byłoby litery „o” w obydwu wyrazach, litera „w” byłaby podobna 12 „MarIT” – firma zajmująca się produkcją oprogramowania 13 „MarWit” – firma zajmująca się produkcją soków 14 nie muszą to być wartości całkowite dla każdej z kolumn, jednak są najczęściej stosowane 11 4 duplikatami wyliczana jest z przemnożonych wartości wagowych, a suma ilości kolumn jest sumą wag dla poszczególnych kolumn w wybranej tabeli. Przykładowo, jeśli posiadamy w systemie 3 kolumny i nadamy im odpowiednio wagi: 2, 5, 2 i „case sansitive” równy 50%, wtedy suma kolumn będzie równa 9, a za duplikat będą uznawane wiersze, które będą posiadały sumę kolumn oznaczonych jako duplikaty (przemnożonych przez wagę kolumny) równą 5 lub więcej. Jeśli wyliczony stosunek jest równy bądź większy od „case sensitive” system zatwierdza wiersze jako duplikaty. Na podstawie uzyskanej wiedzy możemy przeprowadzić symulację deduplikacji danych np. na tabeli o nazwie „tKontakty”, zawierającej dane szczegółowe osób powiązanych z firmą „Marit”. Tabela składa się z kolumn ID (będącej kluczem głównym)(integer), Imię(nvarchar(255)), Nazwisko(nvarchar(255)), Adres(nvarchar(255)), Firma(nvarchar(255)). Dane w tabeli są następujące(kolejne krotki są oddzielone tabulacjami): 1 Max 2 3 Kolonko ul.Morska Gdynia MarWit Maks Kolanko Mórska Gdynis Marit Marcin Gdynia MarIT Konko Proces deduplikacji rozpoczyna się nawiązaniem połączenia z bazą danych i pobraniem danych z tabeli „tKontakt”. W następnym kroku są wybierane kolumny z których dane będą podlegały porównaniu. W tym przypadku jedynie kolumna „ID” nie może zostać porównana gdyż jest kluczem głównym i posiada jedynie wartości liczbowe. Pozostałe kolumny zawierają dość istotne dane szczegółowe, więc powinny zostać wybrane. Po wyborze kolumn następuje automatyczne wyszukiwanie duplikatów, a użytkownik otrzymuje gotowy wynik. Podczas deduplikacji będzie wykorzystany słownik predefiniowany, fonetyczny i gramatyczny. W pierwszym kroku wczytany zostaje pierwszy wiersz(główny), oraz kolejny (czyli z ID równym 2). Porównywane są wartości tylko z wybranych kolumn, więc kolumna ID jest pominięta. Pierwszymi wartościami do porównania są „Max” i „Maks”. Jeżeli w słowniku predefiniowanym posiadamy wpis, że odpowiednikiem „x” jest „ks”, po zamianie ciągu znaków w słowie głównym będą to identyczne wyrazy. Koleją kolumną jest „Nazwisko”, z której pobrane są wyrazy „Kolonko” i „Kolanko”. Żaden z słowników nie jest w stanie stwierdzić podobieństwa, ponieważ porównywane wyrazy nie mają błędów ortograficznych, brzmią inaczej, a zdefiniować w słowniku predefiniowanym, że „o” możemy zamienić na „a” jest bardzo niedobrze, gdyż podmiana będzie stosowana przy każdym porównaniu. W tym przypadku duplikat zostanie wykryty przez algorytm, gdyż są 2 takie same ciągi znaków w obydwu wyrazach („Kol” i „nko”). W siedmioliterowym wyrazie sześć liter jest zgodnych z regułą porównywania (litery są identyczne i następują po sobie), więc 5 system oznaczy tę parę wyrazów jako duplikat. Wartości z kolumny „Ulica” również będą oznaczone jako duplikat na takiej samej podstawie co kolumna poprzednia, jednak dodatkowo powinny istnieć wpisy w słowniku predefiniowanym, że „ul.” to „ul”, oraz „.ul.” to „” i „ul” to „”. Jeśli użytkownik nie chce, żeby w ten sposób odbywało się, takich wpisów być nie musi, jednak to jest bardzo częsty błąd biorący się z nieustandaryzowanego sposobu wprowadzania danych. Ostatnim porównaniem w tej parze wierszy są dane z kolumny „Firma”, gdzie znajdują się wpisy „MarWit” oraz „Marit”. Proces wykrycia duplikatu na tej parze wyrazów był wyjaśniony wcześniej. W tej parze wierszy wszystkie kolumny zostały uznane jako duplikaty, więc system oznaczy ten wiersz jako duplikat. Następnie wczytany wiersz o ID 3. Podczas porównania wiersza głównego z aktualnie odczytanym wierszem system porównuje pary ciągów znaków „Max” - „Marcin”, „Kolonko” – „Konko”, „ul Morska Gdynia” – „Gdynia” i „MarWit” – „MarIT”. Podczas porównywania jako duplikat będą oznaczone jedynie pary z kolumny „Nazwisko” (z racji 4 identycznych liter na 7 występujących), oraz „Firma” (tylko jedna litera inna). Wartości z kolumn „Imię” nie są duplikatami (posiadają 2 identyczne na 6 występujących), natomiast problem kolumny „Ulica” jest bardziej skomplikowany, ponieważ przy zastosowanym słowniku predefiniowanym („ul” to „”) i algorytmie porównującym otrzymamy podobieństwo rzędu 50% (6 liter identycznych na 12 występujących), jednak duplikat musi posiadać ponad połowę liter identycznych, więc ta para ciągów nie spełnia tego wymagania. Po podsumowaniu system otrzymał 50% zgodności w wierszach. Jeśli system nie posiada systemu priorytetowania kolumn (systemu wagowego), porównywane wiersze zostaną oznaczone jako duplikaty (w określaniu duplikatu wiersza stosunek kolumn podobnych do całkowitej ilości musi wynosić 50% lub więcej). Tabela „tKontakt” nie posiada więcej rekordów, więc wczytany zostaje kolejny rekord po głównym (w tym przypadku z ID równym 2) i ten wiersz staje się głównym(od tej chwili do niego będziemy porównywać). Jest to przedostatni rekord w naszej bazie danych, więc jest to ostatnie porównanie. W tym przypadku wiersz główny zawiera dane: „Maks”, „Kolanko”, „Mórska Gdynis”, „Marit”, a wiersz porównywany: ”Marcin”, „Konko”, „Gdynia”, „MarIT”. Wiersze te także zostaną uznane za duplikat, gdyż posiadają 2 kolumny oznaczone jako duplikat („Nazwisko” oraz „Firma”). Po zakończeniu porównywania danych system zawiera wyniki, które użytkownik musi zweryfikować. Użytkownik jest poinformowany o wyniku pierwszego porównania uznanego jako duplikat i proszony o zatwierdzenie słuszności. Wyniki najczęściej są przedstawiane użytkownikowi w tabelce, która zawiera kolumny po których przebiegał proces deduplikacji, oraz 2 dodatkowe, w których można zdefiniować czy dany wiersz będzie 6 brany pod uwagę i który nie jest duplikatem, a właściwym rekordem (nie zawsze jest to pierwszy rekord, więc taka opcja jest niezbędna). Podczas pierwszego porównania, wszystkie kolejne wiersze zostały uznane jako duplikaty, więc one zostaną wyświetlone. Załóżmy, że wiersz pierwszy oraz trzeci zawiera prawidłowe dane kontrahentów. W takim przypadku, w pierwszej z dodatkowych kolumn użytkownik wybiera pierwszy i drugi wiersz (tylko one będą brano pod uwagę), a w drugiej dodatkowej kolumnie wiersz pierwszy jako ten, który zawiera prawidłowe dane. Po zatwierdzeniu wyboru system pozostawi rekord pierwszy i trzeci niezmieniony, a rekord drugi zostaje usunięty. Drugi etap porównywania (w którym porównywanie dotyczyło wiersza o ID = 2) zakończył się oznaczeniem wiersza o ID =3 jako duplikat. System przed wyświetleniem danych użytkownikowi sprawdza, czy ta para rekordów istnieje w bazie danych. W poprzednim kroku wiersz drugi został usunięty, więc teraz wyświetlony jest tylko jeden wiersz (o ID równym 3). W takim przypadku użytkownik stwierdza, czy wyświetlone dane są prawidłowe (wtedy w pierwszej kolumnie oznacza wiersz jako nie podlegający deduplikacji), czy też jest to jakaś nierealna osoba (w pierwszej kolumnie oznaczany jest jako wiersz podlegający deduplikacji, drugą pozostawiamy niewypełnioną, co oznacza skasowanie wiersza). Trzeci wiersz nie jest duplikatem (zawiera prawidłowe dane istniejącej osoby), więc oznaczamy go jako wiersz nie podlegający deduplikacji. Po zatwierdzeniu wyboru baza danych posiada następujące rekordy: 1 Max 3 Marcin Kolonko Konko ul.Morska Gdynia MarWit Gdynia MarIT Oznacza to, że proces deduplikacji powiódł się i baza danych jest aktualna. Dlaczego to jest takie ważne w systemach typu CRM? Gdyż powtarzające się dane w systemach, które mają za zadanie ułatwienie pracy z kontrahentami, zarządzanie danymi oraz ich uaktualnianie są szczególnie ważne. Mimo tego, że żaden deduplikator danych nie zapewni nam idealnego wyszukiwania duplikatów, to ułatwi bardzo wyszukiwanie i kontrolę nad takimi danymi. Właśnie to jest powodem tak dużego zapotrzebowania na deduplikatory danych przez firmy produkujące systemy typu CRM. 7