23 Sous le capot des algorithmes de Machine Learning V: Reconnaissance de Schémas de Ponzi - Blog Nexeo
Technologies/IT

Sous le capot des algorithmes de Machine Learning V: Reconnaissance de Schémas de Ponzi

23 octobre 2019

On a précédemment vu un modèle simple de neurone, permettant de reconnaître des chiffres.

À présent, plutôt que de proposer un modèle à un seul neurone, on va s’intéresser à un modèle plus complexe, le réseau de neurones. C’est l’apprentissage profond, aussi appelé Deep Learning chez les californiens.

 

Plus précisément, on va l’appliquer à une problématique de compréhension du langage, le Natural Language Processing, aussi appelé NLP.

L’un des sujets de recherche du Lab’ a été la reconnaissance de schémas de Ponzi dans les Smart Contracts sur la blockchain Ethereum.

 

Schémas de Ponzi: kézako?

Ce sont des arnaques financières dont l’entretien se fait par affiliation. Afin de pouvoir durer, il est nécessaire à l’instigateur de l’arnaque d’assurer un flux de plus en plus important d’arnaqués.

En voici un exemple simple, muni d’un illustration :

L’instigateur du schéma de Ponzi, promet un investissement au taux d’intérêt est alléchant. Par exemple 20%.

Il prélève pour son compte une partie de la somme investie, et rembourse le dernier utilisateur avec l’argent des investisseurs suivant.

 

Pour durer, ce type d’arnaque nécessite un flux toujours plus important d’investisseurs, en effet, plus le nombre d’investisseurs grandit, plus il en faut de nouveaux afin de les payer.

 

 

 

Le nom de cette arnaque vient de Charles Ponzi qui promettait un 50% de profit en 90 jours sur la spéculation des “International postal reply coupons”. Environ 40000 personnes ont été impliquées, pour un total de 15 millions de dollars, un tiers seulement aura reçu son dû.

 

Introduction à la blockchain Ethereum aux Smart Contract

L’Ethereum est une blockchain, et en tant que telle, elle peut être vue comme une machine à états.

Un état est constitué des données de tous ses utilisateurs:

Notamment, les adresses, montant associé à celles-ci, les données stockées par l’utilisateur de l’adresse, le code associé si c’est un Smart Contract, le nombre de transactions effectuées…

 

Au fur et à mesure des interactions entre utilisateurs de la blockchain, les états se suivent au cours du temps, et chaque passage d’un état à un autre est soumis à la vérification des participants.

 

On va brièvement présenter les smart contracts sur la blockchain Ethereum.

Au sein de celle-ci, deux types d’adresses existent:

  1. Les adresses externes, contrôlées par des utilisateurs hors de la blockchain
  2. Les adresses internes, contrôlées par du code

 

C’est à partir de ces adresses que les utilisateurs interagissent entre eux au sein de la blockchain, dans laquelle ils peuvent notamment effectuer des opérations, des transactions etc…

Ces adresses internes, appartiennent aux Smart Contracts. Le code qui régit leur comportement est stocké dans la blockchain Ethereum (d’où leurs adresses dites internes) et ce dernier fonctionne de manière déterministe.

 

De telles propriétés permettent la mise en place de mécanismes complexes, par exemple la mise en place d’une assurance liées aux catastrophes météo :

Un utilisateur pourrait par exemple régulièrement envoyer de l’ether (la monnaie utilisée dans la blockchain Ethereum) à un contrat qui représente l’assurance.

Si un événement nécessitant le paiement de l’assurance a lieu, le code du Smart Contract va vérifier si toutes les conditions sont réunies, débloquer les fonds et les envoyer à l’assuré.

 

L’un des avantages est que le code du contrat ne peut être modifié, et que chaque exécution de son code, est vérifiée et acceptée consensuellement par un groupe d’utilisateurs afin de s’assurer de son bon fonctionnement (principe d’une blockchain).

 

De plus, un Smart Contract peut en appeler d’autres, c’est-à-dire invoquer du code associé à d’autres Smart Contracts.

Par exemple si un Smart Contract est associé à la météo, un autre est associé à la conformité des installations, un contrat lié à l’assurance pourrait faire appel aux deux précédents !

 

Ces propriétés intéressantes font que les Smart Contracts sont un outil très pratique pour la création et la gestion automatique de Schémas de Ponzi !

 

On va voir par quel moyen il serait possible de les détecter avec une approche Deep Learning.

 

Du bytecode à l’opcode

Le code des Smart Contracts est compilé par l’Ethereum Virtual Machine (EVM) et est transformé en bytecode.

Voici un extrait du bytecode issu d’un contrat:

 

0x606060405267016345785d8a00006002600050555b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff

 

A partir d’une table de conversion, on peut traduire cela en instructions machine propre à l’EVM:

 

PUSH1 0x60 PUSH1 0x40 MSTORE PUSH8 0x16345785D8A0000 PUSH1 0x2 PUSH1 0x0 POP SSTORE JUMPDEST CALLER PUSH1

 

Lecture d’un bytecode

 

Ces instructions machines décrivent les opérations élémentaires qui ont lieu au sein du programme.

 

On va analyser ces instructions machines à l’aide d’un réseau récurrent, afin de repérer les Smart Contracts associés aux schémas de Ponzi, les non-frauduleux, les tokens ERC20 et ERC720.

 

Les réseaux de neurones récurrents

On a vu un modèle de neurone simple, maintenant on souhaite créer un modèle plus complexe.

En effet, étant donné que la lecture d’un texte se fait séquentiellement et mot par mot, un réseau de neurones récurrent est le modèle idéal.

 

Idée intuitive

 

En effet, de même qu’un texte humain se lit comme une séquence, les instructions machine sont exécutées de manière séquentielle.

C’est pourquoi, un réseau récurrent est adapté à notre problématique.

 

A gauche on peut voir le neurone récurrent avec en boucle sa propre sortie, à droite le neurone déplié au cours du temps :

Les instructions machine sont “lues” au fur et à mesure et la boucle représentée dans le schéma à gauche correspond aux flèches horizontales du schéma de droite.

 

Dans ce modèle de couche de neurones, la sortie du neurone précédent (la prédiction) est mise en entrée du second en plus du mot suivant.

 

(Ceci est une sur-simplification des réseau de neurones LSTM et ne constitue que l’idée intuitive des réseaux de neurones récurrents)

 

Détermination du nombre de neurones récurrents nécessaires

Quelle longueur de séquence est importante?

Faut-il prendre en compte des séquences de mots de longueur 10,100,1000,10000?

 

Il est ainsi nécessaire d’examiner la distribution de la longueur des instructions machine:

On a une distribution extrêmement déséquilibrée, il est nécessaire d’examiner de plus près.

 

 

Une des premières inquiétudes résidait dans le fait que tokens et schémas de Ponzi typiques pouvaient avoir à peu près des longueurs similaires.

 

On a donc comparé la distribution de longueur des instructions machine entre schémas de Ponzi et autres types de contrats (à savoir ERC20 / ERC720) afin de voir le nombre de neurones récurrents à choisir :

 

Une des premières craintes est que la longueur ne soit pas un facteur discriminant pour les tokens. En effet, dans ce cas-là on ne pourrait pas choisir la longueur d’opcode à prendre en compte.

Après tests, la longueur optimale (celle pour laquelle on fait vraiment la différence entre token et non token) est située entre 100 et 400, 400 et 550 (d’après la p-valeur).

 

Enfin, afin d’être sûr qu’il est possible de faire la différence entre schémas de Ponzi et tokens, on a déterminé la distribution de la distance entre schémas de Ponzi et 5 tokens de référence, ainsi que la distribution de la distance entre tous les tokens et 5 tokens de référence.

 

Ensuite on a effectué un test statistique de comparaison de ces deux distributions afin de déterminer si on a bel et bien différence.

Fort heureusement, c’est le cas.

 

 

Ré-échantillonnage des données

Un des problèmes que l’on rencontre souvent dans la détection de fraudes est le déséquilibre des données.

Pour 100 contrats sur la blockchain, il y en a 99 non-suspects et 1 suspect.

 

En quoi est-ce un problème ? Les réseaux de neurones adaptent les poids de leurs connexions par descente de gradient. Si on leur montre essentiellement des contrats non frauduleux une grande partie du temps, leurs poids seront adaptés à la reconnaissance des non-frauduleux !

Cela engendre la création d’un classifieur qui n’a rien appris sur les schémas de Ponzi et qui pour ne jamais se tromper 99% du temps, dira non suspect.

 

Pour y remédier, on ré-échantillonne, c’est-à-dire que l’on va recréer un jeu de données équilibré en prélevant au hasard (50/50), parmi les Smart Contracts frauduleux et les normaux, quitte à ce qu’il y ait répétition.

 

Dans le cadre de cet article, on ne présentera pas tous les détails du ré-échantillonnage, qui nécessite non seulement d’équilibrer selon normal / fraude / token ERC21 / ERC720 , mais également selon la longueur des instructions machine etc…

 

Architecture et résultats

Notre réseau de neurone est constitué d’une couche récurrente, d’une couche dense, et d’une output layer pour la prédiction.

 

Après entraînement, on obtient la matrice de confusion suivante :

 

 

0 correspond aux contracts normaux.

1 2 3 4 aux types de schémas de Ponzi.

5 aux tokens.

 

Si vous souhaitez avoir plus de détails, vous pouvez lire mon mémoire de fin de master disponible sur mon profil Linkedin:

https://www.linkedin.com/in/jc-cazes/

 

Ajouter un commentaire


Votre commentaire sera modifié par le site si besoin.

À lire également

On a précédemment vu un modèle simple de neurone, permettant de reconnaître des chiffres. À présent, plutôt…

“En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que…

“Quand on ne sait pas où l’on va, il faut y aller… Et le plus vite possible.”…