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.
Notre pipeline de détection de fraude en temps réel fonctionnera comme ceci:
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.
Pour suivre, vous aurez besoin:
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.
clientstransactionsPour 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.
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:
transactions.Utilisez le JSON suivant:
?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.
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.
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.core Jackson-Databind 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.
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 Ajoutez simplement votre chaîne de connexion et le nom de la base de données et nous sommes prêts à partir.
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 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); }} Ici, nous ajouterons quelques méthodes pour nous connecter à notre base de données MongoDB que nous pouvons réutiliser via notre application.
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.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: 9092LocalHost: 9092Si vous exécutez localement).