首頁 後端開發 Python教學 在 Django 專案中實現具有 Levenshtein Distance 的詐欺偵測系統

在 Django 專案中實現具有 Levenshtein Distance 的詐欺偵測系統

Nov 07, 2024 pm 08:59 PM

Implémentation d

編輯距離可用於詐欺偵測系統,將使用者輸入的資料(例如姓名、地址或電子郵件)與現有資料進行比較,以識別相似但可能具有詐騙的條目。

這是將此功能整合到 Django 專案中的逐步指南。


1. 用例

詐欺偵測系統可以比較:

  • 類似電子郵件:偵測建立時略有不同的帳戶(例如,user@example.com 與 userr@example.com)。
  • 鄰近位址:檢查多個帳戶是否使用幾乎相同的位址。
  • 相似名稱:發現名稱稍有修改的使用者(例如,John Doe 與 Jon Doe)。

2. 實施步驟

a.建立中間件或訊號來分析資料

使用 Django 的訊號在註冊或更新時檢查新使用者資料。

b.安裝編輯運算功能

整合函式庫來計算 Levenshtein 距離或使用以下 Python 函數:

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.新增詐欺偵測功能

在您的訊號或中介軟體中,將輸入的資料與資料庫中的資料進行比較,以查找相似的條目。

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.連接到使用者的 Signal post_save

在使用者註冊或更新後使用 post_save 訊號執行此檢查:

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.選項:新增詐欺日誌範本

要追蹤可疑的詐騙行為,您可以建立 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)
登入後複製

在此範本中儲存可疑符合項目:

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. 改進與最佳化

a.極限比較

  • 只比較最近的使用者或來自同一地區、公司等的使用者

b.調整閾值

  • 根據欄位設定不同的可接受距離閾值(例如,電子郵件的閾值為 1,姓名的閾值為 2)。

c.先進演算法的使用

  • 探索 RapidFuzz 等函式庫以最佳化計算。

d.整合到 Django 管理

  • 在管理介面中為存在潛在詐欺風險的使用者新增警報。

4. 結論

透過這種方法,您已經實現了基於編輯距離的詐欺偵測系統。它有助於識別相似的條目,降低建立詐欺帳戶或重複資料的風險。該系統是可擴展的,可以進行調整以滿足您專案的特定需求。

以上是在 Django 專案中實現具有 Levenshtein Distance 的詐欺偵測系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

我如何使用美麗的湯來解析HTML? 我如何使用美麗的湯來解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美麗的湯來解析HTML?

python中的圖像過濾 python中的圖像過濾 Mar 03, 2025 am 09:44 AM

python中的圖像過濾

如何使用Python查找文本文件的ZIPF分佈 如何使用Python查找文本文件的ZIPF分佈 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分佈

如何使用Python使用PDF文檔 如何使用Python使用PDF文檔 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文檔

如何在django應用程序中使用redis緩存 如何在django應用程序中使用redis緩存 Mar 02, 2025 am 10:10 AM

如何在django應用程序中使用redis緩存

如何使用TensorFlow或Pytorch進行深度學習? 如何使用TensorFlow或Pytorch進行深度學習? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch進行深度學習?

如何在Python中實現自己的數據結構 如何在Python中實現自己的數據結構 Mar 03, 2025 am 09:28 AM

如何在Python中實現自己的數據結構

python對象的序列化和避難所化:第1部分 python對象的序列化和避難所化:第1部分 Mar 08, 2025 am 09:39 AM

python對象的序列化和避難所化:第1部分

See all articles