WQD7004 Group Project - OCC1 - Group G03
Richie Teoh (24088171)
Elmer Lee Jia Zhao (24082366)
Micole Chung Syn Tung (24073625)
Lee Re Xuan (24071969)
Angeline Tan Jie Lin (24084444)
01 June 2025
As Kuala Lumpur and Selangor continue to develop, they attract many young professionals and individuals from other states seeking better career opportunities. With the rising cost of living—particularly in Kuala Lumpur—renting has become a more practical choice, especially for newcomers to the urban workforce.
Proximity to public transport such as LRT, MRT, and KTM is a key factor in rental decisions, helping tenants save on transport costs. Rental prices vary widely depending on location, unit size, furnishing, and amenities. For instance, apartments in Bangsar South typically start from RM2,000 (PropertyGuru, 2024; EdgeProp, 2024).
This project analyzes apartment rental listings from mudah.my in Kuala Lumpur and Selangor to uncover key pricing patterns. A regression model will be used to predict rental prices, while a classification model will explore furnishing status based on property features. The findings aim to support better decision-making for both tenants and property owners.
The purpose of processing this dataset is to identify and understand the factors that influence apartment rental prices in Kuala Lumpur and Selangor. By analyzing various features of rental listings, such as property size, location, number of rooms, furnishing status, and proximity to transportation, the project aims to uncover patterns within the rental market and derive predictive insights.
This project focuses on addressing two key analytical questions:
- This question is approached using regression analysis. The objective is to construct a predictive model that estimates rental prices based on selected variables such as square footage, number of bedrooms, floor level, and furnishing status. The model is intended to provide a quantitative understanding of how each feature contributes to pricing, and to enable estimation of rental prices for new listings.
- This question is addressed using classification techniques. The objective is to develop a model that classifies rental listings into one of the three furnishing categories based on features such as rental price, location, property size, and number of bedrooms and bathrooms. This classification provides insights into the relationship between apartment features and furnishing status, and may support both tenant preferences and market supply analysis.
# Load required libraries for data manipulation, visualization, and machine learning
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(stringr)
library(ggplot2)
library(reshape2)
##
## Attaching package: 'reshape2'
##
## The following object is masked from 'package:tidyr':
##
## smiths
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following object is masked from 'package:purrr':
##
## lift
library(xgboost)
##
## Attaching package: 'xgboost'
##
## The following object is masked from 'package:dplyr':
##
## slice
library(lightgbm)
library(nnet)
# Load the dataset
df <- read.csv('mudah-apartment-kl-selangor.csv')
head(df)
## ads_id prop_name completion_year monthly_rent
## 1 100323185 The Hipster @ Taman Desa 2022 RM 4 200 per month
## 2 100203973 Segar Courts NA RM 2 300 per month
## 3 100323128 Pangsapuri Teratak Muhibbah 2 NA RM 1 000 per month
## 4 100191767 Sentul Point Suite Apartment 2020 RM 1 700 per month
## 5 97022692 Arte Mont Kiara NA RM 1 299 per month
## 6 100322897 Residensi Vista Wirajaya NA RM 1 500 per month
## location property_type rooms parking bathroom
## 1 Kuala Lumpur - Taman Desa Condominium 5 2 6
## 2 Kuala Lumpur - Cheras Condominium 3 1 2
## 3 Kuala Lumpur - Taman Desa Apartment 3 NA 2
## 4 Kuala Lumpur - Sentul Apartment 2 1 2
## 5 Kuala Lumpur - Mont Kiara Service Residence 1 1 1
## 6 Kuala Lumpur - Setapak Apartment 3 1 2
## size furnished
## 1 1842 sq.ft. Fully Furnished
## 2 1170 sq.ft. Partially Furnished
## 3 650 sq.ft. Fully Furnished
## 4 743 sq.ft. Partially Furnished
## 5 494 sq.ft. Not Furnished
## 6 884 sq.ft. Partially Furnished
## facilities
## 1 Minimart, Gymnasium, Security, Playground, Swimming Pool, Parking, Lift, Barbeque area, Multipurpose hall, Jogging Track
## 2 Playground, Parking, Barbeque area, Security, Jogging Track, Swimming Pool, Gymnasium, Lift, Sauna
## 3 Minimart, Jogging Track, Lift, Swimming Pool
## 4 Parking, Playground, Swimming Pool, Squash Court, Security, Minimart, Gymnasium, Lift
## 5 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 6 Parking, Security, Lift, Swimming Pool, Playground, Multipurpose hall
## additional_facilities region
## 1 Air-Cond, Cooking Allowed, Washing Machine Kuala Lumpur
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT Kuala Lumpur
## 3 Kuala Lumpur
## 4 Cooking Allowed, Near KTM/LRT, Washing Machine Kuala Lumpur
## 5 Air-Cond Kuala Lumpur
## 6 Cooking Allowed, Near KTM/LRT Kuala Lumpur
# Create a metadata table describing each key column
metadata <- tibble(
Column_Name = c(
"ads_id",
"prop_name",
"completion_year",
"monthly_rent",
"location",
"property_type",
"rooms",
"parking",
"bathroom",
"size",
"furnished",
"facilities",
"additional_facilities"
),
Description = c(
"Unique identifier for the listing",
"Name of the building/property",
"Completion/established year of the property",
"Monthly rent in Ringgit Malaysia (RM)",
"Property location within Kuala Lumpur region",
"Type of property (apartment, condo, flat, etc.)",
"Number of rooms in the unit",
"Number of parking spaces for the unit",
"Number of bathrooms in the unit",
"Total area of the unit in square feet",
"Furnishing status of the unit (fully, partial, non-furnished)",
"Main facilities available",
"Additional facilities (e.g., proximity to mall, school, railway, etc.)"
)
)
# Print the metadata table
metadata
## # A tibble: 13 × 2
## Column_Name Description
## <chr> <chr>
## 1 ads_id Unique identifier for the listing
## 2 prop_name Name of the building/property
## 3 completion_year Completion/established year of the property
## 4 monthly_rent Monthly rent in Ringgit Malaysia (RM)
## 5 location Property location within Kuala Lumpur region
## 6 property_type Type of property (apartment, condo, flat, etc.)
## 7 rooms Number of rooms in the unit
## 8 parking Number of parking spaces for the unit
## 9 bathroom Number of bathrooms in the unit
## 10 size Total area of the unit in square feet
## 11 furnished Furnishing status of the unit (fully, partial, non-fur…
## 12 facilities Main facilities available
## 13 additional_facilities Additional facilities (e.g., proximity to mall, school…
From the metadata extracted from Kaggle above: - ads_id should be dropped as it is a unique identifier for the Mudah rental listing. - prop_name can influence the rental price, for example properties under well-known developers such as Arte tend to be higher-priced; however, it does not generalize well and unseen property names might cause issues in the model. Henceforth, we decide to drop this variable as well. - completion_year includes some NA values, will investigate further, completion_year contributes to the price and the info are usually available online, hence we will impute it manually from data found online. - monthly_rent is saved as chr type due to the “RM” prefixes, will perform appropriate data transformation. - size is saved as chr type due to the “sq. ft.” suffixes, will perform appropriate data transformation.
The dataset was filtered to include only listings labeled as
“Serviced Residences” or “Condominium” to reduce noise and focus the
analysis on high-rise residential properties. Duplicate entries based on
ads_id
were removed by retaining only the row with the
least number of missing values, ensuring cleaner and more reliable input
for modeling.
# Data Pre-processing
# Filter only serviced residences and condo
df <- df %>%
filter(.data[['property_type']] %in% c('Service Residence','Condominium'))
# Check and Remove duplicated values.
duplicates_only <- df %>%
filter(duplicated(df) | duplicated(df, fromLast = TRUE)) %>%
arrange(ads_id)
duplicates_ads_id <- df %>%
filter(duplicated(df['ads_id']) | duplicated(df['ads_id'], fromLast = TRUE)) %>%
arrange(ads_id)
head(duplicates_only)
## ads_id prop_name completion_year
## 1 100108343 The Glenz @ Glenmarie NA
## 2 100108343 The Glenz @ Glenmarie NA
## 3 100304102 Impiria Residensi Bukit Tinggi Klang 2018
## 4 100304102 Impiria Residensi Bukit Tinggi Klang 2018
## 5 100640316 Hill10 Residence @ i-City NA
## 6 100640316 Hill10 Residence @ i-City NA
## monthly_rent location property_type rooms parking
## 1 RM 1 800 per month Selangor - Setia Alam Service Residence 2.0 NA
## 2 RM 1 800 per month Selangor - Setia Alam Service Residence 2.0 NA
## 3 RM 3 300 per month Selangor - Klang Service Residence 4.0 NA
## 4 RM 3 300 per month Selangor - Klang Service Residence 4.0 NA
## 5 RM 2 500 per month Selangor - Shah Alam Service Residence 2.0 NA
## 6 RM 2 500 per month Selangor - Shah Alam Service Residence 2.0 NA
## bathroom size furnished
## 1 2 800 sq.ft. Partially Furnished
## 2 2 800 sq.ft. Partially Furnished
## 3 3 1312 sq.ft. Fully Furnished
## 4 3 1312 sq.ft. Fully Furnished
## 5 1 602 sq.ft. Fully Furnished
## 6 1 602 sq.ft. Fully Furnished
## facilities
## 1
## 2
## 3 Minimart, Gymnasium, Security, Playground, Lift, Swimming Pool, Squash Court, Parking, Multipurpose hall, Tennis Court
## 4 Minimart, Gymnasium, Security, Playground, Lift, Swimming Pool, Squash Court, Parking, Multipurpose hall, Tennis Court
## 5 Gymnasium, Barbeque area, Security, Playground, Swimming Pool, Jogging Track, Sauna, Parking
## 6 Gymnasium, Barbeque area, Security, Playground, Swimming Pool, Jogging Track, Sauna, Parking
## additional_facilities region
## 1 Selangor
## 2 Selangor
## 3 Selangor
## 4 Selangor
## 5 Selangor
## 6 Selangor
head(duplicates_ads_id)
## ads_id prop_name completion_year monthly_rent
## 1 92495113 NA RM 950 per month
## 2 92495113 Venice Hill 2000 RM 950 per month
## 3 97500117 NA RM 500 per month
## 4 97500117 Evergreen Park 1997 RM 500 per month
## 5 99483293 3 Residen 2010 RM 2 200 per month
## 6 99483293 3 Residen 2010 RM 2 200 per month
## location property_type rooms parking bathroom
## 1 Kuala Lumpur - Cheras Condominium 3 1 2
## 2 Selangor - Cheras Condominium 3.0 1 2
## 3 Kuala Lumpur - Cheras Condominium 1 NA 1
## 4 Selangor - Cheras Condominium 1.0 NA 1
## 5 Kuala Lumpur - Taman Melawati Condominium 2 2 2
## 6 Selangor - Ulu Klang Condominium 2.0 2 2
## size furnished
## 1 1500 sq.ft. Partially Furnished
## 2 1500 sq.ft. Not Furnished
## 3 130 sq.ft. Fully Furnished
## 4 130 sq.ft. Fully Furnished
## 5 950 sq.ft. Fully Furnished
## 6 950 sq.ft. Fully Furnished
## facilities
## 1
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Sauna, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track, Tennis Court, Squash Court
## 3 Security, Lift, Swimming Pool, Playground, Barbeque area, Jogging Track
## 4 Minimart, Security, Gymnasium, Swimming Pool, Jogging Track, Parking, Playground
## 5 Playground, Swimming Pool, Barbeque area, Security, Minimart, Gymnasium, Sauna
## 6 Playground, Swimming Pool, Barbeque area, Security, Minimart, Gymnasium, Sauna
## additional_facilities region
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine Kuala Lumpur
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine Selangor
## 3 Cooking Allowed, Washing Machine Kuala Lumpur
## 4 Cooking Allowed, Washing Machine Selangor
## 5 Kuala Lumpur
## 6 Selangor
# Remove duplicates based on 'ads_id'
cleaned_df <- df %>%
mutate(na_count = rowSums(is.na(.))) %>%
group_by(ads_id) %>%
arrange(na_count) %>%
dplyr::slice(1) %>%
ungroup() %>%
select(-na_count)
sum(duplicated(cleaned_df['ads_id']))
## [1] 0
df <- cleaned_df
#
To ensure data quality, the dataset was examined for missing values.
The total number of missing entries and the distribution of missing data
across each column were identified using sum(is.na(df))
and
colSums(is.na(df))
. This step provides insight into the
completeness of the dataset and informs whether imputation or removal is
necessary for affected variables.
# Check for missing values in the entire dataset and by individual columns
sum(is.na(df))
## [1] 7728
colSums(is.na(df))
## ads_id prop_name completion_year
## 0 0 4657
## monthly_rent location property_type
## 0 0 0
## rooms parking bathroom
## 0 3071 0
## size furnished facilities
## 0 0 0
## additional_facilities region
## 0 0
This step involves cleaning text-based numeric fields
(monthly_rent
and size
) by removing prefixes,
suffixes, and formatting characters, then converting them into numeric
types. Rows with missing rental prices were removed, as this value is
essential for price prediction. Additionally, listings with missing
completion_year
were inspected for possible further
handling.
# Data Cleaning
# 1) Removing prefix 'RM' and suffix 'per month' from monthly rent, removing white spaces from 1 700, and convert to numeric type.
df <- df %>%
mutate(
monthly_rent = str_remove_all(monthly_rent, "RM|per month|,"),
monthly_rent = str_remove_all(monthly_rent, " "),
monthly_rent = as.numeric(monthly_rent)
)
# 2) Removing suffix 'sq. ft.' from size, removing any white spaces, and convert to numeric type.
df <- df%>%
mutate(
size = str_remove_all(size, "sq\\.ft\\."),
size = str_remove_all(size, " "),
size = as.numeric(size)
)
# Check which listings have missing 'completion_year'
unique(df[is.na(df$completion_year), "prop_name"])
## # A tibble: 732 × 1
## prop_name
## <chr>
## 1 ""
## 2 "Mahkota Garden Residence Condominium"
## 3 "vista alam"
## 4 "Corinthian Condominium"
## 5 "Plaza Damas"
## 6 "Residensi Harmoni 1"
## 7 "Endah Ria"
## 8 "OUG Parklane"
## 9 "Koi Kinrara"
## 10 "Putra Residence, Putra Heights"
## # ℹ 722 more rows
# Check rows with missing 'monthly_rent'
df[is.na(df$monthly_rent),]
## # A tibble: 1 × 14
## ads_id prop_name completion_year monthly_rent location property_type rooms
## <int> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 100849472 Affina Ba… NA NA Selango… Condominium 4.0
## # ℹ 7 more variables: parking <dbl>, bathroom <dbl>, size <dbl>,
## # furnished <chr>, facilities <chr>, additional_facilities <chr>,
## # region <chr>
# Remove rows with missing 'monthly_rent'
df <- df %>%
filter(!is.na(monthly_rent))
Interesting case, Affina Bay is located in Butterworth but included in this webscrapped Klang Valley Mudah listing. Henceforth, we will take more time to clean the data properly based on the listing’s location.
# Check all unique values in the 'location' column
unique(df['location'])
## # A tibble: 115 × 1
## location
## <chr>
## 1 Kuala Lumpur - Wangsa Maju
## 2 Kuala Lumpur - Ampang
## 3 Kuala Lumpur - Cheras
## 4 Kuala Lumpur - Old Klang Road
## 5 Selangor - Shah Alam
## 6 Selangor - Bandar Mahkota Cheras
## 7 Selangor - Cheras
## 8 Selangor - Bandar Sungai Long
## 9 Selangor - Petaling Jaya
## 10 Selangor - Seri Kembangan
## # ℹ 105 more rows
While reviewing the unique values in the location
column, several entries appear inconsistent or non-standard, such as
“Selangor - 389”, “Selangor - 517”, and “Kuala
Lumpur - Others”.
# Identify suspicious or unclear location values
suspicious_location <- c('Selangor - 389', 'Selangor - 360', 'Kuala Lumpur - Others', 'Selangor - 517', 'Selangor - 639')
# View all rows with those suspicious location values
df[df$location %in% suspicious_location,]
## # A tibble: 103 × 14
## ads_id prop_name completion_year monthly_rent location property_type rooms
## <int> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 94320618 Aurora R… 2017 1200 Selango… Service Resi… 3.0
## 2 95535774 Aurora R… 2017 1300 Selango… Service Resi… 3.0
## 3 98408795 9INE 2017 550 Selango… Condominium 1.0
## 4 98512867 9INE 2017 1300 Selango… Condominium 3.0
## 5 99738695 J DUPION… NA 2000 Kuala L… Condominium 2
## 6 100010982 Vista Se… NA 1600 Kuala L… Condominium 3
## 7 100211684 Antara R… NA 1100 Kuala L… Service Resi… 3
## 8 100512266 Ayuman S… 2018 1500 Selango… Service Resi… 3.0
## 9 100523361 Aurora R… 2017 1899 Selango… Condominium 3.0
## 10 100525893 Ayuman S… 2018 1100 Selango… Service Resi… 3.0
## # ℹ 93 more rows
## # ℹ 7 more variables: parking <dbl>, bathroom <dbl>, size <dbl>,
## # furnished <chr>, facilities <chr>, additional_facilities <chr>,
## # region <chr>
# Check if any property names contain the word "Ayuman"
df %>%
filter(grepl("Ayuman", prop_name))
## # A tibble: 5 × 14
## ads_id prop_name completion_year monthly_rent location property_type rooms
## <int> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 97447922 Ayuman Su… NA 1350 Kuala L… Service Resi… 3
## 2 100223849 Ayuman Su… 2018 1399 Selango… Service Resi… 3.0
## 3 100512266 Ayuman Su… 2018 1500 Selango… Service Resi… 3.0
## 4 100525893 Ayuman Su… 2018 1100 Selango… Service Resi… 3.0
## 5 100640521 Ayuman Su… 2018 1550 Selango… Service Resi… 3.0
## # ℹ 7 more variables: parking <dbl>, bathroom <dbl>, size <dbl>,
## # furnished <chr>, facilities <chr>, additional_facilities <chr>,
## # region <chr>
# Investigating number of rooms
unique(df$rooms)
## [1] "3" "1" "2.0" "4.0" "3.0"
## [6] "1.0" "2" "7.0" "4" "5.0"
## [11] "5" "6" "9" "9.0" "More than 10"
## [16] "6.0" "7"
df <- df %>%
mutate(
rooms = case_when(
rooms == "More than 10" ~ 10L, # Convert "more than 10" to integer 10
TRUE ~ as.integer(rooms) # Otherwise, convert to integer
)
)
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `rooms = case_when(rooms == "More than 10" ~ 10L, TRUE ~
## as.integer(rooms))`.
## Caused by warning:
## ! NAs introduced by coercion
df[df$rooms >= 6,]
## # A tibble: 29 × 14
## ads_id prop_name completion_year monthly_rent location property_type rooms
## <int> <chr> <dbl> <dbl> <chr> <chr> <int>
## 1 75084258 "" NA 1000 Selango… Condominium 7
## 2 94153029 "Binjai R… 2007 5800 Kuala L… Condominium 6
## 3 95078151 "Sentul p… NA 1550 Kuala L… Condominium 9
## 4 98657827 "Venice H… 2000 1300 Selango… Condominium 9
## 5 98910302 "" NA 1800 Kuala L… Condominium 10
## 6 98976763 "" NA 8000 Kuala L… Condominium 6
## 7 98976840 "" NA 12000 Kuala L… Condominium 6
## 8 99435386 "Wangsa H… 2001 3500 Kuala L… Condominium 6
## 9 99536159 "Perdana … NA 2800 Selango… Condominium 6
## 10 99729522 "Seri Pur… NA 1250 Kuala L… Condominium 10
## # ℹ 19 more rows
## # ℹ 7 more variables: parking <dbl>, bathroom <dbl>, size <dbl>,
## # furnished <chr>, facilities <chr>, additional_facilities <chr>,
## # region <chr>
df[!df$ads_id %in% c(95078151,98657827,98910302,99729522,99760048,100065541,100013966,100303122),]
## # A tibble: 13,739 × 14
## ads_id prop_name completion_year monthly_rent location property_type rooms
## <int> <chr> <dbl> <dbl> <chr> <chr> <int>
## 1 16525511 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 2 16572317 Villa Wan… 2010 1700 Kuala L… Condominium 3
## 3 16717632 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 4 16801236 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 5 17122588 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 6 17465265 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 7 17659177 Villa Wan… 2010 1700 Kuala L… Condominium 3
## 8 18186927 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 9 18631094 Villa Wan… 2010 2000 Kuala L… Condominium 3
## 10 18677373 Villa Wan… 2010 2000 Kuala L… Condominium 3
## # ℹ 13,729 more rows
## # ℹ 7 more variables: parking <dbl>, bathroom <dbl>, size <dbl>,
## # furnished <chr>, facilities <chr>, additional_facilities <chr>,
## # region <chr>
Interestingly, we see quite a varying number of rooms ranging from 1 to 10, usually a unit is available in 2 - 5 rooms, hence let us investigate the other values. From the rows, we could see that some units have 6 or more rooms despite only having size less than 2000 sq. ft., hence we will exclude ads_id %in$ c(95078151,98657827,98910302,99729522,99760048,100065541,100013966,100303122)
For the column parking, we decide to fill the NA values with 0.
df$parking[is.na(df$parking)] <- 0
For the column completion_year, we decide to fill NA values via median value of the locations.
# Impute missing 'completion_year' values using the median year within the same location group
df <- df %>%
group_by(location) %>%
mutate(completion_year = ifelse(is.na(completion_year), median(completion_year, na.rm = TRUE), completion_year))
# Load manually collected property names and their completion years
df_manual_prop <- read.csv('manual_prop_year.csv', header=FALSE)
colnames(df_manual_prop) <- c('prop_name','completion_year')
# Merge manual data with main dataset and update 'completion_year' where manual values are available
df <- df %>%
left_join(df_manual_prop, by = "prop_name", suffix = c("_raw", "_manual")) %>%
mutate(completion_year = coalesce(completion_year_raw, completion_year_manual)) %>%
select(-completion_year_raw, -completion_year_manual)
# Use global median to fill any remaining missing 'completion_year'
global_median_year <- median(df$completion_year, na.rm = TRUE)
df <- df %>%
mutate(completion_year = coalesce(completion_year, global_median_year))
After applying all cleaning steps, the dataset is free from
duplicates and missing values in key fields such as
monthly_rent
, size
, and
completion_year
. Inconsistent entries were filtered or
corrected, and numeric fields were standardized for analysis. The
cleaned dataset is now ready for exploratory analysis and modeling.
# Check the number of missing values in each column after data cleaning
colSums(is.na(df))
## ads_id prop_name monthly_rent
## 0 0 0
## location property_type rooms
## 0 0 0
## parking bathroom size
## 0 0 0
## furnished facilities additional_facilities
## 0 0 0
## region completion_year
## 0 0
The ggmap
package is used to retrieve geographic
coordinates (latitude and longitude) for each property and calculate the
distance to well-known landmarks in Kuala Lumpur, such as KLCC, Bukit
Bintang, and TRX. This helps capture location-based value, which is an
important factor in determining rental price.
df$full_location <- paste0(df$location, ",", df$prop_name)
# Get the unique values (Reduce the computation resource)
unique_locations <- unique(df$full_location)
# Print the unique locations
head(unique_locations) #3019 rows
## [1] "Kuala Lumpur - Wangsa Maju,Villa Wangsamas"
## [2] "Kuala Lumpur - Ampang,6 Ceylon"
## [3] "Kuala Lumpur - Cheras,Majestic Maxim"
## [4] "Kuala Lumpur - Old Klang Road,"
## [5] "Selangor - Shah Alam,"
## [6] "Selangor - Shah Alam,Vista Alam Serviced Apartment"
Below is the R code, that connecting with the Google Routes API. Setup with the Google Maps library ggmap, then set up the destination location starting from property location (unique_locations). After that, using expand_grid to combine all of the location in total will be 9057 (3*3019) then running by for-loop looping all of the property location by using mapdist which return the distance between the two location in a driving model. The result will be save into a list, after that using bind_rows combine all of the inner element (data frame) into a final table. Is important to setyp the try-catch and system sleep to handle the error such as location can’t be found then directly pause the for-loop function and using system sleep to reduce to overwhelmed due to lack data calling from API.
R code of finding the distance from the two location.
library(ggmap)
library(dplyr)
library(tidyr) # For expand_grid
register_google(key = "API KEY") #Google Map API Key
#Set the destination location for the KL hotspot
destination_addresses <- c(
"Kuala Lumpur, TRX",
"Kuala Lumpur City Centre",
"Bukit Bintang, Kuala Lumpur"
)
all_od_pairs <- expand_grid(
origin = unique_locations,
destination = destination_addresses
)
results_list <- list()
for (i in 1:nrow(all_od_pairs)) {
current_origin <- all_od_pairs$origin[i]
current_destination <- all_od_pairs$destination[i]
print(paste0("Calculating route from '", current_origin, "' to '", current_destination, "'"))
tryCatch({
route_info_pair <- mapdist(from = current_origin, to = current_destination, mode = "driving")
results_list[[i]] <- route_info_pair
Sys.sleep(0.5) # Pause for 0.5 seconds to avoid rate limits (adjust as needed)
},
error = function(e) #In case, the location can't be found
{
message("Error calculating route: ", e$message)
results_list[[i]] <- data.frame(from = current_origin, to = current_destination, km = NA,
hours = NA, error = e$message)
})
}
final_route_df <- bind_rows(results_list)
print(final_route_df)
Saving final_route_df into “property_route.csv”, then read saving into data frame. Each time calling the API will increase the time consumption and computer computation resource, by saving into the csv file able to reduce it.
df_property_route <- read.csv('property_route.csv')
head(df_property_route)
## from
## 1 Kuala Lumpur - Taman Desa,The Hipster @ Taman Desa
## 2 Kuala Lumpur - Taman Desa,The Hipster @ Taman Desa
## 3 Kuala Lumpur - Taman Desa,The Hipster @ Taman Desa
## 4 Kuala Lumpur - Cheras,Segar Courts
## 5 Kuala Lumpur - Cheras,Segar Courts
## 6 Kuala Lumpur - Cheras,Segar Courts
## to m km miles seconds minutes hours
## 1 Kuala Lumpur, TRX 9986 9.986 6.205300 1097 18.28333 0.3047222
## 2 Kuala Lumpur City Centre 8476 8.476 5.266986 976 16.26667 0.2711111
## 3 Bukit Bintang, Kuala Lumpur 9419 9.419 5.852967 1087 18.11667 0.3019444
## 4 Kuala Lumpur, TRX 10099 10.099 6.275519 1044 17.40000 0.2900000
## 5 Kuala Lumpur City Centre 9522 9.522 5.916971 967 16.11667 0.2686111
## 6 Bukit Bintang, Kuala Lumpur 9345 9.345 5.806983 934 15.56667 0.2594444
## mode
## 1 driving
## 2 driving
## 3 driving
## 4 driving
## 5 driving
## 6 driving
Searching from the missing distance between the two locations, manually adding the location.
print(paste0("Missing value:", colSums(is.na(df_property_route))))
## [1] "Missing value:0" "Missing value:0" "Missing value:21" "Missing value:21"
## [5] "Missing value:21" "Missing value:21" "Missing value:21" "Missing value:21"
## [9] "Missing value:21"
df_missing_route <- which(apply(is.na(df_property_route), 1, any))
df_property_route[df_missing_route,]
## from
## 40 Kuala Lumpur - Kepong,Greenview Apartments
## 41 Kuala Lumpur - Kepong,Greenview Apartments
## 42 Kuala Lumpur - Kepong,Greenview Apartments
## 130 Kuala Lumpur - Kepong,
## 131 Kuala Lumpur - Kepong,
## 132 Kuala Lumpur - Kepong,
## 604 Kuala Lumpur - Kepong,Aman Dua
## 605 Kuala Lumpur - Kepong,Aman Dua
## 606 Kuala Lumpur - Kepong,Aman Dua
## 922 Kuala Lumpur - Kepong,Saujana Ria Aparment
## 923 Kuala Lumpur - Kepong,Saujana Ria Aparment
## 924 Kuala Lumpur - Kepong,Saujana Ria Aparment
## 1258 Kuala Lumpur - Kepong,Sri Saujana Apartment (Wangsa Permai)
## 1259 Kuala Lumpur - Kepong,Sri Saujana Apartment (Wangsa Permai)
## 1260 Kuala Lumpur - Kepong,Sri Saujana Apartment (Wangsa Permai)
## 1999 Kuala Lumpur - Kepong,VIM 3 @ Desa Park North
## 2000 Kuala Lumpur - Kepong,VIM 3 @ Desa Park North
## 2001 Kuala Lumpur - Kepong,VIM 3 @ Desa Park North
## 3628 Kuala Lumpur - Kepong,opal flat
## 3629 Kuala Lumpur - Kepong,opal flat
## 3630 Kuala Lumpur - Kepong,opal flat
## to m km miles seconds minutes hours mode
## 40 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 41 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 42 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 130 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 131 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 132 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 604 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 605 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 606 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 922 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 923 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 924 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 1258 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 1259 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 1260 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 1999 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 2000 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 2001 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
## 3628 Kuala Lumpur, TRX NA NA NA NA NA NA <NA>
## 3629 Kuala Lumpur City Centre NA NA NA NA NA NA <NA>
## 3630 Bukit Bintang, Kuala Lumpur NA NA NA NA NA NA <NA>
df_insert_missing_from <- data.frame(
from = c("Kuala Lumpur - Kepong,Greenview Apartments", "Kuala Lumpur - Kepong,",
"Kuala Lumpur - Kepong,Aman Dua",
"Kuala Lumpur - Kepong,Saujana Ria Aparment",
"Kuala Lumpur - Kepong,Sri Saujana Apartment (Wangsa Permai)",
"Kuala Lumpur - Kepong,VIM 3 @ Desa Park North",
"Kuala Lumpur - Kepong,opal flat"),
distance_to_TRX = c(12.6, 16.2, 20.2, 20.8, 20.8, 17.7, 18.2),
distance_to_KLCC = c(9.9, 13.5, 16.9, 17.6, 17.6, 15.2, 14.7),
distance_to_BukitBintang = c(11.8, 15.5, 19.4, 20.1, 20.1, 16.9, 16.6)
)
df_insert_missing_from
## from distance_to_TRX
## 1 Kuala Lumpur - Kepong,Greenview Apartments 12.6
## 2 Kuala Lumpur - Kepong, 16.2
## 3 Kuala Lumpur - Kepong,Aman Dua 20.2
## 4 Kuala Lumpur - Kepong,Saujana Ria Aparment 20.8
## 5 Kuala Lumpur - Kepong,Sri Saujana Apartment (Wangsa Permai) 20.8
## 6 Kuala Lumpur - Kepong,VIM 3 @ Desa Park North 17.7
## 7 Kuala Lumpur - Kepong,opal flat 18.2
## distance_to_KLCC distance_to_BukitBintang
## 1 9.9 11.8
## 2 13.5 15.5
## 3 16.9 19.4
## 4 17.6 20.1
## 5 17.6 20.1
## 6 15.2 16.9
## 7 14.7 16.6
Storing the searching route result into main data frame (df).
df_property_distance <- df_property_route %>%
select(from, to, km) %>% #Select the key attribute (from, to, km)
pivot_wider( #Splitting the km between the two location to each column by using pivot_wider
names_from = to,
values_from = km,
names_prefix = "distance_to_"
)
#Rename the columns
df_property_distance <- df_property_distance %>%
rename(
distance_to_TRX = `distance_to_Kuala Lumpur, TRX`,
distance_to_KLCC = `distance_to_Kuala Lumpur City Centre`,
distance_to_BukitBintang = `distance_to_Bukit Bintang, Kuala Lumpur`
)
#Checking the missing value before implement replacement
print(paste0("Before Implement Replacement for Missing value:", colSums(is.na(df_property_distance))))
## [1] "Before Implement Replacement for Missing value:0"
## [2] "Before Implement Replacement for Missing value:8"
## [3] "Before Implement Replacement for Missing value:8"
## [4] "Before Implement Replacement for Missing value:7"
df_property_distance_new <- data.frame(df_property_distance) #Make a copy
#Drop all of the NA value
df_property_distance_new <- df_property_distance_new %>%
drop_na(distance_to_TRX, distance_to_KLCC, distance_to_BukitBintang)
#Merge the replacement data frame with the copy of property distance data frame
df_property_distance <- bind_rows(df_property_distance_new, df_insert_missing_from)
#Check missing value after replacement
print(paste0("After Implement Replacement for Missing value:", colSums(is.na(df_property_distance))))
## [1] "After Implement Replacement for Missing value:0"
## [2] "After Implement Replacement for Missing value:0"
## [3] "After Implement Replacement for Missing value:0"
## [4] "After Implement Replacement for Missing value:0"
# Mapping the distance into the "df" data frame, searching the matching full_location with the "from"
df <- df %>%
left_join(df_property_distance, by = c("full_location" = "from"))
head(df)
## # A tibble: 6 × 18
## # Groups: location [1]
## ads_id prop_name monthly_rent location property_type rooms parking bathroom
## <int> <chr> <dbl> <chr> <chr> <int> <dbl> <dbl>
## 1 16525511 Villa Wan… 2000 Kuala L… Condominium 3 0 3
## 2 16572317 Villa Wan… 1700 Kuala L… Condominium 3 0 3
## 3 16717632 Villa Wan… 2000 Kuala L… Condominium 3 1 3
## 4 16801236 Villa Wan… 2000 Kuala L… Condominium 3 0 3
## 5 17122588 Villa Wan… 2000 Kuala L… Condominium 3 0 3
## 6 17465265 Villa Wan… 2000 Kuala L… Condominium 3 0 3
## # ℹ 10 more variables: size <dbl>, furnished <chr>, facilities <chr>,
## # additional_facilities <chr>, region <chr>, completion_year <dbl>,
## # full_location <chr>, distance_to_TRX <dbl>, distance_to_KLCC <dbl>,
## # distance_to_BukitBintang <dbl>
To get the average distance, we will using rowMeans() function to calculate the distance from each row then result in a popular_location_distance column.
df_import_PopularLocation <- data.frame(df) #Make a copy
df_import_PopularLocation <- df_import_PopularLocation %>%
mutate(
Popular_location_distance = rowMeans( #Calculate the mean for each distance (row)
select(., distance_to_TRX, distance_to_KLCC, distance_to_BukitBintang),
na.rm = TRUE #Skipping the empty value, select valid numberic value
)
)
df <- df_import_PopularLocation
head(df)
## ads_id prop_name monthly_rent location
## 1 16525511 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 2 16572317 Villa Wangsamas 1700 Kuala Lumpur - Wangsa Maju
## 3 16717632 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 4 16801236 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 5 17122588 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 6 17465265 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## property_type rooms parking bathroom size furnished
## 1 Condominium 3 0 3 1267 Fully Furnished
## 2 Condominium 3 0 3 1267 Partially Furnished
## 3 Condominium 3 1 3 1267 Fully Furnished
## 4 Condominium 3 0 3 1267 Fully Furnished
## 5 Condominium 3 0 3 1267 Fully Furnished
## 6 Condominium 3 0 3 1267 Fully Furnished
## facilities
## 1 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 3 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 4 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 5 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 6 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## additional_facilities
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Internet
## 3 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 4 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 5 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 6 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## region completion_year full_location
## 1 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 2 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 3 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 4 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 5 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 6 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## distance_to_TRX distance_to_KLCC distance_to_BukitBintang
## 1 10.73 11.509 10.163
## 2 10.73 11.509 10.163
## 3 10.73 11.509 10.163
## 4 10.73 11.509 10.163
## 5 10.73 11.509 10.163
## 6 10.73 11.509 10.163
## Popular_location_distance
## 1 10.80067
## 2 10.80067
## 3 10.80067
## 4 10.80067
## 5 10.80067
## 6 10.80067
To get whether the property is near to public transport such as KTM
or LRT, if the words appear in the additional facilities it will create
as 1 (Yes) stored inside the near_public_transport
column
else will be stored as 0 (No).
df <- df %>%
mutate(near_public_transport = as.integer(grepl("Near KTM/LRT", additional_facilities, ignore.case = TRUE)))
head(df)
## ads_id prop_name monthly_rent location
## 1 16525511 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 2 16572317 Villa Wangsamas 1700 Kuala Lumpur - Wangsa Maju
## 3 16717632 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 4 16801236 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 5 17122588 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 6 17465265 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## property_type rooms parking bathroom size furnished
## 1 Condominium 3 0 3 1267 Fully Furnished
## 2 Condominium 3 0 3 1267 Partially Furnished
## 3 Condominium 3 1 3 1267 Fully Furnished
## 4 Condominium 3 0 3 1267 Fully Furnished
## 5 Condominium 3 0 3 1267 Fully Furnished
## 6 Condominium 3 0 3 1267 Fully Furnished
## facilities
## 1 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 3 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 4 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 5 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 6 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## additional_facilities
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Internet
## 3 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 4 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 5 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 6 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## region completion_year full_location
## 1 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 2 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 3 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 4 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 5 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 6 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## distance_to_TRX distance_to_KLCC distance_to_BukitBintang
## 1 10.73 11.509 10.163
## 2 10.73 11.509 10.163
## 3 10.73 11.509 10.163
## 4 10.73 11.509 10.163
## 5 10.73 11.509 10.163
## 6 10.73 11.509 10.163
## Popular_location_distance near_public_transport
## 1 10.80067 1
## 2 10.80067 1
## 3 10.80067 1
## 4 10.80067 1
## 5 10.80067 1
## 6 10.80067 1
Exploratory Data Analysis was performed to better understand the structure, patterns, and relationships within the dataset. This includes examining distributions of key variables, identifying correlations between features, detecting outliers, and visualizing trends that may influence rental prices and furnishing levels. The insights gained from EDA guide feature selection and model development in later stages.
df_EDA = data.frame(df) #Make a copy for EDA
head(df_EDA)
## ads_id prop_name monthly_rent location
## 1 16525511 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 2 16572317 Villa Wangsamas 1700 Kuala Lumpur - Wangsa Maju
## 3 16717632 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 4 16801236 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 5 17122588 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 6 17465265 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## property_type rooms parking bathroom size furnished
## 1 Condominium 3 0 3 1267 Fully Furnished
## 2 Condominium 3 0 3 1267 Partially Furnished
## 3 Condominium 3 1 3 1267 Fully Furnished
## 4 Condominium 3 0 3 1267 Fully Furnished
## 5 Condominium 3 0 3 1267 Fully Furnished
## 6 Condominium 3 0 3 1267 Fully Furnished
## facilities
## 1 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 3 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 4 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 5 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 6 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## additional_facilities
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Internet
## 3 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 4 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 5 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 6 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## region completion_year full_location
## 1 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 2 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 3 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 4 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 5 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 6 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## distance_to_TRX distance_to_KLCC distance_to_BukitBintang
## 1 10.73 11.509 10.163
## 2 10.73 11.509 10.163
## 3 10.73 11.509 10.163
## 4 10.73 11.509 10.163
## 5 10.73 11.509 10.163
## 6 10.73 11.509 10.163
## Popular_location_distance near_public_transport
## 1 10.80067 1
## 2 10.80067 1
## 3 10.80067 1
## 4 10.80067 1
## 5 10.80067 1
## 6 10.80067 1
Univariate analysis focuses on understanding the distribution and characteristics of individual variables within the dataset. This includes examining variables such as monthly rent, property size, number of rooms, and furnishing status. Visualizations like histograms, bar charts, and summary statistics are used to identify patterns, outliers, and data skewness, providing valuable insights for feature selection and modeling.
This section shows a histogram of monthly rent. The diagram below will be only consist of the monthly rent that is below than 5000 MYR (<= 5000). Based on the summary results, the upper bound is about 2,100 (MYR), therefore splitting into parts below 5,000 (MYR) able provides a visualization on the monthly pricing, and exclude the outliers.
In addition, the most common rent range as observe will be between RM1000 to RM2000 this indicate that majority of the available accommodations will be fall within this price range in KL and Selangor area. In other words, this indicate at this range are more affordable for the people.
hist_data <- (df_EDA$monthly_rent)
summary(hist_data) #Show the summary
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 70 1300 1600 2574 2100 2400000
hist_data_below <- hist_data[hist_data < 5000]
hist(
hist_data_below, xlab = "Monthly Accommodation Rent (MYR)", main = "Monthly Accommodation Rent Distribution (< 5k)",
col = "#A8E4A0", border = "black", breaks = 40
)
This section shows a histogram of size. The diagram below will be only consist of the property size that is below than 3000 sq ft (<= 3000). Based on the summary results, the upper bound is about 1,100 (sq ft).
From the observation, most of the available property/accommodation will be falls into 700 to 1200 sq ft. Commonly, the size of the property will be around 750 sq ft to 1200 sq ft. In addition, most of the property size for rent is mostly available on 800 to 900 sq ft. This shows that in urban areas, more real estate developers focus more on urban development, since largest area means highest rent.
hist_data_size <- (df_EDA$size)
summary(hist_data_size) #Show the summary
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 800 936 8235 1100 99999999
hist_data_size_below <- hist_data_size[hist_data_size < 3000]
hist(
hist_data_size_below, xlab = "Property Size (sq ft)", main = "Property Size Distribution (< 3,000)",
col = "#A8E4A0", border = "black", breaks = 30
)
This section plot horizontal bar graphs to illustrate the frequency/count of parking, rooms, bathroom, completion_year.
parking: Present from 0 to 10, majority of the rent estate will be giving at least 1 car parking slot, but some provide 0 or 2 parking slot for tenant.
rooms: Illustrate that the accommodation/property are build as studio, single room, two room and mostly three room.
bathroom: Illustrate that for the majority of accommodation/property will having 2 bathroom. Since, majority of rooms is between 1 to 3, so that typically it will have 1 or 2 bathrooms.
completion_year: This show that massive of accommodation/property was starting arise after 2012. 2014 to 2022 is the peak period, indicating that due to the development of the city, the demand for accommodation is also rising.
plot_bar_chart_char <- function(bar_chart_columns) {
for (col in bar_chart_columns) {
counts_data <- df_EDA[[col]]
unique(df_EDA$col)
# Count occurrences
category_counts <- table(counts_data)
# Plot horizontal bar chart
barplot(category_counts,
col = "skyblue",
main = paste("Accommodation" , col, "Distribution"),
xlab = "Count")
}
}
bar_chart_columns <- c("parking", "rooms", "bathroom", "completion_year")
plot_bar_chart_char(bar_chart_columns)
In this project, the team will focus on two types of properties: apartments and serviced residences, as the target tenants are students and office workers. From the pie chart, can observe that the market prefers apartments more, has the largest proportion of 61.4%, while serviced residences proportion of 38.6%.
property_data <- df_EDA %>% count(property_type)
ggplot(property_data, aes(x = "", y = n, fill = property_type)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(n / sum(n) * 100, 1), "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Property Type") +
theme(legend.title = element_blank())
In this pie chart, from observation can be indicate that majority of the accommodation/property are not closing to the public transport (59.7%), but 40.3% of the accommodation/properties are close to public transportation. The gap between the two is around 19%, which is not a big gap, which means that most of the accommodation/properties try to be built near public transportation.
near_public_transport_data <- df_EDA %>% count(near_public_transport)
near_public_transport_data$near_public_transport[near_public_transport_data$near_public_transport == 0] <- "No"
near_public_transport_data$near_public_transport[near_public_transport_data$near_public_transport == 1] <- "Yes"
ggplot(near_public_transport_data, aes(x = "", y = n, fill = near_public_transport)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(n / sum(n) * 100, 1), "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Near Public Transport") +
theme(legend.title = element_blank())
This pie chart illustrate the distribution of the furnished type as “Fully Furnished”, “Not Furnished”, and “Partially Furnished”. From the observation, that most houses/properties provide tenants with fully furnished/partially furnished, with the results showing that 52.4% of accommodation/properties provide fully furnished, 38.2% of houses/properties provide partially furnished, and 9.4% of houses/properties do not provide any furniture.
furnished_data <- df_EDA %>% count(furnished)
ggplot(furnished_data, aes(x = "", y = n, fill = furnished)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(n / sum(n) * 100, 1), "%")), position = position_stack(vjust = 0.5)) +
labs(title = "Furnished Type") +
theme(legend.title = element_blank())
In this section, the team will using boxplot to understand the relationship between monthly rent and property size. The boxplot is filtered based on the upper range to provide a clear visualization.
In the diagram show below, it clearly show a positive trend as the size increase the monthly rent also getting increase. This indicate the size of the accommodation/property will be related to the rent. In addition, there is outlines above and below of the box plot suggest that some properties may be high-end listings or quick-rent properties that are older and poorly maintained.
#Define the bin size
breaks <- seq(0, 3000, by = 500)
rent_size_label <- paste(head(breaks, -1), tail(breaks, -1), sep = "–") #Set the rent_size range ([0],[1])
# Filter the size < 3000 and rent < 5000
boxplot_data_filter <- df_EDA %>%
filter(size < 3000, monthly_rent < 5000) %>%
mutate(property_size_bin = cut(size, breaks = breaks, labels = rent_size_label))
# Box plot: Size by Rent Range
ggplot(boxplot_data_filter, aes(x = property_size_bin, y = monthly_rent)) +
geom_boxplot(fill = "#87CEFA", color = "#4682B4", outlier.alpha = 0.3) +
labs(
title = "Property Size Distribution by Monthly Accommodation Rent Range",
x = "Property Size (sq ft)",
y = "Monthly Rent Range (MYR)"
) +
theme_minimal() +
theme(axis.text.x = element_text(hjust = 0.5))
In this section, present the top 20 frequency locations that appear inside the dataset, which also reflect where the majority of the accommodation/properties are built and located. In addition, from the observation that areas like Mont Kiara or KLCC contain higher rent per month, and like Kajang, Cyberjaya, or Cheras which giving more affordable rent for lower budgets renters.
# Filter the data
most_frequent_locations <- df_EDA %>%
count(location, sort = TRUE) #Find the most frequency location
#Filter top 20 location and < 5000 money rent
boxplot_data_filter <- df_EDA %>%
filter(monthly_rent < 5000, location %in% most_frequent_locations$location[0:20])
ggplot(boxplot_data_filter, aes(x = reorder(location, monthly_rent, median), y = monthly_rent)) +
geom_boxplot(fill = "#87CEFA", color = "#4682B4", outlier.alpha = 0.3) +
labs(
title = "Monthly Accommodation Rent Distribution by Top 20 Locations",
x = "Location",
y = "Monthly Rent (MYR)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
This box plot shows the development of the property market from 1950 to 2025. Overall, from 1980 to 2025, it can be observed that the average price of monthly rental is about RM1,400 to RM1,600, while after 2015, the rental trend becomes more stable due to more new properties entering the market.
#Arrange completion year and < 5000 money rent
boxplot_data_filter <- df_EDA %>%
mutate(completion_year = as.integer(completion_year)) %>%
filter(monthly_rent < 5000) %>%
arrange(completion_year)
#Using factor() arrange into categories type (Grouping)
boxplot_data_filter$completion_year <- factor(
boxplot_data_filter$completion_year
)
ggplot(boxplot_data_filter, aes(x = completion_year, y = monthly_rent)) +
geom_boxplot(fill = "#87CEFA", color = "#4682B4", outlier.alpha = 0.3) +
labs(
title = "Distribution of Monthly Rent Based on Property Completion Year",
x = "Year",
y = "Monthly Rent (MYR)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
In this boxplot illustrate that the monlthy rents will follow the furnished to increase, it indicate that an accommodation/property with fully furnished will have the average that is above RM1,500 and for partially furnished will be around RM1,300 and above, then for not furnished the overall average will be the lowest as around RM1,000 and above. However, this also shows that for landlords, fully furnished tenants are more willing to rent out their properties because it also provides more convenience for students and workers tenants, and tenants do not need to make further purchases.
#Filter < 5000 money rent
boxplot_data_filter <- df_EDA %>%
filter(monthly_rent < 5000)
ggplot(boxplot_data_filter, aes(x = reorder(furnished, monthly_rent, median), y = monthly_rent)) +
geom_boxplot(fill = "#87CEFA", color = "#4682B4", outlier.alpha = 0.3) +
labs(
title = "Monthly Accommodation Rent Distribution by Furnished Type",
x = "Furnished Type",
y = "Monthly Rent (MYR)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
This section showcase a correlation matrix between each feature.
heatmap_data <- df_EDA %>%
select(where(is.numeric)) #Select only numeric data (remove such as prop_name, e.g.)
heatmap_data <- heatmap_data %>% select(-ads_id) #Remove ads_id
corr_data <- cor(heatmap_data, use = "complete.obs") #Transfer into numeric (-1 , 1)
melted_corr <- melt(corr_data) #into a format for ggplot
heap_map_color <- colorRampPalette(c("skyblue", "white", "#cc474b"))(200)
# Plot
ggplot(melted_corr, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = round(value,2)), size = 3) +
scale_fill_gradientn(colors = heap_map_color, limits = c(-1, 1)) +
labs(title = "Correlation Matrix", x = NULL, y = NULL) + #Add NULL else will have Var2 and Var1
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.2, size = 16, face = "bold")
)
df_feature = data.frame(df_EDA) #Make a copy for Data Modelling
head(df_feature)
## ads_id prop_name monthly_rent location
## 1 16525511 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 2 16572317 Villa Wangsamas 1700 Kuala Lumpur - Wangsa Maju
## 3 16717632 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 4 16801236 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 5 17122588 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 6 17465265 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## property_type rooms parking bathroom size furnished
## 1 Condominium 3 0 3 1267 Fully Furnished
## 2 Condominium 3 0 3 1267 Partially Furnished
## 3 Condominium 3 1 3 1267 Fully Furnished
## 4 Condominium 3 0 3 1267 Fully Furnished
## 5 Condominium 3 0 3 1267 Fully Furnished
## 6 Condominium 3 0 3 1267 Fully Furnished
## facilities
## 1 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 3 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 4 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 5 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 6 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## additional_facilities
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Internet
## 3 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 4 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 5 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 6 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## region completion_year full_location
## 1 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 2 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 3 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 4 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 5 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 6 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## distance_to_TRX distance_to_KLCC distance_to_BukitBintang
## 1 10.73 11.509 10.163
## 2 10.73 11.509 10.163
## 3 10.73 11.509 10.163
## 4 10.73 11.509 10.163
## 5 10.73 11.509 10.163
## 6 10.73 11.509 10.163
## Popular_location_distance near_public_transport
## 1 10.80067 1
## 2 10.80067 1
## 3 10.80067 1
## 4 10.80067 1
## 5 10.80067 1
## 6 10.80067 1
In this section, the team will filter outliers from the dataset. Based on the early indications from the histogram and boxplot, most monthly rents are below $5,000, housing size is below $3,000, and the room, package, and bathroom sizes are below 6, 4, and 4, respectively. Therefore, the team will filter the data to try to keep a large sample size within the dataset.
df_feature <- df_feature %>% filter(monthly_rent > 400 & monthly_rent < 5000)
df_feature <- df_feature %>% filter(size > 100 & size < 3000)
df_feature <- df_feature %>% filter(rooms > 0 & rooms < 6)
df_feature <- df_feature %>% filter(parking > 0 & parking < 4)
df_feature <- df_feature %>% filter(bathroom > 0 & bathroom < 4)
head(df_feature)
## ads_id prop_name monthly_rent location
## 1 16717632 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 2 18186927 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 3 18677373 Villa Wangsamas 2000 Kuala Lumpur - Wangsa Maju
## 4 42927744 Majestic Maxim 900 Kuala Lumpur - Cheras
## 5 44085509 1400 Kuala Lumpur - Old Klang Road
## 6 45057687 1200 Selangor - Shah Alam
## property_type rooms parking bathroom size furnished
## 1 Condominium 3 1 3 1267 Fully Furnished
## 2 Condominium 3 1 3 1267 Fully Furnished
## 3 Condominium 3 1 3 1267 Fully Furnished
## 4 Service Residence 3 1 2 780 Not Furnished
## 5 Service Residence 1 1 2 775 Fully Furnished
## 6 Condominium 2 1 2 759 Partially Furnished
## facilities
## 1 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 2 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 3 Parking, Security, Lift, Swimming Pool, Playground, Gymnasium, Barbeque area, Minimart, Multipurpose hall, Club house, Jogging Track
## 4 Parking, Playground, Jogging Track, Security, Lift, Barbeque area, Swimming Pool, Gymnasium
## 5 Swimming Pool, Jogging Track, Security, Barbeque area, Parking, Gymnasium
## 6 Swimming Pool, Gymnasium, Tennis Court, Squash Court, Minimart, Playground, Jogging Track, Security, 10, 11
## additional_facilities
## 1 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 2 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 3 Air-Cond, Cooking Allowed, Near KTM/LRT, Washing Machine, Internet
## 4 Air-Cond, Cooking Allowed, Near KTM/LRT, Internet
## 5 Air-Cond
## 6 Air-Cond, Cooking Allowed, Internet
## region completion_year full_location
## 1 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 2 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 3 Kuala Lumpur 2010 Kuala Lumpur - Wangsa Maju,Villa Wangsamas
## 4 Kuala Lumpur 2021 Kuala Lumpur - Cheras,Majestic Maxim
## 5 Kuala Lumpur 2016 Kuala Lumpur - Old Klang Road,
## 6 Selangor 2015 Selangor - Shah Alam,
## distance_to_TRX distance_to_KLCC distance_to_BukitBintang
## 1 10.730 11.509 10.163
## 2 10.730 11.509 10.163
## 3 10.730 11.509 10.163
## 4 10.679 10.102 9.925
## 5 11.700 6.693 8.721
## 6 29.939 24.767 26.795
## Popular_location_distance near_public_transport
## 1 10.80067 1
## 2 10.80067 1
## 3 10.80067 1
## 4 10.23533 1
## 5 9.03800 0
## 6 27.16700 0
In this section, the team will perform coverting process on the dataset to prepare it for data modelling. Firstly, the team will recode the furnished column transforming the string value into numeric values “Fully Furnished” is assigned 1, “Partially Furnished” is 2, and “Not Furnished” is 3. Similar r ecode for the property type “Condominium” becomes 1 and “Service Residence” becomes 0.
Next, the team will create a new column for calculate the year built from the current year, and forming “property_age” column. Then will combines the facilities and additional facilities columns into a single column, after that removing corruption data such as containing numebric, only keep as valid character of form. In addition, calculate the number of facilities and stored inside a new column “number_facilities”.
# Make a copy (assuming df_feature exists)
df_feature_prepare = data.frame(df_feature)
# ---------------------------------------------------------------------------------
# Recode 'furnished' column
df_feature_prepare$furnished <- df_feature_prepare$furnished %>%
recode(
"Fully Furnished" = 1,
"Partially Furnished" = 2,
"Not Furnished" = 3
) %>%
as.numeric()
# ---------------------------------------------------------------------------------
# Recode 'property_type'
df_feature_prepare$property_type <- df_feature_prepare$property_type %>%
recode(
"Condominium" = 1,
"Service Residence" = 0
) %>%
as.numeric()
# ---------------------------------------------------------------------------------
# Transform the 'completion_year' column to age of the property
current_year <- 2025
df_feature_prepare$property_age <- current_year - df_feature_prepare$completion_year
# ---------------------------------------------------------------------------------
# Combine both 'facilities' and 'additional facilities' columns
# Ensure both columns are character type before pasting to avoid issues with factors
df_feature_prepare$facilities <- as.character(df_feature_prepare$facilities)
df_feature_prepare$additional_facilities <- as.character(df_feature_prepare$additional_facilities)
# Column combining
df_combined_facilities <- df_feature_prepare %>%
mutate(facilities_combined = paste(facilities, additional_facilities, sep = ", "))
# ---------------------------------------------------------------------------------
# Remove unwanted characters such as 10, 11, 6 in 'facilities' column
df_combined_facilities$facilities_combined <- gsub("[^a-zA-Z, ]", "", df_combined_facilities$facilities_combined)
# Count the number of facilities from 'facilities_combined'
df_facilities <- df_combined_facilities %>%
mutate(number_facilities = sapply(strsplit(facilities_combined, ", "), length))
# ---------------------------------------------------------------------------------
#Data Attribute selection
keep_columns <- c("rooms", "parking", "bathroom", "near_public_transport",
"monthly_rent", "size", "Popular_location_distance",
"property_type", "furnished", "property_age", "number_facilities"
, "location")
# Filter the wanted columns for data modelling
df_final_prepared <- df_facilities %>% select(any_of(keep_columns))
df_final_prepared$location <- factor(df_final_prepared$location)
head(df_final_prepared)
## rooms parking bathroom near_public_transport monthly_rent size
## 1 3 1 3 1 2000 1267
## 2 3 1 3 1 2000 1267
## 3 3 1 3 1 2000 1267
## 4 3 1 2 1 900 780
## 5 1 1 2 0 1400 775
## 6 2 1 2 0 1200 759
## Popular_location_distance property_type furnished property_age
## 1 10.80067 1 1 15
## 2 10.80067 1 1 15
## 3 10.80067 1 1 15
## 4 10.23533 0 3 4
## 5 9.03800 0 1 9
## 6 27.16700 1 2 10
## number_facilities location
## 1 16 Kuala Lumpur - Wangsa Maju
## 2 16 Kuala Lumpur - Wangsa Maju
## 3 16 Kuala Lumpur - Wangsa Maju
## 4 12 Kuala Lumpur - Cheras
## 5 7 Kuala Lumpur - Old Klang Road
## 6 13 Selangor - Shah Alam
heatmap_data <- df_final_prepared %>%
select(where(is.numeric)) #Select only numeric data (remove such as prop_name, e.g.)
corr_data <- cor(heatmap_data, use = "complete.obs") #Transfer into numeric (-1 , 1)
melted_corr <- melt(corr_data) #into a format for ggplot
heap_map_color <- colorRampPalette(c("skyblue", "white", "#cc474b"))(200)
# Plot
ggplot(melted_corr, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = round(value,2)), size = 3) +
scale_fill_gradientn(colors = heap_map_color, limits = c(-1, 1)) +
labs(title = "Correlation Matrix", x = NULL, y = NULL) + #Add NULL else will have Var2 and Var1
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.2, size = 16, face = "bold")
)
This project involves two separate predictive tasks: estimating rental prices (a regression problem) and classifying furnishing status (a multi-class classification problem). Accordingly, different models are applied for each task to optimize performance. Regression models are used to predict continuous rental prices based on property features, while classification models are trained to categorize listings into furnishing types—fully furnished, partially furnished, or unfurnished. Each model is evaluated using appropriate performance metrics aligned with its predictive objective.
df_model = data.frame(df_final_prepared) #Make a copy for Data Modelling
head(df_model)
## rooms parking bathroom near_public_transport monthly_rent size
## 1 3 1 3 1 2000 1267
## 2 3 1 3 1 2000 1267
## 3 3 1 3 1 2000 1267
## 4 3 1 2 1 900 780
## 5 1 1 2 0 1400 775
## 6 2 1 2 0 1200 759
## Popular_location_distance property_type furnished property_age
## 1 10.80067 1 1 15
## 2 10.80067 1 1 15
## 3 10.80067 1 1 15
## 4 10.23533 0 3 4
## 5 9.03800 0 1 9
## 6 27.16700 1 2 10
## number_facilities location
## 1 16 Kuala Lumpur - Wangsa Maju
## 2 16 Kuala Lumpur - Wangsa Maju
## 3 16 Kuala Lumpur - Wangsa Maju
## 4 12 Kuala Lumpur - Cheras
## 5 7 Kuala Lumpur - Old Klang Road
## 6 13 Selangor - Shah Alam
Data splitting is performed separately for both targets variables: monthly_rent for the regression model (predicting rental price) and furnished for the classification model (predicting furnishing status).
The dataset is split into training and testing sets. Training sets are used to build model, while testing sets are used to evaluate the model performance. In this case, we split the data into 80% train set and 20% test set. Separate splits are created for each model according to their respective target variable.
For the regression task, the target variable was
monthly_rent
. The feature set included standardized
property size, property age, furnishing status, proximity to public
transport, property type, and one-hot encoded facilities. An 80% portion
of the dataset was used to train the regression models, while the
remaining 20% was used for testing. This split ensures that the model’s
performance metrics—such as RMSE, MAE, MSE, and R²—are evaluated on
unseen data, providing a reliable measure of predictive accuracy.
#For reproducibility
set.seed(123)
#Split in 80/20 for train and test sets
split = 0.80
Training and testing sets were created using the
createDataPartition()
function from the
caret package. This method ensures that the split
maintains the distribution of the target variable,
monthly_rent
, allowing for a representative and balanced
partition between the training and testing datasets.
train_index_regression <- createDataPartition(df_model$monthly_rent, p=split, list=FALSE)
#Create training and testing datasets
X_train_regression <- df_model[train_index_regression,]%>% select( -monthly_rent)
X_test_regression <- df_model[-train_index_regression,]%>% select(-monthly_rent)
y_train_regression <- df_model$monthly_rent[train_index_regression]
y_test_regression <- df_model$monthly_rent[-train_index_regression]
# Print the shape of X_train_regression and y_train_regression
cat("X_train_regression shape:", dim(X_train_regression), "y_train_regression shape:", length(y_train_regression), "\n")
## X_train_regression shape: 8298 11 y_train_regression shape: 8298
# Print the shape of X_test_regression and y_test_regression
cat("X_test_regression shape:", dim(X_test_regression), "y_test_regression shape:", length(y_test_regression))
## X_test_regression shape: 2072 11 y_test_regression shape: 2072
For the classification task, the target variable is
furnished
, which includes three categories: fully
furnished, partially furnished, and unfurnished. The goal is to predict
the furnishing status of a rental unit based on features such as rental
price, property size, property type, property age, proximity to public
transport, and available facilities. Various classification algorithms
were applied, and model performance was evaluated using metrics such as
Accuracy, Precision, Recall, F1-Score, and the Confusion Matrix to
assess how well each model distinguishes between furnishing
categories.
#For reproducibility
set.seed(123)
#Split in 80/20 for train and test sets
split = 0.80
#Create train and test sets using createDataPartition
train_index_classification <- createDataPartition(df_model$furnished, p=split, list=FALSE)
X_train_classification <- df_model[train_index_classification,]%>% select( -furnished)
X_test_classification <- df_model[-train_index_classification,]%>% select( -furnished)
y_train_classification <- df_model$furnished[train_index_classification]
y_test_classification <- df_model$furnished[-train_index_classification]
#Convert target variables to factor (important for classification!)
y_train_classification <- as.factor(y_train_classification)
y_test_classification <- as.factor(y_test_classification)
# Print the shape of X_train_classification and y_train_classification for
cat("X_train_classification shape:", dim(X_train_classification), "y_train_classification shape:", length(y_train_classification), "\n")
## X_train_classification shape: 8297 11 y_train_classification shape: 8297
# Print the shape of X_test_classification and y_test_classification
cat("X_test_classification shape:", dim(X_test_classification), "y_test_classification shape:", length(y_test_classification))
## X_test_classification shape: 2073 11 y_test_classification shape: 2073
To prepare the data for modeling, numerical features such as rental price and property size were standardized to ensure consistent scale, improving model performance. Categorical variables like property type and furnishing status were encoded into numeric formats using label encoding, enabling them to be used effectively in machine learning algorithms. These preprocessing steps help ensure the dataset is clean, structured, and model-ready.
#Standardize monthly_rent
mean_y_train <- mean(y_train_regression)
sd_y_train <- sd(y_train_regression)
y_train_regression_scaled <- (y_train_regression - mean_y_train) / sd_y_train
y_test_regression_scaled <- (y_test_regression - mean_y_train) / sd_y_train
#----------------------------------------------------------------------------------
# Calculate mean and standard deviation from training X
#Size
mean_size_train <- mean(X_train_regression$size)
sd_size_train <- sd(X_train_regression$size)
#popular_location_distance
mean_popular_location_distance_train <- mean(X_train_regression$Popular_location_distance)
sd_popular_location_distance_train <- sd(X_train_regression$Popular_location_distance)
#----------------------------------------------------------------------------------
# Apply standardization to both training and test X
#Size
X_train_regression$size_scaled <- (X_train_regression$size - mean_size_train) / sd_size_train
X_test_regression$size_scaled <- (X_test_regression$size - mean_size_train) / sd_size_train
#popular_location_distance regression
X_train_regression$popular_location_distance_scaled <- (X_train_regression$Popular_location_distance - mean_popular_location_distance_train) / sd_popular_location_distance_train
X_test_regression$popular_location_distance_scaled <- (X_test_regression$Popular_location_distance - mean_popular_location_distance_train) / sd_popular_location_distance_train
#popular_location_distance classification
X_train_classification$popular_location_distance_scaled <- (X_train_classification$Popular_location_distance - mean_popular_location_distance_train) / sd_popular_location_distance_train
X_test_classification$popular_location_distance_scaled <- (X_test_classification$Popular_location_distance - mean_popular_location_distance_train) / sd_popular_location_distance_train
#----------------------------------------------------------------------------------
# Label Encoding for location
X_train_regression$location <- as.factor(X_train_regression$location)
X_test_regression$location <- as.factor(X_test_regression$location)
X_train_classification$location <- as.factor(X_train_classification$location)
X_test_classification$location <- as.factor(X_test_classification$location)
#----------------------------------------------------------------------------------
# Get all unique levels from the training set
all_location_levels <- levels(X_train_regression$location)
# Convert to factor with consistent levels, then to numeric
X_train_regression$location_encoded <- as.numeric(factor(X_train_regression$location, levels = all_location_levels))
X_test_regression$location_encoded <- as.numeric(factor(X_test_regression$location, levels = all_location_levels))
X_train_classification$location_encoded <- as.numeric(factor(X_train_classification$location, levels = all_location_levels))
X_test_classification$location_encoded <- as.numeric(factor(X_test_classification$location, levels = all_location_levels))
#----------------------------------------------------------------------------------
# Remove unwanted columns ---
X_train_regression <- X_train_regression %>%
select(-size, -Popular_location_distance, -location)
X_test_regression <- X_test_regression %>%
select(-size, -Popular_location_distance, -location)
X_train_classification <- X_train_classification %>%
select(-size, -Popular_location_distance, -location)
X_test_classification <- X_test_classification %>%
select(-size, -Popular_location_distance, -location)
#----------------------------------------------------------------------------------
#Display the output
head(X_train_regression)
## rooms parking bathroom near_public_transport property_type furnished
## 2 3 1 3 1 1 1
## 3 3 1 3 1 1 1
## 4 3 1 2 1 0 3
## 5 1 1 2 0 0 1
## 6 2 1 2 0 1 2
## 8 4 2 3 1 1 2
## property_age number_facilities size_scaled popular_location_distance_scaled
## 2 15 16 1.1734547 -0.6599182
## 3 15 16 1.1734547 -0.6599182
## 4 4 12 -0.6612357 -0.7142773
## 5 9 7 -0.6800723 -0.8294058
## 6 10 13 -0.7403496 0.9137711
## 8 8 19 1.7686931 -0.1196606
## location_encoded
## 2 56
## 3 56
## 4 10
## 5 31
## 6 106
## 8 67
head(X_train_classification)
## rooms parking bathroom near_public_transport monthly_rent property_type
## 1 3 1 3 1 2000 1
## 2 3 1 3 1 2000 1
## 3 3 1 3 1 2000 1
## 5 1 1 2 0 1400 0
## 6 2 1 2 0 1200 1
## 8 4 2 3 1 1100 1
## property_age number_facilities popular_location_distance_scaled
## 1 15 16 -0.6599182
## 2 15 16 -0.6599182
## 3 15 16 -0.6599182
## 5 9 7 -0.8294058
## 6 10 13 0.9137711
## 8 8 19 -0.1196606
## location_encoded
## 1 56
## 2 56
## 3 56
## 5 31
## 6 106
## 8 67
In this section, the respective training sets are used to build predictive models for both regression and classification tasks. Various machine learning algorithms are applied to each task to identify the most effective approach. For the regression model, algorithms aim to predict rental prices, while for the classification model, algorithms are trained to predict the furnishing status of a property. Each model is trained using the features selected during preprocessing and is later evaluated on the corresponding test set.
#Cross-validation
train_ctrl <- trainControl(
method = "cv",
number = 5,
verboseIter = TRUE, #Provide detailed, real-time feedback on training process
savePredictions = "final" #To save out-of-sample predictions from the final model
)
#For Regression metrics
regression_metrics <- c("MAE", "MSE", "RMSE", "R²")
#For Classification metrics
classification_metrics <- c("Accuracy", "Precision", "Recall", "F1-score", "AUC-ROC", "Kappa")
For the regression task, several machine learning algorithms were trained to predict monthly rental prices using key property features. These features include standardized property size, furnishing status, proximity to public transport, property type, property age, and available facilities. The models applied include Linear Regression, Decision Tree, XGBoost, LightGBM, Neural Networks.
Each model was evaluated using standard regression metrics:
Root Mean Squared Error (RMSE): Measures the average magnitude of prediction errors.
Mean Absolute Error (MAE): Reflects the average absolute difference between actual and predicted values.
Mean Squared Error (MSE): Highlights larger errors by squaring the differences.
R-squared (R²): Indicates how well the model explains the variance in rental prices.
These metrics provide a comprehensive view of each model’s predictive performance and help identify the most effective approach for rental price estimation.
Linear Regression is a fundamental and interpretable algorithm used to model the relationship between a continuous target variable and one or more input features. In this case, it is used to estimate monthly rental prices based on property characteristics. The model assumes a linear relationship between the predictors and the target variable. While it serves as a good baseline model, its performance may be limited when capturing complex, non-linear patterns in the data.
#Train Linear Regression model
lm_model <- train (
x = X_train_regression,
y = y_train_regression,
method = "lm",
trControl = train_ctrl,
metric = "RMSE" #train() can only accept one metric at a time
)
## + Fold1: intercept=TRUE
## - Fold1: intercept=TRUE
## + Fold2: intercept=TRUE
## - Fold2: intercept=TRUE
## + Fold3: intercept=TRUE
## - Fold3: intercept=TRUE
## + Fold4: intercept=TRUE
## - Fold4: intercept=TRUE
## + Fold5: intercept=TRUE
## - Fold5: intercept=TRUE
## Aggregating results
## Fitting final model on full training set
#Prediction
lm_prediction <- predict(lm_model, X_test_regression)
#Evaluate model performance
lm_rmse <- RMSE(lm_prediction, y_test_regression)
lm_r2 <- R2(lm_prediction, y_test_regression)
lm_mae <- MAE(lm_prediction, y_test_regression)
lm_mse <- (lm_rmse)^2
cat("Linear Regression RMSE: ", lm_rmse, "\n")
## Linear Regression RMSE: 494.044
cat("Linear Regression R²: ", lm_r2, "\n")
## Linear Regression R²: 0.4980524
cat("Linear Regression MAE: ", lm_mae, "\n")
## Linear Regression MAE: 362.2548
cat("Linear Regression MSE: ", lm_mse, "\n")
## Linear Regression MSE: 244079.5
XGBoost (Extreme Gradient Boosting) is a powerful ensemble learning algorithm based on gradient boosting techniques. It builds a series of decision trees where each tree corrects the errors of the previous one. XGBoost is known for its high performance, speed, and ability to handle complex relationships in data. In this project, XGBoost was used to predict monthly rental prices based on various property features. It often outperforms simpler models by capturing non-linear patterns and interactions between variables, making it suitable for structured tabular data.
#Train XGBoost model
xgb_model <- train (
x = X_train_regression,
y = y_train_regression,
method = "xgbTree",
trControl = train_ctrl,
metric = "RMSE" #train() can only accept one metric at a time
)
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:34:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:34:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:34:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:34:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:16] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:16] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:35:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:35:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## Aggregating results
## Selecting tuning parameters
## Fitting nrounds = 150, max_depth = 3, eta = 0.4, gamma = 0, colsample_bytree = 0.8, min_child_weight = 1, subsample = 1 on full training set
#Prediction
xgb_prediction <- predict(xgb_model, X_test_regression)
#Evaluate model performance
xgb_rmse <- RMSE(xgb_prediction, y_test_regression)
xgb_r2 <- R2(xgb_prediction, y_test_regression)
xgb_mae <- MAE(xgb_prediction, y_test_regression)
xgb_mse <- (xgb_rmse)^2
cat("XGBoost RMSE: ", xgb_rmse, "\n")
## XGBoost RMSE: 310.9766
cat("XGBoost R²: ", xgb_r2, "\n")
## XGBoost R²: 0.8008478
cat("XGBoost MAE: ", xgb_mae, "\n")
## XGBoost MAE: 219.3333
cat("XGBoost MSE: ", xgb_mse, "\n")
## XGBoost MSE: 96706.44
LightGBM (Light Gradient Boosting Machine) is a gradient boosting framework developed for efficiency and scalability. It uses a leaf-wise tree growth strategy, which enables faster training and improved accuracy compared to traditional level-wise approaches. In this project, LightGBM was applied to predict monthly rental prices using property-related features. It is particularly effective for handling large datasets with many features and can capture complex, non-linear relationships, making it a strong performer in regression tasks.
#Convert to matrix format
lgb_train_data <- lgb.Dataset(data = as.matrix(X_train_regression), label = y_train_regression)
#Training contrl for LightGBM model
lgb_train_ctrl <- list(
objective = "regression",
metric = "rmse", #RMSE metric
num_leaves = 31, #Number of leaves in each tree
learning_rate = 0.05, #Learning rate
nrounds = 100 #Number of boosting rounds
)
#Train LightGBM model
lgb_model <- lgb.train(
params = lgb_train_ctrl,
data = lgb_train_data,
nrounds = lgb_train_ctrl$nrounds
)
## [LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.001518 seconds.
## You can set `force_col_wise=true` to remove the overhead.
## [LightGBM] [Info] Total Bins 697
## [LightGBM] [Info] Number of data points in the train set: 8298, number of used features: 11
## [LightGBM] [Info] Start training from score 1750.277898
#Prediction
lgb_prediction <- predict(lgb_model, as.matrix (X_test_regression))
#Evaluate model performance
lgb_rmse <- RMSE(lgb_prediction, y_test_regression)
lgb_r2 <- R2(lgb_prediction, y_test_regression)
lgb_mae <- MAE(lgb_prediction, y_test_regression)
lgb_mse <- (lgb_rmse)^2
cat("LightGBM RMSE: ", lgb_rmse, "\n")
## LightGBM RMSE: 325.1751
cat("LightGBM R²: ", lgb_r2, "\n")
## LightGBM R²: 0.7863046
cat("LightGBM MAE: ", lgb_mae, "\n")
## LightGBM MAE: 233.5846
cat("LightGBM MSE: ", lgb_mse, "\n")
## LightGBM MSE: 105738.8
The Decision Tree model is a simple yet powerful algorithm that splits the data into branches based on feature values, forming a tree-like structure. It makes predictions by learning decision rules inferred from the input features. In this project, the Decision Tree model was used to predict monthly rental prices based on property characteristics. While easy to interpret and visualize, decision trees can be prone to overfitting, especially on noisy datasets. However, they provide a useful baseline and can reveal important decision paths in the data.
#Train Decision Tree model
dt_model <- train (
x = X_train_regression,
y = y_train_regression,
method = "rpart",
trControl = train_ctrl,
metric = "RMSE" #train() can only accept one metric at a time
)
## + Fold1: cp=0.049
## - Fold1: cp=0.049
## + Fold2: cp=0.049
## - Fold2: cp=0.049
## + Fold3: cp=0.049
## - Fold3: cp=0.049
## + Fold4: cp=0.049
## - Fold4: cp=0.049
## + Fold5: cp=0.049
## - Fold5: cp=0.049
## Warning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,
## : There were missing values in resampled performance measures.
## Aggregating results
## Selecting tuning parameters
## Fitting cp = 0.049 on full training set
#Prediction
dt_prediction <- predict(dt_model, X_test_regression)
#Evaluate model performance
dt_rmse <- RMSE(dt_prediction, y_test_regression)
dt_r2 <- R2(dt_prediction, y_test_regression)
dt_mae <- MAE(dt_prediction, y_test_regression)
dt_mse <- (dt_rmse)^2
cat("Decision Tree RMSE: ", dt_rmse, "\n")
## Decision Tree RMSE: 596.4183
cat("Decision Tree R²: ", dt_r2, "\n")
## Decision Tree R²: 0.2667037
cat("Decision Tree MAE: ", dt_mae, "\n")
## Decision Tree MAE: 433.2508
cat("Decision Tree MSE: ", dt_mse, "\n")
## Decision Tree MSE: 355714.8
Neural Networks are inspired by the structure of the human brain and are capable of modeling complex, non-linear relationships between inputs and outputs. In this project, a Neural Network was trained to predict monthly rental prices using property-related features. The model consists of interconnected layers of nodes (neurons) that learn feature representations through weighted connections. Neural Networks are particularly powerful for capturing hidden patterns in the data, but they require careful tuning and are less interpretable compared to tree-based models. When properly optimized, they can deliver strong predictive performance in regression tasks.
#Train Neural Network model
nn_model <- train (
x = X_train_regression,
y = y_train_regression,
method = "nnet",
trControl = train_ctrl,
metric = "RMSE", #train() can only accept one metric at a time
trace = FALSE #To suppress the training output
)
## + Fold1: size=1, decay=0e+00
## - Fold1: size=1, decay=0e+00
## + Fold1: size=3, decay=0e+00
## - Fold1: size=3, decay=0e+00
## + Fold1: size=5, decay=0e+00
## - Fold1: size=5, decay=0e+00
## + Fold1: size=1, decay=1e-01
## - Fold1: size=1, decay=1e-01
## + Fold1: size=3, decay=1e-01
## - Fold1: size=3, decay=1e-01
## + Fold1: size=5, decay=1e-01
## - Fold1: size=5, decay=1e-01
## + Fold1: size=1, decay=1e-04
## - Fold1: size=1, decay=1e-04
## + Fold1: size=3, decay=1e-04
## - Fold1: size=3, decay=1e-04
## + Fold1: size=5, decay=1e-04
## - Fold1: size=5, decay=1e-04
## + Fold2: size=1, decay=0e+00
## - Fold2: size=1, decay=0e+00
## + Fold2: size=3, decay=0e+00
## - Fold2: size=3, decay=0e+00
## + Fold2: size=5, decay=0e+00
## - Fold2: size=5, decay=0e+00
## + Fold2: size=1, decay=1e-01
## - Fold2: size=1, decay=1e-01
## + Fold2: size=3, decay=1e-01
## - Fold2: size=3, decay=1e-01
## + Fold2: size=5, decay=1e-01
## - Fold2: size=5, decay=1e-01
## + Fold2: size=1, decay=1e-04
## - Fold2: size=1, decay=1e-04
## + Fold2: size=3, decay=1e-04
## - Fold2: size=3, decay=1e-04
## + Fold2: size=5, decay=1e-04
## - Fold2: size=5, decay=1e-04
## + Fold3: size=1, decay=0e+00
## - Fold3: size=1, decay=0e+00
## + Fold3: size=3, decay=0e+00
## - Fold3: size=3, decay=0e+00
## + Fold3: size=5, decay=0e+00
## - Fold3: size=5, decay=0e+00
## + Fold3: size=1, decay=1e-01
## - Fold3: size=1, decay=1e-01
## + Fold3: size=3, decay=1e-01
## - Fold3: size=3, decay=1e-01
## + Fold3: size=5, decay=1e-01
## - Fold3: size=5, decay=1e-01
## + Fold3: size=1, decay=1e-04
## - Fold3: size=1, decay=1e-04
## + Fold3: size=3, decay=1e-04
## - Fold3: size=3, decay=1e-04
## + Fold3: size=5, decay=1e-04
## - Fold3: size=5, decay=1e-04
## + Fold4: size=1, decay=0e+00
## - Fold4: size=1, decay=0e+00
## + Fold4: size=3, decay=0e+00
## - Fold4: size=3, decay=0e+00
## + Fold4: size=5, decay=0e+00
## - Fold4: size=5, decay=0e+00
## + Fold4: size=1, decay=1e-01
## - Fold4: size=1, decay=1e-01
## + Fold4: size=3, decay=1e-01
## - Fold4: size=3, decay=1e-01
## + Fold4: size=5, decay=1e-01
## - Fold4: size=5, decay=1e-01
## + Fold4: size=1, decay=1e-04
## - Fold4: size=1, decay=1e-04
## + Fold4: size=3, decay=1e-04
## - Fold4: size=3, decay=1e-04
## + Fold4: size=5, decay=1e-04
## - Fold4: size=5, decay=1e-04
## + Fold5: size=1, decay=0e+00
## - Fold5: size=1, decay=0e+00
## + Fold5: size=3, decay=0e+00
## - Fold5: size=3, decay=0e+00
## + Fold5: size=5, decay=0e+00
## - Fold5: size=5, decay=0e+00
## + Fold5: size=1, decay=1e-01
## - Fold5: size=1, decay=1e-01
## + Fold5: size=3, decay=1e-01
## - Fold5: size=3, decay=1e-01
## + Fold5: size=5, decay=1e-01
## - Fold5: size=5, decay=1e-01
## + Fold5: size=1, decay=1e-04
## - Fold5: size=1, decay=1e-04
## + Fold5: size=3, decay=1e-04
## - Fold5: size=3, decay=1e-04
## + Fold5: size=5, decay=1e-04
## - Fold5: size=5, decay=1e-04
## Warning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,
## : There were missing values in resampled performance measures.
## Aggregating results
## Selecting tuning parameters
## Fitting size = 1, decay = 0.1 on full training set
#Prediction
nn_prediction <- predict(nn_model, X_test_regression)
#Evaluate model performance
nn_rmse <- RMSE(nn_prediction, y_test_regression)
nn_r2 <- R2(nn_prediction, y_test_regression)
## Warning in cor(obs, pred, use = ifelse(na.rm, "complete.obs", "everything")):
## the standard deviation is zero
nn_mae <- MAE(nn_prediction, y_test_regression)
nn_mse <- (nn_rmse)^2
cat("Neural Network RMSE: ", nn_rmse, "\n")
## Neural Network RMSE: 1891.378
cat("Neural Network R²: ", nn_r2, "\n")
## Neural Network R²: NA
cat("Neural Network MAE: ", nn_mae, "\n")
## Neural Network MAE: 1758.518
cat("Neural Network MSE: ", nn_mse, "\n")
## Neural Network MSE: 3577312
For the classification task, several machine learning algorithms were trained to predict the furnishing status of a property, which includes three categories: fully furnished, partially furnished, and unfurnished. The models applied include Logistic Regression, Decision Tree, Neural Network, XGBoost, LightGBM.
These models were trained using key property features such as rental price, property size, property type, property age, proximity to public transport, and available facilities. These features were selected based on their potential influence on furnishing conditions and availability.
mance was evaluated using standard classification metrics:
Accuracy: Proportion of total correct predictions.
Precision: Proportion of correctly predicted positives out of all predicted positives.
Recall: Proportion of actual positives that were correctly predicted.
F1-Score: Harmonic mean of precision and recall.
Confusion Matrix: Detailed breakdown of true vs. predicted classifications for each furnishing category.
These metrics help assess each model’s ability to accurately distinguish between furnishing types and support the selection of the most reliable classification approach.
In this classification task, XGBoost was used to predict the furnishing status of rental properties based on key features such as rental price, property size, property type, property age, proximity to public transport, and available facilities. The model builds a series of decision trees, where each tree attempts to correct the errors of the previous ones. Its robustness and ability to handle complex relationships make it a strong performer in multi-class classification tasks like this one.
#Train XGBoost model
xgb_class_model <- train (
x = X_train_classification,
y = y_train_classification,
method = "xgbTree",
trControl = train_ctrl,
metric = "Accuracy" #train() can only accept one metric at a time
)
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:36:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:36:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:36:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:36:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold1: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold2: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:54] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:37:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:37:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:57] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:37:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:37:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:00] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:12] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:16] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:16] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:19] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:22] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold3: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:29] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:35] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:38] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:41] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:43] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:45] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:46] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:47] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:48] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:49] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:50] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:51] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:52] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:53] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:55] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:38:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:56] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:38:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:58] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:38:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:38:59] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:01] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:02] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold4: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:03] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:04] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:05] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:06] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:07] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:08] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:09] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:10] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:11] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:13] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:14] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:15] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:17] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:18] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:20] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:21] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:23] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.3, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:24] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:25] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:26] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:27] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=1, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:28] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:30] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:31] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:32] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:33] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:34] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=2, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:36] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:37] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:39] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.6, min_child_weight=1, subsample=1.00, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## [22:39:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:40] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.50, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## [22:39:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:42] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=0.75, nrounds=150
## + Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## [22:39:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## [22:39:44] WARNING: src/c_api/c_api.cc:935: `ntree_limit` is deprecated, use `iteration_range` instead.
## - Fold5: eta=0.4, max_depth=3, gamma=0, colsample_bytree=0.8, min_child_weight=1, subsample=1.00, nrounds=150
## Aggregating results
## Selecting tuning parameters
## Fitting nrounds = 150, max_depth = 3, eta = 0.4, gamma = 0, colsample_bytree = 0.6, min_child_weight = 1, subsample = 0.75 on full training set
#Prediction
xgb_class_prediction <- predict(xgb_class_model, X_test_classification)
#Evaluate model performance - Confusion Matrix
xgb_class_cm <- confusionMatrix(xgb_class_prediction, y_test_classification)
print (xgb_class_cm)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2 3
## 1 894 198 22
## 2 167 581 117
## 3 6 23 65
##
## Overall Statistics
##
## Accuracy : 0.7429
## 95% CI : (0.7235, 0.7616)
## No Information Rate : 0.5147
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5388
##
## Mcnemar's Test P-Value : 3.825e-16
##
## Statistics by Class:
##
## Class: 1 Class: 2 Class: 3
## Sensitivity 0.8379 0.7244 0.31863
## Specificity 0.7813 0.7766 0.98448
## Pos Pred Value 0.8025 0.6717 0.69149
## Neg Pred Value 0.8196 0.8171 0.92976
## Prevalence 0.5147 0.3869 0.09841
## Detection Rate 0.4313 0.2803 0.03136
## Detection Prevalence 0.5374 0.4173 0.04534
## Balanced Accuracy 0.8096 0.7505 0.65156
For this classification task, LightGBM was used to predict the furnishing status of rental properties using inputs such as rental price, property size, property type, property age, proximity to public transport, and available facilities. The model’s leaf-wise tree growth strategy allows it to capture complex patterns in the data while maintaining high performance. Its support for multi-class classification and ability to handle categorical variables effectively make it well-suited for this prediction task.
# Train LightGBM model
lgb_class_model <- train(
x = X_train_classification,
y = y_train_classification,
method = "gbm",
trControl = train_ctrl,
metric = "Accuracy"
)
## + Fold1: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.0929
## 2 1.0375 nan 0.1000 0.0664
## 3 0.9904 nan 0.1000 0.0518
## 4 0.9552 nan 0.1000 0.0426
## 5 0.9259 nan 0.1000 0.0322
## 6 0.9030 nan 0.1000 0.0285
## 7 0.8834 nan 0.1000 0.0223
## 8 0.8678 nan 0.1000 0.0175
## 9 0.8547 nan 0.1000 0.0170
## 10 0.8423 nan 0.1000 0.0123
## 20 0.7839 nan 0.1000 0.0047
## 40 0.7442 nan 0.1000 0.0010
## 60 0.7257 nan 0.1000 0.0003
## 80 0.7138 nan 0.1000 0.0000
## 100 0.7055 nan 0.1000 -0.0001
## 120 0.6986 nan 0.1000 -0.0000
## 140 0.6935 nan 0.1000 -0.0007
## 150 0.6914 nan 0.1000 -0.0006
##
## - Fold1: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## + Fold1: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1138
## 2 1.0232 nan 0.1000 0.0802
## 3 0.9692 nan 0.1000 0.0615
## 4 0.9265 nan 0.1000 0.0448
## 5 0.8941 nan 0.1000 0.0372
## 6 0.8687 nan 0.1000 0.0280
## 7 0.8487 nan 0.1000 0.0230
## 8 0.8320 nan 0.1000 0.0186
## 9 0.8184 nan 0.1000 0.0155
## 10 0.8069 nan 0.1000 0.0126
## 20 0.7478 nan 0.1000 0.0034
## 40 0.7081 nan 0.1000 0.0008
## 60 0.6881 nan 0.1000 -0.0004
## 80 0.6729 nan 0.1000 -0.0001
## 100 0.6617 nan 0.1000 -0.0003
## 120 0.6517 nan 0.1000 -0.0003
## 140 0.6436 nan 0.1000 -0.0005
## 150 0.6406 nan 0.1000 -0.0009
##
## - Fold1: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## + Fold1: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1201
## 2 1.0201 nan 0.1000 0.0849
## 3 0.9627 nan 0.1000 0.0639
## 4 0.9195 nan 0.1000 0.0489
## 5 0.8846 nan 0.1000 0.0366
## 6 0.8585 nan 0.1000 0.0307
## 7 0.8369 nan 0.1000 0.0243
## 8 0.8194 nan 0.1000 0.0194
## 9 0.8046 nan 0.1000 0.0154
## 10 0.7917 nan 0.1000 0.0130
## 20 0.7291 nan 0.1000 0.0039
## 40 0.6854 nan 0.1000 0.0005
## 60 0.6607 nan 0.1000 0.0000
## 80 0.6432 nan 0.1000 -0.0002
## 100 0.6301 nan 0.1000 -0.0006
## 120 0.6173 nan 0.1000 -0.0001
## 140 0.6064 nan 0.1000 -0.0005
## 150 0.6020 nan 0.1000 -0.0004
##
## - Fold1: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## + Fold2: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.0959
## 2 1.0347 nan 0.1000 0.0702
## 3 0.9880 nan 0.1000 0.0531
## 4 0.9522 nan 0.1000 0.0428
## 5 0.9240 nan 0.1000 0.0341
## 6 0.9004 nan 0.1000 0.0285
## 7 0.8809 nan 0.1000 0.0211
## 8 0.8646 nan 0.1000 0.0199
## 9 0.8508 nan 0.1000 0.0168
## 10 0.8389 nan 0.1000 0.0126
## 20 0.7786 nan 0.1000 0.0046
## 40 0.7398 nan 0.1000 0.0014
## 60 0.7213 nan 0.1000 0.0006
## 80 0.7098 nan 0.1000 -0.0001
## 100 0.7004 nan 0.1000 -0.0002
## 120 0.6941 nan 0.1000 -0.0002
## 140 0.6892 nan 0.1000 -0.0001
## 150 0.6870 nan 0.1000 -0.0002
##
## - Fold2: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## + Fold2: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1148
## 2 1.0236 nan 0.1000 0.0852
## 3 0.9659 nan 0.1000 0.0600
## 4 0.9239 nan 0.1000 0.0498
## 5 0.8911 nan 0.1000 0.0382
## 6 0.8650 nan 0.1000 0.0306
## 7 0.8442 nan 0.1000 0.0221
## 8 0.8263 nan 0.1000 0.0172
## 9 0.8136 nan 0.1000 0.0152
## 10 0.8030 nan 0.1000 0.0116
## 20 0.7458 nan 0.1000 0.0038
## 40 0.7023 nan 0.1000 0.0009
## 60 0.6825 nan 0.1000 0.0002
## 80 0.6692 nan 0.1000 0.0001
## 100 0.6589 nan 0.1000 -0.0001
## 120 0.6493 nan 0.1000 0.0000
## 140 0.6418 nan 0.1000 -0.0006
## 150 0.6377 nan 0.1000 -0.0004
##
## - Fold2: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## + Fold2: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1268
## 2 1.0181 nan 0.1000 0.0880
## 3 0.9602 nan 0.1000 0.0651
## 4 0.9160 nan 0.1000 0.0497
## 5 0.8821 nan 0.1000 0.0397
## 6 0.8547 nan 0.1000 0.0286
## 7 0.8328 nan 0.1000 0.0245
## 8 0.8156 nan 0.1000 0.0197
## 9 0.8016 nan 0.1000 0.0169
## 10 0.7892 nan 0.1000 0.0129
## 20 0.7256 nan 0.1000 0.0043
## 40 0.6803 nan 0.1000 0.0007
## 60 0.6573 nan 0.1000 -0.0004
## 80 0.6405 nan 0.1000 -0.0006
## 100 0.6274 nan 0.1000 -0.0011
## 120 0.6160 nan 0.1000 -0.0013
## 140 0.6053 nan 0.1000 -0.0008
## 150 0.6006 nan 0.1000 -0.0013
##
## - Fold2: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## + Fold3: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.0933
## 2 1.0328 nan 0.1000 0.0682
## 3 0.9857 nan 0.1000 0.0499
## 4 0.9502 nan 0.1000 0.0396
## 5 0.9233 nan 0.1000 0.0316
## 6 0.9001 nan 0.1000 0.0279
## 7 0.8808 nan 0.1000 0.0222
## 8 0.8645 nan 0.1000 0.0198
## 9 0.8501 nan 0.1000 0.0143
## 10 0.8390 nan 0.1000 0.0143
## 20 0.7817 nan 0.1000 0.0047
## 40 0.7438 nan 0.1000 0.0015
## 60 0.7252 nan 0.1000 0.0004
## 80 0.7140 nan 0.1000 0.0001
## 100 0.7051 nan 0.1000 -0.0002
## 120 0.6990 nan 0.1000 -0.0001
## 140 0.6944 nan 0.1000 -0.0006
## 150 0.6924 nan 0.1000 -0.0003
##
## - Fold3: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## + Fold3: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1185
## 2 1.0227 nan 0.1000 0.0847
## 3 0.9666 nan 0.1000 0.0588
## 4 0.9259 nan 0.1000 0.0478
## 5 0.8928 nan 0.1000 0.0378
## 6 0.8672 nan 0.1000 0.0262
## 7 0.8474 nan 0.1000 0.0223
## 8 0.8319 nan 0.1000 0.0201
## 9 0.8180 nan 0.1000 0.0157
## 10 0.8065 nan 0.1000 0.0132
## 20 0.7478 nan 0.1000 0.0039
## 40 0.7067 nan 0.1000 0.0017
## 60 0.6858 nan 0.1000 0.0003
## 80 0.6722 nan 0.1000 0.0001
## 100 0.6613 nan 0.1000 -0.0008
## 120 0.6514 nan 0.1000 -0.0003
## 140 0.6420 nan 0.1000 -0.0004
## 150 0.6386 nan 0.1000 -0.0003
##
## - Fold3: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## + Fold3: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1253
## 2 1.0194 nan 0.1000 0.0879
## 3 0.9611 nan 0.1000 0.0651
## 4 0.9178 nan 0.1000 0.0507
## 5 0.8834 nan 0.1000 0.0384
## 6 0.8563 nan 0.1000 0.0285
## 7 0.8355 nan 0.1000 0.0255
## 8 0.8174 nan 0.1000 0.0194
## 9 0.8015 nan 0.1000 0.0161
## 10 0.7895 nan 0.1000 0.0126
## 20 0.7275 nan 0.1000 0.0033
## 40 0.6826 nan 0.1000 0.0003
## 60 0.6584 nan 0.1000 0.0000
## 80 0.6405 nan 0.1000 -0.0002
## 100 0.6273 nan 0.1000 -0.0004
## 120 0.6150 nan 0.1000 -0.0005
## 140 0.6044 nan 0.1000 -0.0008
## 150 0.6000 nan 0.1000 -0.0008
##
## - Fold3: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## + Fold4: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.0909
## 2 1.0345 nan 0.1000 0.0677
## 3 0.9870 nan 0.1000 0.0498
## 4 0.9520 nan 0.1000 0.0402
## 5 0.9245 nan 0.1000 0.0339
## 6 0.9012 nan 0.1000 0.0249
## 7 0.8832 nan 0.1000 0.0237
## 8 0.8667 nan 0.1000 0.0175
## 9 0.8527 nan 0.1000 0.0163
## 10 0.8415 nan 0.1000 0.0126
## 20 0.7825 nan 0.1000 0.0040
## 40 0.7451 nan 0.1000 0.0011
## 60 0.7251 nan 0.1000 0.0003
## 80 0.7135 nan 0.1000 -0.0000
## 100 0.7053 nan 0.1000 -0.0004
## 120 0.6991 nan 0.1000 0.0000
## 140 0.6942 nan 0.1000 -0.0003
## 150 0.6923 nan 0.1000 -0.0006
##
## - Fold4: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## + Fold4: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1130
## 2 1.0216 nan 0.1000 0.0821
## 3 0.9662 nan 0.1000 0.0617
## 4 0.9241 nan 0.1000 0.0446
## 5 0.8937 nan 0.1000 0.0373
## 6 0.8683 nan 0.1000 0.0275
## 7 0.8479 nan 0.1000 0.0226
## 8 0.8316 nan 0.1000 0.0177
## 9 0.8187 nan 0.1000 0.0159
## 10 0.8069 nan 0.1000 0.0123
## 20 0.7477 nan 0.1000 0.0032
## 40 0.7072 nan 0.1000 0.0001
## 60 0.6871 nan 0.1000 0.0001
## 80 0.6734 nan 0.1000 0.0001
## 100 0.6627 nan 0.1000 -0.0003
## 120 0.6537 nan 0.1000 -0.0011
## 140 0.6456 nan 0.1000 -0.0006
## 150 0.6421 nan 0.1000 -0.0004
##
## - Fold4: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## + Fold4: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1203
## 2 1.0185 nan 0.1000 0.0898
## 3 0.9592 nan 0.1000 0.0653
## 4 0.9154 nan 0.1000 0.0478
## 5 0.8815 nan 0.1000 0.0352
## 6 0.8555 nan 0.1000 0.0291
## 7 0.8340 nan 0.1000 0.0241
## 8 0.8156 nan 0.1000 0.0160
## 9 0.8023 nan 0.1000 0.0144
## 10 0.7907 nan 0.1000 0.0122
## 20 0.7275 nan 0.1000 0.0033
## 40 0.6844 nan 0.1000 0.0008
## 60 0.6609 nan 0.1000 0.0000
## 80 0.6446 nan 0.1000 -0.0008
## 100 0.6312 nan 0.1000 -0.0014
## 120 0.6195 nan 0.1000 -0.0004
## 140 0.6098 nan 0.1000 -0.0008
## 150 0.6048 nan 0.1000 -0.0008
##
## - Fold4: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## + Fold5: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.0968
## 2 1.0341 nan 0.1000 0.0707
## 3 0.9870 nan 0.1000 0.0484
## 4 0.9514 nan 0.1000 0.0410
## 5 0.9223 nan 0.1000 0.0345
## 6 0.8994 nan 0.1000 0.0271
## 7 0.8805 nan 0.1000 0.0221
## 8 0.8646 nan 0.1000 0.0197
## 9 0.8511 nan 0.1000 0.0145
## 10 0.8402 nan 0.1000 0.0121
## 20 0.7806 nan 0.1000 0.0052
## 40 0.7430 nan 0.1000 0.0010
## 60 0.7258 nan 0.1000 0.0005
## 80 0.7142 nan 0.1000 -0.0001
## 100 0.7064 nan 0.1000 -0.0001
## 120 0.7004 nan 0.1000 -0.0003
## 140 0.6958 nan 0.1000 -0.0001
## 150 0.6934 nan 0.1000 -0.0013
##
## - Fold5: shrinkage=0.1, interaction.depth=1, n.minobsinnode=10, n.trees=150
## + Fold5: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1161
## 2 1.0219 nan 0.1000 0.0834
## 3 0.9653 nan 0.1000 0.0598
## 4 0.9232 nan 0.1000 0.0464
## 5 0.8926 nan 0.1000 0.0333
## 6 0.8680 nan 0.1000 0.0289
## 7 0.8476 nan 0.1000 0.0226
## 8 0.8311 nan 0.1000 0.0194
## 9 0.8171 nan 0.1000 0.0157
## 10 0.8046 nan 0.1000 0.0116
## 20 0.7474 nan 0.1000 0.0036
## 40 0.7068 nan 0.1000 0.0004
## 60 0.6867 nan 0.1000 -0.0004
## 80 0.6733 nan 0.1000 -0.0006
## 100 0.6628 nan 0.1000 -0.0005
## 120 0.6540 nan 0.1000 -0.0007
## 140 0.6462 nan 0.1000 -0.0004
## 150 0.6425 nan 0.1000 -0.0003
##
## - Fold5: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150
## + Fold5: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1271
## 2 1.0196 nan 0.1000 0.0891
## 3 0.9607 nan 0.1000 0.0637
## 4 0.9168 nan 0.1000 0.0489
## 5 0.8828 nan 0.1000 0.0367
## 6 0.8565 nan 0.1000 0.0280
## 7 0.8344 nan 0.1000 0.0219
## 8 0.8179 nan 0.1000 0.0184
## 9 0.8032 nan 0.1000 0.0156
## 10 0.7909 nan 0.1000 0.0118
## 20 0.7294 nan 0.1000 0.0032
## 40 0.6847 nan 0.1000 0.0011
## 60 0.6616 nan 0.1000 -0.0003
## 80 0.6455 nan 0.1000 -0.0008
## 100 0.6300 nan 0.1000 -0.0006
## 120 0.6187 nan 0.1000 -0.0006
## 140 0.6101 nan 0.1000 -0.0006
## 150 0.6055 nan 0.1000 -0.0012
##
## - Fold5: shrinkage=0.1, interaction.depth=3, n.minobsinnode=10, n.trees=150
## Aggregating results
## Selecting tuning parameters
## Fitting n.trees = 150, interaction.depth = 3, shrinkage = 0.1, n.minobsinnode = 10 on full training set
## Iter TrainDeviance ValidDeviance StepSize Improve
## 1 1.0986 nan 0.1000 0.1237
## 2 1.0192 nan 0.1000 0.0889
## 3 0.9619 nan 0.1000 0.0656
## 4 0.9175 nan 0.1000 0.0495
## 5 0.8836 nan 0.1000 0.0393
## 6 0.8575 nan 0.1000 0.0287
## 7 0.8366 nan 0.1000 0.0230
## 8 0.8195 nan 0.1000 0.0194
## 9 0.8053 nan 0.1000 0.0157
## 10 0.7940 nan 0.1000 0.0131
## 20 0.7317 nan 0.1000 0.0037
## 40 0.6872 nan 0.1000 0.0010
## 60 0.6649 nan 0.1000 -0.0003
## 80 0.6479 nan 0.1000 -0.0001
## 100 0.6345 nan 0.1000 -0.0002
## 120 0.6245 nan 0.1000 -0.0001
## 140 0.6147 nan 0.1000 -0.0004
## 150 0.6104 nan 0.1000 -0.0004
# Prediction using caret method
lgb_class_prediction <- predict(lgb_class_model, X_test_classification)
# Evaluate model performance - Confusion Matrix
lgb_class_cm <- confusionMatrix(lgb_class_prediction, y_test_classification)
print(lgb_class_cm)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2 3
## 1 901 224 21
## 2 161 564 133
## 3 5 14 50
##
## Overall Statistics
##
## Accuracy : 0.7308
## 95% CI : (0.7112, 0.7498)
## No Information Rate : 0.5147
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5124
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Statistics by Class:
##
## Class: 1 Class: 2 Class: 3
## Sensitivity 0.8444 0.7032 0.24510
## Specificity 0.7565 0.7687 0.98983
## Pos Pred Value 0.7862 0.6573 0.72464
## Neg Pred Value 0.8209 0.8041 0.92315
## Prevalence 0.5147 0.3869 0.09841
## Detection Rate 0.4346 0.2721 0.02412
## Detection Prevalence 0.5528 0.4139 0.03329
## Balanced Accuracy 0.8004 0.7360 0.61747
In this project, Logistic Regression was applied to predict the furnishing status of rental properties based on features such as rental price, property size, property type, property age, proximity to public transport, and facilities. While it is a linear model and may not capture complex interactions, it serves as a strong baseline due to its simplicity, interpretability, and efficiency.
# Train multinomial logistic regression model
log_reg_model <- train(
x = X_train_classification,
y = y_train_classification,
method = "multinom",
trControl = train_ctrl,
metric = "Accuracy"
)
## + Fold1: decay=0e+00
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5664.335120
## iter 20 value 5177.813405
## iter 30 value 4851.522315
## final value 4849.487132
## converged
## - Fold1: decay=0e+00
## + Fold1: decay=1e-01
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5664.587006
## iter 20 value 5180.789204
## iter 30 value 4853.935305
## final value 4851.990881
## converged
## - Fold1: decay=1e-01
## + Fold1: decay=1e-04
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5664.335371
## iter 20 value 5177.816418
## iter 30 value 4851.524829
## final value 4849.489690
## converged
## - Fold1: decay=1e-04
## + Fold2: decay=0e+00
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 6009.623664
## iter 20 value 5336.394468
## iter 30 value 4854.257854
## final value 4853.685738
## converged
## - Fold2: decay=0e+00
## + Fold2: decay=1e-01
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 6009.729568
## iter 20 value 5338.528964
## iter 30 value 4856.849980
## final value 4856.261069
## converged
## - Fold2: decay=1e-01
## + Fold2: decay=1e-04
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 6009.623770
## iter 20 value 5336.396482
## iter 30 value 4854.260501
## final value 4853.688370
## converged
## - Fold2: decay=1e-04
## + Fold3: decay=0e+00
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5974.512175
## iter 20 value 5353.116470
## iter 30 value 4858.315602
## final value 4857.957913
## converged
## - Fold3: decay=0e+00
## + Fold3: decay=1e-01
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5974.611095
## iter 20 value 5356.212393
## iter 30 value 4860.916051
## final value 4860.615053
## converged
## - Fold3: decay=1e-01
## + Fold3: decay=1e-04
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5974.512273
## iter 20 value 5353.119258
## iter 30 value 4858.318310
## final value 4857.960629
## converged
## - Fold3: decay=1e-04
## + Fold4: decay=0e+00
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5938.609393
## iter 20 value 5435.949873
## iter 30 value 4841.231399
## final value 4840.591013
## converged
## - Fold4: decay=0e+00
## + Fold4: decay=1e-01
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5938.709276
## iter 20 value 5280.903978
## iter 30 value 4843.749206
## final value 4843.287833
## converged
## - Fold4: decay=1e-01
## + Fold4: decay=1e-04
## # weights: 36 (22 variable)
## initial value 7292.588372
## iter 10 value 5938.609493
## iter 20 value 5435.964048
## iter 30 value 4841.234236
## final value 4840.593769
## converged
## - Fold4: decay=1e-04
## + Fold5: decay=0e+00
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5904.418950
## iter 20 value 5322.557631
## iter 30 value 4861.600663
## final value 4861.320115
## converged
## - Fold5: decay=0e+00
## + Fold5: decay=1e-01
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5904.525264
## iter 20 value 5326.324968
## iter 30 value 4863.996784
## final value 4863.681614
## converged
## - Fold5: decay=1e-01
## + Fold5: decay=1e-04
## # weights: 36 (22 variable)
## initial value 7291.489760
## iter 10 value 5904.419056
## iter 20 value 5322.561461
## iter 30 value 4861.603115
## final value 4861.322526
## converged
## - Fold5: decay=1e-04
## Aggregating results
## Selecting tuning parameters
## Fitting decay = 0.1 on full training set
## # weights: 36 (22 variable)
## initial value 9115.186159
## iter 10 value 6653.448683
## iter 20 value 6321.546446
## iter 30 value 6071.353517
## final value 6071.323339
## converged
# Predict
log_reg_class_prediction <- predict(log_reg_model, X_test_classification)
# Evaluate
log_reg_class_cm <- confusionMatrix(log_reg_class_prediction, y_test_classification)
print(log_reg_class_cm)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2 3
## 1 825 235 33
## 2 236 556 149
## 3 6 11 22
##
## Overall Statistics
##
## Accuracy : 0.6768
## 95% CI : (0.6562, 0.6969)
## No Information Rate : 0.5147
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.4136
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Statistics by Class:
##
## Class: 1 Class: 2 Class: 3
## Sensitivity 0.7732 0.6933 0.10784
## Specificity 0.7336 0.6971 0.99090
## Pos Pred Value 0.7548 0.5909 0.56410
## Neg Pred Value 0.7531 0.7827 0.91052
## Prevalence 0.5147 0.3869 0.09841
## Detection Rate 0.3980 0.2682 0.01061
## Detection Prevalence 0.5273 0.4539 0.01881
## Balanced Accuracy 0.7534 0.6952 0.54937
The Decision Tree Classifier is a simple yet powerful algorithm that makes predictions by learning decision rules from the data and organizing them into a tree-like structure. For this project, it was used to classify the furnishing status of rental properties based on features such as rental price, property size, property type, property age, proximity to public transport, and available facilities. Decision trees are easy to interpret and visualize, making them useful for understanding how different features influence the furnishing category. However, they can be prone to overfitting, especially on noisy data or datasets with many categories.
#Train Decision Tree Classifier
dt_class_model <- train (
x = X_train_classification,
y = y_train_classification,
method = "rpart",
trControl = train_ctrl,
metric = "Accuracy" #train() can only accept one metric at a time
)
## + Fold1: cp=0.009579
## - Fold1: cp=0.009579
## + Fold2: cp=0.009579
## - Fold2: cp=0.009579
## + Fold3: cp=0.009579
## - Fold3: cp=0.009579
## + Fold4: cp=0.009579
## - Fold4: cp=0.009579
## + Fold5: cp=0.009579
## - Fold5: cp=0.009579
## Aggregating results
## Selecting tuning parameters
## Fitting cp = 0.00958 on full training set
#Prediction
dt_class_prediction <- predict(dt_class_model, X_test_classification)
#Evaluate model performance - Confusion Matrix
dt_class_cm <- confusionMatrix(dt_class_prediction, y_test_classification)
print (dt_class_cm)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2 3
## 1 820 264 36
## 2 247 538 168
## 3 0 0 0
##
## Overall Statistics
##
## Accuracy : 0.6551
## 95% CI : (0.6342, 0.6756)
## No Information Rate : 0.5147
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.366
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Statistics by Class:
##
## Class: 1 Class: 2 Class: 3
## Sensitivity 0.7685 0.6708 0.00000
## Specificity 0.7018 0.6735 1.00000
## Pos Pred Value 0.7321 0.5645 NaN
## Neg Pred Value 0.7408 0.7643 0.90159
## Prevalence 0.5147 0.3869 0.09841
## Detection Rate 0.3956 0.2595 0.00000
## Detection Prevalence 0.5403 0.4597 0.00000
## Balanced Accuracy 0.7351 0.6722 0.50000
The Neural Network Classifier is a flexible and powerful machine learning model inspired by the structure of the human brain. It consists of interconnected layers of nodes (neurons) that learn to detect complex patterns in the data. In this project, a neural network was trained to predict the furnishing status of rental properties using features such as rental price, property size, property type, property age, proximity to public transport, and available facilities. Neural networks are capable of modeling non-linear relationships and interactions between variables, making them suitable for multi-class classification tasks. However, they often require more data and computational resources and are generally less interpretable than traditional models.
#Train Neural Network Classifier
nn_class_model <- train (
x = X_train_classification,
y = y_train_classification,
method = "nnet",
trControl = train_ctrl,
metric = "Accuracy", #train() can only accept one metric at a time
trace = FALSE #To suppress the training output
)
## + Fold1: size=1, decay=0e+00
## - Fold1: size=1, decay=0e+00
## + Fold1: size=3, decay=0e+00
## - Fold1: size=3, decay=0e+00
## + Fold1: size=5, decay=0e+00
## - Fold1: size=5, decay=0e+00
## + Fold1: size=1, decay=1e-01
## - Fold1: size=1, decay=1e-01
## + Fold1: size=3, decay=1e-01
## - Fold1: size=3, decay=1e-01
## + Fold1: size=5, decay=1e-01
## - Fold1: size=5, decay=1e-01
## + Fold1: size=1, decay=1e-04
## - Fold1: size=1, decay=1e-04
## + Fold1: size=3, decay=1e-04
## - Fold1: size=3, decay=1e-04
## + Fold1: size=5, decay=1e-04
## - Fold1: size=5, decay=1e-04
## + Fold2: size=1, decay=0e+00
## - Fold2: size=1, decay=0e+00
## + Fold2: size=3, decay=0e+00
## - Fold2: size=3, decay=0e+00
## + Fold2: size=5, decay=0e+00
## - Fold2: size=5, decay=0e+00
## + Fold2: size=1, decay=1e-01
## - Fold2: size=1, decay=1e-01
## + Fold2: size=3, decay=1e-01
## - Fold2: size=3, decay=1e-01
## + Fold2: size=5, decay=1e-01
## - Fold2: size=5, decay=1e-01
## + Fold2: size=1, decay=1e-04
## - Fold2: size=1, decay=1e-04
## + Fold2: size=3, decay=1e-04
## - Fold2: size=3, decay=1e-04
## + Fold2: size=5, decay=1e-04
## - Fold2: size=5, decay=1e-04
## + Fold3: size=1, decay=0e+00
## - Fold3: size=1, decay=0e+00
## + Fold3: size=3, decay=0e+00
## - Fold3: size=3, decay=0e+00
## + Fold3: size=5, decay=0e+00
## - Fold3: size=5, decay=0e+00
## + Fold3: size=1, decay=1e-01
## - Fold3: size=1, decay=1e-01
## + Fold3: size=3, decay=1e-01
## - Fold3: size=3, decay=1e-01
## + Fold3: size=5, decay=1e-01
## - Fold3: size=5, decay=1e-01
## + Fold3: size=1, decay=1e-04
## - Fold3: size=1, decay=1e-04
## + Fold3: size=3, decay=1e-04
## - Fold3: size=3, decay=1e-04
## + Fold3: size=5, decay=1e-04
## - Fold3: size=5, decay=1e-04
## + Fold4: size=1, decay=0e+00
## - Fold4: size=1, decay=0e+00
## + Fold4: size=3, decay=0e+00
## - Fold4: size=3, decay=0e+00
## + Fold4: size=5, decay=0e+00
## - Fold4: size=5, decay=0e+00
## + Fold4: size=1, decay=1e-01
## - Fold4: size=1, decay=1e-01
## + Fold4: size=3, decay=1e-01
## - Fold4: size=3, decay=1e-01
## + Fold4: size=5, decay=1e-01
## - Fold4: size=5, decay=1e-01
## + Fold4: size=1, decay=1e-04
## - Fold4: size=1, decay=1e-04
## + Fold4: size=3, decay=1e-04
## - Fold4: size=3, decay=1e-04
## + Fold4: size=5, decay=1e-04
## - Fold4: size=5, decay=1e-04
## + Fold5: size=1, decay=0e+00
## - Fold5: size=1, decay=0e+00
## + Fold5: size=3, decay=0e+00
## - Fold5: size=3, decay=0e+00
## + Fold5: size=5, decay=0e+00
## - Fold5: size=5, decay=0e+00
## + Fold5: size=1, decay=1e-01
## - Fold5: size=1, decay=1e-01
## + Fold5: size=3, decay=1e-01
## - Fold5: size=3, decay=1e-01
## + Fold5: size=5, decay=1e-01
## - Fold5: size=5, decay=1e-01
## + Fold5: size=1, decay=1e-04
## - Fold5: size=1, decay=1e-04
## + Fold5: size=3, decay=1e-04
## - Fold5: size=3, decay=1e-04
## + Fold5: size=5, decay=1e-04
## - Fold5: size=5, decay=1e-04
## Aggregating results
## Selecting tuning parameters
## Fitting size = 5, decay = 0.1 on full training set
#Prediction
nn_class_prediction <- predict(nn_class_model, X_test_classification)
#Evaluate model performance - Confusion Matrix
nn_class_cm <- confusionMatrix(nn_class_prediction, y_test_classification)
print(nn_class_cm)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2 3
## 1 890 271 23
## 2 169 512 153
## 3 8 19 28
##
## Overall Statistics
##
## Accuracy : 0.6898
## 95% CI : (0.6694, 0.7097)
## No Information Rate : 0.5147
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.4337
##
## Mcnemar's Test P-Value : < 2.2e-16
##
## Statistics by Class:
##
## Class: 1 Class: 2 Class: 3
## Sensitivity 0.8341 0.6384 0.13725
## Specificity 0.7078 0.7467 0.98555
## Pos Pred Value 0.7517 0.6139 0.50909
## Neg Pred Value 0.8009 0.7659 0.91278
## Prevalence 0.5147 0.3869 0.09841
## Detection Rate 0.4293 0.2470 0.01351
## Detection Prevalence 0.5712 0.4023 0.02653
## Balanced Accuracy 0.7709 0.6925 0.56140
Several regression models were trained to predict the monthly rental price of apartments in KL/Selangor. The following models were evaluated: Linear Regression, Decision Tree, XGBoost, LightGBM, and Neural Network.
Model | RMSE | R² | MAE | MSE |
---|---|---|---|---|
Linear Regression | 491.4128 | 0.4661038 | 363.4862 | 241486.5 |
XGBoost | 332.1724 | 0.7560023 | 227.5920 | 110338.5 |
LightGBM | 347.3618 | 0.7354932 | 238.3184 | 120660.2 |
Decision Tree | 578.9018 | 0.2585847 | 421.0874 | 335127.3 |
Neural Network | 1866.903 | 0 | 1741.764 | 3485325 |
Linear Regression
df_pred <- data.frame(Actual = y_test_regression, Predicted = lm_prediction)
library(ggplot2)
p <- ggplot(df_pred, aes(x = Actual, y = Predicted)) +
geom_point(alpha = 0.5) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "red") +
labs(title = "Actual vs Predicted Rental Price (Linear Regression)",
x = "Actual (Standardized)",
y = "Predicted (Standardized)") +
theme_minimal()
if (!dir.exists("plots")) dir.create("plots")
ggsave("plots/lm_actual_vs_predicted.png", plot = p)
## Saving 7 x 5 in image
knitr::include_graphics("plots/lm_actual_vs_predicted.png")
# Residuals
df_resid <- data.frame(Predicted = lm_prediction, Residuals = y_test_regression - lm_prediction)
p2 <- ggplot(df_resid, aes(x = Predicted, y = Residuals)) +
geom_point(alpha = 0.5) +
geom_hline(yintercept = 0, linetype = "dashed", color = "blue") +
labs(title = "Residuals Plot (Linear Regression)",
x = "Predicted (Standardized)",
y = "Residuals") +
theme_minimal()
if (!dir.exists("plots")) dir.create("plots")
ggsave("plots/lm_residuals.png", plot = p2)
## Saving 7 x 5 in image
knitr::include_graphics("plots/lm_residuals.png")
For XGBoost:
library(xgboost)
# Use $finalModel to access the xgb.Booster object
importance_matrix <- xgb.importance(model = xgb_model$finalModel)
xgb.plot.importance(importance_matrix, top_n = 10)
# To save as PNG
png("plots/xgb_feature_importance.png")
xgb.plot.importance(importance_matrix, top_n = 10)
dev.off()
## png
## 2
The regression models yielded similar results with Neural Network as exception, with RMSE values between 330 to 600 and R² values close to 0.75. Feature importance plots show that the most influential variables are typically distance to popular locations, the location of the unit, size and furnish status, where these four features alone contribute more than 50% of the importance.
Strengths: Consistent RMSE/MAE across models except Neural Network that usually requires a more finer tuning of hyperparameters.
Weaknesses: Computation Time, Both XGBoost and Neural Network are complex model that takes longer time to train, highlighting the incredible computational algorithm of LightGBM to have high predictive power with less time.
Model | Accuracy | Precision (Macro) | Recall (Macro) | F1-Score (Macro) | AUC (Macro) |
---|---|---|---|---|---|
XGBoost | 0.747 | 0.72 | 0.63 | 0.65 | 0.88* |
LightGBM | 0.725 | 0.70 | 0.59 | 0.60 | 0.85* |
Neural Network | 0.678 | 0.64 | 0.52 | 0.53 | 0.81* |
Decision Tree | 0.655 | 0.64 | 0.48 | 0.48 | 0.79* |
Logistic Reg. | 0.685 | 0.65 | 0.50 | 0.49 | 0.80* |
library(caret)
cm <- confusionMatrix(xgb_class_prediction, y_test_classification)
cm_table <- as.data.frame(cm$table)
library(ggplot2)
p3 <- ggplot(cm_table, aes(Prediction, Reference, fill = Freq)) +
geom_tile() +
geom_text(aes(label = Freq)) +
scale_fill_gradient(low = "white", high = "red") +
labs(title = "Confusion Matrix (XGBoost)") +
theme_minimal()
if (!dir.exists("plots")) dir.create("plots")
ggsave("plots/xgb_confusion_matrix.png", plot = p3)
## Saving 7 x 5 in image
knitr::include_graphics("plots/xgb_confusion_matrix.png")
prob_mat <- predict(xgb_class_model, X_test_classification, type = "prob")
prob_furnished <- prob_mat[, "1"] # or use the appropriate class column name
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# prob_furnished = predicted probability of the positive class (for XGBoost etc.)
roc_obj <- roc(y_test_classification, prob_furnished)
## Warning in roc.default(y_test_classification, prob_furnished): 'response' has
## more than two levels. Consider setting 'levels' explicitly or using
## 'multiclass.roc' instead
## Setting levels: control = 1, case = 2
## Setting direction: controls > cases
png("plots/xgb_roc_curve.png")
plot(roc_obj, main = "ROC Curve (XGBoost)")
dev.off()
## png
## 2
knitr::include_graphics("plots/xgb_roc_curve.png")
All models achieved an accuracy of over 65% with XGBoost being the top model with 74.7% accuracy and 0.65 F1-score.
Limitations: The furnished status is decided by the poster of listing, which makes the line blurred between what counts as “Not Furnished” and “Partially Furnished”, as each agency/posters have their own definitions of furnished status, e.g. a unit paired with only ceiling fans may be considered “Partially Furnished” but “Not Furnished” by different posters.
Recommendations: Try oversampling/undersampling, or create new features that better separate furnishing categories.
Regression: All models provide consistent and satisfactory predictions.
Classification: Model struggles to distinguish classes, likely due to data imbalance or insufficient features.
Limitation: Rental price is influenced by many external factors not captured in the dataset, such as neighborhood prestige or short-term market forces. Furthermore, the rental pricing dataset was sourced in 2023, inflation and power of supply-demand may have shifted the pricing data by a slight margin throughout the years. Hence, it is important to monitor the real-world performance of the model and retrain whenever necessary.
In conclusion, this project successfully built two predictive models: a regression model to estimate apartment rental prices and a classification model to predict furnishing status. Through extensive data cleaning, feature engineering, and model evaluation, the analysis revealed that factors such as property size, number of rooms, furnishing condition, and proximity to major landmarks significantly influence rental outcomes. The findings provide useful insights for tenants seeking affordable yet strategic locations, and for property owners aiming to optimize their listings. Ultimately, the models support more informed and data-driven decision-making in the urban rental market of Kuala Lumpur and Selangor.
EdgeProp. (2024, January 23). Rental demand increases as property ownership becomes less accessible. https://www.edgeprop.my/content/1927234/rental-demand-increases-property-ownership-becomes-less-accessible
PropertyGuru. (2024). Malaysia property market report Q1 2024. https://www.propertyguru.com.my/property-guides/malaysia-property-market-report-q1-2024-67793