Python, un outil de fiabilisation des reportings règlementaires Daily Mark

Python, un outil de fiabilisation des reportings règlementaires Daily Mark

Aujourd’hui, le langage de programmation python s’impose dans le milieu informatique comme un outil efficace pour l’analyse de données. Dans le cadre de cet article, nous allons expérimenter l’utilisation de python pour fiabiliser des données de reporting réglementaire en banque d’investissement. 

L’exemple utilisé dans notre cas pratique porte sur le « Daily Mark ». Il s’agit d’un reporting que les institutions financières commercialisant des produits dérivés (swaps) doivent communiquer à leurs contreparties éligibles.

Le tableau ci-dessous représente un exemple d’une extraction de rapports « Daily Mark » portant sur 2 portefeuilles XYZ et ABC. Ce rapport émis par le système de reporting règlementaire de la banque doit être contrôlé en amont. 

Le contrôle à mettre en place doit identifier la dernière version des deals éligibles au Daily Mark pour lesquels la date valeur est strictement inférieur à la date de l’extraction (Daily Mark n’est pas à jour)  

 

Pour mettre en place ce contrôle avec Python, il faudra, dans un premier temps, établir une connexion avec la base de données où se trouvent les données à analyser. Il existe aujourd’hui sur Python un certain nombre de librairies de fonctions prêtes à être utilisées. De ce fait, une installation de l’outil Python et de certains modules seront nécessaires avant d’écrire le code de notre programme Python. Dans la suite, nous allons détailler le travail en 4 étapes.  


1. Prérequis, Modules à installer/importer : 

Pour se connecter à la base de données Oracle : cx_Oracle
Lien pour l’installer : https://pypi.org/project/cx-Oracle/
 
Pour transformer le résultat de la requête SQL en fichier csv : pandas
Lien pour l’installer : https://pypi.org/project/pandas/
 
Pour envoyer le résultat du contrôle par mail : mime
Lien pour l’installer : https://pypi.org/project/mime/
 
From email.mime.multipart import MIMEMultipart
From Email.mime.text import MIMEText
From Email.mime.base import MIMEBase
 
 

2. Exécution d’un code python pour analyser les deals éligibles ayant un mark to market non actualisé :

Ci-dessous le code à exécuter afin de ressortir les deals qui ont un mark to market qui n’est pas à jour (ligne soulignée en jaune ci-dessus dans notre exemple/tableau) : 

#Cette première partie est pour l’import des librairies de fonctions :
Import cx Oracle
import Pandas as pd
From Email.mime multipart import MIMEMultipart
From Email.mime.text import MIMEText
From Email.mime.base import MIMEBase

 

Configuration de l’environnement 

#Cette partie du code nous permettra la déclaration des variables qu’on utilisera plus tard : 
User=DB_USER_NAME
Password=DB_PASSWORD
host=DB_HOST
port=Port_name
SID=DB_Service_Name
Dsn=cx_Oracle.makedsn(host,port,service_name=SID)
Email_sender=”business¬_analyste@gmail.com”#adresse mail expediteur
Email_receiver=”analyste_risque@gmail.com”#adresse mail receveur
Mail_server=#adresse du serveur mail 
Mail_port =25
Mail_Subject= »Contrôle Rapport Daily Mark »
Mail_body= »Bonjour, ci-joint le deals eligibles daily mark pour lesquels le mark to market n’est pas à jour »
 

3. Exécution d’un code Python pour la conversion d’un fichier en CSV

Try:
 
With cx Oracle connect (user, Password.Dsn, encoding= »UTF-8″) as connection:
Print(connection version) #pour voir la vesion de la base de données
 
#ci-dessous la requête SQL à utiliser pour faire notre contrôle
Control_query_df=pd.read_sql(« select
Date.Deal_id,Max(Version),Portefeuille,MarkToMarket,Date_Valeur
from transactions where Eligible_daily_mark=1 and Date_Valeur<Date ») 
 
#ci-dessous une fonction de pandas qui va convertir notre requête en csv 
Control-query-dr.to_csv(‘DailyMarket_Control.csv’, index=False)
 
Def send-alert(files,date,Control-query-df)
 

4. Envoi du résultat de l’analyse par mail

Try: 
 
Msg=MIMEMultipart()
Msg[‘subject’]=’Contrôle du rapport Daily Mark »
msg[‘From]=Email_sender
msg[‘To’]=Email-receiver
message_html=Mail_body
 
for file in files:  
part=MIMEBase(‘application’, « octet-stream »)
part.set-payload(open(file. »rb »).read’))
encoders.encode_base64(part)
part.add_header(‘Content-Disposition’, ‘attachement’; filename=”%s”’ % os.path.basename(file))
msg.attach(part)
 
mailserver = smtplib.SMTP(Mail_Server, Mail_Port)
 
mailserver.sendmail=(Mail_Sender, Mail_Receiver, msg.as_string())
mailserver.quit()
 
Except Exception as error:
Print(‘Error occurred’,error)
 
Après la mise en place de ce contrôle, un email sera envoyé à l’analyste avec un fichier csv attaché contenant les dernières versions des deals éligibles au daily mark pour lesquels la date valeur est strictement inférieure à la date de l’extraction :
 
 
Suite à l’investigation des équipes opérationnelles, ce problème pourrait être dû à un pricing non effectué sur ces deals et donc une action de remédiation serait de relancer leur pricing pour cette date. 
 
 

Conclusion : 

L’écosystème financier avec son élan de transformation numérique et organisationnel change les métiers et les outils utilisés. Il est clair qu’aujourd’hui le métier de business analyste est contraint d’évoluer afin de répondre au mieux aux contraintes du marché. Au terme de cet article nous constatons que l’utilisation de python peut s’avérer simple à mettre en place et très efficace. 
De plus, il apporte un gain de temps considérable sur des tâches de contrôle quotidiennes qui peuvent prendre en moyenne 1H à 2H par jour. 
 
Avec cette solution, il suffit de 2H pour faire la mise en place du process python et ensuite le contrôle se fera automatiquement et notre rôle sera plutôt de définir et suivre les actions correctives avec nos stakeholders.
 
 

Zacharie Essaies, consultant MOA

En réagissant à cet article, vous nous permettez d'affiner les contenus que nous publions ici !

  • Awesome (1)
  • Interesting (0)
  • Useful (0)
  • Boring (0)
  • Sucks (0)

Si cet article vous a plu, n’hésitez pas à le partager via