AML מונע בינה מלאכותית: שילוב כללים ולמידת מכונה

החמצת העברה חשודה או חסימת לקוח לגיטימי—מחיר הטעות במערכת לאיתור הלבנת הון הוא קריטי. אנו מפתחים מערכות AI היברידיות לאיתור הלבנת הון, המשלבות כללים דטרמיניסטיים ומודלי ML. הצוות שלנו מספק פרויקטים סוהריים, החל מבדיקת היתכנות ועד הטמעה ותמיכה שוטפת, ומבטיח הגנה אמינה לעסק שלכם.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

איסור הלבנת הון (AML) הוא תחום שבו מחיר הטעות הוא קריטי. החמצת העברה חשודה (תוצאה שלילית כוזבת) עלולה לגרור קנסות של עד 5% מהמחזור לפי החוק הפדרלי 115. חסימת לקוח לגיטימי (תוצאה חיובית כוזבת) מובילה לנזק מוניטרי ולתביעות משפטיות. מערכות מבוססות כללים מסורתיות מזהות רק דפוסים ידועים, ומייצרות עד 95% התראות שווא. מערכת ה-AML שלנו מבוססת בינה מלאכותית מצטיינת בזיהוי הלבנת הון באמצעות מודלי למידת מכונה ייעודיים. אנו מפתחים מערכות היברידיות שמפחיתות את שיעור התוצאות החיוביות הכוזבות (FPR) ב-20–40% מבלי לפגוע ברגישות הזיהוי. רקורד העבודה שלנו: 10+ שנים ב-ML פיננסי לבנקים ולחברות פינטק. עלות הטמעה טיפוסית נעה בין 50,000 ל-200,000 דולר, עם החזר השקעה תוך 6 חודשים באמצעות צמצום עבודת הבדיקה הידנית. בנקים חוסכים בממוצע 1,000,000 דולר בשנה על ידי הפחתת עומס הבדיקות הידניות.

הליבה היא שילוב של כללים דטרמיניסטיים (לתרחישים טיפוסיים) ומודלי ML (לגילוי דפוסים לא-ליניאריים סמויים). להלן נסקור את הארכיטקטורה, המודלים ושלבי היישום.

במאמר זה נפרק את המרכיבים המרכזיים: ניטור עסקאות, ניתוח גרפים ושילוב KYC. נראה כיצד גישה היברידית מפחיתה את עומס העבודה של מחלקת הציות תוך עמידה בדרישות FATF. הכללים מטפלים אוטומטית ב-80% מהעסקאות, ומשאירים 20% לבדיקת ML, מה שמקצץ את המאמץ הידני ב-60%. המערכת ההיברידית שלנו מפחיתה תוצאות חיוביות כוזבות פי 2-5 בהשוואה למערכות מבוססות כללים בלבד. מערכת ה-AML ההיברידית שלנו יעילה עד פי 3 ממערכות מבוססות כללים טהורות.

מדוע ML עדיפה על מערכות מבוססות כללים עבור AML

מאפיין כללים מודל ML
זיהוי תוכניות חדשות לא – רק דפוסים ידועים כן – חושף מתאמים נסתרים
שיעור תוצאות חיוביות כוזבות (FPR) 5–10% 2–4% (הפחתה פי 2–5)
התאמה לשינויים עדכון ידני אימון מחדש אוטומטי
יכולת הסבר מלאה (אם הכלל מפורש) באמצעות SHAP/LIME
מדרגיות ליניארית עם מספר הכללים עיבוד מקבילי

טיפולוגיות הלבנת הון

פיצול (סמרפינג): סכומים גדולים מחולקים לעסקאות קטנות מתחת לסף הדיווח (כפי שהוגדר מקומית).

ריבוד: העברות רב-רמות דרך שרשרת חשבונות ותחומי שיפוט כדי להסתיר את המקור.

שילוב: כספים מולבנים מוחדרים לעסק לגיטימי—שירותים נלווים, נדל"ן.

דגלים אדומים:

  • עסקאות בסכומים מעוגלים (למשל, ממש מתחת לסף) – מתחת לסף אך חשודות.
  • קפיצת פעילות: ללא פעולות → פתאום 50 ביום.
  • אי-התאמות גיאוגרפיות: לקוח מסראטוב, העברות לסינגפור.
  • חשבון חד-פעמי: חשבון חדש, מחזור גדול, משיכה מהירה, ואז סגירה.

הנדסת מאפיינים

המפתח לאיכות ML הוא מאפיינים הלוכדים את התנהגות הלקוח. אנו משתמשים בשתי קבוצות: מאפיינים עסקתיים (נפח, תזמון, סכומים קרובים לספים, ריכוז צד שכנגד):

def extract_transaction_features(transaction_history, lookback_days=90):
    """Признаки на основе истории транзакций клиента."""
    df = transaction_history.copy()
    features = {
        # Объём транзакций
        'total_amount_30d': df[df['days_ago'] <= 30]['amount'].sum(),
        'transaction_count_30d': len(df[df['days_ago'] <= 30]),
        'avg_transaction_amount': df['amount'].mean(),
        'amount_std': df['amount'].std(),
        # Временные паттерны
        'transactions_per_active_day': len(df) / df['date'].nunique(),
        'max_transactions_single_day': df.groupby('date').size().max(),
        'night_transaction_ratio': (df['hour'] < 6).mean(),
        'weekend_activity_change': calculate_weekend_ratio(df),
        # Суммы около порогов
        'near_threshold_pct': (df['amount'].between(550000, 610000)).mean(),
        'round_amount_pct': (df['amount'] % 1000 == 0).mean(),
        # Контрагенты
        'unique_counterparties': df['counterparty_id'].nunique(),
        'counterparty_concentration': df.groupby('counterparty_id')['amount'].sum().max() / df['amount'].sum(),
        'new_counterparty_ratio': (df['is_new_counterparty'] == True).mean(),
        # Географические
        'foreign_transaction_ratio': (df['country'] != 'RU').mean(),
        'high_risk_jurisdiction_pct': df['country'].isin(HIGH_RISK_COUNTRIES).mean()
    }
    return features

def compute_network_features(account_id, transaction_graph):
    """Транзакции как граф: узлы = счета, рёбра = переводы."""
    G = transaction_graph
    pagerank = nx.pagerank(G, weight='amount')
    betweenness = nx.betweenness_centrality(G, weight='amount')
    communities = nx.community.greedy_modularity_communities(G.to_undirected())
    community_risk = assess_community_risk(account_id, communities, G)
    return {
        'pagerank_score': pagerank.get(account_id, 0),
        'betweenness_score': betweenness.get(account_id, 0),
        'community_risk': community_risk,
        'in_degree': G.in_degree(account_id),
        'out_degree': G.out_degree(account_id)
    }

מאפייני רשת (PageRank, betweenness, clustering) – מסייעים לזהות תוכניות ריבוד מורכבות שבהן חשבון משמש כצומת מעבר.

מודלי למידת מכונה

LightGBM מכוונן ל-AML

import lightgbm as lgb
from sklearn.metrics import roc_auc_score, average_precision_score

n_normal = (y_train == 0).sum()
n_sar = (y_train == 1).sum()
scale_pos_weight = n_normal / n_sar

model = lgb.LGBMClassifier(
    n_estimators=500,
    scale_pos_weight=scale_pos_weight,
    learning_rate=0.05,
    num_leaves=31,
    min_child_samples=20,
    feature_fraction=0.8
)

# Threshold подбирается так, чтобы recall >= 0.85
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_val, y_scores)
optimal_threshold = thresholds[np.argmax(recall >= 0.85)]

מסווג ה-LightGBM AML הזה מותאם לניטור עסקאות.

רשת נוירונים גרפית (GNN) לניתוח רשתות

import torch
from torch_geometric.nn import SAGEConv

class AMLGraphNN(torch.nn.Module):
    """GNN для анализа транзакционных сетей."""
    def __init__(self, node_features, edge_features, hidden_dim=64):
        super().__init__()
        self.conv1 = SAGEConv(node_features, hidden_dim)
        self.conv2 = SAGEConv(hidden_dim, hidden_dim)
        self.edge_mlp = torch.nn.Linear(edge_features, hidden_dim)
        self.classifier = torch.nn.Linear(hidden_dim * 2, 1)

    def forward(self, node_features, edge_index, edge_features):
        x = torch.relu(self.conv1(node_features, edge_index))
        x = torch.relu(self.conv2(x, edge_index))
        edge_emb = self.edge_mlp(edge_features)
        source_emb = x[edge_index[0]]
        target_emb = x[edge_index[1]]
        edge_repr = torch.cat([source_emb, target_emb], dim=1)
        return torch.sigmoid(self.classifier(edge_repr))

מודלי ה-GNN שלנו לניתוח רשתות עסקאות מזהים דפוסי הלבנת הון.

כיצד פועלת הארכיטקטורה ההיברידית של AML

המערכת ההיברידית משלבת כללים ו-ML לצינור עבודה אחד. הכללים מסננים במהירות פעולות לגיטימיות ברורות ומסמנים הפרות ברורות (חריגות מגבולות, תחומי שיפוט אסורים). מודלי ML מנתחים מאפיינים שלא ניתן לקודד בכללים: התנהגות חריגה, קשרים נסתרים, תלות לא-ליניארית. התוצאה: כל העברה מקבלת ציון סיכון אחיד המשלב גם כללים וגם ML.

class HybridAMLSystem:
    def __init__(self, rule_engine, ml_model, threshold=0.5):
        self.rules = rule_engine
        self.model = ml_model
        self.threshold = threshold

    def evaluate_transaction(self, transaction, customer_history):
        rule_alerts = self.rules.evaluate(transaction)
        features = extract_transaction_features(customer_history)
        ml_score = self.model.predict_proba([features])[0][1]
        final_risk = max(rule_alerts.max_risk_score if rule_alerts else 0, ml_score)
        if final_risk > self.threshold:
            return SARCandidate(
                transaction=transaction,
                risk_score=final_risk,
                triggered_rules=rule_alerts,
                ml_explanation=shap_explain(self.model, features)
            )

מה כלול בהתקשרות

  • תיעוד: דיאגרמת ארכיטקטורה, כרטיס מודל, מדריך מנהל
  • צינור ML: חילוץ מאפיינים, אימון, ולידציה, בדיקות A/B
  • אינטגרציה: עם מערכת KYC, ליבת בנקאות, CRM
  • API בזמן אמת: נקודת קצה HTTP/gRPC לניקוד סיכון של כל עסקה
  • לוחות מחוונים: ניטור מדדים, דיווח SAR, הסברי SHAP
  • פריסה: באתר הלקוח או בענן
  • תמיכה: חודש אחד לאחר העלייה לאוויר, הדרכת צוות

תהליך הפיתוח

  1. ניתוח – איסוף דרישות, ביקורת לוגים קיימים, סקירת רגולציות (החוק הפדרלי 115, FATF)
  2. עיצוב – בחירת ארכיטקטורה, הגדרת מאפיינים, הגדרת פיילוט
  3. פיתוח – כתיבת קוד, אימון מודלים, הקמת צינור עבודה
  4. בדיקות – ולידציה צולבת על נתונים היסטוריים, בדיקות תרחישים
  5. פריסה – פריסה, אינטגרציה, בדיקות עומס

ציר זמן: מ-6–8 שבועות לגרסה בסיסית (כללים + LightGBM + SAR) ועד 4–5 חודשים למערכת מלאה (עם GNN, זמן אמת, ניתוח גרפים). המערכת מעבדת מעל 10,000 עסקאות בשנייה בזמן אמת.

השוואת מודלים: LightGBM לעומת GNN

מאפיין LightGBM GNN (SAGEConv)
סוג נתונים מאפיינים טבלאיים (עסקאות) נתוני גרף (רשת חשבונות)
מזהה חריגות בהתנהגות לקוח שרשראות העברה מורכבות (ריבוד)
יכולת אימון אימון מהיר, עובד עם מעט נתונים דורש יותר נתונים ו-GPU
יכולת פרשנות SHAP, חשיבות מאפיינים ויזואליזציית גרף, מנגנון קשב

ציות רגולטורי

החוק הפדרלי 115 (רוסיה): בקרה חובה על עסקאות מעל סף מסוים, הגשת SAR ל-Rosfinmonitoring תוך 3 ימי עסקים.

FATF/EU AMLD: KYC בעת פתיחת חשבון, ניטור רציף, בדיקת נאותות מוגברת (EDD) ללקוחות בסיכון גבוה. הדרישות הרגולטוריות מתוארות ב-המלצות FATF (ויקיפדיה).

כיצד אנו מבטיחים יכולת הסבר

כל החלטה חשודה מגיעה עם הסבר SHAP. דוגמה: העברת סכום גדול מסראטוב לסינגפור. ערכי SHAP מראים ש-foreign_transaction_ratio הגדיל את הסיכון ב-0.34, near_threshold_pct ב-0.28, new_counterparty_ratio ב-0.21, transaction_count_30d ב-0.15, ו-avg_transaction_amount ב-0.10. הסיכון הסופי של 0.87 חורג מהסף של 0.5, ומייצר דוח SAR.

import shap

def explain_sar_decision(model, features, feature_names):
    """Регулятор требует обоснования каждого SAR."""
    explainer = shap.TreeExplainer(model)
    shap_values = explainer.shap_values(features)
    top_factors = sorted(
        zip(feature_names, shap_values[0]),
        key=lambda x: abs(x[1]),
        reverse=True
    )[:5]
    explanation = "\n".join([
        f"- {name}: {'повысил' if val > 0 else 'снизил'} риск на {abs(val):.2f}"
        for name, val in top_factors
    ])
    return explanation

גישה זו לא רק עומדת בדרישות הביקורת אלא גם נותנת למפעילים סיבות ברורות לחסימה.

שירותי פיתוח ה-AML שלנו מכסים פתרונות מקצה לקצה כולל אינטגרציית KYC AML ודיווח SAR. יש לנו מומחיות במודלי גרף נוירוניים ל-AML, ניטור עסקאות ומערכות AML היברידיות. הצוות שלנו מחזיק בהסמכות ב-AML ובמדעי נתונים, ואנו מבטיחים הפחתה מינימלית של 20% בתוצאות חיוביות כוזבות.

מוכנים להעריך את הפרויקט שלכם? בקשו פיתוח מערכת AML מותאמת לנתונים שלכם — קבלו ייעוץ על ארכיטקטורה ולוחות זמנים. צרו קשר כדי לדון במקרה שלכם.