¡Bienvenido al Desafío de predicción del Titanic! Este proyecto tiene como objetivo desarrollar un modelo que prediga si un pasajero sobrevivirá al desastre del Titanic.
- 📖 Descripción
- 📋 Índice
- 👤 Instrucciones para el usuario
- ⚙️ Instalación
- 📊 Análisis de los datos
- 🔧 Ingeniería de variables
- 🤖 Entrenamiento del modelo
- 🏆 Resultados y conclusión
Para poder descargar los datos desde Kaggle, necesitas una API key de Kaggle.
- Ve a tu cuenta de Kaggle (https://www.kaggle.com/account)
- En la sección API, haz clic en "Create New API Token". Esto descargará el archivo
kaggle.json
. - Coloca el archivo
kaggle.json
en la carpeta~/.kaggle/
(en sistemas UNIX como Linux/Mac) o enC:\Users\TU_USUARIO\.kaggle\
(en Windows). - Asegúrate de que la carpeta tenga los permisos adecuados (
chmod 600
en UNIX).
Alternativa manual: navega a la URL https://www.kaggle.com/competitions/titanic, descarga y descomprime los archivos en una carpeta /kaggle_data
en la misma ubicación que el notebook.
Para instalar las dependencias necesarias, ejecuta el siguiente comando:
pip install -r requirements/requirements.txt
Comenzaremos el trabajo con un breve análisis. Leeremos los datos, mostraremos el tabular, describiremos las columnas e imprimiremos una fila de cada tabla para tener una idea inicial.
En esta sección, realizaremos la ingeniería de variables necesaria para preparar los datos para el modelo de aprendizaje automático.
En este apartado trataremos los tickets, puede ser interesante dividir en 2 partes el ticket:
-
El prefijo, que reagruparemos puesto que parece que hay varias cadenas de caracteres que se refieren a lo mismo.
-
El número de ticket.
Trataremos la columna Name, uno puede pensar que una columna Name nunca es útil ya que actúa de forma similar al identificador. Pero en este dataset, debido a la época, todos los nombres tienen su respectivo título Mr., Mrs., Miss., etc.
Este título puede reforzar la información sobre el sexo y la edad (que además tiene algunos nulos), o el rol que desempeña esa persona dentro de la tripulación.
Cubriremos los nulos y haremos split de la cabina en número y letra.
Crearemos categorías de edad y una columna para informar qué pasajeros no informaron de su edad.
Entrenaremos varios modelos de aprendizaje automático y seleccionaremos el mejor basado en métricas de rendimiento.
Modelo básico con RandomForest y todas las variables transformadas a dummies. Punto de partida.
Regresión Logística tras transformar todas las variables a numéricas.
Llegamos a la conclusión de que hasta despues de hacer GridSearch, se producía Overfitting, así que nos decantamos por cambiar de modelo.
Volvemos a usar RandomForest, pero esta vez profundizando un poco más. Vamos a escoger las variables que más relación tengan con el target, convertir las variables a numéricas y GridSearch para llegar a una solución.
Presentaremos los resultados obtenidos y las conclusiones derivadas del análisis y modelado de los datos.
Es un modelo en el que se produce overfitting con facilidad. En las validaciones cruzadas sobre el conjunto de train suelen salir mejores predicciones que al aplicar la submission al test.
Intentamos evitar esto con GridSearch.
Uno de los aciertos de este trabajo para mí ha sido extraer el título que precede al nombre y almacenarlo como una variable categorica. (Mr, Miss, Mrs, Don, Donna, Captain, etc.) Ha sido una de las variables que el modelo ha clasificado con mayor importancia, despues del sexo y la edad.
Alcanzamos el puesto 1200 de la clasificación, sobre 14620 participantes, en el concurso de Kaggle con una predicción sobre el conjunto de test de 0.78947, no está mal teniendo en cuenta que al ser un conjunto de datos relativamente pequeño, hay algunas participaciones que se han hecho con métodos que quedan fuera del marco del Machine Learning y los modelos de predicción.
Ha sido un buen aprendizaje construir este modelo, y me ha servido para adquirir conocimientos sobre cómo tratar un conjunto de datos y crear un modelo de clasificación. Tengo ganas de enfrentarme a problemas reales con mayores conjuntos de datos.
Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull request para contribuir a este proyecto.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.