F1-Score
La puntuación F1 es la media armónica de la precisión y la exhaustividad, por lo que sigue siendo baja si ambas no son altas. Fórmula, F-beta, F1 macro frente a micro y uso en detección.
La puntuación F1 es una métrica única que combina la precisión y la exhaustividad mediante su media armónica: F1 = 2 × precisión × exhaustividad / (precisión + exhaustividad). Oscila entre 0 y 1 y solo alcanza el valor 1 cuando un modelo no tiene falsos positivos ni falsos negativos. La media armónica se acerca más al menor de los dos valores, así que la puntuación F1 se mantiene baja siempre que la precisión o la exhaustividad sean bajas, por lo que suele utilizarse como métrica de resumen en problemas con clases desequilibradas, como la detección de defectos, la detección de fraude y la recuperación de documentos, donde la exactitud puede resultar engañosa. La puntuación F1 también se conoce como puntuación F equilibrada o medida F, y en las máscaras binarias de píxeles equivale al coeficiente Dice.
Cómo se calcula la puntuación F1#
Expresada en recuentos de la matriz de confusión, F1 = 2TP / (2TP + FP + FN). Los verdaderos negativos no aparecen en la fórmula, así que la F1 solo mide cómo gestiona el modelo la clase positiva. Esto resulta adecuado para tareas en las que los positivos son escasos y los negativos tienen poco interés; cuando importan los verdaderos negativos, el coeficiente de correlación de Matthews o la exactitud equilibrada tienen en cuenta las cuatro celdas. La media armónica es lo que distingue la F1 de una media simple: un modelo con una precisión de 1,0 y una exhaustividad de 0,1 tiene una media aritmética de 0,55 y una F1 de 0,18.
F-Beta y promedios multiclase#
La F1 da el mismo peso a la precisión y a la exhaustividad. La puntuación F-beta general considera que la exhaustividad es β veces más importante que la precisión, por lo que F2 favorece la exhaustividad, como en el cribado médico, donde pasar por alto un caso es costoso; F0,5 favorece la precisión, como en el filtrado de spam, donde una falsa alarma es costosa.
Con más de dos clases, se calcula la F1 de cada clase y después se promedian los resultados:
- F1 macro: media no ponderada de las puntuaciones por clase, por lo que una clase poco frecuente cuenta tanto como una común.
- F1 ponderada: media de las puntuaciones por clase ponderada según el número de ejemplos reales de cada clase.
- F1 micro: una única F1 calculada a partir de los TP, FP y FN agrupados de todas las clases. En tareas multiclase de etiqueta única, equivale a la exactitud.
from sklearn.metrics import f1_score
# Imbalanced inspection labels: 8 good parts, 2 defective parts
y_true = ["ok"] * 8 + ["defect"] * 2
y_pred = ["ok"] * 7 + ["defect"] + ["defect", "ok"]
# F1 for each class, then two ways to average them
per_class = f1_score(y_true, y_pred, labels=["ok", "defect"], average=None)
print(f"F1 ok: {per_class[0]:.3f}, F1 defect: {per_class[1]:.3f}")
print(f"Macro F1: {f1_score(y_true, y_pred, average='macro'):.3f}")
print(f"Micro F1: {f1_score(y_true, y_pred, average='micro'):.3f}")El script imprime una F1 de 0,875 para las piezas buenas y de 0,500 para los defectos, una F1 macro de 0,688 y una F1 micro de 0,800. El modelo clasifica correctamente 8 de las 10 piezas, por lo que la F1 micro equivale a su exactitud de 0,80; la F1 macro es menor porque la clase minoritaria de defectos cuenta tanto como la clase mayoritaria.
F1 en la detección de objetos#
Un detector tiene una precisión y una exhaustividad para cada umbral de confianza, así que también tiene una curva F1 en función de la confianza. El máximo de esa curva señala el umbral de confianza que mejor equilibra las detecciones falsas y los objetos no detectados: el único punto de funcionamiento con el que se ejecuta un modelo desplegado. La F1 complementa la precisión media promedio (mAP), que integra todos los umbrales para clasificar los modelos. La validación de YOLO26 guarda esta curva como BoxF1_curve.png e informa de la precisión, la exhaustividad y la F1 por clase en el nivel de confianza donde alcanza su máximo la F1 media.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validation sweeps confidence thresholds and saves BoxF1_curve.png
metrics = model.val(data="coco8.yaml")
# Precision, recall, and F1 at the confidence where mean F1 peaks
print(f"Precision: {metrics.box.mp:.3f}")
print(f"Recall: {metrics.box.mr:.3f}")
print(f"Mean F1: {metrics.box.f1.mean():.3f}")La F1 media promedia los valores de F1 por clase, por lo que puede diferir ligeramente de la media armónica de la precisión media y la exhaustividad media que aparecen arriba.










