VinyleXplore est un moteur de recommandation de vinyles intelligent basé sur l'humeur et le contexte d'écoute de l'utilisateur. Il utilise FastAPI pour exposer une API REST et scikit-learn pour entraîner un modèle de Machine Learning qui améliore la pertinence des suggestions.
- Recommandation d'albums en fonction :
- De l'humeur de l'utilisateur (motivé, paisible, amoureux, etc.).
- Du moment de la journée (matin, midi, soir...).
- De la saison actuelle.
- Du lieu où se trouve l'utilisateur.
- Du nombre d'écoutes passées.
- Du genre et du style musical des albums.
- Sélection aléatoire d’un album si aucune humeur n'est définie.
- Moteur basé sur un modèle de Machine Learning entraîné avec
RandomForestClassifier
. - Exposition via une API REST avec FastAPI.
git clone [url_du_referentiel]
cd vinylexplore_ml
python -m venv venv
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
pip install -r requirements.txt
uvicorn app.main:app --reload
L'API sera disponible à l'adresse http://127.0.0.1:8000.
Route : POST /recommend
Corps de la requête (JSON) :
{
"context": {
"dayOfWeek": "vendredi",
"timeOfDay": "soir",
"season": "hiver",
"mood": "motivé",
"location": "maison"
},
"albums": [
{
"id": 1,
"moods": [
"motivé",
"en soirée"
],
"playCount": 3,
"lastPlayedAt": 1700000000,
"listeningHistory": [],
"ignoredCount": 1,
"listenedCount": 2,
"genre": "Rock",
"style": "Alternative Rock"
},
{
"id": 2,
"moods": [
"paisible"
],
"playCount": 10,
"lastPlayedAt": 1700000000,
"listeningHistory": [],
"ignoredCount": 3,
"listenedCount": 7,
"genre": "Jazz",
"style": "Smooth Jazz"
}
]
}
Réponse attendue :
{
"id": 1,
"moods": [
"motivé",
"en soirée"
],
"playCount": 3,
"lastPlayedAt": 1700000000,
"listeningHistory": [],
"ignoredCount": 1,
"listenedCount": 2,
"genre": "Rock",
"style": "Alternative Rock"
}
Transformation des catégories (dayOfWeek, mood, etc.) en valeurs numériques. Gestion des valeurs None (remplacement par 0 si nécessaire). Création d'un DataFrame pour la prédiction.
Utilisation d'un RandomForestClassifier entraîné sur des écoutes réelles. Le modèle classe les albums comme "écouté" ou "ignoré".
- Diversité : Moins un album a été écouté, plus il est recommandé.
- Match Humeur-Genre : Si le genre ou le style correspond à l'humeur, bonus de score.
- Correspondance avec l’historique d’écoute : Les albums déjà appréciés sont favorisés.
- Mélange des albums de score égal pour éviter la répétition.
- Si mood est null → Sélection totalement aléatoire.
- Sinon → Album avec le meilleur score et mélange des résultats.
Le modèle est entraîné avec des données simulées dans train_model.py
:
python app/train_model.py
- Ajout du filtrage temporel pour éviter de recommander un album écouté récemment.
- Prise en compte des albums jamais écoutés dans la recommandation.
- Affinage du modèle avec de véritables données d’écoute utilisateurs.
Ce projet est sous licence MIT.