Benchmark : Trouver le Meilleur Rapport Qualité/Prix
Analysez les scores de benchmark et les prix API de dizaines de LLMs pour trouver le modèle au meilleur rapport qualité/prix avec Python.
Objectif du TP
Quel modèle d''IA offre le meilleur rapport qualité/prix ? Dans ce cas pratique, vous allez analyser un dataset contenant les scores de benchmark et les prix API de dizaines de LLMs pour répondre à cette question avec des données.
Prérequis
- Python 3.8+, Pandas, Matplotlib
- Un compte Kaggle (gratuit)
Datasets
- Large Language Models Comparison Dataset – Kaggle — Scores MMLU, HumanEval, prix API
- AI Models Benchmark Dataset 2026 – Kaggle — Benchmarks récents
Exercice 1 : Explorer le Dataset
import pandas as pd
# Charger le dataset
df = pd.read_csv("llm_comparison.csv")
# Aperçu
print(f"Nombre de modèles : {len(df)}")
print(f"Colonnes : {df.columns.tolist()}")
print(df.head())
# Statistiques descriptives
print(df.describe())
Questions :
- Combien de modèles sont référencés ?
- Quelles métriques de benchmark sont disponibles ?
- Y a-t-il des valeurs manquantes dans les prix ?
Exercice 2 : Visualiser Qualité vs Coût
Créez un graphique scatter pour voir d''un coup d''œil quels modèles offrent le meilleur compromis.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(12, 7))
# Scatter plot
scatter = ax.scatter(
df["price_per_1m_tokens"],
df["mmlu_score"],
s=60,
c="#6366f1",
alpha=0.7,
edgecolors="white",
linewidth=0.5
)
# Annoter chaque point
for _, row in df.iterrows():
ax.annotate(
row["model_name"],
(row["price_per_1m_tokens"], row["mmlu_score"]),
fontsize=6,
alpha=0.8,
xytext=(5, 5),
textcoords="offset points"
)
ax.set_xlabel("Prix par million de tokens ($)", fontsize=12)
ax.set_ylabel("Score MMLU (%)", fontsize=12)
ax.set_title("Qualité vs Coût des LLMs", fontsize=14)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("qualite_vs_cout.png", dpi=150)
plt.show()
Ce qu''il faut chercher : Les modèles en haut à gauche (haute qualité, bas prix) sont les meilleurs deals. Ceux en bas à droite (basse qualité, haut prix) sont à éviter.
Exercice 3 : Calculer le Rapport Qualité/Prix
# Score de rapport qualité/prix
# On ajoute 0.01 pour éviter la division par zéro (modèles gratuits)
df["rapport_qp"] = df["mmlu_score"] / (df["price_per_1m_tokens"] + 0.01)
# Top 10 meilleur rapport
top10 = df.nlargest(10, "rapport_qp")[["model_name", "mmlu_score", "price_per_1m_tokens", "rapport_qp"]]
print("=== Top 10 Meilleur Rapport Qualité/Prix ===")
print(top10.to_string(index=False))
# Top 10 pire rapport
worst10 = df.nsmallest(10, "rapport_qp")[["model_name", "mmlu_score", "price_per_1m_tokens", "rapport_qp"]]
print("\n=== Top 10 Pire Rapport Qualité/Prix ===")
print(worst10.to_string(index=False))
Exercice 4 : Simulation de Budget
Vous êtes CTO d''une startup. Vous devez choisir un modèle pour un chatbot qui traite 1 000 conversations par jour (200 tokens input + 400 tokens output chacune).
# Calcul du coût mensuel pour chaque modèle
tokens_input_jour = 1000 * 200 # 200k tokens/jour
tokens_output_jour = 1000 * 400 # 400k tokens/jour
# Supposons que price_per_1m_tokens est le prix moyen (input+output)
df["cout_jour"] = (tokens_input_jour + tokens_output_jour) / 1_000_000 * df["price_per_1m_tokens"]
df["cout_mois"] = df["cout_jour"] * 30
# Trier par coût mensuel
budget = df[["model_name", "mmlu_score", "cout_mois"]].sort_values("cout_mois")
print("=== Coût Mensuel Estimé ===")
print(budget.to_string(index=False))
# Modèles avec MMLU > 80% triés par coût
good_and_cheap = budget[df["mmlu_score"] > 80].head(10)
print("\n=== Modèles MMLU > 80% les Moins Chers ===")
print(good_and_cheap.to_string(index=False))
Résultat attendu : Vous verrez que certains modèles open-source coûtent moins de 5€/mois pour ce volume, tandis que les modèles premium dépassent 100€/mois.
Exercice 5 : Graphique Radar Multi-Critères
Comparez 3 modèles sur plusieurs dimensions à la fois.
import numpy as np
# Choisir 3 modèles à comparer (adaptez les noms selon votre dataset)
models_to_compare = ["gpt-4o", "claude-3-sonnet", "llama-3-70b"]
subset = df[df["model_name"].isin(models_to_compare)]
# Normaliser les métriques entre 0 et 1 (inversé pour le prix : moins = mieux)
metrics = ["mmlu_score", "humaneval_score", "price_per_1m_tokens"]
labels = ["MMLU", "HumanEval", "Coût (inversé)"]
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
angles += angles[:1] # Fermer le polygone
colors = ["#6366f1", "#f59e0b", "#10b981"]
for i, (_, row) in enumerate(subset.iterrows()):
values = [
row["mmlu_score"] / 100,
row.get("humaneval_score", 50) / 100,
1 - min(row["price_per_1m_tokens"] / 50, 1), # Inversé et normalisé
]
values += values[:1]
ax.plot(angles, values, "o-", linewidth=2, label=row["model_name"], color=colors[i])
ax.fill(angles, values, alpha=0.1, color=colors[i])
ax.set_thetagrids(np.degrees(angles[:-1]), labels)
ax.set_ylim(0, 1)
ax.legend(loc="upper right", bbox_to_anchor=(1.3, 1.1))
ax.set_title("Comparaison Multi-Critères", fontsize=14)
plt.tight_layout()
plt.savefig("radar_comparison.png", dpi=150)
plt.show()
Pour Aller Plus Loin
- Ajoutez la vitesse (tokens/seconde) comme critère en récupérant les données sur Artificial Analysis
- Comparez les résultats avec les prix actuels sur OpenRouter (les prix changent régulièrement)
- Créez un score composite personnalisé en pondérant les critères selon vos priorités
Specialiste IA — Master Intelligence Artificielle
Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.
Continuer a apprendre
TP : Créer un Chatbot RAG de A à Z
Construisez un chatbot intelligent qui répond en se basant sur vos documents : chunking, embeddings, vector store, prompt engineering et interface web.
TP : Fine-tuner un LLM sur vos Données
Apprenez à fine-tuner un LLM (Llama, Mistral) avec LoRA/QLoRA sur vos données métier : préparation du dataset, entraînement, évaluation et déploiement avec Ollama.
Token Trainer
Prédisez comment un tokenizer découpe les phrases en tokens ! Cliquez entre les caractères pour placer vos séparations et découvrez les règles de tokenization.