Retour aux projets

Finance quantitative · Data science · Machine Learning

Projet de machine learning appliqué à l’allocation

Ce projet est lié aux projets « Backtest et optimisation de portefeuille » et « Application de suivi de patrimoine »: il constitue la brique machine learning utilisée pour tester des signaux et comparer leur impact sur la performance portefeuille. Le repo structure un pipeline complet, de la préparation des données marché à la production de métriques test, avec une logique reproductible (scripts dédiés + orchestration run_all). L’approche combine des baselines classiques (Equal Weight, Markowitz Minimum Variance) et des modèles supervisés (Random Forest, Logistic Regression) pour prédire la direction des rendements journaliers et transformer ces probabilités en poids de portefeuille.

PythonPandasNumPyscikit-learnMatplotlibSeaborn

Ce que ce projet démontre

Capacité à transformer un sujet quantitatif en pipeline ML exploitable: ingénierie de features, sélection de variables, entraînement multi-modèles, comparaison à des baselines financières et restitution claire des résultats.

Projet de machine learning appliqué à l’allocation - detailed view

Mon rôle

Participation à la structuration du projet, à l’intégration des modules de comparaison de stratégies et à la formalisation d’un flux complet: préparation des données, entraînement, backtest et reporting.

Contexte

L’objectif était de dépasser un simple notebook exploratoire pour produire une base de travail rigoureuse et collaborative: code modulaire, scripts dédiés, métriques exportées et graphes de comparaison directement utilisables.

Objectif

Évaluer de manière structurée l’apport de modèles supervisés sur l’allocation de portefeuille, en conservant un point de référence financier robuste grâce aux baselines Equal Weight et Markowitz.

Deep dive

Lecture technique du projet

Le projet suit une logique quant/ML complète: ingestion des prix, construction de features techniques, entraînement de modèles directionnels par actif, backtest de portefeuille, puis comparaison systématique aux baselines.

  • Préparation des données et EDA (prix normalisés, distribution des rendements, corrélations, volatilité roulante).
  • Baselines financières: Equal Weight Buy & Hold et Markowitz Minimum Variance.
  • Modélisation supervisée par actif: Random Forest et Logistic Regression.
  • Backtest des stratégies ML sur la période test avec conversion des probabilités en poids portefeuille.
  • Export des métriques et figures pour lecture comparative.

Captures

Écrans et visualisations clés

Pipeline machine learning de comparaison de stratégies portefeuille

Vue synthétique du pipeline ML et des courbes de stratégies comparées.

Comparaison Random Forest et baselines sur période test

Comparaison visuelle du modèle Random Forest face aux baselines financières.

Architecture

Organisation technique

Couche données

Modules `src/data/load_data.py` et `src/data/preprocess.py` pour charger les prix, calculer les rendements et séparer train/test de façon temporelle.

Feature engineering

Construction d’indicateurs techniques (`src/features/technical_indicators.py`) et sélection ANOVA (`src/features/feature_selection.py`) sur les variables pertinentes.

Modèles et stratégies

Implémentation de baselines financières (`src/baselines`) et modèles ML (`src/models/random_forest.py`, `src/models/logistic_regression.py`) avec logique de backtest.

Orchestration et reporting

Scripts `scripts/run_*.py` + `run_all.py` pour exécuter le pipeline complet, générer les tables de métriques et les graphes d’equity curve.

Pipeline

Flux de données

  1. 1.Chargement des séries de prix et calcul des rendements quotidiens.
  2. 2.Création des features techniques et sauvegarde de la table consolidée.
  3. 3.Séparation temporelle train/test et entraînement des modèles par actif.
  4. 4.Projection des signaux/probabilités en poids de portefeuille sur la période test.
  5. 5.Calcul des equity curves et des métriques de comparaison inter-stratégies.
  6. 6.Export des résultats (`reports/tables`, `reports/figures`) pour analyse décisionnelle.

Choix techniques

Décisions structurantes

Comparaison systématique aux baselines

Chaque stratégie ML est évaluée face à Equal Weight et Markowitz pour garder un référentiel financier stable, pas uniquement un score de classification.

Découpage temporel explicite

Le split train/test suit la chronologie marché afin de limiter les biais de fuite d’information sur séries temporelles.

Sélection ANOVA + GridSearchCV

Random Forest combine une réduction de dimension des features et un réglage d’hyperparamètres pour éviter une approche purement arbitraire.

Modélisation par actif puis agrégation portefeuille

Les prédictions sont faites par ticker puis agrégées via une logique de pondération, ce qui rapproche le modèle du besoin allocation réel.

Fiabilité

Qualité et contrôles

  • Scripts dédiés par étape pour reproductibilité et débogage ciblé.
  • Exports versionnables des métriques et visualisations de test.
  • Structure modulaire (`src/data`, `src/features`, `src/models`, `src/baselines`, `scripts`) compatible travail en équipe.

Limites

Points d'attention actuels

  • Les performances restent dépendantes de la fenêtre historique et du régime de marché observé.
  • Les frictions de marché réelles sont simplifiées (coûts de transaction, liquidité, slippage avancé).
  • Validation encore perfectible (walk-forward robuste, stress tests plus systématiques).

Évolutions

Prochaines étapes

  • Ajouter une validation walk-forward et des protocoles de robustesse hors-échantillon plus stricts.
  • Étendre la bibliothèque de modèles (ex: gradient boosting) dans le même cadre de comparaison.
  • Relier automatiquement les sorties du pipeline ML aux modules de suivi patrimonial.

Difficultés rencontrées

Les principaux enjeux du projet

Construire un pipeline temporel propre (train/test) pour limiter les biais de fuite d’information dans un contexte série temporelle.

Comparer des approches de nature différente (allocations statiques vs modèles supervisés) avec des métriques homogènes.

Maintenir une architecture lisible malgré la multiplication des briques (features, modèles, baselines, scripts d’orchestration).

Résultats et apprentissages

Ce que j'en retiens

Mise en place d’un enchaînement reproductible via scripts (`run_prepare.py`, `run_baselines.py`, `run_random_forest.py`, `run_logistic_regression.py`, `run_all.py`).

Production systématique de rapports de test (`metrics_test_*`) et de figures comparatives (`equity_*_vs_baselines_test.png`).

Intégration de Random Forest avec sélection ANOVA des variables et recherche d’hyperparamètres (`GridSearchCV`).

Ajout d’un benchmark supervisé Logistic Regression comparé aux stratégies financières classiques.

Autres projets

Continuer la visite

Application de suivi de patrimoine - project preview

Finance personnelle · Python · PyQt6

Application de suivi de patrimoine

Application desktop PyQt6 + SQLite pour centraliser des comptes multi-actifs, reconstruire l’historique hebdomadaire et analyser la performance d’un portefeuille.

Voir ce projet
Backtest et optimisation de portefeuille - project preview

Finance quantitative · Analyse · Python

Backtest et optimisation de portefeuille

Environnement Python pour backtester des stratégies, comparer des métriques risque/rendement et analyser un portefeuille.

Voir ce projet

Échanger

Je peux détailler les choix techniques et les résultats en entretien.

Si ce projet vous intéresse, je peux revenir plus précisément sur le besoin initial, la structure des données, les hypothèses, les difficultés rencontrées et les limites de l'analyse.