Сходство на низове за предотвратяване на измами с помощта на разстоянието Левенщайн

Предистория: Измами — индустрия за 24 милиарда долара

Според DataProt през 2018 г. измамите с кредитни карти са стрували на световната икономика 24,3 милиарда долара — да, милиарди. Почти всеки е бил жертва на измама с кредитна карта или познава някой, който го е правил.

Но кой плаща сметката?

Много хора смятат, че има вид „застраховка срещу измами“, която банките използват, за да възстановят сумата на картодържателите, но в 99% от случаите тази цена пада върху търговеца, изпълнил поръчката. Това е мястото, където се намесва предотвратяването на търговски измами и там се върши по-голямата част от работата.

Аз съм лидер в областта на предотвратяването на измами в областта на електронните комуникации вече 5 години и с течение на времето установявам, че все повече се нуждая от персонализирани решения за проблеми, които традиционните инструменти не предоставят и идват от не- техническата подготовка беше огромно предизвикателство в това отношение;

И така, започнах да уча Python и резултатите бяха невероятни!

Ето един пример.

Проблемът

Един от тези проблеми, които споменах по-рано, е свързан с това колко „сходен“ е имейл адресът в поръчка с предоставеното име. Винаги съм подозирал интуитивно, че несъвпадение на име и имейл (напр. John Smith, abbey.miller@‹domain›) е малък червен флаг (особено за нов клиент), но никога не съм имал начин да го докажа , още по-малко го откриват.

Въведете разстоянието Левенщайн

И по-конкретно, пакетът python-Levenshtein.

Казано по-просто, разстоянието на Levenshtein е метод за преброяване на броя на промените на единични символи (добавяния, изваждания и замествания), необходими за трансформиране на един низ в друг. На най-основното ниво той връща цяло число от това колко трансформации са били необходими за трансформиране на низ A в низ B.

Инсталация

pip install python-Levenshtein

Код

Създадох малка функция, която приема имейл адрес и име като входни данни, премахва имейл домейна, премахва числата и препинателните знаци с помощта на някакъв регулярен израз, след което изчислява разстоянието на Левенщайн като пропорция на дължината на имейл адреса (до контрол за вариации в дължината на низа). По същество върнатата стойност ще се използва като функция в модел на машинно обучение и анализи.

import re
import Levenshtein
def compare_email_name(email, name):
    
    lower_name = str.lower(name)
    lower_email = str.lower(str.split(email,'@')[0])
    nopunc_email = re.sub('[!@#$%^&*()-=+.,]', ' ', lower_email)
    nonum_email = re.sub(r'[0-9]+', '', nopunc_email).strip()
    distance = round(Levenshtein.distance(lower_name,nonum_email) /        len(email),1)
    return distance

Резултати!

Бърз отказ от отговорност: въпреки че е създаден да симулира набор от данни за реална транзакция, наборът от данни е синтетичен.

Това, което открих, всъщност беше много по-въздействащо, отколкото очаквах! По-долу е процентът на измами (в SEK в случая на този набор от данни), групиран по стойностите, върнати от функцията по-горе.

Това, което взех от графиката по-горе, е, че всяко преобразуване на име в имейл, което изисква повече промени от 40% от дължината на оригиналния имейл адрес, е много по-вероятно (като много по-вероятно) да бъдете измамници.

Накратко:

Имам да положа много повече работа по отношение на усъвършенстването на правилното изчисление на изходния показател, тестването му върху реални данни и въвеждането на тази променлива в производствен модел, но мисля, че това е чудесна отправна точка. Опитайте и ми кажете какво мислите!

P.s. това беше първата ми публикация - ако сте стигнали дотук, много ви благодаря, че ме прочетохте!