Con el objetivo de afianzar los conocimientos sobre machine learning, seleccioné el dataset desde https://www.kaggle.com/harlfoxem/housesalesprediction, en donde el objetivo es predecir el precio de casas.
El dataset utilizado es el que se encuentra en el archivo kc_house_data.csv.
Features:
- bedrooms: Catidad de Habitaciones.
- bathrooms: Cantidad de baños.
Aclaración: En el dataset podrán observar que algunos ejemplos son decimales y no enteros (Ver segundo ejemplo, donde bathrooms = 2.25). Según Wikipedia:In the United States, bathrooms are generally categorized as master bathroom, containing a varied shower [2] and a tub that is adjoining to a master bedroom, a "full bathroom" (or "full bath"), containing four plumbing fixtures: bathtub/shower, or (separate shower), toilet, and sink; "half (1/2) bath" (or "powder room") containing just a toilet and sink; and "3/4 bath" containing toilet, sink, and shower...
- sqft_living: Tamaño del living en pie cuadrado.
- sqft_lot: Tamaño del terreno en pie cuadrado.
- floors: Cantidad de pisos.
- waterfront: si la casa tiene vista al río. 0 = No / 1 = Si.
- view: Puntaje entre 0 - 4 de la vista de la casa.
-
condition: Puntaje 1-5 que indica en qué condición/estado se encuentra la casa.
- 1 = Mala
- 2 = Baja
- 3 = Media
- 4 = Buena
- 5 = Muy Buena
-
grade: Representa la calidad de la construcción.
- 1 = Por debajo de los estándares mínimos de construcción.
- 2 = Por debajo de los estándares mínimos de construcción.
- 3 = Por debajo de los estándares mínimos de construcción.
- 4 = Construcción vieja y de baja calidad.
- 5 = Bajos costes de construcción y mano de obra. Diseño pequeño y sencillo.
- 6 = Cumple con los estándares mínimos de construcción. Baja calidad de materiales.
- 7 = Promedio calidad de construcción y diseño.
- 8 = Por encima del promedio en construcción y diseño. Buenos materiales tanto en el interior como en el exterior.
- 9 = Mejor diseño arquitectónico, tanto interior como exterior.
- 10 = Por debajo de los estándares mínimos de construcción. Casas espaciosas
- 11 = Diseño personalizado y acabado de calidad superior con complementos de madera, accesorios de baño y opciones más lujosas.
- 12 = Diseño personalizado y excelentes constructores. Todos los materiales son de la más alta calidad y todas las comodidades están presentes.
- 13 = Por lo general diseñado y construido a medida. Nivel de mansión. Acabado de madera, mármol, formas de entrada, etc
- sqft_above: Espacio interior de la vivienda que está sobre el nivel del suelo en pie cuadrado.
- sqft_basement: Tamaño del sótano en pie cuadrado.
- yr_built: Año de la consutrucción de la casa.
- yr_renovated: Año en que se hicieron mejoras significativas en la casa.
- zipcode: Código Postal
- lat: Coordenadas - Latitud.
- long Coordenadas - Longitud.
- sqft_living15: Tamaño promedio del living de las 15 casas más cerca en pie cuadrado.
- sqft_lot15: Tamaño promedio del terreno de las 15 casas más cerca en pie cuadrado.
- price: Precio en dólares
Imagen extraída del curso dictado por Andrew Ng en Coursera
python 1-linear_regression.py
0.699828185572 0.00254130401921 0.697014788003 0.0205903110921
Dado que la performance de las predicciones sobre los mismos datos que se utilizaron para el entrenamiento (0.699828185572) es casi igual a la performance de las predicciones de datos nuevos para el modelo (datos que no se utilizaron para el entrenamiento) (0.697014788003) y es un valor relativamente bajo, podemos suponer que el modelo aún no se ajusta lo suficientemente bien a nuestros datos, por lo que estamos en un escenario de underfitting.
Una manera de de probar si podemos mejorar la performance, es probar con un modelo polinómico de mayor grado, es decir, en éste caso, elevando todas nuestras variables al cuadrado.python 2-polynomical_d2.py
0.830028882046 0.00291291406115 0.812813894177 0.0244860601912Podemos ver que la performance aumentó significativamente, tanto en para los datos de entrenamiento como los de test, por lo que, en principo, es una buena idea adoptar éste modelo polinómico. Para ver si podemos mejorar aún más al performance, aumentaremos un grado más aún, es decir que elevaremos al cubo cada variable.
python 3-polynomical_d3.py
0.902972786233 0.00198889028091 -46748368.4718 88719438.1422Se puede observar que la performance del modelo sobre los datos de entrenamiento ha sido aún mejor (0.902972786233) con respecto al paso anterior, pero definitivamente ha sido muy mala la performance sobre los datos nuevos para el modelo (-46748368.4718). Éste es el caso en donde nos encontramos en un escenario de overfitting.
Pasamos un modelo con underfitting, lo mejoramos cambiandolo por un modelo polinómico de grado 2 y finalmente evaluamos un modelo polinómico de grado 3, en el cual vimos que caemos en overfitting, por lo tanto, de los tres modelos planteados, el ganador es el segundo. Se puede seguir probando como mejorar el mismo, pero sabemos que aumentar los grados del polinomio no es una opción.