TÉMOIGNAGE : « Python est-il vraiment le meilleur langage pour la data science dans la finance ? »
Ah... les langages de programmation… Combien d’entre nous n’avons pas assisté à des débats interminables sur les avantages respectifs de tel ou tel langage de programmation ? Ces débats sont au moins aussi communs que ceux sur les mérites relatifs d'Emacs versus Vim ou sur les tabulations versus les espaces (l'auteur a même été témoin d'un combat physique qui a essayé - sans y parvenir - de résoudre cette question séculaire).
Cependant la question "quel langage de programmation dois-je utiliser ?" n'est pas là pour faire tapisserie. Faites un mauvais choix et ce dernier reviendra vous hanter dans les étapes ultérieures de votre projet informatique.
Plusieurs programmeurs parmi les plus brillants ayant testé tous les langages de programmation existants à ce jour en sont arrivés à la conclusion qu’aucun d’entre eux ne répondait à leurs besoins. Ils ont alors décidé de se lancer dans une aventure : écrire un nouveau langage de programmation. Ces génies en dissimulent souvent la vraie raison : écrire un langage de programmation est 'fun'.
Les langages de programmation sont généralement initiés par des individus : APL par Kenneth E. Iverson, C par Dennis Ritchie, C ++ par Bjarne Stroustrup, Java par James Gosling, kdb + / q par Arthur Whitney, LISP par John McCarthy, Perl par Larry Wall, Python par Guido van Rossum… Pourtant, leur succès dépend en grande partie des efforts concertés des communautés de programmation respectives.
Nous vivons désormais à l'ère de la data science et du machine learning. L’objectif principal du data scientist est de découvrir des relations cachées dans un kit de données - une collection d’observations ou de lectures - que cela concerne les cours des actions, des dossiers médicaux ou des listings de réclamations d’assurance. La rapidité de développement et l'accessibilité sont essentielles. La syntaxe de Python est très concise (pensez à la compréhension des listes !), fluide et lisible. Il n’est pas surprenant que Python soit souvent l’arme de prédilection du data scientist.
De nombreux algorithmes de machine learning sont faciles à utiliser mais difficiles à implémenter. Il serait naïf (et inutile) pour le data scientist de les implémenter lui-même : mieux vaut déléguer certaines choses aux experts. Habituellement, ces algorithmes sont packagés dans des bibliothèques réutilisables. Python est connu pour l'abondance d'excellentes bibliothèques fournies par de grandes communautés de programmeurs : NumPy pour le traitement de tableaux multidimensionnels, SciPy pour l'algèbre linéaire et l'informatique scientifique, Matplotlib pour la visualisation, Pandas pour les données chronologiques (sachant que la plupart des données en finance proviennent de séries chronologiques), Keras pour les réseaux neuronaux, pour ne citer qu'eux. Dans la data science, Python a peu de concurrents sauf peut-être R, réputé pour ses excellentes bibliothèques de statistiques.
Les ingénieurs software (plutôt que les data scientists) qui développent des systèmes logiciels volumineux, robustes et de qualité industrielle, vont probablement bondir à ce stade, mais Python est lent et dangereux ! Lent, car le Global Interpreter Lock (GIL) empêche que plusieurs threads exécutent en même temps le byte-code Python. Non sécurisé, car Python est conçu de manière dynamique, plutôt que statique, et passe à côté des contrôles compile-time qui empêchent les utilisateurs d'exécuter du code non sensé – le type de contrôles qu'offrirait la stipulation de données types dans les signatures de fonction. Avec Python, vous pouvez pratiquement tout transmettre à une fonction : le code s'exécutera tant que l'objet transmis à la fonction prendra en charge toutes les signatures de méthodes et tous les attributs attendus de cet objet au moment de l'exécution. Cette approche 'laissez-faire' est connue sous le nom de canard boiteux en l'honneur d'une phrase du poète de l'Indiana, James Whitcomb Riley: « Quand je vois un oiseau qui marche comme un canard, nage comme un canard et se comporte comme un canard, j'appelle cet oiseau un canard ».
Les pythonistes répondront : c'est vrai, mais Python est un langage parfait pour écrire des enveloppes autour de bibliothèques rédigées dans d'autres langages, plus sûr et plus performant, il est donc souvent utilisé comme une sorte de "colle" de programmation.
En effet, les points forts de Python sont aussi ses faiblesses. La sécurité typographique obsolète des langages de programmation de la famille C, tels que C ++, Java et C #, les rend certes plus encombrants pour la data science et le prototypage rapide, mais facilite l'écriture de systèmes simples qui fonctionnent bien sous stress dans la phase production.
Rien ne vaut la vitesse du C ++ (à part peut-être le C raw, qui est encore plus proche du métal), mais sa vitesse a un prix : la nécessité d’un débogage d'allocation de mémoire complexe et exigeant en main-d’œuvre. Bien que l'auteur soit lui-même un programmeur C ++, il choisirait probablement Java et C # lorsqu'il n'écrit pas un système de trading à faible latence.
Dans nos systèmes de trading, nous utilisons généralement Python pour la data science. Les modèles sont prototypés, calibrés et testés en Python. Les résultats sont ensuite transmis à un système de production implémenté en Java. Cette division du travail entre Python ou R et un langage de typeC est courante parmi les équipes quantitatives. Les créateurs du langage de programmation Julia tentent de combiner les avantages de Python / R pour la data science et le prototypage et des langages de type Java pour la production. C’est un effort noble et stimulant que nous suivons avec intérêt.
Il existe d’autres langages de programmation qu’un bon data scientist devrait connaître. L'un d'eux est kdb + / q. Pour être plus précis, q est le langage de programmation et kdb + est une base de données implémentée. kdb + / q est irremplaçable lorsqu'un data scientist traite d'énormes ensembles de données (avec des dizaines de millions de lignes de données voire plus) et doit les comprendre rapidement. Il est également utilisé pour générer des captures de données dans des environnements où les datas arrivent en temps réel, tel que le trading algorithmique.
Lors du choix d'un langage de programmation, vous devez prendre en compte des considérations pratiques, et pas seulement esthétiques. Et bien que l'apprentissage de la syntaxe de la langue prend relativement peu de temps, il faut de l'exercice pour la maîtriser. En ce sens, programmer, c'est un peu comme jouer aux échecs : il est facile d'apprendre les règles du jeu, mais difficile de devenir un maître. Jusque-là, votre meilleure option est d'apprendre Python en espérant qu'un miracle s'opère.
Ancien trader quantitatif et algorithmique chez Deutsche Bank, Citi et Nomura, Paul Bilokon enseigne également à temps partiel à l'Imperial College de Londres. Il est l'un des fondateurs des Thalésiens, une société d’Intelligence Artificielle (IA) spécialisée dans la néo-cybernétique, l’économie numérique, la finance quantitative, l’éducation et le conseil.
Vous avez un scoop, une anecdote, un conseil ou un commentaire que vous aimeriez partager ? Contact : tiochem@efinancialcareers.com