1 Objetivo

Construir y evaluar un modelo de árbol de regresión para realizar predicciones y comparar resultados con el modelo de regresión lineal múltiple.

2 Descripción

  • Se cargan las librerías necesarias

  • Se cargan los datos Se exploran los datos

  • Se crean los datos de entrenamiento y validación 70% y 30% respectivamente

Las métricas a valorar serán:

  • Que los coeficientes sean estadísticamente significativos por encima del 95%.

  • R Squared Ajustado el modelo se acepta si sobrepasa en el 80%

  • rmse comparado con otro modelo mismos datos se acepta o se establece que un modelo es mejor que otro.

  • Comparaciones con el modelo de regresión lineal múltiple

3 Marco Teórico

Los árboles de regresión/clasificación tienen como objetivo predecir la variable respuesta Y en función de covariables. Los árboles de regresión permiten al igual que otros modelos de regresión predecir una variable dependiente Y en relación varias variables independentes Xs.

4 Desarrollo

4.1 Cargar librerías

library(readr) # Para importar datos
library(dplyr) # Para filtrar   
library(knitr) # Para datos tabulares
library(ggplot2) # Para visualizar
library(plotly)
library(caret)  # Para particionar
library(Metrics) # Para determinar rmse

library(rpart) # Para árbol
library(rpart.plot) # Para árbol

4.2 Cargar datos

datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/Advertising.csv")

4.3 Explorando datos

##        X                TV             Radio          Newspaper     
##  Min.   :  1.00   Min.   :  0.70   Min.   : 0.000   Min.   :  0.30  
##  1st Qu.: 50.75   1st Qu.: 74.38   1st Qu.: 9.975   1st Qu.: 12.75  
##  Median :100.50   Median :149.75   Median :22.900   Median : 25.75  
##  Mean   :100.50   Mean   :147.04   Mean   :23.264   Mean   : 30.55  
##  3rd Qu.:150.25   3rd Qu.:218.82   3rd Qu.:36.525   3rd Qu.: 45.10  
##  Max.   :200.00   Max.   :296.40   Max.   :49.600   Max.   :114.00  
##      Sales      
##  Min.   : 1.60  
##  1st Qu.:10.38  
##  Median :12.90  
##  Mean   :14.02  
##  3rd Qu.:17.40  
##  Max.   :27.00
str(datos)
## 'data.frame':    200 obs. of  5 variables:
##  $ X        : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ TV       : num  230.1 44.5 17.2 151.5 180.8 ...
##  $ Radio    : num  37.8 39.3 45.9 41.3 10.8 48.9 32.8 19.6 2.1 2.6 ...
##  $ Newspaper: num  69.2 45.1 69.3 58.5 58.4 75 23.5 11.6 1 21.2 ...
##  $ Sales    : num  22.1 10.4 9.3 18.5 12.9 7.2 11.8 13.2 4.8 10.6 ...

Son 200 registros tres variables independientes y una variable dependiente.

La variable dependiente o variable objetivo es Sales que deberá estar en función de la inversión que se hace en TV, Radio o Newspaper.

4.4 Limpiar datos

Quitar la variable x que no es de interés

datos <- datos %>%
  select (TV, Radio, Newspaper, Sales)

4.4.1 head(datos)

kable(head(datos, 20), caption = "Primeros 20 registros")
Primeros 20 registros
TV Radio Newspaper Sales
230.1 37.8 69.2 22.1
44.5 39.3 45.1 10.4
17.2 45.9 69.3 9.3
151.5 41.3 58.5 18.5
180.8 10.8 58.4 12.9
8.7 48.9 75.0 7.2
57.5 32.8 23.5 11.8
120.2 19.6 11.6 13.2
8.6 2.1 1.0 4.8
199.8 2.6 21.2 10.6
66.1 5.8 24.2 8.6
214.7 24.0 4.0 17.4
23.8 35.1 65.9 9.2
97.5 7.6 7.2 9.7
204.1 32.9 46.0 19.0
195.4 47.7 52.9 22.4
67.8 36.6 114.0 12.5
281.4 39.6 55.8 24.4
69.2 20.5 18.3 11.3
147.3 23.9 19.1 14.6

4.4.2 tail(datos)

kable(tail(datos, 20), caption = "Últimos 20 registros")
Últimos 20 registros
TV Radio Newspaper Sales
181 156.6 2.6 8.3 10.5
182 218.5 5.4 27.4 12.2
183 56.2 5.7 29.7 8.7
184 287.6 43.0 71.8 26.2
185 253.8 21.3 30.0 17.6
186 205.0 45.1 19.6 22.6
187 139.5 2.1 26.6 10.3
188 191.1 28.7 18.2 17.3
189 286.0 13.9 3.7 15.9
190 18.7 12.1 23.4 6.7
191 39.5 41.1 5.8 10.8
192 75.5 10.8 6.0 9.9
193 17.2 4.1 31.6 5.9
194 166.8 42.0 3.6 19.6
195 149.7 35.6 6.0 17.3
196 38.2 3.7 13.8 7.6
197 94.2 4.9 8.1 9.7
198 177.0 9.3 6.4 12.8
199 283.6 42.0 66.2 25.5
200 232.1 8.6 8.7 13.4

5 Datos de entrenamiento y validación

5.1 Datos de entrenamiento

n <- nrow(datos)

# Modificar la semilla estableciendo como parámetro los útimos cuatro dígitos de su no de control. 
# Ej. set.seed(0732), o set.seed(1023)
# set.seed(2022) 
set.seed(0421)

De manera aleatoria se construyen los datos de entrenamiento y los datos de validación.

En la variable entrena se generan los registros que van a ser los datos de entrenamiento, de tal forma que los datos de validación serán los que no sena de entrenamiento [-entrena].

entrena <- createDataPartition(y = datos$Sales, p = 0.70, list = FALSE, times = 1)

# Datos entrenamiento
datos.entrenamiento <- datos[entrena, ]  # [renglones, columna]

# Datos validación
datos.validacion <- datos[-entrena, ]

5.1.2 tail()

kable(tail(datos.entrenamiento, 20), caption = "Datos de entrenamiento ültimos 20 registros")
Datos de entrenamiento ültimos 20 registros
TV Radio Newspaper Sales
172 164.5 20.9 47.4 14.5
174 168.4 7.1 12.8 11.7
175 222.4 3.4 13.1 11.5
176 276.9 48.9 41.8 27.0
177 248.4 30.2 20.3 20.2
179 276.7 2.3 23.7 11.8
180 165.6 10.0 17.6 12.6
181 156.6 2.6 8.3 10.5
182 218.5 5.4 27.4 12.2
183 56.2 5.7 29.7 8.7
186 205.0 45.1 19.6 22.6
190 18.7 12.1 23.4 6.7
191 39.5 41.1 5.8 10.8
193 17.2 4.1 31.6 5.9
194 166.8 42.0 3.6 19.6
196 38.2 3.7 13.8 7.6
197 94.2 4.9 8.1 9.7
198 177.0 9.3 6.4 12.8
199 283.6 42.0 66.2 25.5
200 232.1 8.6 8.7 13.4

5.2 Datos de validación

Los datos de validación deben ser diferentes a los datos den entrenamiento.

5.2.1 head()

kable(head(datos.validacion, 20), caption = "Datos de Validación Primeros 20 registros")
Datos de Validación Primeros 20 registros
TV Radio Newspaper Sales
4 151.5 41.3 58.5 18.5
8 120.2 19.6 11.6 13.2
9 8.6 2.1 1.0 4.8
10 199.8 2.6 21.2 10.6
11 66.1 5.8 24.2 8.6
30 70.6 16.0 40.8 10.5
31 292.9 28.3 43.2 21.4
32 112.9 17.4 38.6 11.9
36 290.7 4.1 8.5 12.8
39 43.1 26.7 35.1 10.1
40 228.0 37.7 32.0 21.5
41 202.5 22.3 31.6 16.6
42 177.0 33.4 38.7 17.1
45 25.1 25.7 43.3 8.5
53 216.4 41.7 39.6 22.6
54 182.6 46.2 58.7 21.2
56 198.9 49.4 60.0 23.7
57 7.3 28.1 41.4 5.5
58 136.2 19.2 16.6 13.2
61 53.5 2.0 21.4 8.1

5.2.2 tail()

kable(tail(datos.validacion, 20), caption = "Datos de validació últimos 20 registros")
Datos de validació últimos 20 registros
TV Radio Newspaper Sales
120 19.4 16.0 22.3 6.6
134 219.8 33.5 45.1 19.6
137 25.6 39.0 9.3 9.5
143 220.5 33.2 37.9 20.1
144 104.6 5.7 34.4 10.4
158 149.8 1.3 24.3 10.1
161 172.5 18.1 30.7 14.4
165 117.2 14.7 5.4 11.9
166 234.5 3.4 84.8 11.9
170 284.3 10.6 6.4 15.0
171 50.0 11.6 18.4 8.4
173 19.6 20.1 17.0 7.6
178 170.2 7.8 35.2 11.7
184 287.6 43.0 71.8 26.2
185 253.8 21.3 30.0 17.6
187 139.5 2.1 26.6 10.3
188 191.1 28.7 18.2 17.3
189 286.0 13.9 3.7 15.9
192 75.5 10.8 6.0 9.9
195 149.7 35.6 6.0 17.3

6 Generar el modelo de arbol de regresión

  • El comando para generar un modelo de árbol de decisión, usando la librería rpart

  • La función lleva el mismo nombre

set.seed(0421) # Semilla

modelo <- rpart(formula = TV  ~ ., data = datos.entrenamiento)

modelo
## n= 142 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 142 1065492.000 146.55920  
##    2) Sales< 11.35 48   72953.810  53.62500  
##      4) Sales< 9.35 24   13002.730  26.67083 *
##      5) Sales>=9.35 24   25077.780  80.57917  
##       10) Radio>=10.8 13    3372.371  56.96154 *
##       11) Radio< 10.8 11    5884.389 108.49090 *
##    3) Sales>=11.35 94  366281.700 194.01490  
##      6) Sales< 19.65 69  244046.700 174.50290  
##       12) Radio>=28.1 23   50613.840 123.72610  
##         24) Sales< 16.8 14   10703.900  92.80000 *
##         25) Sales>=16.8 9    5691.260 171.83330 *
##       13) Radio< 28.1 46  104482.100 199.89130  
##         26) Radio>=5.15 38   83410.040 191.23160  
##           52) Sales< 14.7 19   32808.010 164.64740 *
##           53) Sales>=14.7 19   23746.670 217.81580 *
##         27) Radio< 5.15 8    4686.535 241.02500 *
##      7) Sales>=19.65 25   23461.490 247.86800 *

6.1 Visualizar el arbol de regresión

  • Dibujar el árbol mediante la función prp()

6.2 Arbol de regresión

6.3 Predecir con los datos de validación

##         4         8         9        10        11        30        31        32 
## 171.83333 164.64737  26.67083 108.49091  26.67083  56.96154 247.86800 164.64737 
##        36        39        40        41        42        45        53        54 
## 241.02500  56.96154 247.86800 217.81579 171.83333  26.67083 247.86800 247.86800 
##        56        57        58        61        63        65        67        71 
## 247.86800  26.67083 164.64737  26.67083 217.81579 171.83333  56.96154 171.83333 
##        79        81        85        87        88        89        91        93 
##  26.67083 164.64737 247.86800 164.64737  92.80000 164.64737 108.49091 171.83333 
##        97       101       104       111       114       116       120       134 
## 241.02500 241.02500 217.81579 164.64737 217.81579  92.80000  26.67083 171.83333 
##       137       143       144       158       161       165       166       170 
##  56.96154 247.86800 108.49091 108.49091 164.64737 164.64737 241.02500 217.81579 
##       171       173       178       184       185       187       188       189 
##  26.67083  26.67083 164.64737 247.86800 217.81579 108.49091 171.83333 217.81579 
##       192       195 
##  56.96154 171.83333
  • Ver los datos de predicción
predicciones <- data.frame(datos.validacion, prediccion)

kable(tail(predicciones, 20), caption = "Ultimos 20 registros")
Ultimos 20 registros
TV Radio Newspaper Sales prediccion
120 19.4 16.0 22.3 6.6 26.67083
134 219.8 33.5 45.1 19.6 171.83333
137 25.6 39.0 9.3 9.5 56.96154
143 220.5 33.2 37.9 20.1 247.86800
144 104.6 5.7 34.4 10.4 108.49091
158 149.8 1.3 24.3 10.1 108.49091
161 172.5 18.1 30.7 14.4 164.64737
165 117.2 14.7 5.4 11.9 164.64737
166 234.5 3.4 84.8 11.9 241.02500
170 284.3 10.6 6.4 15.0 217.81579
171 50.0 11.6 18.4 8.4 26.67083
173 19.6 20.1 17.0 7.6 26.67083
178 170.2 7.8 35.2 11.7 164.64737
184 287.6 43.0 71.8 26.2 247.86800
185 253.8 21.3 30.0 17.6 217.81579
187 139.5 2.1 26.6 10.3 108.49091
188 191.1 28.7 18.2 17.3 171.83333
189 286.0 13.9 3.7 15.9 217.81579
192 75.5 10.8 6.0 9.9 56.96154
195 149.7 35.6 6.0 17.3 171.83333

7 Interpretación

En este análisis de datos usamos un conjunto de datos que es del conjunto de datos que abarca(TV, Sales, Newspaper, Radio). Para este análisis usamos los árboles de regresión y clasificación que tienen como objetivo predecir la variable respuesta Y en función de covariables, se uso como variable dependiente els “Sales” en este data.frame contamos con 200 observaciones y 4 variables, pero dentro de este se distribuye en datos.entrenamiento con 142 observaciones y 4 variables, y en datos.validación con 58 observaciones y 4 variables cabe mencionar que las variables independientes de inversión son en TV, Radio o Newspaper. La variable que es estadisticamente significativa es “Sales” al realizar la evaluación del modelo podemos notar que esta por encima del 90% lo que esto nos indica que es un buen modelo y y una buena predicción que esta en 94% con una evaluación por encima de 95% .Dependiendo de la variable el modelo del arbol va evaluando la construcción para calcular el valor.

Tenemos la comparación del modelo de regresión lineal que es el método mas usado en estadística para predecir valores de variables continuas debido a su facil interpretación, pero en muchas situaciones los estandares de el modelo no se cumplen y por consiguiente se tiende a forzar el modelo, llevando a conclusiones erroneas. Los arboles de regresión son una alternativa que no requiere realizar una predicción al azar sobre los datos a analizar y es un metodo de facil interpretación de los resultados. Como en este caso al visualizar el arbol de regresión.