Contexte
Le but de cette étude est de faire de la classification automatique de transactions financières frauduleuses, problématique à laquelle l’intelligence artificielle a beaucoup à apporter. Le dataset que nous utilisons contient une liste de transactions effectuées sur la plateforme d’un service de monnaie mobile, dont certaines déjà identifiées comme frauduleuses. L’idée est de faire extrapoler à un algorithme de machine learning les critères importants pour classifier une transaction comme frauduleuse, pour l’appliquer à de nouvelles données.
Le type de fraudes que nous essayons de détecter ici correspond au cas où un utilisateur malveillant essaye de prendre le contrôle du compte de quelqu’un d’autre, pour transférer les fonds vers un autre compte utilisateur (transfer) et les retirer de la plate-forme de transaction (cash-out). L’utilisateur n’étant pas forcément responsable de ce type d’attaque, ces fraudes résultent en un manque à gagner conséquent pour la compagnie concernée.
Exploration des données
On constate que les transactions frauduleuses sont de 2 types uniquement :
Ce qui correspond bien au type de fraudes que l’on cherche à détecter ici.
Cette répartition de densité met bien en avant le fait que les montants des transactions frauduleuses ont tendance à être plus élevés que ceux des transactions usuelles (au vu de la position par rapport à la valeur moyenne globale).
On remarque également que beaucoup de fraudeurs semblent opter pour des transactions de 10M (pic net vers la droite), ce qui peut être un critère intéressant pour identifier une transaction frauduleuse.
Il apparaît clairement que la quasi-totalité des transactions frauduleuses consistent à vider entièrement le compte en question, ce qui nous fournit un autre critère potentiellement intéressant.
Il est également intéressant de constater en considérant l’ensemble des transactions, que même les utilisateurs “normaux” de la plate-forme s’en servent majoritairement pour des transactions ponctuelles et ne gardent pas d’argent sur leur compte, ce qui rend l’utilisation de ce critère plus délicate.
Modélisation et résultats
L’enjeu de cette étude est d’entraîner un algorithme de machine learning sur notre jeu de données pour apprendre à identifier une fraude. Nous avons opté pour un algorithme XGboost sur nos données, et après entraînement, il est possible d’en déduire les variables d’importance globales et locales. L’idée de l’interprétabilité locale d’un modèle est de trouver parmi nos variables lesquelles contribuent le plus à la prédiction faite sur une transaction spécifique; on lit alors les graphiques de haut en bas comme une addition de probabilités dues à chaque feature.
Le graphique d'importance relative des variables à l'échelle globale nous apprend que le critère le plus efficace quand il s'agit d'identifier une fraude est le solde pré-transaction sur le compte débiteur. Comme nous l'avions discuté précédemment, le modèle a pu utiliser l'argument 'compte vidé après transaction' (newBalanceOrig), mais dans une moindre mesure car c'est le cas dans presque toutes . On constate également que le critère précédemment employé pour identifier les fraudes, isFlaggedFraud, n'est pas du tout utilisé par notre modèle, infirmant encore si besoin sa fiabilité : l'information qu'il contient est déjà contenue dans les autres champs.
Pour ce premier témoin par exemple (transaction non frauduleuse), les valeurs de oldBalanceOrig, newBalanceOrig et oldBalanceDest font augmenter la probabilité qu'il s'agisse d'une fraude; le type et 'isFlaggedFraud' n'ont pas d'impact et newBalanceDest et amount font rechuter la probabilité de fraude aux alentours de 0.
Pour ce témoin d'une transaction frauduleuse, toutes les variables qui contribuent à la probabilité de fraude y contribuent positivement : oldBalanceOrig, newBalanceOrig, newBalanceDest et amount. La valeur du total étant au-dessus du seuil fixé de détection, la transaction est identifiée comme frauduleuse.