まとめ
- F1 Score | La media armónica de precisión y exhaustividadの概要を押さえ、評価対象と読み取り方を整理します。
- Python 3.13 のコード例で算出・可視化し、手順と実務での確認ポイントを確認します。
- 図表や補助指標を組み合わせ、モデル比較や閾値調整に活かすヒントをまとめます。
1. Definición #
Con precisión \(P\) y exhaustividad \(R\), el F1 se define como F_1 = 2 \cdot \frac{P \cdot R}{P + R}. La versión general Fβ permite ponderar más el recall (\(\beta > 1\)) o la precisión (\(\beta < 1\)): F_\beta = (1 + \beta^2) \cdot \frac{P \cdot R}{\beta^2 P + R}.
2. Cálculo en Python 3.13 #
python --version # p. ej. Python 3.13.0
pip install scikit-learn matplotlib
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, f1_score, fbeta_score
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = make_classification(
n_samples=40_000,
n_features=20,
n_informative=6,
weights=[0.95, 0.05],
random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, stratify=y, random_state=42
)
model = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=2000, class_weight="balanced"),
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred, digits=3))
print("F1:", f1_score(y_test, y_pred))
print("F0.5:", fbeta_score(y_test, y_pred, beta=0.5))
print("F2:", fbeta_score(y_test, y_pred, beta=2.0))
classification_report resume precisión, exhaustividad y F1 por clase.
3. Cómo varía el F1 con el umbral #
Si disponemos de probabilidades, podemos representar cómo evoluciona el F1 al mover el umbral de decisión.
from sklearn.metrics import f1_score, precision_recall_curve
proba = model.predict_proba(X_test)[:, 1]
precision, recall, thresholds = precision_recall_curve(y_test, proba)
thresholds = np.append(thresholds, 1.0)
f1_scores = [
f1_score(y_test, (proba >= t).astype(int))
for t in thresholds
]

Localiza el pico para elegir el umbral con mejor equilibrio entre precisión y recall.
- El máximo indica el mejor compromiso entre precisión y recall cuando ambos son igual de relevantes.
- Usa F0.5 (prioriza precisión) o F2 (prioriza recall) si las necesidades del negocio así lo requieren.
4. Estrategias de promedio en escenarios multiclase #
El parámetro verage de scikit-learn permite agrupar F1 en problemas multiclase o multilabel:
- macro — media simple de los F1 por clase.
- weighted — media ponderada por el soporte de cada clase.
- micro — se calcula sobre la confusión global; puede ocultar el comportamiento de clases minoritarias.
from sklearn.metrics import f1_score
f1_macro = f1_score(y_test, y_pred, average="macro")
f1_weighted = f1_score(y_test, y_pred, average="weighted")
En multietiqueta, verage=“samples” devuelve la media por muestra.
Resumen #
- F1 equilibra precisión y exhaustividad; conviene graficarlo frente al umbral para elegir el punto de operación.
- Los Fβ permiten inclinar la balanza hacia recall (β>1) o precisión (β<1) según el contexto.
- En multiclase, indica la estrategia de promedio y revisa F1 junto con Precision/Recall y la curva PR para comprender el comportamiento del modelo.