María Alejandra Del Porto - [email protected]
Juan Ignacio Munar - [email protected]
Federico Otero - [email protected]
A modo explicativo, trataremos de ser breves y didácticos. Vamos a abundar en imágenes y tablas, tratando de explicar lo que en la notebook puede verse implementado en detalle.
El dataset elegido contiene mediciones meteorológicas efectuadas en distintas ciudades y fechas de Australia, como se puede ver en esta captura de pantalla:
El objetivo es poder predecir si lloverá al día siguiente, es decir, el valor de la variable target RainTomorrow (Yes / No)
Nuestro Análisis Exploratorio Inicial nos permite entender cada variable del dataset.
Luego de esto, analizamos cada variable según su tipo.
Visualizamos los histogramas y distribuciones de las features numéricas.
Vemos que las siguientes features distribuyen como normal:
- MinTemp, MaxTemp, Humidity9Am, Humidity3Pm, Pressure9Am, Pressure3Pm, Temp9Am, Temp3Pm.
Estas otras features no distribuyen como normales:
- Rainfall, Evaporation, Sunshine, WindGustSpeed, WindSpeed9Am, WindSpeed3Pm, Cloud9Am, Cloud3Pm
Visualizamos como se distribuyen sus valores.
Vemos un buen balance de los datos, donde las categorías se ven muy uniformes.
La variable Date tiene mas de 3000 valores únicos, con lo cual se propone transformala, quedándonos con el mes correspondiente.
Comenzamos ahora a intervenir en nuestro dataset. Lo primero que haremos será un análisis y tratamiento de los valores nulos o faltantes.
Esta es la imagen que se nos presenta al ver los valores nulos del dataset en crudo.
Estos nos permite filtrar algunas variables y pensar los siguientes pasos.
Finalmente, cuando asignamos valores a los nulos restantes, veremos que
Para hacer este paso, nos apoyamos en los análisis de las distribuciones de las variables numéricas, de modo que podemos ver si las mismas son normales o presentan oblicuidades muy marcadas.
Finalmente, nos queda
En este paso, vamos a transformar algunas variables para lograr mejor performance en los modelos que se probarán. La técnica de transformación o encoding dependerá del análisis de la variable en cuestión.
Se decidió reemplazar la dirección del viento expresada categóricamente (sureste, noreste, centroeste, etc.) por el ángulo que forma el mismo expresado en radianes, de modo que se convirtió de categórica en numérica continua.
Se aplicó un encoding binario para no agregar demasiadas columnas.
Se decidió reemplazar la fecha Date (yyyy-mm-dd) por el mes, ya que como sabemos las temperaturas a lo largo del año suele ser cíclicas. Luego se transformó de categórica nominal con un oneHot Encoding.
Estas dos variables son boolenas (Yes/No), de modo que con una columna que tome los valores (0,1) alcanza para codificarlas.
Análisis X2 y de Información Mutua (MI) para la relación entre las features categóricas y la variable target.
X2
MI
En base a visualizar algunas métricas sobre outliers y las distribuciones de sus variables:
Decidimos tratar los outliers de maneras distintas en el caso de las variables gaussianas (normales) que en el caso de las no gaussianas. La estrategia utilizada es la poda (trimming), ya que resulta sencilla y eficiente para este caso donde disponemos de un tamaño grande de muestras.
Normalizamos las features numéricas como último paso de la etapa de preprocesamiento de los datos. Veremos ahora dos propuestas sencillas de modelos a testear, que pueden funcionar bien para nuestro dataset de pocas columnas y variables categóricas (tanto features como la target a predecir).
Se utilizó una función sencilla de sci-kit learn, donde se separó en train-test (80%-20%) con un valor de random_state.
El score obtenido, luego de tratar de tunear los hiperparámetros, es de 87,11%:
Podemos probar estrategias de cross validation para tener un entrenamiento más balanceado de los datos
El caso más sencillo, el de la regresión logística, se ajusta bien a nuestros datos, dándonos un score de 86,75%.
A modo de sugerencia, proponemos algunas de las siguientes herramientas para evaluar y comparar los resultados de los modelos:
- accuracy score
- R2
- f-Score
- confusion matrix