Está en la página 1de 25

Proyecto Machine Learning:

Predicción de Precios de
Viviendas en Boston con
Regresión

Victor Roman

Mar 12, 2019 

Introducción
En este proyecto desarrollaremos y evaluaremos el rendimiento y la
potencia predictiva de un modelo entrenado y probado sobre datos
referentes al mercado inmobiliario residencial en barrios de Boston.

Una vez conseguido un buen ajuste, utilizaremos este modelo para


predecir el precio de viviendas en ese área.

Un modelo así sería muy valioso para una agencia inmobiliaria que
pudiera hacer uso de la información proporcionada diariamente.

El proyecto completo, documentación y conjuntos de datos se pueden


encontrar en mi página GitHub:

https://github.com/rromanss23/
Machine_Leaning_Engineer_Udacity_NanoDegree/tree/master/
projects/boston_housing
Obtención De Datos y Preprocesamiento Previo
El conjunto de datos de este modelo proviene del repositorio “UCI
Machine Learning”. Estos datos se recopilaron en in 1978, y cada una
de las 506 entradas representan datos agregados de 14 características
de casas en diversos barrios de Boston.

Las características son:

 CRIM: Índice de criminalidad per capita


 ZN: Proporción de superficie residencial establecida en lotes
mayores de 25.000 sq.ft (equivalente a 2.223 metros
cuadrados).
 INDUS: Proporción de superficie de negocio no minorista.
 CHAS: Es la variable ficticia “río Charles” (igual a 1 si el tramo
considerado está en la ribera del río, 0 en el otro caso)
 NOX: Concentración de óxidos de nitrógeno (partes por 10
millones)
 RM: Número promedio de habitaciones por vivienda
 AGE: Proporción de viviendas en propiedad ocupadas,
construidas antes de 1940
 DIS: Distancias ponderadas a cinco centros de empleo de
Boston
 RAD: Índice de accesibilidad a las autopistas radiales
 TAX: Parte del impuesto de bienes inmuebles por cada
10.000 $ de propiedad.
 PTRATIO: Ratio de alumnos por profesor
 B: Se calcula como 1000(Bk — 0.63)², donde Bk es la
proporción de personas de descendencia Afroamericana
 LSTAT: Porcentaje de población de “estatus de bajo nivel”
 MEDV: Mediana del valor de viviendas en propiedad (en
miles de dólares)
Este es una representación de los datos originales con sus
características:

Para el propósito del proyecto se han realizado los siguientes pasos de


preprocesamiento:

 Las características esenciales para el proyecto son: ‘RM’,


‘LSTAT’, ‘PTRATIO’ y ‘MEDV’. Se han excluido las restantes.
 Se han eliminado 16 entradas ‘MEDV’ con un valor de 50.0,
ya que muy probablemente contenían valores alterados o
inexactos.
 Se ha eliminado una entrada con un valor ‘RM’ de 8.78, ya
que es considerado un valor al extremo del rango (outlier).
Con ello se persigue optimizar el rendimiento del modelo.
 Al tratarse de datos desactualizados, el valor ‘MEDV’ se ha
escalado para considerar la inflación de 35 años del mercado
inmobiliario.

A continuación abriremos un editor “Python 3 Jupyter” y ejecutaremos


el fragmento de código mostrado más abajo para cargar los conjuntos
de datos y eliminar las características no esenciales, recibiendo un
mensaje de “completado con éxito”, si las acciones se realizaron
correctamente.
Dado que nuestro objetivo es desarrollar un modelo que tenga la
capacidad de predecir el valor de las viviendas, dividiremos el conjunto
de datos en las características y la variable objetivo, y las
almacenaremos en las variables ‘features’ and ‘prices’, respectivamente.

 Las características ‘RM’, ‘LSTAT’ y ‘PTRATIO’, nos dan


información cuantitativa acerca de cada entrada. Las
almacenaremos en “features”.
 La variable objetivo, ‘MEDV’, será la variable que
perseguimos predecir. la almacenaremos en “prices”.
# Import libraries necessary for this project
import numpy as np
import pandas as pd
from sklearn.model_selection import ShuffleSplit

# Import supplementary visualizations code visuals.py


import visuals as vs

# Pretty display for notebooks


%matplotlib inline

# Load the Boston housing dataset


data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)

# Success
print("Boston housing dataset has {} data points with {}
variables each.".format(*data.shape))

Exploración de Datos
En la primera sección del proyecto, realizaremos un análisis
exploratorio del conjunto de datos y obtendremos algunas
observaciones.

Cálculos estadísticos
# Minimum price of the data
minimum_price = np.amin(prices)

# Maximum price of the data


maximum_price = np.amax(prices)

# Mean price of the data


mean_price = np.mean(prices)

# Median price of the data


median_price = np.median(prices)

# Standard deviation of prices of the data


std_price = np.std(prices)

# Show the calculated statistics


print("Statistics for Boston housing dataset:\n")
print("Minimum price: ${}".format(minimum_price))
print("Maximum price: ${}".format(maximum_price))
print("Mean price: ${}".format(mean_price))
print("Median price ${}".format(median_price))
print("Standard deviation of prices: ${}".format(std_price))

¡Error! Nombre de archivo no especificado.

Observación de Características
La Ciencia de Datos es el proceso de realizar algunas suposiciones e
hipótesis sobre los datos, y probarlos realizando algunas tareas.
Inicialmente realizaremos las siguientes suposiciones intuitivas para
cada característica:

 Las viviendas con más habitaciones (valor ‘RM’ más elevado)


serán más valiosas. Normalmente las viviendas con más
habitaciones son más grandes y pueden acoger a más
personas, por lo que es razonable que su coste sea mayor. Son
variables directamente proporcionales.
 Los vecindarios con mayor número de personas de clase
trabajadora de baja cualificación (valor ‘LSTAT’ más alto)
serán menos valiosas. Si el porcentaje de personas de clase
trabajadora de baja cualificación es mayor, es probable que su
poder de compra sea inferior y por tanto, sus viviendas sean
de menor coste. Son variables inversamente proporcionales.
 Los vecindarios con un ratio “estudiantes por profesor” mayor
(valor ‘PTRATIO’ más alto), costarán menos. Si el porcentaje
de estudiantes por profesor es elevado, es probable que haya
menos escuelas en el vecindario, lo que puede estar
relacionado con menores ingresos fiscales, y esto a su vez con
que los habitantes del vecindario tengan menores salarios, lo
que hace probable que sus casas sean menos valiosas. Son
variables inversamente proporcionales.

Veremos si estas suposiciones con correctas a través del desarrollo de


este proyecto.

Análisis de Datos Exploratorio


Gráficos de Dispersión e Histogramas

Comenzaremos creando un gráfico de dispersión que nos permitirá


visualizar las relaciones por parejas y correlaciones entre las diferentes
características.

También es bastante útil realizar una revisión rápida sobre cómo se


distribuyen los datos y si estos contienen o no valores extremos
(outliers).
import matplotlib.pyplot as plt
import seaborn as sns%matplotlib inline# Calculate and show
pairplot
sns.pairplot(data, size=2.5)
plt.tight_layout()
¡Error! Nombre de archivo no especificado.

Podemos visualizar una relación lineal entre el número de habitaciones


(‘RM’) y los precios (‘MEDV’). Adicionalmente, podemos inferir del
histograma que la variable ‘MEDV’ variable parece tener una
distribución normal, pero conteniendo algunos valores extremos
(outliers).
Matriz de Correlación

Crearemos una matriz de correlación para cuantificar y resumir las


relaciones entre las variables.

Esta matriz de correlación está relacionada estrechamente con matriz


de covarianza, de hecho es una versión a escala de la matriz de
covarianza, calculada a partir de características estandarizadas.

Es una matriz cuadrada (con el mismo número de filas que de


columnas), que contiene el coeficiente de correlación de Pearson.
# Calculate and show correlation matrix
cm = np.corrcoef(data.values.T)
sns.set(font_scale=1.5)
hm = sns.heatmap(cm,
cbar=True,
annot=True,
square=True,
fmt='.2f',
annot_kws={'size': 15},
yticklabels=cols,
xticklabels=cols)

¡Error! Nombre de archivo no especificado.


Para ajustar un modelo de regresión, las características de interés son
las que tengan una correlación alta con la variable objetivo ‘MEDV’. De
la matriz de correlación anterior, podemos ver que esta condición se
alcanza para nuestras variables seleccionadas.

Desarrollando un Modelo
En esta segunda sección del proyecto, desarrollaremos las herramientas
y técnicas necesarias para que el modelo pueda realizar una predicción.
El hecho de realizar evaluaciones exactas del rendimiento de cada
modelo a través del uso de estas herramientas y técnicas ayuda a
reforzar de forma notable la confianza en las predicciones.

Definiendo una Métrica de Rendimiento

Es difícil medir la calidad de un determinado modelo sin cuantificar su


rendimiento en el entrenamiento y pruebas. Esto se realiza típicamente
con algún tipo de métrica de rendimiento, sea calculando algún tipo de
error, la corrección del ajuste, o alguna otra medición útil.

Para este proyecto calcularemos el coeficiente de determinación, R²,


para cuantificar el rendimiento del modelo. El coeficiente de
determinación de un modelo es una estadística útil en los análisis de
regresión, ya que describe a menudo “como es de bueno” el modelo
haciendo predicciones.

 Los valores de R² de 0 a 1 capturan el porcentaje de


correlación cuadrática entre los valores de predicción y reales
de la variable objetivo.
 Un modelo con un valor 0 de R² no es mejor que un modelo
que predice siempre la media de la variable objetivo.
 Con un valor 1 de R² predice perfectamente la variable
objetivo.
 Cualquier valor entre 0 y 1 indica qué porcentaje de la
variable objetivo puede ser explicada por las características,
usando este modelo.

Un modelo puede también tener una R2 negativa, lo que indica que el


modelo es claramente peor que uno que siempre prediga la media de
la variable objetivo.
# Import 'r2_score'

from sklearn.metrics import r2_score

def performance_metric(y_true, y_predict):


""" Calculates and returns the performance score between

true (y_true) and predicted (y_predict) values based


on the metric chosen. """

score = r2_score(y_true, y_predict)

# Return the score


return score

Mezclado y División de los Datos

En esta sección tomaremos el conjunto de datos de las viviendas en


Boston y lo dividiremos en subconjuntos de entrenamiento y prueba.
Típicamente, los datos están también mezclados en un orden aleatorio
cuando se crean dichos subconjuntos de entrenamiento y prueba, para
eliminar cualquier parcialidad en el ordenamiento del conjunto de
datos.
# Import 'train_test_split'
from sklearn.model_selection import train_test_split

# Shuffle and split the data into training and testing


subsets
X_train, X_test, y_train, y_test = train_test_split(features,
prices, test_size=0.2, random_state = 42)

# Success
print("Training and testing split was successful.")
¡Error! Nombre de archivo no especificado.

Entrenamiento y Pruebas

Puede que nos preguntemos: ¿cómo beneficia a un algoritmo de


aprendizaje la fragmentación de un conjunto de datos en ciertos
subconjuntos de aprendizaje y prueba?

Es útil evaluar nuestro modelo una vez entrenado. Queremos saber si


ha aprendido adecuadamente del fragmento de datos de aprendizaje.
Aquí puede haber tres situaciones diferentes:

1) El modelo no ha aprendido bien de los datos, y no puede predecir ni


siquiera los resultados del conjunto de datos de entrenamiento. Esto se
llama “underfitting”, o subajuste, y es causado por un gran sesgo.

2) El modelo aprende demasiado bien de los datos de entrenamiento,


hasta el punto que los memoriza y no es capaz de generalizar con
nuevos datos. Esto se denomina overfitting, o obreajuste, y es causado
por una gran varianza.

3) El modelo que tiene el equilibrio justo entre sesgo y varianza, ha


aprendido bien y es capaz de predecir correctamente las salidas de
nuevos datos.

Analizando el Rendimiento del Modelo


En esta tercera sección del proyecto, echaremos un vistazo a diversos
rendimientos de modelos de aprendizaje y pruebas en varios
subconjuntos de datos de entrenamiento.

Adicionalmente, investigaremos un algoritmo particular, Arbol de


Decisión Regresor (Decision Tree Regressor), con un
parámetro 'max_depth' creciente en el conjunto completo de
entrenamiento, para observar cómo la complejidad del modelo afecta al
rendimiento.

Realizar gráficos del rendimiento del modelo basados en criterios de


variación, puede ser beneficioso en el proceso de análisis, y puede
facilitar la visualización de comportamientos que no aparezcan con la
observación simple de los resultados.

Curvas de aprendizaje

El siguiente fragmento de programación produce cuatro gráficos para


un modelo de árbol de decisión con diferentes profundidades máximas
(max_depth). Cada gráfica visualiza las curvas de aprendizaje del
modelo para el entrenamiento y las pruebas según aumenta el tamaño
del conjunto de entrenamiento.

La región sombreada de la curva de aprendizaje muestra la


incertidumbre de la curva (medida como desviación estándar). El
modelo es puntado en los conjuntos de entrenamiento y pruebas
utilizando R2, el coeficiente de determinación.
# Produce learning curves for varying training set sizes and
maximum depths
vs.ModelLearning(features, prices)
¡Error! Nombre de archivo no especificado.

Aprendiendo los datos

Si revisamos el gráfico con la “max depth” de 3:

 Según crece el número de puntos de entrenamiento, las


puntuaciones de entrenamiento decrecen mientras que las
puntuaciones de prueba crecen.
 Cuando las dos puntuaciones (entrenamiento y pruebas)
tienden a converger, desde el nivel de los 300 puntos, tener
más puntos de entrenamiento no beneficiará el modelo.
 En general, con más columnas para cada observación,
conseguiremos más información y el modelo será capaz de
aprender mejor del conjunto de datos y por tanto, de hacer
mejores predicciones.

Curvas de complejidad

El siguiente fragmento de código produce un gráfico para un modelo de


arbol de decisión que ha sido entrenado y validado con los datos de
entrenamiento usando diferentes profundidades máximas (maximum
depths). El gráfico produce dos curvas de complejidad, una para
entrenamiento y otra para validación.

Similar a las curvas de aprendizaje, las regiones sombreadas de ambas


curvas de complejidad muestran la incertidumbre en dichas curvas, y el
modelo es puntuado en ambos conjuntos de entrenamiento y validación
usando la función performance_metric.
# Produce complexity curve for varying training set sizes
and maximum depths
vs.ModelComplexity(X_train, y_train)
¡Error! Nombre de archivo no especificado.

Compromiso Sesgo-Varianza

Si analizamos cómo el sesgo-varianza varía con el “maximun depth”,


podemos inferir que:

 Con la “maximum depth” de 1, la gráfica muestra que el


modelo no devuelve una buena puntuación ni en datos de
entrenamiento, ni en datos de prueba, que es un síntoma de
desajuste, y por tanto, alto sesgo. Para mejorar rendimiento,
deberíamos aumentar la complejidad del modelo, en este
caso, incrementar el hiperparámetro “max_depth” para
conseguir mejores resultados.
 Con el “maximun depth of ten” de 10, la gráfica muestra que
el modelo aprende perfectamente bien de los datos de
entrenamiento (con una puntuación cercana a 1) y también
devuelve pobres resultados en los datos de prueba, que es un
indicador de sobreajuste, no siendo capaz de generalizar bien
con datos nuevos. Este es un problema de alta varianza. Para
incrementar el rendimiento, deberíamos disminuir la
complejidad del modelo, en este caso, disminuir el
hiperparámetro max_depth para conseguir mejores
resultados.

Modelo Óptimo de “Mejor Estimación”

De la curva de complejidad, podemos inferir que la mejor “maximum


depth” para el modelo es 4, ya que es la que arroja una mejor
puntuación de validación.

Adicionalmente, con mayor profundidad (depth) mientras la


puntuación de entrenamiento aumenta, la puntuación de validación
tiende a disminuir, lo que es un síntoma de sobreajuste.

Evaluando el Rendimiento del Modelo


En esta sección final del proyecto, construiremos un modelo y
realizaremos una predicción sobre las características del conjunto de
datos del cliente utilizando un modelo optimizado desde fit_model.

Búsqueda en Malla (Grid Search)

La técnica de búsqueda en cuadrícula, o Grid Search, genera candidatos


exhaustivamente de una cuadrícula de valores de parámetros
especificados en el parámetro, que es un diccionario con los valores de
los hiperparámetros a evaluar. Un ejemplo puede ser:
param_grid = [ {‘C’: [1, 10, 100, 1000], ‘kernel’:
[‘linear’]}, {‘C’: [1, 10, 100, 1000], ‘gamma’: [0.001,
0.0001], ‘kernel’: [‘rbf’]}, ]

En este ejemplo, dos cuadrículas deben ser exploradas: una con un


núcleo (kernel) lineal, y valores C de [1,10,100,1000], y el segundo con
kernel RBF , y el producto cruzado de valores de C en los rangos [1, 10,
100, 1000] y valores gamma [0.001, 0.0001].

Cuando se ajusta esto en un conjunto de datos, se evalúan todas las


posibles combinaciones de los valores de los parámetros, y se retiene la
mejor combinación.

Validación Cruzada
La validación cruzada K-fold es una técnica usada para asegurar que
nuestro modelo ha sido bien entrenado, sin usar el set de pueba.
Consiste en:

 Fragmentar los datos en particiones k del mismo tamaño.


 Para cada partición i, entrenamos el modelo con los restantes
k-1 parámetros y los evaluamos en la partición i.
 La puntuación final es la media de las k puntuaciones
obtenidas.

Cuando evaluamos diferentes hiperparámetros como estimadores, hay


riesgo de sobreajuste (overfitting) en el set de prueba porque los
parámetros pueden ser retocados hasta que el estimador se comporte
de forma óptima. De esta manera, el conocimiento sobre el set de
prueba puede “fugarse” al modelo y las métricas de evaluación no
aportarán información sobre la generalización del rendimiento.

Para resolver este problema, otra sección del set de pruebas puede ser
escogido y designado como “set de validación”: después de realizar el
entrenamiento con el conjunto de datos para este propósito, la
evaluación se realiza en el conjunto de validación, y cuando este proceso
aparente arrojar resultados positivos, la evaluación final se puede
realizar en el set de pruebas.

Sin embargo, particionando los datos disponibles en tres conjuntos


(entrenamiento, validación y prueba) reducimos drásticamente el
número de muestras usadas para “enseñar” al modelo, y el modelo
resultante puede que no sea suficientemente bien entrenado (subajuste
o underfitting).

Usando la validación k-fold nos aseguramos que el modelo utiliza los


datos de entrenamiento para ajustar el modelo- Esto puede ser costoso
desde el punto de vista computacional, pero permite entrenar modelos
incluso si disponemos de poca cantidad de datos.

El principal propósito de la validación k-fold es obtener una estimación


de la generalización del modelo en datos nuevos.

Ajustando un modelo

La implementación final requiere agruparlo todo y entrenar el modelo


usando el algoritmo de árbol de decisión.

Para asegurar que estamos produciendo un modelo optimizado,


entrenaremos el modelo usando la técnica de búsqueda de cuadrícula
para optimizar el parámetro para el árbol de decisión. El
parámetro 'max_depth' puede ser descrito como el número de preguntas
que el algoritmo de del árbol de decisión puede hacer acerca de los
datos antes de hacer una predicción.

Adicionalmente, encontraremos que tu implementación


utiliza ShuffleSplit() para una forma alternativa de validación cruzada
(ver la variable 'cv_sets'). La implementación ShuffleSplit() que se
puede ver abajo creará 10 ('n_splits') sets mezclados, y por cada
mezcla, el 20% ('test_size') de los datos se usará como el set de
validación.
# Import 'make_scorer', 'DecisionTreeRegressor', and
'GridSearchCV'
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer
from sklearn.model_selection import GridSearchCV

def fit_model(X, y):


""" Performs grid search over the 'max_depth' parameter
for a
decision tree regressor trained on the input data
[X, y]. """

# Create cross-validation sets from the training data


cv_sets = ShuffleSplit(n_splits = 10, test_size = 0.20,
random_state = 0)

# Create a decision tree regressor object


regressor = DecisionTreeRegressor()

# Create a dictionary for the parameter 'max_depth' with


a range from 1 to 10
params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}

# Transform 'performance_metric' into a scoring function


using 'make_scorer'
scoring_fnc = make_scorer(performance_metric)

# Create the grid search cv object --> GridSearchCV()


grid = GridSearchCV(estimator=regressor,
param_grid=params, scoring=scoring_fnc, cv=cv_sets)

# Fit the grid search object to the data to compute the


optimal model
grid = grid.fit(X, y)

# Return the optimal model after fitting the data


return grid.best_estimator_

Realizando Predicciones

Una vez que el modelo se ha entrenado con un conjunto dado de datos,


puede ser utilizado para hacer predicciones con nuevos conjuntos de
datos de entrada.
En el caso de un árbol de decisión regresor, el modelo ha aprendido
cuáles son las mejores preguntas acerca de los datos de entrada, y
puede responder con una predicción para la variable objetivo.

Podemos usar estas predicciones para obtener información sobre datos


en los que el valor de la variable objetivo es desconocido, como los datos
que no se usaron para entrenar el modelo.

Modelo Óptimo

El siguiente fragmento de código encuentra la máxima profundidad


(depth) que devuelve el modelo.
# Fit the training data to the model using grid search
reg = fit_model(X_train, y_train)

# Produce the value for 'max_depth'


print("Parameter 'max_depth' is {} for the optimal
model.".format(reg.get_params()['max_depth']))

¡Error! Nombre de archivo no especificado.

Prediciendo los Precios de Venta

Imaginemos que somo una agencia inmobiliaria en el área de Boston


que usaremos este modelo para ayudar a los propietarios, clientes de la
agencia, a establecer el precio de sus viviendas que desean vender.
Hemos recogido la siguiente información para tres de nuestros clientes:

¡Error! Nombre de archivo no especificado.


 ¿A qué precio recomendamos a nuestros clientes vender su
vivienda?
 ¿Parecen esos precios razonables dados los valores de su
características respectivas?

Para encontrar las respuestas a estas ejecutaremos el siguiente


fragmento de código y discutiremos su resultado.
# Produce a matrix for client data
client_data = [[5, 17, 15], # Client 1
[4, 32, 22], # Client 2
[8, 3, 12]] # Client 3

# Show predictions
for i, price in enumerate(reg.predict(client_data)):
print("Predicted selling price for Client {}'s home: $
{:,.2f}".format(i+1, price))

¡Error! Nombre de archivo no especificado.

De los cálculos estadísticos realizados al principio del proyecto,


encontramos la siguiente información:

 Precio mínimo: 105.000 $


 Precio máximo: 1.024.800 $
 Precio medio: 454.343 $
 Valor de la mediana del precio: 438.900 $

Dados estos valores podemos concluir que:

 El precio de venta para el cliente 3 está cerca del millón de


dólares, que está cerca del máximo del conjunto de datos.
Este es un precio razonable debido a sus características (8
habitaciones, nivel de pobreza muy bajo y bajo índice de
alumnos por maestro), la casa puede estar en un vecindario
rico.
 El precio de venta para el cliente 2 es el más bajo de los tres y,
dado sus características, es razonable, ya que está cerca del
mínimo del conjunto de datos.
 Para el cliente 1, podemos ver que sus características son
intermedias entre las 2 últimas y, por lo tanto, su precio está
bastante cerca de la media y la mediana.

Y nuestras hipótesis iniciales sobre las características del dataset se


confirman:

 ‘RM’, tiene una relación proporcional directa con la variable


dependiente ‘Precios’.
 En contraste, ‘LSTAT’ y ‘PTRATIO’ tienen una relación
inversamente proporcional con la variable dependiente
‘PRECIOS’.

Sensibilidad del Modelo

Un modelo óptimo no es necesariamente un modelo robusto. A veces,


un modelo es demasiado complejo o demasiado simple para generalizar
suficientemente a nuevos datos.

A veces, un modelo podría usar un algoritmo de aprendizaje que no es


apropiado para la estructura de los datos dados.

Otras veces, los datos en sí pueden contener demasiado ruido (noise


data) o contener muy pocas muestras para permitir que un modelo
capture adecuadamente la variable objetivo, es decir, el modelo está
mal equipado.

La celda de código a continuación ejecuta la función fit_model diez veces


con diferentes conjuntos de entrenamiento y pruebas para ver cómo
cambia la predicción para un cliente específico con respecto a los datos
en los que está entrenado.
vs.PredictTrials(features, prices, fit_model, client_data)

Obtuvimos un rango en precios de casi 70k $, esta es una desviación


bastante grande ya que representa aproximadamente un 17% del valor
medio de los precios de la vivienda.

Aplicabilidad del Modelo

Ahora, usamremos estos resultados para discutir si el modelo


construido debe o no debe usarse en un entorno del mundo real.
Algunas preguntas que vale la pena responder son:

 ¿Cuán relevantes hoy son los datos que se recopilaron a


partir de 1978? ¿Qué tan importante es la inflación?
Los datos recopilados a partir de 1978 no tienen mucho valor
en el mundo de hoy. La sociedad y la economía han cambiado
mucho y la inflación ha tenido un gran impacto en los precios.
 ¿Las características presentes en los datos son suficientes
para describir una casa? ¿Crees que factores como la
calidad de las aplicaciones en el hogar, los pies cuadrados
del área de la parcela, la presencia de piscinas o no, etc.
deberían ser un factor?
El conjunto de datos considerado es bastante limitado, hay
muchas características, como el tamaño de la casa en pies
cuadrados, la presencia de piscina o no, y otras, que son muy
relevantes cuando se considera el precio de una casa.
 ¿Es el modelo lo suficientemente robusto como para hacer
predicciones consistentes?
Dada la alta varianza en el rango de Prince, podemos
asegurarnos de que no es un modelo robusto y, por lo tanto,
no es apropiado para hacer predicciones.
 ¿Los datos recopilados en una ciudad urbana como Boston
serían aplicables en una ciudad rural?
Los datos recolectados de una gran ciudad urbana como
Boston no serían aplicables en una ciudad rural, ya que el
valor igual de las prestaciones es mucho mayor en el área
urbana.
 ¿Es justo juzgar el precio de una vivienda individual según
las características de todo el vecindario?
En general, no es justo estimar o predecir el precio de una
vivienda individual según las características de todo el
vecindario. En el mismo barrio puede haber grandes
diferencias en los precios.

Conclusión
A lo largo de este artículo, hicimos un proyecto de regresión de
aprendizaje automático de extremo a extremo y aprendimos y
obtuvimos varias ideas sobre los modelos de regresión y cómo se
desarrollan.

Este fue el primero de los proyectos de aprendizaje automático que se


desarrollarán en esta serie. Si te gustó, ¡estad atentos para el próximo
artículo! Éste será una introducción a la teoría y los conceptos relativos
a los algoritmos de clasificación.

 Regresion

 Aprendizaje Automático

 Ciencia De Datos

 Programación
 Data Science

75
1

WRITTEN BY
Victor Roman
Follow
Industrial Engineer and passionate about 4.0 Industry. My goal is to encourage people to
learn and explore its technologies and their infinite posibilites.

Ciencia y Datos
Follow
Publicación de Ciencia de Datos, Machine Learning, Deep Learning, Inteligencia Artificial y
mucho más en Español. Compartiendo conocimiento para hacer de este mundo un lugar
mejor :)
About
Help
Legal
Get the Medium app

También podría gustarte