Taux de classification sur la base de validation (2020) : 62.88%
Ce projet implémente un algorithme de classification pour prédire l'évolution du cours du Bitcoin (hausse ou baisse) en utilisant des techniques d'optimisation continue et de machine learning. L'objectif est de développer un prédicteur capable de déterminer si le cours du Bitcoin va augmenter (classe 0) ou diminuer (classe 1) le jour suivant.
Construire un algorithme de descente de gradient personnalisé pour résoudre un problème de classification binaire basé sur l'historique des cotations du Bitcoin en 2020 et 2021.
Le projet utilise deux fichiers CSV contenant l'historique journalier du Bitcoin :
- Cotations2020.csv : Base de validation
- Cotations2021.csv : Base d'apprentissage
Chaque fichier contient 5 colonnes :
- Date : Jour de la cotation
- Ouverture : Valeur en euros à l'ouverture du marché
- Plus Haut : Valeur maximale du jour
- Plus Bas : Valeur minimale du jour
- Clôture : Valeur à la clôture du marché
- Python 3.x
- Pandas : Manipulation des données
- NumPy : Calculs vectoriels et matriciels
- Matplotlib : Visualisation des résultats
- Seaborn : Graphiques avancés
- Math : Fonctions mathématiques
La fonction CreerData() transforme les données brutes en vecteurs d'apprentissage :
- Historique (h) : 22 jours
- Features : 3 caractéristiques par jour (Plus Bas, Plus Haut, Clôture normalisés)
- Dimension du vecteur : 66 (3 × 22)
Fonction de séparation :
H(v) = weights · x + constant
Fonction d'activation : Sigmoïde logistique
S(x) = 1 / (1 + e^(-λx))
Fonction de perte : Entropie croisée (cross-entropy)
L = -Σ [c·log(S(H)) + (1-c)·log(1-S(H))]
Algorithme utilisé : Adam (Adaptive Moment Estimation)
Paramètres optimisés :
- Learning rate : 3
- Beta1 : 0.9999
- Beta2 : 0.9
- Epsilon : 0.31
- Seuil de prédiction : 0.51 (au lieu de 0.50 pour améliorer les performances)
Critère d'arrêt : Norme du gradient < epsilon
Le modèle affiche :
- Le taux de bonnes classifications
- La matrice de confusion (Vrais Positifs, Faux Positifs, Vrais Négatifs, Faux Négatifs)
- L'évolution de l'erreur et de la norme du gradient pendant l'apprentissage
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
import math
import random as rd# Charger les données d'apprentissage
(RawData, RawC) = LireDonnees("Cotations2021.csv")
(D, C) = CreerData(RawData, RawC)
# Entraîner le modèle
(weights, constant) = Algorithme_Gradient()# Prédictions sur la base d'apprentissage
Cpred = PredictionsOnBase(weights, constant, D)
# Prédictions sur la base de validation (2020)
(RawData, RawC) = LireDonnees("Cotations2020.csv")
(D, C) = CreerData(RawData, RawC)
Cpred = PredictionsOnBase(weights, constant, D)| Fonction | Description |
|---|---|
LireDonnees(NomFichier) |
Lit un fichier CSV et crée les structures RawData et RawC |
CreerData(RawData, RawC) |
Transforme les données brutes en matrices D et vecteur C |
H(weights, constant, point) |
Calcule la fonction de séparation linéaire |
Sigmoid(x, lamda) |
Applique la fonction sigmoïde |
Loss_function(weights, constant) |
Calcule la fonction de perte |
Gradient(weights, constant) |
Calcule le gradient de la fonction de perte |
Algorithme_Gradient() |
Implémente l'algorithme Adam |
Prediction(weights, constant, v) |
Prédit la classe pour un vecteur v |
PredictionsOnBase(weights, constant, D) |
Prédit les classes pour une base complète |
- Choix de l'historique : 22 jours optimisent le compromis biais-variance
- Normalisation des features : Différences relatives plutôt que valeurs absolues
- Algorithme Adam : Convergence plus rapide que la descente de gradient classique
- Seuil de prédiction ajusté : 0.51 au lieu de 0.50 pour +0.44% de précision
- Epsilon optimisé : 0.31 pour limiter le surapprentissage
Bitcoin Classification.ipynb: Notebook principal avec le code et l'analyseCotations2020.csv: Données de validationCotations2021.csv: Données d'apprentissage
Aetis404
Projet réalisé dans le cadre de l'option Optimisation IA
Ce projet démontre l'application pratique des algorithmes d'optimisation continue pour résoudre des problèmes de machine learning réels.