Data Science Telecomunicaciones

Clasificación de Planes Megaline

GitHub Repository Notebook
23 de Agosto de 2025

Métrica de Éxito Alcanzada

0.750 Accurancy
Clasificación de Planes Megaline

Descripción del Proyecto

Resumen del proyecto

Contexto

Proyecto del Sprint 9 en TripleTen. Desarrollo de un modelo de Machine Learning para clasificar clientes de Megaline y recomendar el plan óptimo (Smart o Ultra).

Problema de negocio

Recomendar el plan adecuado a clientes en función de su comportamiento (llamadas, minutos, mensajes, uso de MB), con un modelo que alcance accuracy ≥ 0.75.

Objetivos (qué se busca demostrar con datos)

  • Analizar y preparar los datos de comportamiento de usuarios.
  • Entrenar modelos de clasificación y comparar desempeño.
  • Ajustar hiperparámetros para optimizar rendimiento.
  • Evaluar el modelo final en conjunto de prueba.
  • Realizar prueba de cordura (baseline) para verificar consistencia.

Dataset(s) / tablas y atributos clave

  • users_behavior.csv
    • Ruta / fuente: /datasets/users_behavior.csv
    • Columnas clave:
      • calls (número de llamadas)
      • minutes (minutos de llamadas)
      • messages (SMS)
      • mb_used (MB usados)
      • is_ultra (target: Ultra=1, Smart=0)

Alcance temporal y población

  • Ventana temporal: N/A (no especificado).
  • Población / muestra: clientes de Megaline representados en users_behavior.csv.

Unidad de análisis

Cliente.

Métricas

  • Métrica principal: Accuracy.
  • Umbral de éxito: accuracy ≥ 0.75.

Entregables

  • Notebook principal: notebooks/sprint9_analysis.ipynb
  • Repositorio: https://github.com/cjhirashi/proyecto-sprint-9.git

Herramientas utilizadas

  • Python 3: implementación del pipeline de modelado.
  • Pandas: carga, limpieza y preparación de datos.
  • NumPy: operaciones numéricas de soporte.
  • scikit-learn: modelos (Dummy, DecisionTree, RandomForest, LogisticRegression), partición y métricas.
  • Jupyter Notebook: reporte reproducible (código + narrativa).
  • Conda: gestión de entorno y dependencias.

Proceso (clasificado por fases)

PASO 1: CARGA Y REVISION INICIAL DE DATOS

Subpaso 1.1 — Importar librerías

  • Importación de librerías base para análisis/modelado: pandas y numpy.

Subpaso 1.2 — Cargar dataset

  • Carga de users_behavior.csv usando pd.read_csv() desde la carpeta datasets/.

Subpaso 1.3 — Dimensiones y columnas

  • Revisión de dimensiones (filas/columnas) y listado de columnas para validar insumos del modelado.

Subpaso 1.4 — Tipos de datos y valores faltantes

  • Revisión de tipos de datos y verificación de valores faltantes para asegurar consistencia antes del split/modelado.

Subpaso 1.5 — Estadísticas descriptivas y distribución de la variable objetivo

  • Revisión de estadísticas descriptivas y de la distribución/clases de is_ultra.

PASO 2: DIVISIÓN DE LOS DATOS

Subpaso 2.1 — Separación de features y target

  • Separación de variables predictoras (features) y variable objetivo (target = is_ultra).

Subpaso 2.2 — División en train/valid/test

  • Partición estratificada en tres conjuntos: train (60%), valid (20%), test (20%).
  • Uso de random_state para reproducibilidad.

PASO 3: PREPARACIÓN MÍNIMA DE DATOS

Subpaso 3.1 — Verificación de tipos de datos

  • Revisión de dtypes en el conjunto de entrenamiento para confirmar compatibilidad con los modelos.

Subpaso 3.2 — Escalado de características

  • Aplicación de StandardScaler (cuando aplica) para evitar dominancia por escala (especialmente relevante para LogisticRegression).

Subpaso 3.3 — Revisión de outliers o valores extremos

  • Revisión de valores extremos para entender rangos (sin eliminar por defecto; pueden ser comportamientos reales).

PASO 4: PRUEBA DE CORDURA (BASELINE)

Subpaso 4.1 — Entrenar modelo DummyClassifier

  • Entrenamiento de DummyClassifier con estrategia de referencia y evaluación de accuracy en validación.

PASO 5: ENTRENAMIENTO Y AJUSTE DE MODELOS

Subpaso 5.1 — DecisionTreeClassifier

  • Entrenamiento y tuning (p. ej. max_depth) con evaluación en validación.

Subpaso 5.2 — RandomForestClassifier

  • Entrenamiento y tuning (p. ej. n_estimators, max_depth) con evaluación en validación.

Subpaso 5.3 — LogisticRegression

  • Entrenamiento y pruebas de hiperparámetros (solver, C, etc.) con evaluación en validación.

PASO 6: SELECCIÓN DEL MEJOR MODELO (VALIDACIÓN)

En este paso se comparan, en el conjunto de validación, los modelos entrenados y sus hiperparámetros para seleccionar el mejor candidato. El objetivo es escoger el modelo con mejor accuracy (y estabilidad) antes de llevarlo a la evaluación final en test.

Subpaso 6.1 — Comparación de resultados en validación

  • Comparación de los accuracy en validación entre:
    • DecisionTreeClassifier (mejor caso reportado: 0.804)
    • RandomForestClassifier (mejor caso reportado: 0.812)
    • LogisticRegression (mejor caso reportado: 0.751)
  • Selección del mejor modelo (candidato a evaluación final en test).

PASO 7: EVALUACIÓN FINAL EN EL CONJUNTO DE PRUEBA

En este paso se entrena nuevamente el modelo seleccionado (usando el setup definido) y se evalúa en el conjunto de prueba para estimar su desempeño en datos no vistos. Aquí se confirma si el modelo cumple el criterio del proyecto (accuracy ≥ 0.75).

Subpaso 7.1 — Entrenamiento del mejor modelo y evaluación en test

  • Entrenamiento del modelo seleccionado y evaluación final en test (accuracy) para validar cumplimiento del umbral.

PASO 8: CONCLUSIONES Y RECOMENDACIONES

En este paso se consolida el aprendizaje del proyecto: se resume el desempeño del baseline vs. los modelos entrenados, se justifica la selección del modelo final y se documentan recomendaciones prácticas para mejoras futuras (feature engineering, balanceo, validación cruzada y tuning).

Conclusiones del proyecto

  • Síntesis de resultados (baseline vs modelos) y confirmación del mejor modelo.

Resultados e impacto técnico

Preparación e integración de datos

  • Dataset: users_behavior.csv con features de comportamiento y target is_ultra.
  • Se identificó desbalance: ~69% Smart vs ~31% Ultra.

Transformación / metodología

  • Split estratificado train/valid/test.
  • Baseline con DummyClassifier.
  • Comparación de modelos (árboles, ensambles, regresión logística) + tuning de hiperparámetros.

Resultados principales (con evidencia)

Resultado 1 — Baseline (DummyClassifier)

  • Qué se observó: baseline refleja el desbalance del dataset.
  • Evidencia / dato: accuracy = 0.694.
  • Interpretación: modelo naive cercano a la clase mayoritaria; sirve como referencia mínima.
  • Implicación: cualquier modelo útil debe superar claramente este baseline.

Resultado 2 — Árbol de decisión

  • Qué se observó: modelo simple con buen desempeño en validación.
  • Evidencia / dato: max_depth=3 → accuracy validación = 0.804.
  • Interpretación: captura reglas no lineales básicas con bajo riesgo de complejidad.
  • Implicación: buen candidato por simplicidad, aunque superado por RandomForest.

Resultado 3 — Modelo ganador (RandomForestClassifier)

  • Qué se observó: mejor desempeño y generalización.
  • Evidencia / dato: accuracy validación = 0.812; accuracy test = 0.795.
  • Interpretación: ensamble robusto con buena capacidad de generalización.
  • Implicación: cumple el criterio del proyecto (≥ 0.75) y es el modelo recomendado.

Resultado 4 — Regresión logística

  • Qué se observó: desempeño estable pero inferior a modelos basados en árboles.
  • Evidencia / dato: accuracy ~ 0.750.
  • Interpretación: alternativa interpretable, pero no maximiza performance.
  • Implicación: útil si se prioriza interpretabilidad; no es la opción ganadora.

Implicaciones técnicas y de negocio

  • Modelo recomendado: RandomForestClassifier (n_estimators=100, max_depth=5).
  • Impacto: mejora la recomendación de planes (Smart/Ultra), soporta estrategias de marketing y facilita migración a planes.
  • Próximos pasos:
    • ingeniería de características,
    • balanceo de clases (class_weight='balanced' / oversampling),
    • validación cruzada (cross_val_score),
    • tuning más exhaustivo (GridSearchCV).