Predicción con Machine Learning utilizando Python

por | Nov 24, 2019

La predicción es una de las tareas que le concierne tanto a un data scientist como a un analyst. En el campo de machine learning, existen dos tipos de tareas de predicción.

La primera tarea es la de clasificación, que consiste en asignar una categoría a un ejemplar (e.g. dada una frase, clasificar el sentimiento de dicha frase, es decir, asignar si la frase es positiva, negativa o neutra).

La segunda tarea es la de estimación o regresión, que consiste en predecir valores numéricos (e.g. dado el radio y número de ingredientes, predecir el importe de una pizza).

Los autores Han y Kamber anuncian en su libro Data Mining Concepts and Techniques, que predecir valores categóricos es clasificación, mientras que aplicar técnicas de regresión para predecir valores numéricos es predicción

En este artículo vamos a poner en acción un algoritmo de machine learning con el fin de estimar el importe de alquiler ciertas viviendas.

Contenidos y objetivo

Antes de continuar con este tutorial, por favor asegúrate de que tienes claro todo sobre el funcionamiento de un algoritmo de machine learning. A continuación vamos a realizar los siguientes pasos:

  1. Importar las librerías necesarias
  2. Cargar e inspeccionar datos
  3. Feature Engineering
  4. Crear, entrenar y evaluar modelos de machine learning

El objetivo de este tutorial es, utilizando diferentes variables, predecir el coste de diferentes viviendas.

El tutorial lo vamos a realizar utilizando Python como lenguaje de programación. Te animamos a que repliques los pasos utilizando R, por ejemplo.

Importando las librerías

Como vamos a tener que manipular datos, es muy importante importar librerías como pandas y numpy.

import numpy as np
import pandas as pd

Cargando los datos

Los datos que vamos a utilizar para este tutorial los puedes obtener de Kaggle. A continuación, cargamos dos datasets, uno para el entrenamiento y otro para la evaluación (train y test) del algoritmo.

train = pd.read_csv("../ruta/dataset_training.csv")

Escribiendo el comando train.shape podemos ver que el dataset para el entrenamiento tiene 1460 ejemplares, y cada ejemplar tiene 81 variables. Son demasiadas variables frente al número de ejemplares que tenemos. Por ello, vamos a tener que limpiar el dataset y elegir solo las variables más importantes.

Una forma de seleccionar las variables más importantes es, calcular la correlación que tienen el resto de las variables con la variable de predicción.

correlaciones = train.corr()
correlaciones = correlaciones["SalePrice"].sort_values(ascending=False)
correlaciones

lo cual nos devuelve la correlación entre todas las columnas numéricas y la columna objetivo SalePrice.

SalePrice           1.000000
TransformedPrice    0.948374
OverallQual         0.790982
...
...
...
...
KitchenAbvGr       -0.135907
MasVnrType         -0.265068
GarageType         -0.322947
Foundation         -0.493085
Name: SalePrice, Length: 82, dtype: float64

Como vemos, hay variables como OverallQual y GrLivArea que presentan correlaciones muy positivas, mientras que otras variables como KitchenAbvGr y EnclosedPorch presentan correlaciones muy negativas. La variable TransformedPrice es el logritmo de la variable SalePrice, así que, no cuenta para la correlación.

Feature Engineering

Este paso es quizás el más tedioso en la rutina de un data scientist. En este paso, se han de realizar las siguientes tareas

  1. Seleccionar las variables más importantes (basándonos en el análisis de correlación que hicimos anteriormente)
  2. Eliminar las variables que no correlacionan
  3. Eliminar las columnas que están casi vacías
  4. Rellenar de forma inteligente las columnas categóricas que le falten algunos valores
  5. Rellenar de forma inteligente las columnas numéricas que le falten algunos valores

Sin exagerar, este paso puede tomar más de un día entero para un dataset como este. Sin embargo, en este tutorial os hemos dado los datos ya procesados, así que, no os preocupéis. Sigamos.

Machine learning en acción

Ahora es cuando toca crear, entrenar y evaluar nuestro algoritmo de machine learning. Como se trata de una regresión, utilizaremos el modelo conocido como Linear Regression. Para lo cual, vamos a importar todas las librerías necesarias

from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error

Ahora, tenemos que tener cuatro diferentes datasets, a saber: X_trainy_trainX_test y por último y_test. Para ello escribimos las siguientes líneas.

X = train.drop(["Id", "SalePrice", "TransformedPrice"], axis=1).values
y = train["TransformedPrice"].values
X_train = X[:1200]
y_train = y[:1200]
X_test = X[1200:]
y_test = y[1200:]

donde hemos guardado los 1200 primeros ejemplares de X en X_train y el resto lo hemos guardado en X_test. Ahora preparamos nuestro modelo Linear Regression.

linreg = LinearRegression()
linreg.fit(X_train, y_train)
y_predict = linreg.predict(X_test)

Ahora que tenemos el y_predict, es decir, las predicciones de los precios de las viviendas, las comparamos con los valores reales guardados en la variable y_test.

r2 = r2_score(y_predict, y_test)
rmse = np.sqrt(mean_squared_error(y_predict, y_test))

donde r2 es el famoso R^2 que nos dice la accuracy de un modelo de regresión, mientras que rmse es el root mean squared error, es decir, el error en un modelo de regresión. Si ejecutamos el anterior código obtendremos el siguiente output.

0.7416939453563665
0.2028581408490033

Es decir, una accuracy de un 74.17% y un error de 0.20, lo cual no está nada mal, pero sin duda, mejorable.

A continuación, te recomendamos algunos libros para adquirir más conocimientos sobre algoritmos de regresión.

  1. Learning Predictive Analytics with Python
  2. Practical Machine Learning with Python
  3. Pro Machine Learning Algorithms

Sabemos que tendrás miles de dudas ahora mismo, porque, no es lo mismo leer a que te lo expliquen paso a paso. Si quieres empezar desde cero en el mundo de data, te recomendamos que eches un vistazo a los masters de Nebulova. Además, si tienes un nivel intermedio manipulando los algoritmos, también ofrecemos cursos avanzados con especialización en el respectivo sector.

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *