Construire un système de détection de fraude d'IA en temps réel avec Spring Kafka et MongoDB

DEV - 16/04
Dans ce tutoriel, nous allons construire un système de détection de fraude en temps réel à l'aide de la recherche de vecteur MongoDB Atlas, ...

Dans ce tutoriel, nous allons construire un système de détection de fraude en temps réel à l'aide de la recherche vectorielle MongoDB Atlas, Apache Kafka et des intégres générés par AI-AI. Nous montrerons comment la recherche de vecteurs MongoDB Atlas peut être utilisée pour détecter les anomalies dans un flux de transactions financières en analysant l'historique des transactions d'un utilisateur et en identifiant un comportement suspect basé sur des intégres générés par LLM.

Notre solution surveillera les flux de changement MongoDB à l'aide du pilote synchrone Java, déclenchant des recherches vectorielles sur chaque nouvelle transaction pour détecter la fraude potentielle. Bien que cette approche fonctionne bien pour notre démo, et pour de nombreux cas d'utilisation, nous discuterons également de ses limites. Tout au long du tutoriel, je couvrirai des stratégies alternatives pour optimiser les performances, que vous ayez besoin d'un débit de transaction plus élevé, d'une détection de fraude plus rapide ou d'une architecture plus évolutive.

Si vous souhaitez afficher le code terminé pour ce tutoriel, vous pouvez le trouver sur GitHub.

Ce que nous construisons

Notre pipeline de détection de fraude en temps réel fonctionnera comme ceci:

  1. Générez des profils de clients: créez des utilisateurs synthétiques avec des habitudes de dépenses prévisibles et stockez-les dans MongoDB.
  2. Produits de transactions: un producteur de Kafka génère des transactions, calcule les incorporations AI et les envoie à Kafka.
  3. Consommer les transactions: un consommateur Kafka lit les transactions de Kafka et les enregistre dans MongoDB.
  4. Surveiller en temps réel: l'application écoute les flux de modification MongoDB pour détecter de nouvelles transactions à leur arrivée.
  5. Exécuter la recherche de vecteur: chaque nouvelle transaction est comparée aux transactions historiques de l'utilisateur à l'aide de la recherche vectorielle.
  6. Détecter la fraude: une transaction est marquée comme une fraude si:
    • Aucune transaction similaire n'existe pour cet utilisateur.
    • Toutes les transactions similaires retournées sont déjà signalées sous forme de fraude.

Ce pipeline garantit une détection d'anomalies en temps réel à l'aide d'incorporation et de recherche de vecteurs alimentées par AI.

Condition préalable

Pour suivre, vous aurez besoin:

  • Un compte MongoDB ATLAS avec un cluster M0 (ou supérieur) en liberté (ou supérieur).
  • Kafka 3.5+ (installation locale ou docker).
  • Java 21 configure sur votre machine.
  • Clé API OpenAI (pour les incorporations).
  • Maven 3.9+.

Créez notre base de données MongoDB

Connectez-vous à MongoDB ATLAS et créez un cluster M0 Free-Forever. Créer une nouvelle base de données appeléefraude. Dans cette base de données, nous devons créer deux collections.

  • clients
  • transactions

Pour cette démo simple, nous allons simplement créer des collections de base car, à partir de la rédaction de ceci, les collections de séries chronologiques ne prennent pas en charge les index de recherche. Si vous souhaitez en savoir plus sur les configurations pour votre application Java, consultez les données de la série chronologique de gestion du tutoriel avec MongoDB.

Créer un index de recherche vectorielle

Nous allons créer un index de recherche vectorielle sur notretransactionscollection. Cela nous permettra de trouver des documents sémantiquement similaires, pour nous aider à identifier les anomalies dans nos transactions clients et à les marquer comme une fraude.

Comment cela marche-t-il? Eh bien, nous créons des incorporations vectorielles (représentations numériques de nos données) de nos transactions, pour stocker dans notre magasin vectoriel, la collecte de transactions. Nous les obtenons en envoyant les informations de nos transactions à un modèle d'incorporation, comme OpenaiTexte-incliné-3-Small. Ces intérêts ressemblent à un tableau de numéros de points flottants, par exemple, [2.0457, -3.1417895, ...].

Nous utilisons ensuite la recherche de vecteur Atlas de MongoDB, qui utilise un algorithme de voisin le plus proche pour décider quelles transactions sont sémantiquement similaires. Ces transactions sont renvoyées, et si la nouvelle transaction ne correspond à aucune transaction passée pour cet utilisateur, ou si elle correspond aux transactions marquées, il pourrait s'agir d'une anomalie (fraude potentielle).

Vous pouvez apprendre les étapes approfondies pour configurer un index de recherche de vecteur dans le démarrage rapide de la recherche de vecteur Atlas, mais brièvement:

  1. Accédez à MongoDB Atlas → Collections → Cliqueztransactions.
  2. Sélectionnez → Recherche Atlas → Créer une recherche de recherche + recherche vectorielle.
  3. Utilisez le JSON suivant:

    ?
  4. Faire un clicCréer un index.

Nous utilisons 1536 pour notre nombre de dimensions en raison du modèle d'intégration que nous utiliserons. Openai fournit leTexte-incliné-3-Smallpour l'intégration (entre autres). Il s'agit d'un modèle à usage général incorporant du texte, mais l'utilisation d'un modèle adapté à la détection de la fraude financière, en particulier un modèle personnalisé adapté et formé sur vos données, entraînera de meilleurs résultats. Que vous recherchiez des intégres plus rapides ou des prédictions plus précises, vous pouvez prendre le contrôle de cela ici.

Étant donné que les incorporations OpenAI sont optimisées pour utiliser l'algorithme de produit DOT, c'est la méthode de similitude avec laquelle nous nous en tiendrons. Il convient également de noter que si les transactions frauduleuses ont tendance à avoir des signaux plus forts (par exemple, des commerçants, des catégories, des montants) très différents, le produit DOT aide à saisir cette ampleur, ainsi que la direction. Essentiellement, il souligne naturellement ces signaux plus forts. En revanche, la similitude en cosinus normalise tous les vecteurs à la longueur de l'unité, rejetant efficacement ces informations d'amplitude utiles. Cela signifie qu'il traiterait une petite anomalie et une grande aussi «différente» dans la direction, ce qui peut diluer la force du signal dont nous nous soucions lors de l'identification de la fraude.

Créer une application de printemps

Nous allons créer notre application à l'aide de Spring Initizr. Ici, nous devons définir notre projet sur Maven, notre langue à Java et notre version de démarrage Spring à 3.4.2 (version stable la plus récente à partir de l'écriture). Nous définirons également le nom de notre application - Mine estfraude- Et pour l'emballage, nous allons faire un pot et Java version 21.

Nous aurons également besoin de quelques forfaits.

  • Web de printemps
  • Printemps pour Apache Kafka
  • Données de printemps MongoDB
  • Openai

Téléchargez et décompressez votre application Spring. Ouvrez l'application dans l'IDE de votre choix. Ouvrez le fichier pom.xml et ajoutez la dépendance Jackson nécessaire.

com.fasterxml.jackson.coreJackson-Databind
Entrez le mode de sortie en mode plein écran

Configuration de la configuration

Maintenant, ouvrez l'application et accédez auapplication.properties. Ici, nous allons ajouter les différentes chaînes de connexion, jetons et paramètres de configuration pour nos dépendances.

Configuration MongoDB

Spring Boot configurera automatiquement MongoDB, nous n'avons donc pas à créer manuellement unMongoclient.

Spring.Application.Name = Frauddetector Spring.Data.mongodb.uri =printemps.data.mongodb.database = fraude
Entrez le mode de sortie en mode plein écran

Ajoutez simplement votre chaîne de connexion et le nom de la base de données et nous sommes prêts à partir.

Configuration de Spring AI

Nous utilisons Spring AI avec l'API d'OpenAI pour générer des incorporations de texte pour la détection de similitude des transactions. Nous utiliserons ces intérêts pour la recherche vectorielle, nous permettant de comparer les transactions en fonction de leur sens et de leurs modèles sémantiques (ambiance globale), plutôt que des données brutes.

printemps.ai.openai.api-key =printemps.ai.openai.embedding.options.model = text-embedding-3-Small
Entrez le mode de sortie en mode plein écran

Texte-incliné-3-Smallest un modèle d'incorporation léger optimisé pour la génération de vecteurs à faible latence. Alternativement, vous pouvez utiliser"Text-Embedding-3-Garg"pour une précision plus élevée mais à une augmentation du coût et de la latence.

Nous créerons également unConfigurerpackage et ajouter unConfigation MongoDBclasse.

package com.mongodb.frauddetector.config; import com.mongodb.client.mongoclient; import com.mongodb.client.mongocollection; import com.mongodb.client.mongodatabase; import org.bson.document; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; @Configuration public classe mongodbconfig {private static final string database_name = "fraude"; Transactions de chaîne finale statique privée_Collection = "Transactions"; @Bean public Mongodatabase fraudeDatabase (Mongoclient Mongoclient) {return mongoclient.getDatabase (database_name); } @Bean public MongocollectionTransactionScollection (Mongodatabase fraudedatabase) {return fraudeDatabase.getCollection (Transactions_Collection); }}
Entrez le mode de sortie en mode plein écran

Ici, nous ajouterons quelques méthodes pour nous connecter à notre base de données MongoDB que nous pouvons réutiliser via notre application.

Configuration de Kafka

Kafka est un système de messagerie distribué qui permet aux producteurs d'envoyer des messages et des consommateurs pour les traiter de manière asynchrone. Dans notre système de détection de fraude, nous utilisons Kafka pour gérer l'ingestion de transaction en temps réel.

Spring Boot offre une prise en charge Kafka intégrée viaprintemps-kafka, nous permettant de configurer les producteurs et les consommateurs de Kafka à l'aide de propriétés d'application.

printemps.kafka.bootstrap-servers = localhost: 9092 printemps.kafka.producer.key-serializer = org.apache.kafka.common.serialization.stringserializer spring.kafka.producer.value-erializer = org.sonserializer printemps.kafka.consumer.bootstrap-servers = localhost: 9092 printemps.kafka.consumer.group-id = fraude-group printemps.kafka.consumer. Spring.Kafka.Consumer.Value-Deserializer = org.SpringFramework.Kafka.Support.Serializer.JSondeSerializer Spring.Kafka.Consumer.Properties.Spring.Json.Truted.Packages = com.mongodb.
Entrez le mode de sortie en mode plein écran

Si vous n'êtes pas familier avec Apache Kafka, cela pourrait ressembler à un mur de charabia, alors décomposons ce que fait chaque propriété

Connexion à Kafka

  • printemps.kafka.bootstrap-servers = localhost: 9092
    • Spécifie l'adresse du courtier Kafka (par défaut estLocalHost: 9092Si vous exécutez localement).
    • Le producteur et le consommateur l'utiliseront pour envo...
      [Courte citation de 8% de l'article original]
Loading...