Ce projet a pour objectif de prédire la note agrégée des restaurants à l'aide d'un algorithme de régression KNN (K-Nearest Neighbors) en se basant sur plusieurs caractéristiques issues d'un dataset extrait de la plateforme Zomato.
- Python 3
- Pandas
- NumPy
- Matplotlib / Seaborn
- Scikit-learn
Le fichier zomato.csv contient des données sur des milliers de restaurants, notamment :
- Le nombre de votes
- Le prix moyen (
Price range) - La géolocalisation (
Latitude,Longitude) - Si le restaurant propose la commande en ligne ou la réservation de table
- La note moyenne donnée par les clients (
Aggregate rating), qui constitue la variable cible
Prédire la note d'un restaurant à partir de ses caractéristiques.
On sélectionne uniquement les colonnes pertinentes pour la prédiction. On mappe les colonnes booléennes (Oui/Non → 1/0), et on supprime les lignes avec des valeurs manquantes.
df = df[['Votes', 'Price range', 'Latitude', 'Longitude',
'Has Online delivery', 'Has Table booking', 'Aggregate rating']]On applique un StandardScaler pour mettre toutes les variables à la même échelle.
On divise le dataset en données d'entraînement (80%) et de test (20%) via train_test_split.
On entraîne un KNeighborsRegressor avec n_neighbors=5.
On évalue le modèle avec les métriques classiques :
- MAE (Mean Absolute Error)
- MSE (Mean Squared Error)
- RMSE (Root Mean Squared Error)
- R² Score
On trace aussi un scatter plot entre les valeurs réelles et prédites.
Une matrice de corrélation est affichée pour mieux comprendre les liens entre les variables.
Des histogrammes des différentes colonnes sont affichés pour analyser les distributions.
Une visualisation permet de comparer visuellement les prédictions à la réalité.
# Exemple avec un resto fictif
nouveaux_restos = np.array([[250, 3, 12.9, 77.6, 1, 1]])
pred_knn = knn.predict(scaler.transform(nouveaux_restos))📌 Résultat : note prédite pour ce restaurant en fonction de ses caractéristiques.
- Tester différents
kavec GridSearchCV - Comparer avec d'autres modèles (LinearRegression, DecisionTree, etc.)
- Prendre en compte d'autres variables comme
Cuisines,City, etc. avec de l'encodage
Le modèle KNN donne des résultats satisfaisants pour ce type de données, mais il peut être sensible aux outliers ou à une mauvaise mise à l’échelle des variables.
📦knn_zomato/
┣ 📄 zomato.csv
┣ 📄 knn_model.py
┗ 📄 README.md
Projet réalisé par Thomas Clerc