Instalar paquetes y llamar librerías

#install.packages("rpart")
library(rpart)
#install.packages("rpart.plot")
library(rpart.plot)

Importar la base de datos

library(readr)
houses <- read_csv("HousePriceData.csv")
summary(houses)
##   Observation      Dist_Taxi      Dist_Market    Dist_Hospital  
##  Min.   :  1.0   Min.   :  146   Min.   : 1666   Min.   : 3227  
##  1st Qu.:237.0   1st Qu.: 6477   1st Qu.: 9367   1st Qu.:11302  
##  Median :469.0   Median : 8228   Median :11149   Median :13189  
##  Mean   :468.4   Mean   : 8235   Mean   :11022   Mean   :13091  
##  3rd Qu.:700.0   3rd Qu.: 9939   3rd Qu.:12675   3rd Qu.:14855  
##  Max.   :932.0   Max.   :20662   Max.   :20945   Max.   :23294  
##                                                                 
##      Carpet         Builtup        Parking          City_Category     
##  Min.   :  775   Min.   :  932   Length:905         Length:905        
##  1st Qu.: 1317   1st Qu.: 1579   Class :character   Class :character  
##  Median : 1478   Median : 1774   Mode  :character   Mode  :character  
##  Mean   : 1511   Mean   : 1794                                        
##  3rd Qu.: 1654   3rd Qu.: 1985                                        
##  Max.   :24300   Max.   :12730                                        
##  NA's   :7                                                            
##     Rainfall       House_Price       
##  Min.   :-110.0   Min.   :  1492000  
##  1st Qu.: 600.0   1st Qu.:  4623000  
##  Median : 780.0   Median :  5860000  
##  Mean   : 786.9   Mean   :  6083992  
##  3rd Qu.: 970.0   3rd Qu.:  7200000  
##  Max.   :1560.0   Max.   :150000000  
## 
head(houses)
## # A tibble: 6 × 10
##   Observation Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup Parking     
##         <dbl>     <dbl>       <dbl>         <dbl>  <dbl>   <dbl> <chr>       
## 1           1      9796        5250         10703   1659    1961 Open        
## 2           2      8294        8186         12694   1461    1752 Not Provided
## 3           3     11001       14399         16991   1340    1609 Not Provided
## 4           4      8301       11188         12289   1451    1748 Covered     
## 5           5     10510       12629         13921   1770    2111 Not Provided
## 6           6      6665        5142          9972   1442    1733 Open        
## # ℹ 3 more variables: City_Category <chr>, Rainfall <dbl>, House_Price <dbl>
str(houses)
## spc_tbl_ [905 × 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Observation  : num [1:905] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Dist_Taxi    : num [1:905] 9796 8294 11001 8301 10510 ...
##  $ Dist_Market  : num [1:905] 5250 8186 14399 11188 12629 ...
##  $ Dist_Hospital: num [1:905] 10703 12694 16991 12289 13921 ...
##  $ Carpet       : num [1:905] 1659 1461 1340 1451 1770 ...
##  $ Builtup      : num [1:905] 1961 1752 1609 1748 2111 ...
##  $ Parking      : chr [1:905] "Open" "Not Provided" "Not Provided" "Covered" ...
##  $ City_Category: chr [1:905] "CAT B" "CAT B" "CAT A" "CAT B" ...
##  $ Rainfall     : num [1:905] 530 210 720 620 450 760 1030 1020 680 1130 ...
##  $ House_Price  : num [1:905] 6649000 3982000 5401000 5373000 4662000 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Observation = col_double(),
##   ..   Dist_Taxi = col_double(),
##   ..   Dist_Market = col_double(),
##   ..   Dist_Hospital = col_double(),
##   ..   Carpet = col_double(),
##   ..   Builtup = col_double(),
##   ..   Parking = col_character(),
##   ..   City_Category = col_character(),
##   ..   Rainfall = col_double(),
##   ..   House_Price = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

Generar el modelo

houses <-  houses[-348, ]
houses$Parking <- as.factor(houses$Parking)
houses$Parking <- as.factor(houses$City_Category)
str(houses)
## tibble [904 × 10] (S3: tbl_df/tbl/data.frame)
##  $ Observation  : num [1:904] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Dist_Taxi    : num [1:904] 9796 8294 11001 8301 10510 ...
##  $ Dist_Market  : num [1:904] 5250 8186 14399 11188 12629 ...
##  $ Dist_Hospital: num [1:904] 10703 12694 16991 12289 13921 ...
##  $ Carpet       : num [1:904] 1659 1461 1340 1451 1770 ...
##  $ Builtup      : num [1:904] 1961 1752 1609 1748 2111 ...
##  $ Parking      : Factor w/ 3 levels "CAT A","CAT B",..: 2 2 1 2 2 2 1 3 2 3 ...
##  $ City_Category: chr [1:904] "CAT B" "CAT B" "CAT A" "CAT B" ...
##  $ Rainfall     : num [1:904] 530 210 720 620 450 760 1030 1020 680 1130 ...
##  $ House_Price  : num [1:904] 6649000 3982000 5401000 5373000 4662000 ...
arbol_houses <-  rpart(House_Price~., data= houses)
options(scipen = 999)
rpart.plot(arbol_houses)

Conclusiones

El modelo de árbol de regresión segmenta a las observaciones en grupos en términos de precio promedio, con base en las variables Parking y Dist_Taxi.

  • El precio promedio observado en el conjunto de entrenamiento es de 5.9 millones de USD, el cual sirve como punto de referencia global antes de aplicar segmentación.
  • El primer factor nos indica que las casas que no tienen un estacionamiento tipo B o C, tienen el mayor precio (promedio estimado = 7.4 USD [en millones]).
  • Por el otro lado, aquellas casas con un estacionamiento tipo B, son el tipo de casas más accesibles en promedio (4.5 millones USD).
  • Finalmente, las casas con estacionamiento precio tipo C se encuentran en el medio de los otros dos casos, aquí el determinante es la distancia a una estación de Taxis menores a 11 kilómetros tienden a ser un poco más caras (6.5 USD en millones), que su contraparte (5.3 USD en millones).
LS0tDQp0aXRsZTogIkFyYm9sIGRlIGRlY2lzacOzbiAtIEhvdXNpbmciDQphdXRob3I6ICJEaWVnbyBRdWV2ZWRvIFNhcmFiaWEiDQpkYXRlOiAiMjAyNi0wMi0xNyINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBjb3Ntbw0KLS0tDQoNCjxjZW50ZXI+DQohW10oaHR0cHM6Ly9lbmNyeXB0ZWQtdGJuMC5nc3RhdGljLmNvbS9pbWFnZXM/cT10Ym46QU5kOUdjUVJWMjVPTlNNZy1rc0Rad3FCZ0Yxb3M0bThGenNBQVA0NkhnJnMpDQo8L2NlbnRlcj4NCg0KIyA8c3BhbiBzdHlsZSA9ICJjb2xvcjpibHVlIj4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpDQpsaWJyYXJ5KHJwYXJ0KQ0KI2luc3RhbGwucGFja2FnZXMoInJwYXJ0LnBsb3QiKQ0KbGlicmFyeShycGFydC5wbG90KQ0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZSA9ICJjb2xvcjpibHVlIj4gSW1wb3J0YXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQoNCmBgYHtyIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQ0KbGlicmFyeShyZWFkcikNCmhvdXNlcyA8LSByZWFkX2NzdigiSG91c2VQcmljZURhdGEuY3N2IikNCmBgYA0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShob3VzZXMpDQpoZWFkKGhvdXNlcykNCnN0cihob3VzZXMpDQpgYGANCg0KIyA8c3BhbiBzdHlsZSA9ICJjb2xvcjpibHVlIj4gR2VuZXJhciBlbCBtb2RlbG8gPC9zcGFuPg0KDQpgYGB7cn0NCmhvdXNlcyA8LSAgaG91c2VzWy0zNDgsIF0NCmhvdXNlcyRQYXJraW5nIDwtIGFzLmZhY3Rvcihob3VzZXMkUGFya2luZykNCmhvdXNlcyRQYXJraW5nIDwtIGFzLmZhY3Rvcihob3VzZXMkQ2l0eV9DYXRlZ29yeSkNCnN0cihob3VzZXMpDQphcmJvbF9ob3VzZXMgPC0gIHJwYXJ0KEhvdXNlX1ByaWNlfi4sIGRhdGE9IGhvdXNlcykNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KcnBhcnQucGxvdChhcmJvbF9ob3VzZXMpDQpgYGANCg0KIyA8c3BhbiBzdHlsZSA9ICJjb2xvcjpibHVlIj4gQ29uY2x1c2lvbmVzIDwvc3Bhbj4NCg0KRWwgbW9kZWxvIGRlIMOhcmJvbCBkZSByZWdyZXNpw7NuIHNlZ21lbnRhIGEgbGFzIG9ic2VydmFjaW9uZXMgZW4gZ3J1cG9zIGVuIHTDqXJtaW5vcyBkZSBwcmVjaW8gcHJvbWVkaW8sIGNvbiBiYXNlIGVuIGxhcyB2YXJpYWJsZXMgUGFya2luZyB5IERpc3RfVGF4aS4NCg0KKiBFbCBwcmVjaW8gcHJvbWVkaW8gb2JzZXJ2YWRvIGVuIGVsIGNvbmp1bnRvIGRlIGVudHJlbmFtaWVudG8gZXMgZGUgNS45IG1pbGxvbmVzIGRlIFVTRCwgZWwgY3VhbCBzaXJ2ZSBjb21vIHB1bnRvIGRlIHJlZmVyZW5jaWEgZ2xvYmFsIGFudGVzIGRlIGFwbGljYXIgc2VnbWVudGFjacOzbi4gIA0KKiBFbCBwcmltZXIgZmFjdG9yIG5vcyBpbmRpY2EgcXVlIGxhcyBjYXNhcyBxdWUgbm8gdGllbmVuIHVuIGVzdGFjaW9uYW1pZW50byB0aXBvIEIgbyBDLCB0aWVuZW4gZWwgbWF5b3IgcHJlY2lvIChwcm9tZWRpbyBlc3RpbWFkbyA9IDcuNCBVU0QgW2VuIG1pbGxvbmVzXSkuICANCiogUG9yIGVsIG90cm8gbGFkbywgYXF1ZWxsYXMgY2FzYXMgY29uIHVuIGVzdGFjaW9uYW1pZW50byB0aXBvIEIsIHNvbiBlbCB0aXBvIGRlIGNhc2FzIG3DoXMgYWNjZXNpYmxlcyBlbiBwcm9tZWRpbyAoNC41IG1pbGxvbmVzIFVTRCkuICANCiogRmluYWxtZW50ZSwgbGFzIGNhc2FzIGNvbiBlc3RhY2lvbmFtaWVudG8gcHJlY2lvIHRpcG8gQyBzZSBlbmN1ZW50cmFuIGVuIGVsIG1lZGlvIGRlIGxvcyBvdHJvcyBkb3MgY2Fzb3MsIGFxdcOtIGVsIGRldGVybWluYW50ZSBlcyBsYSBkaXN0YW5jaWEgYSB1bmEgZXN0YWNpw7NuIGRlIFRheGlzIG1lbm9yZXMgYSAxMSBraWzDs21ldHJvcyB0aWVuZGVuIGEgc2VyIHVuIHBvY28gbcOhcyBjYXJhcyAoNi41IFVTRCBlbiBtaWxsb25lcyksIHF1ZSBzdSBjb250cmFwYXJ0ZSAoNS4zIFVTRCBlbiBtaWxsb25lcykuDQoNCg==