Diseño de modelos de ML confiables: Alan y Aida descubren monotonicidad en el aprendizaje automático

Los modelos de aprendizaje automático son poderosos, pero a veces producen predicciones que rompen la intuición humana.

Imagina esto: estás prediciendo los precios de la vivienda. Una casa de 2,000 pies cuadrados se predice más barato que una casa de 1,500 pies cuadrados. Suena mal, ¿verdad?

Aquí es donde limitaciones de monotonicidad Ingrese. Se aseguran de que los modelos sigan las reglas comerciales lógicas que esperamos.

Seguimos a dos colegas, Alan y Aidaen su viaje para descubrir por qué la monotonicidad es importante en el aprendizaje automático.

La historia: el descubrimiento de Alan y Aida

Alan es un ingeniero práctico. Aida es un científico de principios. Juntos, están construyendo un modelo de predicción de precios de la vivienda.

Alan muestra con orgullo a Aida los resultados de su modelo:

“¡Mira! R² es genial, el error es bajo. ¡Estamos listos para desplegar!”

AIDA saca el modelo para las pruebas:

  • Para una casa con 1500 pies cuadrados → El modelo predice $ 300,000
  • Para una casa con 2000 pies cuadrados → El modelo predice $ 280,000 😮

Aida frunce el ceño mientras mira las predicciones:

“Espera un segundo … ¿por qué esta casa de 2,000 pies cuadrados es predicho más barato que un hogar de 1,500 pies cuadrados? Eso no tiene sentido”.

Alan se encoge de hombros:

“Eso se debe a que el modelo encontró ruido en los datos de entrenamiento. No siempre es lógico. Pero, la precisión es buena en general. ¿No es suficiente?”

Aida sacude la cabeza:

“No realmente. Un modelo confiable no solo debe ser preciso, sino que también seguir la lógica que las personas pueden confiar. Los clientes no confiarán en nosotros si las casas más grandes a veces se ven más baratas. Necesitamos una garantía. Esta es una problema de monotonicidad. “

Y así, Alan aprende su próxima gran lección de ML: las métricas no son todo.

¿Qué es la monotonicidad en ML?

Aida explica:

“Monotonicidad Las predicciones significa que se mueven en una dirección consistente a medida que cambian las entradas. Es como decirle al modelo: a medida que suben los pies cuadrados, el precio nunca debería bajar. Lo llamamos Monótono aumentando. O, como otro ejemplo, a medida que la edad de una casa envejece, los precios predichos no deberían subir. Llamamos a esto Monótono disminuyendo. “

Alan concluye que:

“Entonces la monotonicidad aquí importa porque es:

  • Se alinea lógica de negociosy
  • Mejora Confianza e interpretabilidad. “

Aida asintió:

  • “Sí, además, ayuda a cumplir Expectativa y expectativas regulatorias. “

Visualizando el problema

Aida crea un conjunto de datos de juguete en Pandas para mostrar el problema:

import pandas as pd

# Example toy dataset
data = pd.DataFrame({
   "sqft": [1200, 1500, 1800, 2000, 2200, 2250],
   "predicted_price": [250000, 270000, 260000, 280000, 290000, 285000]  # Notice dip at 1800 sqft and 2250 sqft
})

# Sort by sqft
data_sorted = data.sort_values("sqft")

# Check differences in target
data_sorted["price_diff"] = data_sorted["predicted_price"].diff()

# Find monotonicity violations (where price decreases as sqft increases)
violations = data_sorted[data_sorted["price_diff"] < 0]
print("Monotonicity violations:\n", violations)
Monotonicity violations:
    sqft   price  price_diff
2  1800  260000    -10000.0
5  2250  285000     -5000.0

Y luego ella traza las violaciones:

import matplotlib.pyplot as plt
plt.figure(figsize=(7,5))
plt.plot(data["sqft"], data["predicted_price"], marker="o", linestyle="-.", color="steelblue", label="Predicted Price")


# Highlight the dips
for sqft, price, price_diff in violations.values:
 plt.scatter(sqft, price, color="red", zorder=5)
 plt.text(x=sqft, y=price-3000, s="Dip!", color="red", ha="center")


# Labels and title
plt.title("Predicted House Prices vs. Square Footage")
plt.xlabel("Square Footage (sqft)")
plt.ylabel("Predicted Price ($)")
plt.grid(True, linestyle="--", alpha=0.6)
plt.legend()

AIDA señala las caídas: “Aquí está el problema: 1.800 pies cuadrados tiene un precio inferior a 1.500 pies cuadrados y 2,250 pies cuadrados tienen un precio inferior a 2,200 pies cuadrados.

Arreglarlo con limitaciones de monotonicidad en xgboost

Alan vuelve al modelo y establece un restricción monotónica creciente en pies cuadrados y restricción monotónica decreciente en edad de la casa.
Esto obliga al modelo a siempre

  • Aumentar (o permanecer igual) cuando pies cuadrados Los aumentos dados todas las demás características son fijas.
  • Disminuya (o permanezca igual) cuando los aumentos de la edad de la casa dadas todas las demás características son fijas.

Utiliza XGBOost que facilita hacer cumplir la monotonicidad:

import xgboost as xgb
from sklearn.model_selection import train_test_split

df = pd.DataFrame({
   "sqft": [1200, 1500, 1800, 2000, 2200],
   "house_age": [30, 20, 15, 10, 5],
   "price": [250000, 270000, 280000, 320000, 350000]
})

X = df[["sqft", "house_age"]]
y = df["price"]

X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                    test_size=0.2, random_state=42)

monotone_constraints = {
   "sqft": 1,        # Monotone increasing
   "house_age": -1   # Monotone decreasing
}

model = xgb.XGBRegressor(
   monotone_constraints=monotone_constraints,
   n_estimators=200,
   learning_rate=0.1,
   max_depth=4,
   random_state=42
)

model.fit(X_train, y_train)

print(X_test)
print("Predicted price:", model.predict(X_test.values))
  sqft  house_age
1  1500         20
Predicted price: [250000.84]

Alan entrega el nuevo modelo a Aida. “Ahora el modelo respeta el conocimiento del dominio. Predicciones para casas más grandes nunca se sumergirá debajo los más pequeños “.

AIDA prueba el modelo nuevamente:

  • 1500 pies cuadrados → $ 300,000
  • 2000 pies cuadrados → $ 350,000
  • 2500 pies cuadrados → $ 400,000

Ahora ve una trama más suave de los precios de la vivienda frente a los pies cuadrados.

import matplotlib.pyplot as plt

data2 = pd.DataFrame({
  "sqft": [1200, 1500, 1800, 2000, 2200, 2250],
  "predicted_price": [250000, 270000, 275000, 280000, 290000, 292000]
})

plt.figure(figsize=(7,5))
plt.plot(data2["sqft"], data2["predicted_price"], marker="o", 
                     linestyle="-.", color="green", label="Predicted Price")

plt.title("Monotonic Predicted House Prices vs. Square Footage")
plt.xlabel("Square Footage (sqft)")
plt.ylabel("Predicted Price ($)")
plt.grid(True, linestyle="--", alpha=0.6)
plt.legend()

Aida: “¡Perfecto! Cuando las casas tienen la misma edad, un tamaño más grande conduce constantemente a un precio más alto o igual. Por el contrario, las casas de los mismos pies cuadrados siempre tendrán un precio más bajo si son mayores”.

Alan: “Sí, dimos al modelo barandas que se alinean con el conocimiento del dominio “.

Ejemplos del mundo real

Alan: ¿Qué otros dominios pueden beneficiarse de las limitaciones de monotonicidad?

Aida: En cualquier lugar clientes o dinero están involucrados, la monotonicidad puede afectar la confianza. Algunos dominios donde realmente importa la monotonicidad:

  • Fijación de precios de la casa → Las casas más grandes no deben tener un precio más bajo.
  • Aprobaciones de préstamos → Los ingresos más altos no deben reducir la probabilidad de aprobación.
  • Puntaje de crédito → El historial de reembolso más largo no debería reducir la puntuación.
  • Valor de por vida del cliente (CLV) → Más compras no deberían reducir las predicciones de CLV.
  • Fijación de precios de seguro → Más cobertura no debe reducir la prima.

Comida para llevar

  • La precisión por sí sola no garantiza integridad.
  • La monotonicidad garantiza que las predicciones se alineen con Reglas de sentido común y de negocios.
  • Los clientes, los reguladores y las partes interesadas tienen más probabilidades de aceptar y usar modelos que son preciso y lógico.

Como Aida le recuerda a Alan:

“Haga que los modelos no solo son inteligentes, sino sensibles”.


Pensamientos de cierre

La próxima vez que construya un modelo, no solo pregunte: ¿Qué tan preciso es? También pregunte: ¿Tiene sentido para las personas que lo usarán?

Las limitaciones de monotonicidad son una de las muchas herramientas para Diseño de modelos ML confiables – junto con la explicabilidad, las limitaciones de equidad y la transparencia.

. . .

¡Gracias por leer! A menudo comparto ideas sobre técnicas prácticas de IA/ML, se conectan LinkedIn Si desea continuar la conversación.