Rumah >pembangunan bahagian belakang >Tutorial Python >Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django

Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 20:59:02430semak imbas

Implémentation d

Jarak Levenshtein boleh digunakan dalam sistem pengesanan penipuan untuk membandingkan data yang dimasukkan pengguna (seperti nama, alamat atau e-mel) dengan data sedia ada untuk mengenal pasti entri yang serupa tetapi berpotensi penipuan.

Berikut ialah panduan langkah demi langkah untuk menyepadukan fungsi ini ke dalam projek Django anda.


1. Kes Penggunaan

Sistem pengesanan penipuan boleh membandingkan:

  • E-mel serupa: untuk mengesan akaun yang dibuat dengan sedikit variasi (mis., user@example.com lwn. userr@example.com).
  • Alamat Berdekatan: Untuk menyemak sama ada berbilang akaun menggunakan alamat yang hampir sama.
  • Nama Serupa: untuk melihat pengguna dengan nama yang diubah suai sedikit (cth., John Doe lwn. Jon Doe).

2. Langkah-Langkah Pelaksanaan

a. Cipta Peranti Tengah atau Isyarat untuk Menganalisis Data

Gunakan isyarat Django untuk menyemak data pengguna baharu semasa pendaftaran atau kemas kini.

b. Pasang Fungsi Pengiraan Levenshtein

Sepadukan perpustakaan untuk mengira jarak Levenshtein atau gunakan fungsi Python seperti ini:

from django.db.models import Q
from .models import User  # Assume User is your user model

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    if n > m:
        a, b = b, a
        n, m = m, n

    current_row = range(n + 1)  # Keep current and previous row
    for i in range(1, m + 1):
        previous_row, current_row = current_row, [i] + [0] * n
        for j in range(1, n + 1):
            add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
            if a[j - 1] != b[i - 1]:
                change += 1
            current_row[j] = min(add, delete, change)

    return current_row[n]

c. Tambah Ciri Pengesanan Penipuan

Dalam isyarat atau perisian tengah anda, bandingkan data yang dimasukkan dengan data dalam pangkalan data untuk mencari entri yang serupa.

from django.db.models import Q
from .models import User  # Assume User is your user model

def detect_similar_entries(email, threshold=2):
    users = User.objects.filter(~Q(email=email))  # Exclure l'utilisateur actuel
    similar_users = []

    for user in users:
        distance = levenshtein_distance(email, user.email)
        if distance <= threshold:
            similar_users.append((user, distance))

    return similar_users

d. Sambung ke Signal post_save untuk Pengguna

Gunakan isyarat post_save untuk menjalankan semakan ini selepas pengguna mendaftar atau mengemas kini:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User
from .utils import detect_similar_entries  # Import your function

@receiver(post_save, sender=User)
def check_for_fraud(sender, instance, **kwargs):
    similar_users = detect_similar_entries(instance.email)

    if similar_users:
        print(f"Potential fraud detected for {instance.email}:")
        for user, distance in similar_users:
            print(f" - Similar email: {user.email}, Distance: {distance}")

e. Pilihan: Tambah Templat Log Penipuan

Untuk menjejaki penipuan yang disyaki, anda boleh mencipta model FraudLog:

from django.db import models
from django.contrib.auth.models import User

class FraudLog(models.Model):
    suspicious_user = models.ForeignKey(User, related_name='suspicious_logs', on_delete=models.CASCADE)
    similar_user = models.ForeignKey(User, related_name='similar_logs', on_delete=models.CASCADE)
    distance = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

Simpan padanan yang mencurigakan dalam templat ini:

from django.db.models import Q
from .models import User  # Assume User is your user model

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    if n > m:
        a, b = b, a
        n, m = m, n

    current_row = range(n + 1)  # Keep current and previous row
    for i in range(1, m + 1):
        previous_row, current_row = current_row, [i] + [0] * n
        for j in range(1, n + 1):
            add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
            if a[j - 1] != b[i - 1]:
                change += 1
            current_row[j] = min(add, delete, change)

    return current_row[n]

3. Penambahbaikan dan Pengoptimuman

a. Hadkan Perbandingan

  • Bandingkan hanya pengguna terbaharu atau mereka dari rantau, syarikat, dsb. yang sama

b. Laraskan Ambang

  • Tetapkan ambang berbeza untuk jarak yang boleh diterima bergantung pada medan (contohnya, ambang 1 untuk e-mel, 2 untuk nama).

c. Penggunaan Algoritma Lanjutan

  • Terokai perpustakaan seperti RapidFuzz untuk pengiraan yang dioptimumkan.

d. Integrasi ke dalam Django Admin

  • Tambah makluman dalam antara muka pentadbir untuk pengguna yang mempunyai potensi risiko penipuan.

4. Kesimpulan

Dengan pendekatan ini, anda telah melaksanakan sistem pengesanan penipuan berdasarkan jarak Levenshtein. Ia membantu mengenal pasti entri serupa, mengurangkan risiko mencipta akaun penipuan atau menduplikasi data. Sistem ini boleh dikembangkan dan boleh dilaraskan untuk memenuhi keperluan khusus projek anda.

Atas ialah kandungan terperinci Melaksanakan Sistem Pengesanan Penipuan dengan Jarak Levenshtein dalam Projek Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn