
📊 La accuracy te puede mentir. El F1 Score no.
Si tu dataset tiene clases desbalanceadas (por ejemplo, 95% negativo, 5% positivo), un modelo que predice “negativo” siempre tiene 95% de accuracy. Pero su F1 Score sería 0. Eso es exactamente lo que querés saber.
🧮 Las tres métricas clave:
| Métrica | Pregunta que responde |
|---|---|
| Precision | De todos los que predije positivo, ¿cuántos realmente lo son? TP / (TP+FP) |
| Recall | De todos los positivos reales, ¿cuántos detecté? TP / (TP+FN) |
| F1 Score | ¿Cuánto equilibrio hay entre ambas? Media armónica de Precision y Recall |
📐 La fórmula:
$$F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}$$La media armónica penaliza los valores extremos. Si precision=0.90 y recall=0.10, el F1 es ≈ 0.18, no 0.50.
🐍 En Python con scikit-learn:
from sklearn.metrics import f1_score, classification_report
y_true = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
y_pred = [1, 0, 1, 1, 0, 0, 0, 1, 0, 0]
print(f"F1 Score: {f1_score(y_true, y_pred):.2f}")
# F1 Score: 0.67
print(classification_report(y_true, y_pred))📏 Cómo interpretar el resultado:
- 0.0–0.5: Modelo deficiente
- 0.6–0.7: Aceptable (puede ser un punto de partida)
- 0.8–0.9: Modelo sólido
- 0.9–1.0: Excelente
⚠️ ¿Cuándo NO usar F1?
- Cuando un tipo de error es mucho más costoso que el otro (usá Precision o Recall individualmente)
- Cuando las clases están balanceadas y todos los errores valen igual (usá accuracy)
Más información en el link 👇
También publicado en LinkedIn.

