„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

Podobne dokumenty