Identifikasi Duplicate Data Menggunakan Jaro-Winkler Similarity

Din Waikabu
4 min readAug 16, 2022

--

Perkenalkan saya Din, member of Data Management CIMB Niaga. Kesempatan kali ini saya akan share cara identifikasi duplicate data menggunakan Jaro Winkler Similarity.

Pada umumnya perusahaan besar yang memiliki banyak system, dan setiap system memiliki kemampuan untuk create data akan mengalami duplicate data dan inkonsistensi data. Dalam keadaan seperti ini, maka data customer tersebut perlu diperbaiki atau di merge. Karena akan berpengaruh terhadap kuliatas data. Impact dari kualitas data yang buruk akan berpengaruh terhadap keputusan bisnis, ada istilah garbage in garbage out. Oleh karena itu kualitas data sangat penting untuk dijaga dan terus ditingkatkan.

Dalam menyelesaikan problem duplicate data, kita dapat menggunakan jaro winkler. Jaro winkler merupakan metode yang digunakan mengukur jarak antara dua string (Jaro, 1989). Nilai jaro winkler similarity di antara 0 sampai 1. Jika nilai jaro winkler mendekati 1 maka dua string yang dibandingkan bisa dikatakan sama. Sebaliknya, jika nilai jaro winkler similarity mendekati 0 maka dua string yang dibandingkan tidak ada kesamaan atau berbeda. Berikut ini adalah fungsi atau persamaan untuk menghitung jaro winkler similarity :

Jaro similarirt

Dimana :

m : jumlah karakter yang sama persis dari kedua string

S1 : panjang string pertama

S2 :panjang string kedua

t :Jumlah karakter yang tertukar posisi

Jaro-winkler similarity

Dimana :

l = panjang awal dari dua string yang memiliki karakter dan urutan yang sama, maksimal 4 karakter

p = factor skala konstan yang nilainya di antara 0 sampai 0.25. pada umumnya skala yang digunakan 0.1

Mari kita coba dua rumus diatas dan lihat bagaimana hasilnya. Misalnya seorang customer yang terekam dalam dua system berbeda dan tercatat dengan nama yang berbeda secara penulisan. Kita ingin melakukan sinkronisasi data. Maka hal pertama yang kita lakukan adalah pengecekan apakah customer tersebut orang yang sama atau berbeda.

S1 = Din W

S2 = Din Waikabu

Diketahui: m = 4 , S1 = 4, S2 = 10, t = 0

Maka : Jaro Similarity = 1/3*(4/4+4/10+(4–0)/4) = 0.8

Diketahui : l = 4, dan p = 0.1 , Jaro Similarity = 0.8

Maka : Jaro Winkler Similarity = 0.8 + 4*0.1 (1–0.8) : 0.88

Dari hasil perhitungan diatas, bisa kita ambil kesimpulan bahwa dua nama tersebut merupakan customer yang sama, karena memiliki skor similarity yang cukup besar. Sebenarnya untuk menentukan apakah dua objek atau karakter disebut sama dan tidak tergantung pada kesepakatan bisnis.

Implementasi dengan Python

Sekarang kita coba untuk mendapatkan nilai jaro-winkler similarity dengan menggunakan python programming. Kita dapat menggunakan library yang sudah tersedia yaitu ‘jaro-winkler’. Atau bisa membuat sendiri program dengan mengikuti formula diatas. Namun dalam kesempatan ini saya menggunakan library jaro-winkler yang sudah tersedia. Untuk contoh case kali ini, kita akan melakukan pengecekan nama customer (data dummy). Apakah customer yang ada di list merupakan orang yang sama atau berbeda. Detail data sebagai berikut:

Detail data

Hal pertama yang perlu dilakukan adalah install library jaro-winkler.

!pip install jaro-winkler

Setelah install package, kemudian import library yang diperlukan untuk proses mencari nilai jaro winkler.

import numpy as np
from jaro import jaro_metric, jaro_winkler_metric
import pandas as pd

Untuk mencari nilai jaro winkler menggunakan script berikut.

def get_SimilarityScore(data):data['Jaro_Winkler_Score'] = [jaro_winkler_metric(x,y) for x, y in zip(data['Name1'], data['Name2'])]data['jaro_similarity']= data['Jaro_Winkler_Score'].round(decimals=2)data.drop(columns = 'Jaro_Winkler_Score', inplace=True)return data

Setelah itu kita load dataset, dan panggil fungsi ‘get_smilarityScore’ yang telah dibuat diatas. Scriptnya sebagai berikut.

df = pd.read_csv('MOCK_DATA.csv')
hasil = get_SimilarityScore(df)

Hasil yang didapatkan sebagai berikut :

Seperti yang terlihat dari hasil diatas pada kolom jaro_similarity, kita dapat menentukan apakah customer tersebut merupakan orang yang sama atau berbeda. Misalnya kita sepakat bahwa yang memiliki nilai jaro_similarity >= 0.85 dapat kita katakan sebagai orang yang sama atau duplicate, dan sebaliknya jika nilai jaro smilarity <0.85 maka bisa kita simpulkan bahwa berbeda atau tidak duplicate. Untuk mengidentifikasi duplicate data kita dapat menggunakan jaro-winkler. Teman-teman dapat mencoba metode lain seperti Lavenshtein distance, dan Cosine-similarity dengan tf-idf untuk mengidentifikasi duplicate data.

Sekian dari saya. Terimakasih

Referensi:

Felix Nauman dan Melanie Herschel. An Introduction to Duplicate Detection

https://pypi.org/project/jaro-winkler/

https://www.mockaroo.com/

--

--

Din Waikabu
Din Waikabu

Written by Din Waikabu

I am a data enthusiast and backend learners

No responses yet