Ejemplo completo.
Machine learning: menos magia y más método
Cuando se habla de machine learning, mucha gente imagina una especie de caja negra capaz de tomar decisiones por sí sola. La realidad es bastante menos cinematográfica y bastante más útil.
El machine learning es una rama de la inteligencia artificial que permite entrenar modelos para encontrar patrones en los datos y utilizarlos después para hacer predicciones o clasificaciones. No piensa, no entiende el negocio por arte de magia y no arregla datos desordenados. Lo que hace es aprender relaciones estadísticas a partir de ejemplos.
Dicho de forma práctica: si tienes suficientes datos y una pregunta clara, el machine learning puede ayudarte a anticipar comportamientos. Por ejemplo:
- prever qué clientes tienen más probabilidad de darse de baja,
- estimar ventas futuras,
- detectar operaciones anómalas,
- clasificar correos, incidencias o documentos,
- recomendar productos o priorizar oportunidades comerciales.
La clave no está en usar un algoritmo porque suena moderno. La clave está en conectar bien cuatro piezas: problema, datos, criterio de negocio y validación.
Qué es exactamente un modelo de machine learning
Un modelo de machine learning es una función matemática entrenada con datos históricos.
Durante el entrenamiento, el modelo intenta descubrir relaciones entre unas variables de entrada y un resultado. Después, cuando recibe datos nuevos, aplica lo aprendido para generar una predicción.
Un ejemplo muy simple
Si observas cientos de clientes y ves datos como:
- antigüedad,
- número de incidencias,
- frecuencia de compra,
- gasto mensual,
- uso del servicio,
podrás entrenar un modelo para estimar la probabilidad de que ese cliente abandone.
No porque el sistema “sepa” por qué una persona se va, sino porque detecta patrones que en el pasado estuvieron asociados con abandonos similares.
Tipos principales de machine learning
1. Aprendizaje supervisado
Es el más habitual en empresa. Tienes datos de entrada y además conoces el resultado correcto.
Ejemplos:
- predecir si un cliente se dará de baja,
- estimar el precio de un inmueble,
- clasificar un correo como spam o no spam.
Aquí el modelo aprende a partir de ejemplos etiquetados.
2. Aprendizaje no supervisado
Aquí no tienes una etiqueta final clara. El objetivo es encontrar estructuras o agrupaciones dentro de los datos.
Ejemplos:
- segmentación de clientes,
- detección de grupos de comportamiento,
- reducción de dimensiones para visualizar datos complejos.
3. Aprendizaje por refuerzo
Se usa cuando un sistema aprende tomando decisiones y recibiendo recompensas o penalizaciones.
Ejemplos típicos:
- robótica,
- videojuegos,
- optimización secuencial,
- algunos problemas de control industrial.
En el día a día de la pyme, lo más frecuente es trabajar con aprendizaje supervisado y, en algunos casos, con segmentación no supervisada.
Cómo funciona un proyecto de machine learning de verdad
Un proyecto serio no empieza por elegir un algoritmo. Empieza por definir bien el problema.
El flujo real suele ser este:
1. Definir la pregunta de negocio
Ejemplo correcto: ¿qué clientes tienen más riesgo de abandono en los próximos 30 días?
Ejemplo incorrecto: quiero usar IA en mi empresa.
2. Reunir y limpiar datos
Aquí suele estar buena parte del trabajo real. Datos incompletos, duplicados, variables mal definidas o históricos poco fiables hacen que el proyecto falle aunque el algoritmo sea bueno.
3. Seleccionar variables relevantes
No todo dato ayuda. Algunas variables aportan señal, otras meten ruido.
4. Dividir entrenamiento y validación
Hay que medir el modelo con datos que no haya visto antes. Si no, parece que funciona mejor de lo que realmente funciona.
5. Entrenar el modelo
Se prueba uno o varios algoritmos y se ajustan parámetros.
6. Evaluar con métricas correctas
No siempre basta con la exactitud. En muchos problemas de negocio importa más el recall, la precisión, el F1 o el error medio.
7. Interpretar y desplegar
Un modelo útil no es solo el que acierta. Es el que se puede integrar en un proceso real y apoyar una decisión concreta.
Ejemplo completo: predicción de abandono de clientes
Vamos con un caso práctico realista y muy útil para negocio: predecir qué clientes tienen riesgo de darse de baja.
Objetivo
Construir un modelo que clasifique si un cliente tiene probabilidad de abandonar el servicio.
Variables del ejemplo
Imaginemos un fichero CSV con estas columnas:
edadmeses_como_clientegasto_mensualincidencias_ult_6musa_appcontrato_anualabandono
La columna abandono será nuestra variable objetivo:
1= el cliente se dio de baja0= el cliente sigue activo
Código completo en Python
A continuación tienes un ejemplo completo usando pandas y scikit-learn.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
# 1. Cargar datos
df = pd.read_csv("clientes.csv")
# 2. Separar variables predictoras y variable objetivo
X = df.drop("abandono", axis=1)
y = df["abandono"]
# 3. Identificar columnas numéricas y categóricas
num_cols = ["edad", "meses_como_cliente", "gasto_mensual", "incidencias_ult_6m"]
cat_cols = ["usa_app", "contrato_anual"]
# 4. Preprocesado
num_transformer = Pipeline(steps=[
("imputer", SimpleImputer(strategy="median")),
("scaler", StandardScaler())
])
cat_transformer = Pipeline(steps=[
("imputer", SimpleImputer(strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore"))
])
preprocessor = ColumnTransformer(transformers=[
("num", num_transformer, num_cols),
("cat", cat_transformer, cat_cols)
])
# 5. Definir modelo
model = RandomForestClassifier(
n_estimators=200,
max_depth=6,
random_state=42,
class_weight="balanced"
)
# 6. Crear pipeline completo
clf = Pipeline(steps=[
("preprocessor", preprocessor),
("model", model)
])
# 7. Dividir en train y test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 8. Entrenar
clf.fit(X_train, y_train)
# 9. Predecir
y_pred = clf.predict(X_test)
y_prob = clf.predict_proba(X_test)[:, 1]
# 10. Evaluar
print("Matriz de confusión:")
print(confusion_matrix(y_test, y_pred))
print("\nInforme de clasificación:")
print(classification_report(y_test, y_pred))
print("AUC-ROC:", roc_auc_score(y_test, y_prob))
Qué hace este código exactamente
Carga y separación de datos
Primero leemos el CSV y separamos las variables de entrada (X) de la variable objetivo (y).
Preprocesado
No todos los datos se tratan igual:
- las columnas numéricas se imputan con la mediana y se escalan,
- las categóricas se imputan con el valor más frecuente y se transforman con one-hot encoding.
Esto es importante porque un modelo no entiende texto tal cual lo escribimos los humanos.
Modelo
Se usa un RandomForestClassifier, una opción bastante robusta para empezar en problemas tabulares. No siempre será el mejor, pero suele dar buenos resultados sin exigir un ajuste excesivo.
Evaluación
Se generan tres salidas clave:
- matriz de confusión, para ver aciertos y errores,
- classification report, con precisión, recall y F1,
- AUC-ROC, para medir la capacidad del modelo de separar clases.
Cómo interpretar el resultado
Supongamos que el modelo obtiene algo parecido a esto:
- accuracy: 0.84
- recall en abandono: 0.78
- AUC-ROC: 0.87
Esto no significa que “acierte el 84 % y ya está”. Lo importante es entender el impacto real.
Si el recall de la clase abandono es 0.78, el modelo está detectando el 78 % de los clientes que efectivamente terminan dándose de baja. Eso puede ser muy valioso si después existe una acción concreta:
- activar una campaña de retención,
- priorizar una llamada comercial,
- ofrecer soporte preventivo,
- revisar incidencias o condiciones del servicio.
En otras palabras: el modelo no resuelve solo el problema; ayuda a decidir mejor y antes.
Cómo usar el modelo con nuevos clientes
Una vez entrenado, puedes pasarle nuevos registros y obtener probabilidades.
nuevo_cliente = pd.DataFrame([
{
"edad": 47,
"meses_como_cliente": 3,
"gasto_mensual": 89.90,
"incidencias_ult_6m": 4,
"usa_app": "no",
"contrato_anual": "no"
}
])
prob_abandono = clf.predict_proba(nuevo_cliente)[0, 1]
print(f"Probabilidad de abandono: {prob_abandono:.2%}")
Si el resultado fuese, por ejemplo, un 81 %, ya tienes una señal clara para actuar.
Errores típicos al aplicar machine learning
Aquí suele romperse la película:
1. Empezar por la herramienta y no por el problema
Tener un modelo no sirve de nada si no responde a una decisión real.
2. Usar datos pobres
Si los datos están mal, el modelo aprende mal. Basura entra, basura sale.
3. Medir con la métrica equivocada
En abandono de clientes puede importar mucho más capturar los casos críticos que presumir de exactitud general.
4. No pensar en el despliegue
Un modelo brillante en un notebook que nadie usa no genera valor.
5. Ignorar la interpretación
En muchos entornos necesitas explicar por qué el sistema señala ciertos casos como prioritarios.
Cuándo merece la pena usar machine learning
Tiene sentido cuando se cumplen varias condiciones:
- existe una pregunta repetible,
- hay datos históricos razonables,
- el patrón no se puede codificar fácilmente con reglas fijas,
- la predicción mejora una decisión de negocio,
- puedes medir impacto después.
Si no se cumplen estas condiciones, muchas veces es mejor empezar por automatización clásica, analítica descriptiva o mejora del dato antes de meter un modelo.
Conclusión
El machine learning no va de magia, va de detectar patrones útiles en datos para apoyar decisiones reales. Bien aplicado, puede mejorar ventas, retención, operaciones y priorización. Mal planteado, solo añade complejidad.
El enfoque correcto es este: definir una pregunta concreta, trabajar bien los datos, entrenar con criterio, validar con honestidad y conectar el resultado con una acción operativa.
Ese es el punto en el que la IA deja de ser un eslogan y empieza a convertirse en una herramienta útil.
Firma: Toni Domenech
