Сходство на низове за предотвратяване на измами с помощта на разстоянието Левенщайн
Предистория: Измами — индустрия за 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. това беше първата ми публикация - ако сте стигнали дотук, много ви благодаря, че ме прочетохте!