Eksplorasi dan Reduksi Data Fitness Tracking Dataset
1. Deskripsi Data
Dataset yang digunakan dalam penelitian ini adalah Gym Members Exercise Dataset yang diperoleh dari platform Kaggle (https://www.kaggle.com/datasets/valakhorasani/gym-members-exercise-dataset), diunggah oleh Vala Khorasani. Dataset ini termasuk dalam bidang kesehatan dan kebugaran (health and fitness) yang memuat informasi mengenai karakteristik fisik anggota gym, pola latihan, dan indikator kebugaran tubuh.
Dataset terdiri dari 973 observasi dan 15 variabel, yang terbagi menjadi 13 variabel numerik dan 2 variabel kategorik, tanpa adanya missing value pada seluruh variabel. Berikut adalah daftar lengkap variabel dalam dataset
| No | Variabel | Tipe | Keterangan |
|---|---|---|---|
| 1. | Age | Numerik | Usia anggota (tahun) |
| 2. | Gender | Kategorik | Jenis kelamin (Male/Female) |
| 3. | Weight (kg) | Numerik | Berat badan (kg) |
| 4. | Height (m) | Numerik | Tinggi badan (m) |
| 5. | Max_BPM | Numerik | Detak jantung maksimum saat latihan |
| 6. | Avg_BPM | Numerik | Rata-rata detak jantung saat latihan |
| 7. | Resting_BPM | Numerik | Detak jantung saat istirahat |
| 8. | Session_Duration (hours) | Numerik | Durasi sesi latihan (jam) |
| 9. | Calories_Burned | Numerik | Kalori yang terbakar per sesi |
| 10. | Workout_Type | Kategorik | Jenis latihan (Yoga/HIIT/Cardio/Strength) |
| 11. | Fat_Percentage | Numerik | Persentase lemak tubuh (%) |
| 12. | Water_Intake (liters) | Numerik | Konsumsi air harian (liter) |
| 13. | Workout_Frequency (days/week) | Numerik | Frekuensi latihan per minggu |
| 14. | Experience_Level | Numerik (Ordinal) | Tingkat pengalaman gym (1=Pemula, 2=Menengah, 3=Ahli) |
| 15. | BMI | Numerik | Body Mass Index (kg/m²) |
Tujuan analisis pada penelitian ini adalah melakukan eksplorasi data dan reduksi dimensi untuk mengetahui variabel yang paling berpengaruh terhadap kebugaran anggota gym. Tahapan analisis yang dilakukan meliputi Exploratory Data Analysis (EDA), feature engineering, feature selection, dan Principal Component Analysis (PCA). Pada proses analisis multivariat dan PCA, variabel yang digunakan difokuskan pada variabel numerik karena PCA bekerja berdasarkan hubungan linier dan matriks kovarians antar variabel numerik. Analisis ini diharapkan dapat menyederhanakan dimensi data tanpa menghilangkan informasi utama yang terkandung dalam dataset.
2. Exploratory Data Analysis (EDA)
library(tidyverse)
library(corrplot)
library(car)
library(glmnet)
library(randomForest)
library(caret)
library(FactoMineR)
library(moments)
library(readxl)Impor dan Struktur Data
# Data
data <- read_excel(
"C:/Users/Asus/Downloads/gym_members_exercise_tracking.xlsx"
)
# Cek nama kolom asli
colnames(data)## [1] "Age" "Gender"
## [3] "Weight (kg)" "Height (m)"
## [5] "Max_BPM" "Avg_BPM"
## [7] "Resting_BPM" "Session_Duration (hours)"
## [9] "Calories_Burned" "Workout_Type"
## [11] "Fat_Percentage" "Water_Intake (liters)"
## [13] "Workout_Frequency (days/week)" "Experience_Level"
## [15] "BMI"
# Bersihkan nama kolom (ganti spasi & karakter khusus dengan titik)
colnames(data) <- make.names(colnames(data))
colnames(data)## [1] "Age" "Gender"
## [3] "Weight..kg." "Height..m."
## [5] "Max_BPM" "Avg_BPM"
## [7] "Resting_BPM" "Session_Duration..hours."
## [9] "Calories_Burned" "Workout_Type"
## [11] "Fat_Percentage" "Water_Intake..liters."
## [13] "Workout_Frequency..days.week." "Experience_Level"
## [15] "BMI"
## tibble [973 × 15] (S3: tbl_df/tbl/data.frame)
## $ Age : num [1:973] 56 46 32 25 38 56 36 40 28 28 ...
## $ Gender : chr [1:973] "Male" "Female" "Female" "Male" ...
## $ Weight..kg. : num [1:973] 88.3 74.9 68.1 53.2 46.1 ...
## $ Height..m. : num [1:973] 1.71 1.53 1.66 1.7 1.79 1.68 1.72 1.51 1.94 1.84 ...
## $ Max_BPM : num [1:973] 180 179 167 190 188 168 174 189 185 169 ...
## $ Avg_BPM : num [1:973] 157 151 122 164 158 156 169 141 127 136 ...
## $ Resting_BPM : num [1:973] 60 66 54 56 68 74 73 64 52 64 ...
## $ Session_Duration..hours. : num [1:973] 1.69 1.3 1.11 0.59 0.64 1.59 1.49 1.27 1.03 1.08 ...
## $ Calories_Burned : num [1:973] 1313 883 677 532 556 ...
## $ Workout_Type : chr [1:973] "Yoga" "HIIT" "Cardio" "Strength" ...
## $ Fat_Percentage : num [1:973] 12.6 33.9 33.4 28.8 29.2 15.5 21.3 30.6 28.9 29.7 ...
## $ Water_Intake..liters. : num [1:973] 3.5 2.1 2.3 2.1 2.8 2.7 2.3 1.9 2.6 2.7 ...
## $ Workout_Frequency..days.week.: num [1:973] 4 4 4 3 3 5 3 3 4 3 ...
## $ Experience_Level : num [1:973] 3 2 2 1 1 3 2 2 2 1 ...
## $ BMI : num [1:973] 30.2 32 24.7 18.4 14.4 ...
## Age Gender
## "numeric" "character"
## Weight..kg. Height..m.
## "numeric" "numeric"
## Max_BPM Avg_BPM
## "numeric" "numeric"
## Resting_BPM Session_Duration..hours.
## "numeric" "numeric"
## Calories_Burned Workout_Type
## "numeric" "character"
## Fat_Percentage Water_Intake..liters.
## "numeric" "numeric"
## Workout_Frequency..days.week. Experience_Level
## "numeric" "numeric"
## BMI
## "numeric"
## tibble [973 × 15] (S3: tbl_df/tbl/data.frame)
## $ Age : num [1:973] 56 46 32 25 38 56 36 40 28 28 ...
## $ Gender : Factor w/ 2 levels "Female","Male": 2 1 1 2 2 1 2 1 2 2 ...
## $ Weight..kg. : num [1:973] 88.3 74.9 68.1 53.2 46.1 ...
## $ Height..m. : num [1:973] 1.71 1.53 1.66 1.7 1.79 1.68 1.72 1.51 1.94 1.84 ...
## $ Max_BPM : num [1:973] 180 179 167 190 188 168 174 189 185 169 ...
## $ Avg_BPM : num [1:973] 157 151 122 164 158 156 169 141 127 136 ...
## $ Resting_BPM : num [1:973] 60 66 54 56 68 74 73 64 52 64 ...
## $ Session_Duration..hours. : num [1:973] 1.69 1.3 1.11 0.59 0.64 1.59 1.49 1.27 1.03 1.08 ...
## $ Calories_Burned : num [1:973] 1313 883 677 532 556 ...
## $ Workout_Type : Factor w/ 4 levels "Cardio","HIIT",..: 4 2 1 3 3 2 1 1 3 1 ...
## $ Fat_Percentage : num [1:973] 12.6 33.9 33.4 28.8 29.2 15.5 21.3 30.6 28.9 29.7 ...
## $ Water_Intake..liters. : num [1:973] 3.5 2.1 2.3 2.1 2.8 2.7 2.3 1.9 2.6 2.7 ...
## $ Workout_Frequency..days.week.: num [1:973] 4 4 4 3 3 5 3 3 4 3 ...
## $ Experience_Level : num [1:973] 3 2 2 1 1 3 2 2 2 1 ...
## $ BMI : num [1:973] 30.2 32 24.7 18.4 14.4 ...
## Age Gender Weight..kg. Height..m. Max_BPM
## Min. :18.00 Female:462 Min. : 40.00 Min. :1.500 Min. :160.0
## 1st Qu.:28.00 Male :511 1st Qu.: 58.10 1st Qu.:1.620 1st Qu.:170.0
## Median :40.00 Median : 70.00 Median :1.710 Median :180.0
## Mean :38.68 Mean : 73.85 Mean :1.723 Mean :179.9
## 3rd Qu.:49.00 3rd Qu.: 86.00 3rd Qu.:1.800 3rd Qu.:190.0
## Max. :59.00 Max. :129.90 Max. :2.000 Max. :199.0
## Avg_BPM Resting_BPM Session_Duration..hours. Calories_Burned
## Min. :120.0 Min. :50.00 Min. :0.500 Min. : 303.0
## 1st Qu.:131.0 1st Qu.:56.00 1st Qu.:1.040 1st Qu.: 720.0
## Median :143.0 Median :62.00 Median :1.260 Median : 893.0
## Mean :143.8 Mean :62.22 Mean :1.256 Mean : 905.4
## 3rd Qu.:156.0 3rd Qu.:68.00 3rd Qu.:1.460 3rd Qu.:1076.0
## Max. :169.0 Max. :74.00 Max. :2.000 Max. :1783.0
## Workout_Type Fat_Percentage Water_Intake..liters.
## Cardio :255 Min. :10.00 Min. :1.500
## HIIT :221 1st Qu.:21.30 1st Qu.:2.200
## Strength:258 Median :26.20 Median :2.600
## Yoga :239 Mean :24.98 Mean :2.627
## 3rd Qu.:29.30 3rd Qu.:3.100
## Max. :35.00 Max. :3.700
## Workout_Frequency..days.week. Experience_Level BMI
## Min. :2.000 Min. :1.00 Min. :12.32
## 1st Qu.:3.000 1st Qu.:1.00 1st Qu.:20.11
## Median :3.000 Median :2.00 Median :24.16
## Mean :3.322 Mean :1.81 Mean :24.91
## 3rd Qu.:4.000 3rd Qu.:2.00 3rd Qu.:28.56
## Max. :5.000 Max. :3.00 Max. :49.84
## [1] 973 15
## [1] "Age" "Gender"
## [3] "Weight..kg." "Height..m."
## [5] "Max_BPM" "Avg_BPM"
## [7] "Resting_BPM" "Session_Duration..hours."
## [9] "Calories_Burned" "Workout_Type"
## [11] "Fat_Percentage" "Water_Intake..liters."
## [13] "Workout_Frequency..days.week." "Experience_Level"
## [15] "BMI"
# Cek Missing Value
# Jumlah Missing Value per Variabel
missing_val <- colSums(is.na(data))
print(missing_val)## Age Gender
## 0 0
## Weight..kg. Height..m.
## 0 0
## Max_BPM Avg_BPM
## 0 0
## Resting_BPM Session_Duration..hours.
## 0 0
## Calories_Burned Workout_Type
## 0 0
## Fat_Percentage Water_Intake..liters.
## 0 0
## Workout_Frequency..days.week. Experience_Level
## 0 0
## BMI
## 0
# Persentase Missing Value (%)
missing_pct <- round(colMeans(is.na(data)) * 100, 2)
print(missing_pct)## Age Gender
## 0 0
## Weight..kg. Height..m.
## 0 0
## Max_BPM Avg_BPM
## 0 0
## Resting_BPM Session_Duration..hours.
## 0 0
## Calories_Burned Workout_Type
## 0 0
## Fat_Percentage Water_Intake..liters.
## 0 0
## Workout_Frequency..days.week. Experience_Level
## 0 0
## BMI
## 0
# Variabel Numerik
numeric_data <- data %>%
select(where(is.numeric))
# cek jumlah variabel numerik
ncol(numeric_data)## [1] 13
## [1] "Age" "Weight..kg."
## [3] "Height..m." "Max_BPM"
## [5] "Avg_BPM" "Resting_BPM"
## [7] "Session_Duration..hours." "Calories_Burned"
## [9] "Fat_Percentage" "Water_Intake..liters."
## [11] "Workout_Frequency..days.week." "Experience_Level"
## [13] "BMI"
Statistik Deskriptif
# Fungsi statistik lengkap
stat_desc <- data.frame(
Variabel = names(numeric_data),
Mean = round(sapply(numeric_data, mean), 2),
Median = round(sapply(numeric_data, median), 2),
SD = round(sapply(numeric_data, sd), 2),
Min = round(sapply(numeric_data, min), 2),
Max = round(sapply(numeric_data, max), 2),
Skewness = round(sapply(numeric_data,
function(x) mean((x - mean(x))^3) / sd(x)^3), 2)
)
print(stat_desc)## Variabel Mean Median
## Age Age 38.68 40.00
## Weight..kg. Weight..kg. 73.85 70.00
## Height..m. Height..m. 1.72 1.71
## Max_BPM Max_BPM 179.88 180.00
## Avg_BPM Avg_BPM 143.77 143.00
## Resting_BPM Resting_BPM 62.22 62.00
## Session_Duration..hours. Session_Duration..hours. 1.26 1.26
## Calories_Burned Calories_Burned 905.42 893.00
## Fat_Percentage Fat_Percentage 24.98 26.20
## Water_Intake..liters. Water_Intake..liters. 2.63 2.60
## Workout_Frequency..days.week. Workout_Frequency..days.week. 3.32 3.00
## Experience_Level Experience_Level 1.81 2.00
## BMI BMI 24.91 24.16
## SD Min Max Skewness
## Age 12.18 18.00 59.00 -0.08
## Weight..kg. 21.21 40.00 129.90 0.77
## Height..m. 0.13 1.50 2.00 0.34
## Max_BPM 11.53 160.00 199.00 -0.04
## Avg_BPM 14.35 120.00 169.00 0.09
## Resting_BPM 7.33 50.00 74.00 -0.07
## Session_Duration..hours. 0.34 0.50 2.00 0.03
## Calories_Burned 272.64 303.00 1783.00 0.28
## Fat_Percentage 6.26 10.00 35.00 -0.63
## Water_Intake..liters. 0.60 1.50 3.70 0.07
## Workout_Frequency..days.week. 0.91 2.00 5.00 0.15
## Experience_Level 0.74 1.00 3.00 0.32
## BMI 6.66 12.32 49.84 0.76
##
## Female Male
## 462 511
##
## Cardio HIIT Strength Yoga
## 255 221 258 239
Visualisasi Data
# Histogram semua variabel numerik
# Untuk melihat distribusi data pada setiap variabel numerik
numeric_data %>%
pivot_longer(everything()) %>%
ggplot(aes(x = value)) +
geom_histogram(fill = "steelblue", color = "brown",bins = 30) +
facet_wrap(~name, scales = "free") +
labs(
title = "Distribusi Variabel Numerik",
x = "Nilai",
y = "Frekuensi"
) +
theme_minimal()# Distribusi variabel kategorik Workout_Type
# Untuk melihat frekuensi masing-masing jenis latihan
barplot(table(data$Workout_Type), col = rainbow(4),
main = "Frekuensi Tipe Workout", las = 1)# Boxplot Calories Burned berdasarkan Gender
# Membandingkan distribusi Calories_Burned berdasarkan Gender
ggplot(data,
aes(x = Gender, y = Calories_Burned, fill = Gender)) +
geom_boxplot(alpha = 0.7) +
labs(
title = "Kalori Terbakar berdasarkan Gender",
x = "Gender",
y = "Calories Burned"
) +
theme_minimal()# Boxplot Calories Burned berdasarkan Workout Type
# Membandingkan distribusi Calories_Burned berdasarkan Workout Type
ggplot(data,
aes(x = Workout_Type, y = Calories_Burned, fill = Workout_Type)) +
geom_boxplot(alpha = 0.7) +
labs(
title = "Kalori Terbakar berdasarkan Jenis Latihan",
x = "Workout Type",
y = "Calories Burned"
) +
theme_minimal()# Scatterplot Session Duration vs Calories Burned
# melihat hubungan antar variabel
ggplot(data,
aes(x = Session_Duration..hours., y = Calories_Burned,color = Gender)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "lm",
se = FALSE) +
labs(
title = "Durasi Latihan vs Kalori Terbakar",
x = "Session Duration (hours)",
y = "Calories Burned"
) +
theme_minimal()## `geom_smooth()` using formula = 'y ~ x'
Analisis Korelasi
# Memilih variabel numerik
numeric_data <- data %>%
select(where(is.numeric))
# Matriks korelasi
cor_matrix <- cor(numeric_data)
# Menampilkan nilai korelasi
round(cor_matrix, 3)## Age Weight..kg. Height..m. Max_BPM Avg_BPM
## Age 1.000 -0.036 -0.028 -0.017 0.036
## Weight..kg. -0.036 1.000 0.365 0.057 0.010
## Height..m. -0.028 0.365 1.000 -0.018 -0.015
## Max_BPM -0.017 0.057 -0.018 1.000 -0.040
## Avg_BPM 0.036 0.010 -0.015 -0.040 1.000
## Resting_BPM 0.004 -0.032 -0.005 0.037 0.060
## Session_Duration..hours. -0.020 -0.014 -0.010 0.010 0.016
## Calories_Burned -0.155 0.095 0.086 0.002 0.340
## Fat_Percentage 0.002 -0.226 -0.236 -0.009 -0.007
## Water_Intake..liters. 0.042 0.394 0.394 0.032 -0.003
## Workout_Frequency..days.week. 0.008 -0.012 -0.011 -0.029 -0.011
## Experience_Level -0.019 0.003 -0.010 0.001 -0.001
## BMI -0.014 0.853 -0.159 0.067 0.022
## Resting_BPM Session_Duration..hours.
## Age 0.004 -0.020
## Weight..kg. -0.032 -0.014
## Height..m. -0.005 -0.010
## Max_BPM 0.037 0.010
## Avg_BPM 0.060 0.016
## Resting_BPM 1.000 -0.017
## Session_Duration..hours. -0.017 1.000
## Calories_Burned 0.017 0.908
## Fat_Percentage -0.017 -0.582
## Water_Intake..liters. 0.008 0.283
## Workout_Frequency..days.week. -0.008 0.644
## Experience_Level 0.002 0.765
## BMI -0.033 -0.006
## Calories_Burned Fat_Percentage
## Age -0.155 0.002
## Weight..kg. 0.095 -0.226
## Height..m. 0.086 -0.236
## Max_BPM 0.002 -0.009
## Avg_BPM 0.340 -0.007
## Resting_BPM 0.017 -0.017
## Session_Duration..hours. 0.908 -0.582
## Calories_Burned 1.000 -0.598
## Fat_Percentage -0.598 1.000
## Water_Intake..liters. 0.357 -0.589
## Workout_Frequency..days.week. 0.576 -0.537
## Experience_Level 0.694 -0.654
## BMI 0.060 -0.119
## Water_Intake..liters.
## Age 0.042
## Weight..kg. 0.394
## Height..m. 0.394
## Max_BPM 0.032
## Avg_BPM -0.003
## Resting_BPM 0.008
## Session_Duration..hours. 0.283
## Calories_Burned 0.357
## Fat_Percentage -0.589
## Water_Intake..liters. 1.000
## Workout_Frequency..days.week. 0.239
## Experience_Level 0.304
## BMI 0.214
## Workout_Frequency..days.week. Experience_Level
## Age 0.008 -0.019
## Weight..kg. -0.012 0.003
## Height..m. -0.011 -0.010
## Max_BPM -0.029 0.001
## Avg_BPM -0.011 -0.001
## Resting_BPM -0.008 0.002
## Session_Duration..hours. 0.644 0.765
## Calories_Burned 0.576 0.694
## Fat_Percentage -0.537 -0.654
## Water_Intake..liters. 0.239 0.304
## Workout_Frequency..days.week. 1.000 0.837
## Experience_Level 0.837 1.000
## BMI 0.002 0.016
## BMI
## Age -0.014
## Weight..kg. 0.853
## Height..m. -0.159
## Max_BPM 0.067
## Avg_BPM 0.022
## Resting_BPM -0.033
## Session_Duration..hours. -0.006
## Calories_Burned 0.060
## Fat_Percentage -0.119
## Water_Intake..liters. 0.214
## Workout_Frequency..days.week. 0.002
## Experience_Level 0.016
## BMI 1.000
# Visualisasi heatmap korelasi
library(corrplot)
corrplot(
cor_matrix,
method = "color",
type = "upper",
addCoef.col = "black",
number.cex = 0.6,
tl.cex = 0.8,
tl.col = "black",
diag = FALSE
)# Korelasi terhadap Calories_Burned
# Untuk melihat variabel yang paling berhubungan dengan target
cor_calories <- sort(
cor_matrix["Calories_Burned", ],
decreasing = TRUE
)
round(cor_calories, 3)## Calories_Burned Session_Duration..hours.
## 1.000 0.908
## Experience_Level Workout_Frequency..days.week.
## 0.694 0.576
## Water_Intake..liters. Avg_BPM
## 0.357 0.340
## Weight..kg. Height..m.
## 0.095 0.086
## BMI Resting_BPM
## 0.060 0.017
## Max_BPM Age
## 0.002 -0.155
## Fat_Percentage
## -0.598
Identifikasi Multikolinieritas (VIF)
# Gunakan regresi linear untuk hitung VIF
model_vif <- lm(
Calories_Burned ~ Age + Weight..kg. +
Height..m. + Max_BPM + Avg_BPM +
Resting_BPM + Session_Duration..hours. +
Fat_Percentage + Water_Intake..liters. +
Workout_Frequency..days.week. +
Experience_Level + BMI,
data = data
)
vif_values <- vif(model_vif)
print(round(vif_values, 2))## Age Weight..kg.
## 1.02 71.65
## Height..m. Max_BPM
## 20.62 1.01
## Avg_BPM Resting_BPM
## 1.01 1.01
## Session_Duration..hours. Fat_Percentage
## 2.51 2.59
## Water_Intake..liters. Workout_Frequency..days.week.
## 1.86 3.37
## Experience_Level BMI
## 5.31 64.18
Deteksi Outlier (METODE IQR)
# Menghitung jumlah outlier pada setiap variabel numerik
deteksi_outlier <- function(x){
Q1 <- quantile(x, 0.25)
Q3 <- quantile(x, 0.75)
IQR_value <- Q3 - Q1
lower <- Q1 - 1.5 * IQR_value
upper <- Q3 + 1.5 * IQR_value
sum(x < lower | x > upper)
}
outlier_count <- sapply(numeric_data, deteksi_outlier)
outlier_df <- data.frame(
Variabel = names(outlier_count),
Jumlah_Outlier = outlier_count
)
print("Jumlah Outlier per Variabel:")## [1] "Jumlah Outlier per Variabel:"
## Variabel Jumlah_Outlier
## Age Age 0
## Weight..kg. Weight..kg. 9
## Height..m. Height..m. 0
## Max_BPM Max_BPM 0
## Avg_BPM Avg_BPM 0
## Resting_BPM Resting_BPM 0
## Session_Duration..hours. Session_Duration..hours. 0
## Calories_Burned Calories_Burned 10
## Fat_Percentage Fat_Percentage 0
## Water_Intake..liters. Water_Intake..liters. 0
## Workout_Frequency..days.week. Workout_Frequency..days.week. 0
## Experience_Level Experience_Level 0
## BMI BMI 25
# Visualisasi Outlier dengan Boxplot
numeric_data %>%
pivot_longer(
cols = everything(),
names_to = "Variabel",
values_to = "Nilai"
) %>%
ggplot(aes(x = Variabel, y = Nilai)) +
geom_boxplot(
fill = "steelblue",
alpha = 0.6,
outlier.color = "brown"
) +
facet_wrap(~Variabel, scales = "free") +
labs(
title = "Deteksi Outlier pada Variabel Numerik",
x = "",
y = "Nilai"
) +
theme_minimal() +
theme(axis.text.x = element_blank())a. Statistik Deskriptif
Berdasarkan hasil summary(data) dan data.frame(sapply(…)) yang dijalankan pada dataset, diketahui bahwa dataset terdiri dari 973 observasi dengan 15 variabel. Variabel Age memiliki rentang usia antara 18 hingga 59 tahun dengan rata-rata 38.68 tahun, mencerminkan bahwa anggota gym didominasi oleh kelompok usia dewasa produktif. Variabel Weight..kg. menunjukkan rentang yang cukup lebar dari 40 kg hingga 129.9 kg dengan rata-rata 73.85 kg dan standar deviasi 21.21, mengindikasikan keragaman kondisi fisik anggota yang cukup tinggi. Height..m. berkisar antara 1.50 m hingga 2.00 m dengan rata-rata 1.72 m.
Untuk variabel denyut jantung, Max_BPM rata-rata 179.88 dengan rentang 160–199, Avg_BPM rata-rata 143.77 dengan rentang 120–169, dan Resting_BPM rata-rata 62.22 dengan rentang 50–74. Ketiga variabel ini memiliki standar deviasi yang relatif kecil, menandakan distribusi yang cukup seragam antar anggota. Session_Duration..hours. memiliki rata-rata 1.26 jam dengan nilai minimum 0.50 jam dan maksimum 2.00 jam, artinya rata-rata anggota berlatih sekitar satu hingga satu setengah jam per sesi.
Variabel target Calories_Burned memiliki rata-rata 905.42 kalori dengan standar deviasi yang cukup besar yaitu 272.64, rentang nilainya antara 303 hingga 1783 kalori, menunjukkan variasi pembakaran kalori yang signifikan antar individu. Fat_Percentage rata-rata 24.98% dengan rentang 10–35%, sementara Water_Intake..liters. rata-rata 2.63 liter per sesi dengan rentang 1.5–3.7 liter. Workout_Frequency..days.week. rata-rata 3.32 hari per minggu dengan rentang 2–5 hari, dan Experience_Level memiliki rata-rata 1.81 dari skala 1–3, yang berarti sebagian besar anggota berada pada level pemula hingga menengah. BMI rata-rata 24.91 dengan standar deviasi 6.66 dan rentang 12.32–49.84, mencerminkan keragaman komposisi tubuh yang luas.
Untuk variabel kategorik, distribusi Gender relatif seimbang antara Female sebanyak 462 orang dan Male sebanyak 511 orang. Distribusi Workout_Type juga relatif merata dengan Cardio 255 orang, HIIT 221 orang, Strength 258 orang, dan Yoga 239 orang, menandakan tidak ada dominasi tipe latihan tertentu dalam dataset ini.
b. Visualisasi
Untuk distribusi variabel kategorik, barplot dari table(data$Workout_Type) menunjukkan bahwa keempat tipe workout yaitu Cardio, HIIT, Strength, dan Yoga memiliki frekuensi yang hampir seimbang berkisar antara 221 hingga 258 anggota, sehingga tidak ditemukan ketimpangan distribusi pada variabel ini. Untuk histogram, divisualisasikan menggunakan par(mfrow = c(3,3)) yang menampilkan 13 variabel numerik secara sekaligus. Berdasarkan hasil histogram tersebut, variabel Calories_Burned menunjukkan distribusi yang mendekati simetris dengan puncak di sekitar 800–1000 kalori. Fat_Percentage memiliki distribusi yang sedikit miring ke kiri dengan konsentrasi nilai di rentang 20–30%. BMI menunjukkan distribusi condong ke kanan karena adanya nilai ekstrem tinggi. Session_Duration..hours. terdistribusi relatif merata antara 0.5 hingga 2 jam. Variabel Experience_Level menunjukkan distribusi yang sangat tidak merata dengan mayoritas anggota berada di level 1 dan 2, sedangkan level 3 jauh lebih sedikit. Variabel BPM (Max_BPM, Avg_BPM, Resting_BPM) semuanya menunjukkan distribusi yang relatif seragam dan simetris. Selain menggunakan base R, histogram juga divisualisasikan menggunakan facet_wrap dari ggplot2 yang menampilkan seluruh variabel numerik dalam satu panel dengan skala bebas, mempermudah perbandingan pola distribusi antar variabel secara bersamaan.
Untuk deteksi outlier, boxplot divisualisasikan dengan dua cara yaitu menggunakan par(mfrow = c(3,3)) dengan warna berbeda untuk setiap variabel, serta menggunakan facet_wrap ggplot2. Berdasarkan kedua visualisasi tersebut terlihat bahwa sebagian besar variabel memiliki distribusi yang bersih tanpa outlier ekstrem, kecuali pada BMI, Calories_Burned, dan Weight..kg. yang masing-masing menunjukkan satu titik di luar batas whisker atas.
c. Analisis Korelasi
Berdasarkan matriks korelasi yang dihasilkan, terdapat beberapa hubungan antar variabel yang perlu diperhatikan. Korelasi paling kuat ditemukan antara Session_Duration..hours. dengan Calories_Burned sebesar r = 0.908, yang menunjukkan bahwa semakin lama durasi latihan maka semakin banyak kalori yang terbakar. Selain itu, Weight..kg. dengan BMI memiliki korelasi sangat kuat sebesar r = 0.853, yang wajar mengingat BMI memang diturunkan secara langsung dari berat badan dan tinggi badan. Hubungan kuat lainnya ditemukan antara Workout_Frequency..days.week. dengan Experience_Level sebesar r = 0.837, serta Session_Duration..hours. dengan Experience_Level sebesar r = 0.765, yang mengindikasikan bahwa anggota gym berpengalaman cenderung berlatih lebih lama dan lebih sering. Dari sisi korelasi negatif, Experience_Level dengan Fat_Percentage menunjukkan nilai r = -0.654, artinya semakin tinggi tingkat pengalaman seseorang maka persentase lemak tubuhnya cenderung semakin rendah. Hal serupa juga terlihat antara Calories_Burned dengan Fat_Percentage sebesar r = -0.598 dan Session_Duration..hours. dengan Fat_Percentage sebesar r = -0.582. Sebaliknya, variabel seperti Age, Max_BPM, Resting_BPM, dan Height..m. hampir tidak menunjukkan korelasi yang berarti dengan variabel lainnya, dengan nilai korelasi yang mendekati nol
d. Multikolinearitas
Berdasarkan hasil uji Variance Inflation Factor (VIF), ditemukan indikasi multikolinearitas yang serius pada beberapa variabel. Nilai GVIF tertinggi ditemukan pada Weight..kg. sebesar 73.21 dan BMI sebesar 66.87, jauh melampaui ambang batas VIF > 10 yang mengindikasikan multikolinearitas serius. Kondisi ini sangat dapat dipahami karena BMI dihitung langsung dari berat badan dibagi kuadrat tinggi badan, sehingga ketiga variabel tersebut membawa informasi yang sangat tumpang tindih. Height..m. turut terdampak dengan GVIF sebesar 22.50. Sementara itu, Experience_Level menunjukkan nilai GVIF 5.41 dan Workout_Frequency..days.week. sebesar 3.38 yang tergolong moderat, kemungkinan disebabkan oleh korelasi kuat di antara keduanya (r = 0.837). Variabel lain seperti Age, Max_BPM, Avg_BPM, dan Resting_BPM menunjukkan nilai VIF yang sangat aman di kisaran 1.01–1.02, artinya tidak ada masalah multikolinearitas pada variabel-variabel tersebut. Temuan ini menegaskan bahwa Weight..kg., BMI, dan Height..m. menjadi kandidat utama untuk dieliminasi atau disederhanakan pada tahap feature selection guna mengatasi masalah multikolinearitas.
e. Missing Value dan Outlier
Berdasarkan hasil pengecekan menggunakan colSums(is.na(data)) dan sapply(data, function(x) sum(is.na(x))), seluruh variabel dalam dataset menunjukkan nilai nol tanpa terkecuali, yang berarti tidak terdapat missing value pada dataset ini. Data sudah dalam kondisi lengkap dan bersih sehingga tidak diperlukan proses imputasi sebelum analisis dilanjutkan.
Terkait outlier, berdasarkan visualisasi boxplot pada seluruh 13 variabel numerik, ditemukan outlier pada tiga variabel yaitu BMI dengan nilai ekstrem tertinggi sekitar 49.84, Calories_Burned dengan nilai tertinggi sekitar 1783, serta Weight..kg. dengan nilai tertinggi sekitar 129.9 kg. Masing-masing variabel hanya memiliki satu titik outlier dari total 973 observasi. Variabel lainnya seperti Age, Max_BPM, Avg_BPM, Resting_BPM, Session_Duration, Fat_Percentage, Water_Intake, Workout_Frequency, Experience_Level, dan Height..m. tidak menunjukkan adanya outlier. Mengingat jumlah outlier yang sangat sedikit dan nilai-nilai tersebut masih dapat mencerminkan kondisi nyata individu dengan massa tubuh sangat tinggi atau intensitas latihan yang sangat tinggi, outlier tidak perlu dihapus dan analisis dapat dilanjutkan tanpa penanganan khusus.
3. Feature Engineering
## JENIS 1
## Membuat Variabel Baru
# 1. Calorie per Hour
# Menghitung laju pembakaran kalori per jam (Standarisasi durasi latihan)
data$Calorie_per_Hour <- data$Calories_Burned / data$Session_Duration..hours.
# 2. Fitness Score
# Skor gabungan: Frekuensi & pengalaman dibanding PERSENTASE lemak tubuh
data$Fitness_Score <- (data$Experience_Level * data$Workout_Frequency..days.week.) / data$Fat_Percentage
# 3. Heart Rate Efficiency
# Kalori yang terbakar per satu detak jantung rata-rata
data$HR_Efficiency <- data$Calories_Burned / data$Avg_BPM
## JENIS 2
## Transformasi Variabel
# 4. Melakukan transformasi logaritma pada variabel BMI dan Weight yang skew
data$Log_BMI <- log(data$BMI)
data$Log_Weight <- log(data$Weight..kg.)
# Cek hasil
feature_baru <- data %>%
select(Calories_Burned, Calorie_per_Hour, Fitness_Score, HR_Efficiency, Log_BMI, Log_Weight)
head(feature_baru)## # A tibble: 6 × 6
## Calories_Burned Calorie_per_Hour Fitness_Score HR_Efficiency Log_BMI
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1313 777. 0.952 8.36 3.41
## 2 883 679. 0.236 5.85 3.47
## 3 677 610. 0.240 5.55 3.21
## 4 532 902. 0.104 3.24 2.91
## 5 556 869. 0.103 3.52 2.67
## 6 1116 702. 0.968 7.15 3.02
## # ℹ 1 more variable: Log_Weight <dbl>
## Calories_Burned Calorie_per_Hour Fitness_Score HR_Efficiency
## Min. : 303.0 Min. :539.9 Min. :0.05714 Min. : 2.295
## 1st Qu.: 720.0 1st Qu.:655.6 1st Qu.:0.09967 1st Qu.: 5.147
## Median : 893.0 Median :715.3 Median :0.22814 Median : 6.256
## Mean : 905.4 Mean :720.4 Mean :0.33382 Mean : 6.296
## 3rd Qu.:1076.0 3rd Qu.:781.9 3rd Qu.:0.32389 3rd Qu.: 7.378
## Max. :1783.0 Max. :929.5 Max. :1.48515 Max. :10.945
## Log_BMI Log_Weight
## Min. :2.511 Min. :3.689
## 1st Qu.:3.001 1st Qu.:4.062
## Median :3.185 Median :4.248
## Mean :3.181 Mean :4.263
## 3rd Qu.:3.352 3rd Qu.:4.454
## Max. :3.909 Max. :4.867
## Calories_Burned Calorie_per_Hour Fitness_Score HR_Efficiency
## Calories_Burned 1.000 0.411 0.700 0.939
## Calorie_per_Hour 0.411 1.000 0.066 0.150
## Fitness_Score 0.700 0.066 1.000 0.745
## HR_Efficiency 0.939 0.150 0.745 1.000
## Log_BMI 0.083 0.142 0.073 0.085
## Log_Weight 0.123 0.254 0.117 0.129
## Log_BMI Log_Weight
## Calories_Burned 0.083 0.123
## Calorie_per_Hour 0.142 0.254
## Fitness_Score 0.073 0.117
## HR_Efficiency 0.085 0.129
## Log_BMI 1.000 0.853
## Log_Weight 0.853 1.000
# Visualisasi
feature_baru %>%
pivot_longer(-Calories_Burned) %>%
ggplot(aes(x = value, y = Calories_Burned)) +
geom_point(alpha = 0.4, color = "steelblue") +
geom_smooth(method = "lm", se = FALSE, color = "red") +
facet_wrap(~name, scales = "free") +
labs(title = "Hubungan Fitur Baru terhadap Calories Burned",
x = "Nilai Fitur", y = "Calories Burned") +
theme_minimal()## `geom_smooth()` using formula = 'y ~ x'
1. Calorie per Hour
Alasan Pembuatan: Berdasarkan hasil Exploratory Data Analysis (EDA) yang telah dilakukan sebelumnya, variabel durasi latihan (Session_Duration) menunjukkan korelasi positif yang sangat kuat terhadap total kalori yang terbakar (Calories_Burned) dengan koefisien korelasi mencapai r = 0,908. Namun, durasi latihan yang panjang secara teoritis tidak selalu mencerminkan intensitas atau efektivitas pembakaran energi yang optimal karena adanya potensi waktu istirahat di sela-sela sesi. Oleh karena itu, fitur Calorie_per_Hour dibentuk untuk menormalisasi variabel durasi tersebut. Fitur ini dihitung dengan membagi total kalori dengan durasi latihan dalam satuan jam. Pendekatan ini termasuk ke dalam jenis “Membuat Variabel Baru dari Hasil Operasi Variabel Eksisting”, yang bertujuan untuk mengukur laju pembakaran energi secara murni per satuan waktu tanpa terdistorsi oleh lamanya waktu anggota berada di dalam gym.
Interpretasi: Berdasarkan statistik deskriptif, fitur Calorie_per_Hour memiliki nilai rata-rata (mean) sebesar 720,4 kalori/jam dan median 715,3 kalori/jam, yang mengindikasikan bahwa distribusi data cenderung simetris. Hasil uji korelasi menunjukkan hubungan positif pada kategori sedang terhadap variabel target (Calories_Burned) dengan koefisien sebesar 0,411.
Hubungan tersebut digambarkan secara visual melalui grafik scatterplot pada panel Calorie_per_Hour. Titik-titik biru (steelblue) merepresentasikan data individual anggota gym yang membentuk pola tren naik ke arah kanan atas. Tren ini diperjelas oleh garis regresi berwarna merah dengan kemiringan positif, yang membuktikan bahwa semakin tinggi laju pembakaran kalori per jam, maka total kalori yang terbakar juga akan meningkat secara linear. Namun, sebaran titik biru yang tidak merapat sempurna pada garis merah mengonfirmasi nilai korelasi yang berada di tingkat sedang (r = 0,411), karena total kalori terbakar masih dipengaruhi secara kuat oleh faktor akumulasi durasi latihan.
2. Fitness Score
Alasan Pembuatan: Berdasarkan hasil EDA, terdapat tiga variabel yang menunjukkan korelasi kuat terhadap Calories_Burned, yaitu Experience_Level (r = 0.694), Workout_Frequency (r = 0.576), dan Fat_Percentage (r = -0.598). Karena ketiga variabel tersebut masing-masing mencerminkan aspek kebugaran yang berbeda (perilaku, kemahiran, dan komposisi tubuh), maka dilakukan penggabungan menjadi satu skor holistik yang merepresentasikan profil kebugaran anggota gym secara menyeluruh. Variabel Fat_Percentage ditempatkan sebagai pembagi karena memiliki hubungan negatif terhadap Calories_Burned, di mana kadar lemak yang lebih rendah merepresentasikan kondisi fisik yang lebih prima dan kapasitas pembakaran kalori yang lebih optimal. Pendekatan ini termasuk ke dalam jenis “Membuat Variabel Baru dari Hasil Operasi Variabel Eksisting”, yang bertujuan untuk merangkum profil kebugaran anggota gym secara komprehensif dalam satu indikator tunggal.
interpretasi: Berdasarkan statistik deskriptif, fitur Fitness_Score memiliki nilai rata-rata (mean) sebesar 0,334 dan median sebesar 0,228. Nilai mean yang lebih besar dari median ini mengindikasikan bahwa distribusi data menceng ke kanan (right-skewed), yang berarti mayoritas anggota gym memiliki skor kebugaran standar dan hanya sebagian kecil yang memiliki kondisi fisik sangat terlatih. Hasil analisis menunjukkan nilai rata-rata sebesar 0,334 dengan nilai korelasi terhadap target sebesar 0,700 (kategori kuat).
Hubungan tersebut digambarkan secara visual melalui grafik scatterplot pada panel Fitness_Score. Titik-titik sebaran data berwarna biru (steelblue) merepresentasikan data individual dari setiap anggota gym, sedangkan garis linear berwarna merah merupakan garis regresi (fitted regression line). Secara visual pada diagram pencar, terlihat tren positif yang jelas dari sebaran titik-titik biru yang bergerak naik ke arah kanan atas mengikuti arah kemiringan garis merah. Artinya, semakin tinggi pengalaman dan frekuensi latihan, serta semakin rendah persentase lemak tubuh seseorang, maka skor kebugarannya akan semakin tinggi. Hal ini membuktikan bahwa skor kebugaran holistik ini sangat baik dalam merepresentasikan kapasitas pembakaran kalori anggota gym saat beraktivitas. Sebaran titik yang cukup merapat pada garis regresi tersebut mengonfirmasi kekuatan hubungan linear yang berada di tingkat kuat (r = 0,700).
3. Heart Rate Efficiency
Alasan Pembuatan: Berdasarkan hasil Exploratory Data Analysis (EDA) yang telah dilakukan sebelumnya, variabel rata-rata detak jantung (Avg_BPM) menunjukkan korelasi positif yang tergolong sedang terhadap total kalori yang terbakar (Calories_Burned) dengan koefisien korelasi sebesar r = 0.340. Namun, tingginya detak jantung rata-rata saja tidak cukup untuk menggambarkan seberapa efektif tubuh dalam membakar kalori secara riil pada setiap denyutnya, karena detak jantung yang tinggi bisa saja terjadi akibat stres atau kondisi medis tertentu tanpa disertai pembakaran kalori yang optimal. Oleh karena itu, fitur HR_Efficiency dibentuk dengan membagi total kalori yang terbakar dengan rata-rata detak jantung selama sesi latihan. Pendekatan ini termasuk ke dalam jenis “Membuat Variabel Baru dari Hasil Operasi Variabel Eksisting”, yang bertujuan untuk mengukur tingkat efisiensi kardiovaskular individu secara lebih spesifik, yaitu seberapa banyak kalori yang mampu dibakar untuk setiap satu denyut jantung rata-rata selama latihan berlangsung
Interpretasi: Hasil ringkasan data menunjukkan nilai rata-rata sebesar 6.296 dan median sebesar 6.256, yang berarti setiap satu detak jantung rata-rata berkontribusi terhadap pembakaran sekitar 6.3 kalori. Analisis korelasi menunjukkan nilai yang sangat tinggi terhadap target, yaitu sebesar 0.939 (kategori sangat kuat).
Hubungan yang sangat kuat tersebut digambarkan secara visual melalui grafik scatterplot pada panel HR_Efficiency. Titik-titik sebaran data berwarna biru (steelblue) merepresentasikan karakteristik data individual dari setiap anggota gym, sedangkan garis linear berwarna merah merupakan garis regresi (fitted regression line). Secara visual pada diagram pencar, sebaran data membentuk pola linearitas yang sangat rapat dan sempurna berupa garis lurus positif yang bergerak naik ke arah kanan atas, berhimpitan langsung dengan arah kemiringan garis merah regresi.
Namun, perlu dicatat secara khusus dalam konteks statistika bahwa hubungan yang hampir sempurna ini wajar terjadi secara matematis karena variabel target (Calories_Burned) bertindak langsung sebagai pembilang dalam formulasi fitur tersebut. Meskipun terdapat faktor dependensi matematis, fitur ini secara biologis tetap membuktikan dengan konsisten bahwa semakin efektif jantung bekerja dalam memompa dan mengalirkan oksigen saat latihan, semakin optimal pula kapasitas kardiovaskular seseorang dalam membakar energi.
4. Log Transformation pada BMI dan Weight
Alasan Pembuatan: Berdasarkan hasil EDA, variabel BMI dan Weight memiliki distribusi tidak simetris/right-skewed dengan nilai skewness masing-masing sebesar 0,76 dan 0,77. Selain itu, uji multikolinearitas menunjukkan nilai VIF yang sangat tinggi, yaitu BMI sebesar 64,18 dan Weight sebesar 71,65 (melampaui batas toleransi VIF > 10). Oleh karena itu, dilakukan transformasi logaritma (Log Transformation) untuk mereduksi efek pencilan (outliers), memperbaiki sebaran data agar lebih simetris, serta menstabilkan varians variabel agar lebih layak digunakan dalam analisis multivariat seperti PCA. Pendekatan ini termasuk ke dalam jenis “Transformasi Variabel”.
Interpretasi: Setelah transformasi, Log_BMI menghasilkan nilai mean 3,181 dan median 3,185, sementara Log_Weight memiliki mean 4,263 dan median 4,248. Kedekatan nilai mean dan median ini membuktikan bahwa transformasi logaritma sukses mengubah distribusi data yang tadinya menceng menjadi lebih simetris dan mendekati normal.
Hasil uji korelasi menunjukkan hubungan yang lemah terhadap target Calories_Burned, yaitu sebesar 0,083 untuk Log_BMI dan 0,123 untuk Log_Weight. Hubungan lemah ini terkonfirmasi pada grafik scatterplot, di mana titik-titik biru (steelblue) data individual menyebar luas tanpa pola linear yang jelas, dipertegas oleh garis regresi berwarna merah yang cenderung landai/datar. Namun, esensi keberhasilan transformasi ini bukan pada kekuatan korelasi, melainkan pada rentang nilai data yang berhasil terkompresi secara signifikan (Log_BMI: 2,5–3,9 dan Log_Weight: 3,7–4,9) dibandingkan rentang aslinya (BMI: 12,32–49,84 dan Weight: 40–129,9). Hal ini membuktikan bahwa metode logaritma efektif mereduksi skewness dan menstabilkan sebaran data.
4. Feature Selection
# FEATURE SELECTION
#FILTER METHOD (KORELASI)
# Korelasi terhadap target
cor_target <- cor(
numeric_data,
data$Calories_Burned
)
cor_target <- sort(cor_target[,1], decreasing = TRUE)
# Menampilkan korelasi
round(cor_target, 3)## Calories_Burned Session_Duration..hours.
## 1.000 0.908
## Experience_Level Workout_Frequency..days.week.
## 0.694 0.576
## Water_Intake..liters. Avg_BPM
## 0.357 0.340
## Weight..kg. Height..m.
## 0.095 0.086
## BMI Resting_BPM
## 0.060 0.017
## Max_BPM Age
## 0.002 -0.155
## Fat_Percentage
## -0.598
# Visualisasi korelasi terhadap target
cor_df <- data.frame(
Variabel = names(cor_target),
Korelasi = as.numeric(cor_target)
)
ggplot(cor_df,
aes(x = reorder(Variabel, Korelasi),
y = Korelasi,
fill = Korelasi)) +
geom_col() +
coord_flip() +
labs(
title = "Korelasi Variabel terhadap Calories Burned",
x = "Variabel",
y = "Nilai Korelasi"
) +
theme_minimal()#WRAPPER METHOD (STEPWISE REGRESSION)
# Model lengkap
full_model <- lm(
Calories_Burned ~ Age + Gender +
Weight..kg. + Height..m. +
Max_BPM + Avg_BPM + Resting_BPM +
Session_Duration..hours. +
Workout_Type +
Fat_Percentage +
Water_Intake..liters. +
Workout_Frequency..days.week. +
Experience_Level +
BMI +
Calorie_per_Hour +
Fitness_Score +
HR_Efficiency,
data = data
)
# Model null
null_model <- lm(
Calories_Burned ~ 1,
data = data
)
# Stepwise Bidirectional
step_model <- step(
null_model,
scope = list(
lower = null_model,
upper = full_model
),
direction = "both"
)## Start: AIC=10914.47
## Calories_Burned ~ 1
##
## Df Sum of Sq RSS AIC
## + HR_Efficiency 1 63735309 8516753 8836.1
## + Session_Duration..hours. 1 59587644 12664418 9222.1
## + Fitness_Score 1 35360320 36891741 10262.5
## + Experience_Level 1 34812177 37439885 10276.8
## + Fat_Percentage 1 25804389 46447672 10486.6
## + Workout_Frequency..days.week. 1 23983997 48268064 10524.0
## + Calorie_per_Hour 1 12219901 60032160 10736.2
## + Water_Intake..liters. 1 9204877 63047184 10783.9
## + Avg_BPM 1 8335577 63916485 10797.2
## + Age 1 1728668 70523393 10892.9
## + Gender 1 1639714 70612347 10894.1
## + Weight..kg. 1 658177 71593884 10907.6
## + Height..m. 1 538710 71713351 10909.2
## + BMI 1 258038 71994024 10913.0
## <none> 72252061 10914.5
## + Resting_BPM 1 19713 72232348 10916.2
## + Max_BPM 1 316 72251746 10916.5
## + Workout_Type 3 211670 72040391 10917.6
##
## Step: AIC=8836.08
## Calories_Burned ~ HR_Efficiency
##
## Df Sum of Sq RSS AIC
## + Avg_BPM 1 7906366 610387 6273.5
## + Calorie_per_Hour 1 5404107 3112645 7858.7
## + Resting_BPM 1 52123 8464630 8832.1
## <none> 8516753 8836.1
## + Max_BPM 1 17443 8499309 8836.1
## + Workout_Frequency..days.week. 1 7249 8509503 8837.2
## + Age 1 6961 8509792 8837.3
## + BMI 1 3792 8512960 8837.6
## + Experience_Level 1 2542 8514210 8837.8
## + Gender 1 1929 8514823 8837.9
## + Session_Duration..hours. 1 1327 8515426 8837.9
## + Weight..kg. 1 1302 8515451 8837.9
## + Fat_Percentage 1 820 8515932 8838.0
## + Height..m. 1 246 8516507 8838.1
## + Water_Intake..liters. 1 128 8516625 8838.1
## + Fitness_Score 1 14 8516739 8838.1
## + Workout_Type 3 3671 8513082 8841.7
## - HR_Efficiency 1 63735309 72252061 10914.5
##
## Step: AIC=6273.54
## Calories_Burned ~ HR_Efficiency + Avg_BPM
##
## Df Sum of Sq RSS AIC
## + Resting_BPM 1 3650 606737 6269.7
## + Calorie_per_Hour 1 1686 608701 6272.9
## + Session_Duration..hours. 1 1461 608926 6273.2
## <none> 610387 6273.5
## + Height..m. 1 815 609572 6274.2
## + Workout_Frequency..days.week. 1 661 609726 6274.5
## + Age 1 578 609809 6274.6
## + Fat_Percentage 1 570 609817 6274.6
## + Gender 1 426 609961 6274.9
## + Max_BPM 1 392 609995 6274.9
## + Fitness_Score 1 356 610031 6275.0
## + Experience_Level 1 295 610092 6275.1
## + Weight..kg. 1 126 610261 6275.3
## + Water_Intake..liters. 1 72 610315 6275.4
## + BMI 1 5 610382 6275.5
## + Workout_Type 3 1953 608434 6276.4
## - Avg_BPM 1 7906366 8516753 8836.1
## - HR_Efficiency 1 63306098 63916485 10797.2
##
## Step: AIC=6269.71
## Calories_Burned ~ HR_Efficiency + Avg_BPM + Resting_BPM
##
## Df Sum of Sq RSS AIC
## + Calorie_per_Hour 1 1589 605147 6269.2
## + Session_Duration..hours. 1 1349 605388 6269.5
## <none> 606737 6269.7
## + Height..m. 1 826 605911 6270.4
## + Workout_Frequency..days.week. 1 660 606076 6270.6
## + Age 1 578 606158 6270.8
## + Max_BPM 1 492 606244 6270.9
## + Fat_Percentage 1 485 606252 6270.9
## + Gender 1 388 606349 6271.1
## + Experience_Level 1 328 606409 6271.2
## + Fitness_Score 1 268 606468 6271.3
## + Weight..kg. 1 173 606564 6271.4
## + Water_Intake..liters. 1 59 606677 6271.6
## + BMI 1 18 606719 6271.7
## + Workout_Type 3 1934 604803 6272.6
## - Resting_BPM 1 3650 610387 6273.5
## - Avg_BPM 1 7857893 8464630 8832.1
## - HR_Efficiency 1 63308735 63915472 10799.2
##
## Step: AIC=6269.16
## Calories_Burned ~ HR_Efficiency + Avg_BPM + Resting_BPM + Calorie_per_Hour
##
## Df Sum of Sq RSS AIC
## <none> 605147 6269.2
## - Calorie_per_Hour 1 1589 606737 6269.7
## + Max_BPM 1 560 604587 6270.3
## + Fitness_Score 1 438 604709 6270.5
## + Workout_Frequency..days.week. 1 305 604842 6270.7
## + Fat_Percentage 1 237 604911 6270.8
## + Height..m. 1 203 604944 6270.8
## + Gender 1 68 605080 6271.0
## + Experience_Level 1 65 605082 6271.1
## + Water_Intake..liters. 1 54 605093 6271.1
## + BMI 1 29 605118 6271.1
## + Session_Duration..hours. 1 28 605119 6271.1
## + Weight..kg. 1 17 605130 6271.1
## + Age 1 0 605147 6271.2
## + Workout_Type 3 1996 603151 6271.9
## - Resting_BPM 1 3554 608701 6272.9
## - Avg_BPM 1 2499689 3104837 7858.2
## - HR_Efficiency 1 59414410 60019557 10740.0
##
## Call:
## lm(formula = Calories_Burned ~ HR_Efficiency + Avg_BPM + Resting_BPM +
## Calorie_per_Hour, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -98.274 -10.816 0.142 10.996 105.167
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -915.67126 10.66993 -85.818 <2e-16 ***
## HR_Efficiency 143.20594 0.46452 308.285 <2e-16 ***
## Avg_BPM 6.15246 0.09730 63.234 <2e-16 ***
## Resting_BPM 0.26151 0.10968 2.384 0.0173 *
## Calorie_per_Hour 0.02589 0.01624 1.594 0.1112
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25 on 968 degrees of freedom
## Multiple R-squared: 0.9916, Adjusted R-squared: 0.9916
## F-statistic: 2.865e+04 on 4 and 968 DF, p-value: < 2.2e-16
## Calories_Burned ~ HR_Efficiency + Avg_BPM + Resting_BPM + Calorie_per_Hour
## [1] 9032.411
# EMBEDDED METHOD (LASSO)
# Membuat matrix X dan y
x <- model.matrix(
Calories_Burned ~ Age + Gender +
Weight..kg. + Height..m. +
Max_BPM + Avg_BPM + Resting_BPM +
Session_Duration..hours. +
Workout_Type +
Fat_Percentage +
Water_Intake..liters. +
Workout_Frequency..days.week. +
Experience_Level +
BMI +
Calorie_per_Hour +
Fitness_Score +
HR_Efficiency,
data = data
)[,-1]
y <- data$Calories_Burned
# Cross Validation mencari lambda terbaik
set.seed(123)
cv_lasso <- cv.glmnet(
x,
y,
alpha = 1
)
# Plot Cross Validation
plot(cv_lasso)## [1] 0.8779851
# Model LASSO final
lasso_model <- glmnet(
x,
y,
alpha = 1,
lambda = cv_lasso$lambda.min
)
# Koefisien model
coef(lasso_model)## 20 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) -896.05860630
## Age .
## GenderMale .
## Weight..kg. .
## Height..m. .
## Max_BPM .
## Avg_BPM 5.77306803
## Resting_BPM 0.14683008
## Session_Duration..hours. 36.36519303
## Workout_TypeHIIT 0.23580539
## Workout_TypeStrength -0.68946984
## Workout_TypeYoga .
## Fat_Percentage .
## Water_Intake..liters. .
## Workout_Frequency..days.week. .
## Experience_Level .
## BMI .
## Calorie_per_Hour 0.09012021
## Fitness_Score 2.22752232
## HR_Efficiency 135.18365211
# Variabel yang terpilih
coef_lasso <- coef(lasso_model)
selected_lasso <- rownames(coef_lasso)[coef_lasso[,1] != 0]
selected_lasso## [1] "(Intercept)" "Avg_BPM"
## [3] "Resting_BPM" "Session_Duration..hours."
## [5] "Workout_TypeHIIT" "Workout_TypeStrength"
## [7] "Calorie_per_Hour" "Fitness_Score"
## [9] "HR_Efficiency"
# EMBEDDED METHOD (RANDOM FOREST)
set.seed(123)
rf_model <- randomForest(
Calories_Burned ~ Age + Gender +
Weight..kg. + Height..m. +
Max_BPM + Avg_BPM + Resting_BPM +
Session_Duration..hours. +
Workout_Type +
Fat_Percentage +
Water_Intake..liters. +
Workout_Frequency..days.week. +
Experience_Level +
BMI +
Calorie_per_Hour +
Fitness_Score +
HR_Efficiency,
data = data,
importance = TRUE
)
# Ringkasan model
rf_model##
## Call:
## randomForest(formula = Calories_Burned ~ Age + Gender + Weight..kg. + Height..m. + Max_BPM + Avg_BPM + Resting_BPM + Session_Duration..hours. + Workout_Type + Fat_Percentage + Water_Intake..liters. + Workout_Frequency..days.week. + Experience_Level + BMI + Calorie_per_Hour + Fitness_Score + HR_Efficiency, data = data, importance = TRUE)
## Type of random forest: regression
## Number of trees: 500
## No. of variables tried at each split: 5
##
## Mean of squared residuals: 841.7749
## % Var explained: 98.87
## %IncMSE IncNodePurity
## Age 9.9639351 425898.6
## Gender 7.7325054 104921.2
## Weight..kg. 6.8950943 366392.6
## Height..m. 5.8235582 224513.3
## Max_BPM -1.8108754 181073.6
## Avg_BPM 48.5029588 3458269.0
## Resting_BPM 1.5419165 212618.0
## Session_Duration..hours. 25.2367466 17062064.1
## Workout_Type 0.3069813 156307.5
## Fat_Percentage 9.7427379 3879908.7
## Water_Intake..liters. 5.9936289 814176.3
## Workout_Frequency..days.week. 5.7426078 1025326.8
## Experience_Level 12.6894893 5992654.6
## BMI 6.3414432 265681.0
## Calorie_per_Hour 50.3086290 5026388.6
## Fitness_Score 13.6282936 6835302.8
## HR_Efficiency 32.8607322 25863396.7
Ringkasan Hasil Fitur Selection
Pada penelitian ini digunakan tiga metode feature selection yaitu Filter Method (Korelasi), Wrapper Method (Stepwise Regression), dan Embedded Method (LASSO Regression & Random Forest). Tujuan feature selection adalah memilih variabel yang paling relevan terhadap variabel target Calories_Burned serta mengurangi variabel yang redundan akibat multikolinearitas.
Interpretasi Feature Selection
a. Filter Method (Korelasi)
Metode filter dilakukan menggunakan analisis korelasi Pearson terhadap variabel target Calories_Burned. Variabel dipilih berdasarkan kekuatan hubungan linear terhadap target.
Hasil korelasi menunjukkan bahwa variabel dengan hubungan paling kuat adalah:
HR_Efficiency = 0.939
Session_Duration..hours. = 0.908
Fitness_Score = 0.700
Experience_Level = 0.694
Workout_Frequency..days.week. = 0.576
Avg_BPM = 0.340
Variabel-variabel tersebut dipilih karena memiliki hubungan yang cukup kuat hingga sangat kuat terhadap pembakaran kalori. Semakin tinggi nilai variabel tersebut, maka kecenderungan Calories_Burned juga semakin tinggi.
Sementara itu, beberapa variabel dieliminasi atau dianggap kurang penting karena memiliki korelasi sangat rendah atau mendekati nol, yaitu:
Age = -0.155
Max_BPM = 0.002
Resting_BPM = 0.017
Height..m. = 0.086
BMI = 0.060
Variabel tersebut dieliminasi karena kontribusinya dalam menjelaskan variasi Calories_Burned relatif kecil sehingga kurang informatif untuk model.
Selain itu, variabel Weight..kg., BMI, dan Height..m. juga menunjukkan multikolinearitas tinggi berdasarkan hasil VIF, sehingga tidak seluruhnya dipertahankan agar model lebih stabil dan tidak redundan.
b. Wrapper Method (Stepwise Regression)
Metode stepwise regression digunakan untuk memilih kombinasi variabel
terbaik secara otomatis berdasarkan nilai AIC (Akaike Information
Criterion). Pendekatan yang digunakan adalah bidirectional stepwise,
yaitu kombinasi forward selection dan backward elimination. Metode ini
memilih kombinasi variabel terbaik secara otomatis dengan
mempertimbangkan performa model.
Hasil stepwise regression menunjukkan bahwa variabel yang dipilih dalam
model akhir adalah:
HR_Efficiency
Avg_BPM
Resting_BPM
Calorie_per_Hour
Wrapper Method (Stepwise Bidirectional) memilih 4 variabel final dengan AIC terkecil sebesar 9032.41.
Variabel tersebut dipertahankan karena memberikan kontribusi paling signifikan terhadap model regresi dan mampu menghasilkan nilai Adjusted R-Squared sebesar 0.9916. Hal ini menunjukkan bahwa sekitar 99.16% variasi Calories_Burned dapat dijelaskan oleh variabel terpilih.
Sementara itu, variabel yang dieliminasi antara lain:
Age
Gender
Weight..kg.
Height..m.
BMI
Workout_Type
Fat_Percentage
Water_Intake..liters.
Workout_Frequency..days.week.
Experience_Level
Fitness_Score
Session_Duration..hours.
Dieliminasi karena tidak memberikan penurunan AIC yang berarti. Variabel-variabel tersebut pula dieliminasi karena kontribusinya dianggap kurang optimal setelah dikombinasikan dengan variabel lain, atau karena membawa informasi yang sudah diwakili oleh variabel yang lebih kuat seperti HR_Efficiency dan Calorie_per_Hour.
c. Embedded Method (LASSO Regression)
LASSO Regression melakukan seleksi variabel secara otomatis dengan memberikan penalti terhadap koefisien regresi. Variabel yang kurang penting akan memiliki koefisien mendekati nol bahkan menjadi nol sepenuhnya sehingga otomatis dieliminasi dari model.
Metode LASSO dengan lambda optimal sebesar 0.8779 berhasil melakukan seleksi variabel secara otomatis dengan menghilangkan koefisien yang tidak penting.
Variabel yang dipertahankan oleh LASSO adalah:
Avg_BPMResting_BPMSession_Duration..hours.Workout_TypeHIITWorkout_TypeStrengthCalorie_per_HourFitness_ScoreHR_Efficiency
Variabel tersebut dipilih karena masih memiliki kontribusi terhadap
model prediksi Calories_Burned.
Sementara itu, variabel:
AgeGenderWeight..kg.Height..m.Max_BPMFat_PercentageWater_Intake..liters.Workout_Frequency..days.week.Experience_LevelBMI
memiliki koefisien nol sehingga otomatis dieliminasi oleh model LASSO.
d. Embedded Method (Random Forest Feature Importance)
Metode Random Forest menunjukkan bahwa variabel dengan nilai
%IncMSE tertinggi adalah:
Calorie_per_Hour(50.31%)Avg_BPM(48.50%)HR_Efficiency(32.86%)Session_Duration..hours.(25.24%)Fitness_Score(13.63%)Experience_Level(12.69%)
Variabel tersebut dianggap paling penting karena memberikan kontribusi terbesar terhadap peningkatan performa prediksi model.
Sebaliknya, variabel seperti:
Max_BPM(-1.81%)Workout_Type(0.31%)Resting_BPM(1.54%)
menunjukkan nilai importance yang sangat rendah sehingga kontribusinya terhadap model relatif kecil.
Kesimpulan Akhir Feature Selection
Berdasarkan hasil keempat metode feature selection, variabel yang paling konsisten terpilih dan layak digunakan pada tahap reduksi dimensi maupun PCA adalah:
Session_Duration..hours.HR_EfficiencyCalorie_per_HourFitness_ScoreAvg_BPMExperience_Level
Variabel-variabel tersebut dipilih karena memiliki hubungan kuat terhadap target, kontribusi tinggi terhadap performa model, dan konsisten muncul pada beberapa metode feature selection.
Sementara itu, variabel Weight..kg., BMI,
dan Height..m. dieliminasi karena mengalami
multikolinearitas serius (VIF > 20). Variabel Age,
Max_BPM, Resting_BPM, dan
Workout_Type juga dieliminasi karena kontribusinya relatif
kecil dan tidak konsisten terpilih di berbagai metode.
Khusus variabel HR_Efficiency, meskipun memiliki
hubungan matematis langsung dengan target karena dibentuk dari
Calories_Burned, variabel ini tetap dipertahankan karena
secara konsisten menunjukkan importance tinggi di seluruh metode serta
memiliki interpretasi biologis yang relevan dalam menggambarkan
efisiensi kardiovaskular selama latihan.
5. Feature Extraction
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/en/product/practical-guide-to-principal-component-methods-in-r/
# MEMILIH VARIABEL NUMERIK
data_pca <- data[,c(
"Age",
"Weight..kg.",
"Height..m.",
"Max_BPM",
"Avg_BPM",
"Resting_BPM",
"Session_Duration..hours.",
"Calories_Burned",
"Fat_Percentage",
"Water_Intake..liters.",
"Workout_Frequency..days.week.",
"Experience_Level",
"BMI"
)]# STANDARISASI DATA
data_scaled <- scale(data_pca)
# PCA
hasil_pca <- prcomp(
data_scaled,
center = TRUE,
scale. = TRUE
)
# Ringkasan PCA
summary(hasil_pca)## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.001 1.447 1.13655 1.0678 1.01971 1.01572 0.96087
## Proportion of Variance 0.308 0.161 0.09937 0.0877 0.07999 0.07936 0.07102
## Cumulative Proportion 0.308 0.469 0.56836 0.6561 0.73604 0.81540 0.88642
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.74035 0.68497 0.55361 0.36283 0.12206 0.07856
## Proportion of Variance 0.04216 0.03609 0.02358 0.01013 0.00115 0.00047
## Cumulative Proportion 0.92859 0.96468 0.98825 0.99838 0.99953 1.00000
Pembahasan
Berdasarkan hasil Principal Component Analysis (PCA), diperoleh 13 komponen utama yang merupakan hasil transformasi dari 13 variabel numerik pada dataset. Setiap komponen utama memiliki kemampuan yang berbeda dalam menjelaskan keragaman data yang direpresentasikan melalui nilai Proportion of Variance.
Komponen utama pertama (PC1) mampu menjelaskan sebesar 30,8% variasi total data. Hal ini menunjukkan bahwa PC1 merupakan komponen yang paling dominan dalam merepresentasikan informasi yang terkandung dalam data. Komponen utama kedua (PC2) memberikan kontribusi sebesar 16,1% terhadap variasi data. Dengan demikian, dua komponen utama pertama secara kumulatif mampu menjelaskan 46,9% variasi total data.
Selanjutnya, komponen utama ketiga (PC3) memberikan kontribusi sebesar 9,94%, sehingga tiga komponen utama pertama mampu menjelaskan 56,84% variasi data. Jika ditambahkan hingga komponen keempat (PC4), proporsi variasi kumulatif meningkat menjadi 65,61%. Lima komponen utama pertama mampu menjelaskan 73,60% variasi data, sedangkan enam komponen utama pertama mampu menjelaskan 81,54% variasi data.
Nilai proporsi variansi yang semakin menurun pada komponen-komponen berikutnya menunjukkan bahwa sebagian besar informasi data telah terkonsentrasi pada beberapa komponen utama pertama. Oleh karena itu, penggunaan enam komponen utama dianggap cukup representatif karena mampu mempertahankan lebih dari 80% informasi yang terdapat pada data asli.
# EIGENVALUE DAN PROPORSI VARIANSI
eigenvalue <- hasil_pca$sdev^2
proporsi_var <- eigenvalue/sum(eigenvalue)
kumulatif_var <- cumsum(proporsi_var)
tabel_variansi <- data.frame(
Komponen = paste0("PC",1:length(eigenvalue)),
Eigenvalue = round(eigenvalue,3),
Proporsi = round(proporsi_var*100,2),
Kumulatif = round(kumulatif_var*100,2)
)
tabel_variansi## Komponen Eigenvalue Proporsi Kumulatif
## 1 PC1 4.004 30.80 30.80
## 2 PC2 2.093 16.10 46.90
## 3 PC3 1.292 9.94 56.84
## 4 PC4 1.140 8.77 65.61
## 5 PC5 1.040 8.00 73.60
## 6 PC6 1.032 7.94 81.54
## 7 PC7 0.923 7.10 88.64
## 8 PC8 0.548 4.22 92.86
## 9 PC9 0.469 3.61 96.47
## 10 PC10 0.306 2.36 98.83
## 11 PC11 0.132 1.01 99.84
## 12 PC12 0.015 0.11 99.95
## 13 PC13 0.006 0.05 100.00
Pembahasan
Hasil PCA menghasilkan 13 komponen utama yang merupakan transformasi dari 13 variabel numerik pada dataset. Nilai eigenvalue menunjukkan besarnya variasi yang mampu dijelaskan oleh masing-masing komponen utama. Semakin besar nilai eigenvalue, semakin besar pula kontribusi komponen tersebut dalam merepresentasikan informasi data.
Berdasarkan Tabel Eigenvalue dan Proporsi Variansi, komponen utama pertama (PC1) memiliki eigenvalue sebesar 4,004 dengan proporsi variansi sebesar 30,80%. Hal ini menunjukkan bahwa PC1 merupakan komponen yang paling dominan karena mampu menjelaskan hampir sepertiga dari total variasi data. Komponen utama kedua (PC2) memiliki eigenvalue sebesar 2,093 dan mampu menjelaskan 16,10% variasi data. Secara kumulatif, PC1 dan PC2 mampu menjelaskan 46,90% variasi total data.
Komponen utama ketiga (PC3) memiliki eigenvalue sebesar 1,292 dengan proporsi variansi sebesar 9,94%, sehingga tiga komponen utama pertama secara bersama-sama mampu menjelaskan 56,84% variasi data. Sementara itu, komponen utama keempat (PC4), kelima (PC5), dan keenam (PC6) masing-masing memiliki proporsi variansi sebesar 8,77%, 8,00%, dan 7,94%.
Jika dilihat dari proporsi kumulatif, enam komponen utama pertama mampu menjelaskan 81,54% variasi total data. Nilai tersebut menunjukkan bahwa sebagian besar informasi yang terdapat dalam data asli telah dapat direpresentasikan hanya dengan enam komponen utama. Oleh karena itu, reduksi dimensi dari 13 variabel menjadi 6 komponen dapat dilakukan tanpa kehilangan informasi yang signifikan.
Selain itu, terlihat bahwa nilai eigenvalue dan proporsi variansi cenderung menurun pada komponen-komponen berikutnya. Komponen utama ketujuh (PC7) hingga komponen ketiga belas (PC13) hanya memberikan tambahan informasi yang relatif kecil terhadap variasi total data. Bahkan komponen terakhir (PC13) hanya mampu menjelaskan 0,05% variasi data.
Berdasarkan kriteria Kaiser, komponen yang memiliki eigenvalue lebih besar dari 1 layak untuk dipertahankan. Pada hasil PCA ini terdapat enam komponen utama yang memiliki eigenvalue lebih besar dari 1, yaitu PC1 hingga PC6. Oleh karena itu, keenam komponen tersebut dapat dipilih sebagai representasi data yang lebih ringkas tanpa kehilangan sebagian besar informasi yang terkandung dalam dataset.
Pembahasan
Scree plot digunakan untuk membantu menentukan jumlah komponen utama yang layak dipertahankan dalam analisis PCA. Grafik ini menampilkan persentase variasi yang mampu dijelaskan oleh setiap komponen utama.
Berdasarkan scree plot, komponen utama pertama (PC1) memiliki kontribusi terbesar terhadap variasi data, yaitu sebesar 30,8%. Komponen utama kedua (PC2) menjelaskan 16,1% variasi data, sedangkan komponen utama ketiga (PC3) menjelaskan 9,9% variasi data. Setelah komponen ketiga, terlihat bahwa persentase variasi yang dijelaskan oleh setiap komponen cenderung menurun dan relatif lebih kecil.
Pada grafik terlihat adanya perubahan kemiringan yang cukup tajam dari PC1 ke PC3, kemudian kurva mulai melandai setelahnya. Kondisi ini menunjukkan bahwa sebagian besar informasi penting dalam data telah berhasil ditangkap oleh beberapa komponen utama pertama. Sementara itu, komponen-komponen berikutnya hanya memberikan tambahan informasi yang relatif kecil.
Selain itu, berdasarkan kriteria Kaiser, komponen yang memiliki nilai eigenvalue lebih besar dari 1 dapat dipertahankan. Dari hasil sebelumnya diketahui bahwa terdapat enam komponen utama (PC1 sampai PC6) yang memiliki eigenvalue lebih besar dari 1. Oleh karena itu, enam komponen utama tersebut dianggap cukup representatif untuk menggambarkan karakteristik data.
Secara keseluruhan, scree plot menunjukkan bahwa penggunaan enam komponen utama sudah memadai karena mampu mempertahankan sekitar 81,54% variasi total data. Dengan demikian, dimensi data dapat direduksi dari 13 variabel menjadi 6 komponen utama tanpa kehilangan sebagian besar informasi yang terkandung dalam data.
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Age -0.025 0.007 -0.072 -0.069 -0.727 0.604 -0.204
## Weight..kg. 0.110 -0.646 0.131 0.007 -0.021 -0.049 0.062
## Height..m. 0.086 -0.271 -0.698 0.128 0.084 -0.098 -0.089
## Max_BPM 0.005 -0.075 0.119 -0.141 0.572 0.481 -0.629
## Avg_BPM 0.051 0.022 0.166 0.831 -0.159 -0.053 -0.315
## Resting_BPM 0.001 0.029 -0.033 0.361 0.303 0.598 0.643
## Session_Duration..hours. 0.433 0.179 0.099 -0.031 0.020 -0.019 -0.036
## Calories_Burned 0.437 0.092 0.102 0.276 0.078 -0.119 -0.103
## Fat_Percentage -0.410 0.091 0.167 0.059 0.017 -0.068 -0.030
## Water_Intake..liters. 0.279 -0.324 -0.338 0.003 -0.040 0.097 -0.033
## Workout_Frequency..days.week. 0.393 0.178 0.087 -0.179 -0.070 0.040 0.092
## Experience_Level 0.439 0.168 0.085 -0.147 -0.021 0.041 0.062
## BMI 0.074 -0.537 0.521 -0.062 -0.079 0.007 0.113
## PC8 PC9 PC10 PC11 PC12 PC13
## Age -0.123 0.168 -0.022 0.002 0.105 0.025
## Weight..kg. -0.287 0.043 -0.026 -0.020 -0.153 0.662
## Height..m. -0.509 0.042 -0.027 -0.035 0.031 -0.357
## Max_BPM -0.051 -0.059 -0.004 0.015 0.001 -0.002
## Avg_BPM 0.010 -0.305 -0.020 -0.042 -0.234 -0.041
## Resting_BPM -0.053 0.046 0.017 0.004 -0.009 -0.003
## Session_Duration..hours. -0.067 0.573 0.078 0.084 -0.638 -0.122
## Calories_Burned -0.019 0.401 0.067 0.114 0.698 0.130
## Fat_Percentage -0.325 0.165 0.787 -0.183 0.029 0.002
## Water_Intake..liters. 0.628 -0.090 0.533 -0.040 -0.043 0.000
## Workout_Frequency..days.week. -0.327 -0.529 0.288 0.538 -0.005 0.004
## Experience_Level -0.158 -0.256 0.008 -0.807 0.041 0.006
## BMI -0.013 0.014 -0.008 0.005 0.109 -0.633
## Experience_Level Calories_Burned
## 0.438731526 0.436992177
## Session_Duration..hours. Workout_Frequency..days.week.
## 0.433265299 0.393348154
## Water_Intake..liters. Weight..kg.
## 0.279375333 0.110268624
## Height..m. BMI
## 0.086267861 0.073761886
## Avg_BPM Max_BPM
## 0.051030709 0.004916258
## Resting_BPM Age
## 0.001140096 -0.025390522
## Fat_Percentage
## -0.409565512
Pembahasan
Loading factor menunjukkan tingkat kontribusi masing-masing variabel terhadap pembentukan suatu komponen utama. Semakin besar nilai absolut loading factor, maka semakin besar pengaruh variabel tersebut dalam membentuk komponen utama yang bersangkutan.
Berdasarkan hasil loading factor, variabel yang memiliki kontribusi positif terbesar pada PC1 adalah Experience_Level (0,439), Calories_Burned (0,437), Session_Duration (hours) (0,433), dan Workout_Frequency (days/week) (0,393). Selain itu, Water_Intake (liters) juga memberikan kontribusi positif yang cukup besar sebesar 0,279.
Sementara itu, variabel Fat_Percentage memiliki loading negatif terbesar (-0,410). Hal ini menunjukkan bahwa PC1 menggambarkan hubungan yang berlawanan antara tingkat aktivitas olahraga dan persentase lemak tubuh. Individu dengan durasi latihan yang lebih lama, frekuensi olahraga yang lebih tinggi, pengalaman olahraga yang lebih baik, serta jumlah kalori yang terbakar lebih besar cenderung memiliki persentase lemak tubuh yang lebih rendah.
Dengan demikian, PC1 dapat diinterpretasikan sebagai komponen aktivitas dan kebugaran fisik, karena didominasi oleh variabel yang berkaitan dengan intensitas dan konsistensi aktivitas olahraga
## Session_Duration..hours. Workout_Frequency..days.week.
## 0.179263501 0.177891910
## Experience_Level Calories_Burned
## 0.167962200 0.092331922
## Fat_Percentage Resting_BPM
## 0.091304944 0.028863254
## Avg_BPM Age
## 0.021565615 0.007090218
## Max_BPM Height..m.
## -0.075200294 -0.271368768
## Water_Intake..liters. BMI
## -0.324463154 -0.536593654
## Weight..kg.
## -0.645981713
Pembahasan
Pada PC2, variabel yang memiliki kontribusi terbesar adalah Weight (kg) dengan loading sebesar -0,646 dan BMI sebesar -0,537. Selain itu, Water_Intake (liters) juga memiliki kontribusi negatif yang cukup besar yaitu -0,324.
Sebaliknya, variabel yang memberikan kontribusi positif terbesar adalah Session_Duration (hours) (0,179), Workout_Frequency (days/week) (0,178), dan Experience_Level (0,168), meskipun nilainya tidak sebesar kontribusi variabel berat badan dan BMI.
Hasil ini menunjukkan bahwa PC2 lebih menggambarkan karakteristik ukuran tubuh, terutama yang berkaitan dengan berat badan dan indeks massa tubuh (BMI). Individu dengan nilai PC2 yang rendah cenderung memiliki berat badan dan BMI yang lebih tinggi, sedangkan individu dengan nilai PC2 yang tinggi cenderung memiliki durasi latihan dan frekuensi olahraga yang lebih baik.
Kesimpulan Loading Factor
Secara keseluruhan, komponen utama pertama (PC1) merepresentasikan tingkat aktivitas dan kebugaran fisik anggota gym, yang ditunjukkan oleh tingginya kontribusi variabel seperti Calories_Burned, Session_Duration, Workout_Frequency, dan Experience_Level. Sementara itu, komponen utama kedua (PC2) lebih merepresentasikan karakteristik fisik tubuh, khususnya yang berkaitan dengan Weight (kg) dan BMI.
Dengan demikian, dua komponen utama pertama dapat digunakan untuk menggambarkan karakteristik utama anggota gym, yaitu aspek aktivitas olahraga dan aspek kondisi fisik tubuh.
Pembahasan
Grafik Loading Factor PC1 menunjukkan kontribusi masing-masing variabel dalam membentuk komponen utama pertama (PC1). Semakin tinggi nilai loading factor, semakin besar pengaruh variabel tersebut terhadap komponen utama yang terbentuk.
Berdasarkan grafik, variabel Experience_Level, Calories_Burned, Session_Duration (hours), dan Workout_Frequency (days/week) memiliki nilai loading positif terbesar. Hal ini menunjukkan bahwa variabel-variabel tersebut menjadi faktor utama yang membentuk PC1. Selain itu, Water_Intake (liters) juga memberikan kontribusi positif yang cukup besar.
Sebaliknya, Fat_Percentage memiliki nilai loading negatif terbesar. Kondisi ini menunjukkan adanya hubungan yang berlawanan antara persentase lemak tubuh dengan tingkat aktivitas olahraga. Semakin tinggi durasi latihan, frekuensi olahraga, pengalaman berolahraga, dan jumlah kalori yang terbakar, maka persentase lemak tubuh cenderung lebih rendah.
Secara umum, PC1 dapat diinterpretasikan sebagai komponen yang menggambarkan tingkat aktivitas dan kebugaran fisik anggota gym.
Pembahasan
Grafik Loading Factor PC2 menunjukkan kontribusi variabel terhadap pembentukan komponen utama kedua (PC2). Pada grafik terlihat bahwa variabel Weight (kg) memiliki nilai loading negatif terbesar, diikuti oleh BMI dan Water_Intake (liters).
Di sisi lain, variabel Session_Duration (hours), Workout_Frequency (days/week), dan Experience_Level memiliki nilai loading positif yang relatif lebih besar dibandingkan variabel lainnya.
Hasil tersebut menunjukkan bahwa PC2 lebih banyak dipengaruhi oleh karakteristik fisik tubuh, khususnya berat badan dan indeks massa tubuh (BMI). Individu dengan berat badan dan BMI yang lebih tinggi cenderung memiliki nilai PC2 yang lebih rendah, sedangkan individu yang memiliki durasi latihan lebih lama, frekuensi olahraga lebih tinggi, dan pengalaman olahraga yang lebih baik cenderung memiliki nilai PC2 yang lebih tinggi.
Kesimpulan Grafik Loading Factor
Berdasarkan kedua grafik, komponen utama pertama (PC1) lebih merepresentasikan aspek aktivitas olahraga dan kebugaran fisik yang ditunjukkan oleh tingginya kontribusi variabel Calories_Burned, Session_Duration, Workout_Frequency, dan Experience_Level. Sementara itu, komponen utama kedua (PC2) lebih menggambarkan karakteristik fisik tubuh yang didominasi oleh variabel Weight (kg) dan BMI.
Dengan demikian, dua komponen utama pertama mampu memberikan gambaran yang cukup baik mengenai karakteristik anggota gym, yaitu dari sisi aktivitas olahraga serta kondisi fisik tubuh.
# PLOT VARIABEL PCA
fviz_pca_var(
hasil_pca,
col.var = "contrib",
gradient.cols = c("blue","yellow","red"),
repel = TRUE
)Pembahasan
Plot variabel PCA menunjukkan hubungan antara variabel asli dengan dua komponen utama pertama, yaitu PC1 dan PC2. Panjang panah menunjukkan besarnya kontribusi variabel terhadap pembentukan komponen utama, sedangkan arah panah menunjukkan hubungan antarvariabel.
Berdasarkan plot, variabel Session_Duration (hours), Calories_Burned, dan Experience_Level berada pada arah yang hampir sama di sisi kanan grafik. Hal ini menunjukkan bahwa ketiga variabel tersebut memiliki hubungan positif yang kuat. Dengan kata lain, individu yang memiliki durasi latihan lebih lama cenderung membakar lebih banyak kalori dan memiliki tingkat pengalaman olahraga yang lebih tinggi.
Variabel Workout_Frequency (days/week) dan Fat_Percentage berada pada sisi kiri grafik. Posisi yang berlawanan dengan Calories_Burned dan Session_Duration (hours) menunjukkan adanya kecenderungan hubungan negatif antara persentase lemak tubuh dengan indikator aktivitas olahraga. Semakin aktif seseorang berolahraga, persentase lemak tubuh cenderung lebih rendah.
Selain itu, variabel Weight (kg) dan BMI terletak berdekatan pada bagian bawah grafik. Posisi tersebut menunjukkan bahwa kedua variabel memiliki hubungan positif yang kuat karena sama-sama menggambarkan ukuran tubuh seseorang. Variabel Height (m) juga berada pada area yang relatif dekat dengan BMI dan berat badan, namun dengan arah yang sedikit berbeda.
Berdasarkan warna kontribusi (contrib), variabel seperti Session_Duration (hours), Calories_Burned, Weight (kg), dan BMI memiliki kontribusi yang relatif besar terhadap pembentukan dua komponen utama pertama.
Pembahasan
Plot individu PCA menunjukkan penyebaran seluruh anggota gym berdasarkan kombinasi nilai komponen utama pertama (PC1) dan komponen utama kedua (PC2). Setiap titik pada grafik mewakili satu individu dalam dataset.
Berdasarkan plot, sebagian besar individu tersebar di sekitar pusat grafik dan tidak membentuk kelompok yang terpisah secara jelas. Hal ini menunjukkan bahwa karakteristik anggota gym relatif beragam dan tidak terdapat pemisahan kelompok yang sangat kuat berdasarkan dua komponen utama pertama.
Meskipun demikian, terlihat beberapa individu berada cukup jauh dari pusat data. Individu-individu tersebut dapat dianggap memiliki karakteristik yang berbeda dibandingkan mayoritas anggota gym, misalnya dalam hal tingkat aktivitas olahraga, jumlah kalori yang terbakar, berat badan, atau nilai BMI.
Penyebaran titik yang cukup luas pada arah horizontal (PC1) menunjukkan bahwa variasi terbesar dalam data lebih banyak dijelaskan oleh komponen utama pertama. Hasil ini sejalan dengan proporsi variansi sebelumnya yang menunjukkan bahwa PC1 memiliki kontribusi terbesar, yaitu sebesar 30,8% dari total variasi data.
Pembahasan
Biplot PCA merupakan visualisasi yang menggabungkan plot individu dan plot variabel dalam satu grafik. Grafik ini menunjukkan hubungan antarvariabel sekaligus penyebaran individu berdasarkan dua komponen utama pertama, yaitu PC1 dan PC2.
Berdasarkan biplot, variabel Session_Duration (hours), Calories_Burned, Workout_Frequency (days/week), dan Experience_Level mengarah ke arah yang hampir sama. Hal ini menunjukkan bahwa variabel-variabel tersebut memiliki hubungan positif yang kuat. Artinya, individu yang memiliki durasi latihan lebih lama cenderung membakar lebih banyak kalori, berolahraga lebih sering, dan memiliki tingkat pengalaman olahraga yang lebih tinggi.
Sebaliknya, variabel Fat_Percentage berada pada arah yang berlawanan dengan variabel aktivitas olahraga tersebut. Hal ini mengindikasikan adanya hubungan negatif, yaitu semakin tinggi aktivitas olahraga seseorang maka persentase lemak tubuh cenderung lebih rendah.
Selain itu, variabel Weight (kg) dan BMI berada pada posisi yang berdekatan sehingga menunjukkan hubungan positif yang kuat. Kedua variabel tersebut sama-sama menggambarkan karakteristik ukuran tubuh seseorang.
Secara umum, biplot menunjukkan bahwa komponen utama pertama (PC1) lebih banyak menggambarkan tingkat aktivitas dan kebugaran fisik, sedangkan komponen utama kedua (PC2) lebih berkaitan dengan karakteristik fisik tubuh seperti berat badan dan BMI.
Pembahasan
Grafik kontribusi variabel terhadap Dimensi 1 menunjukkan variabel-variabel yang paling berperan dalam pembentukan komponen utama pertama (PC1). Garis putus-putus merah menunjukkan rata-rata kontribusi seluruh variabel. Variabel yang berada di atas garis tersebut dianggap memiliki kontribusi yang signifikan.
Berdasarkan grafik, variabel yang memberikan kontribusi terbesar terhadap PC1 adalah:
- Experience_Level
- Calories_Burned
- Session_Duration (hours)
- Fat_Percentage
- Workout_Frequency (days/week)
- Water_Intake (liters)
Variabel-variabel tersebut memiliki kontribusi di atas rata-rata sehingga menjadi faktor utama pembentuk PC1. Hasil ini menunjukkan bahwa PC1 merepresentasikan aspek aktivitas olahraga dan kebugaran fisik anggota gym. Semakin tinggi nilai komponen ini, semakin tinggi pula tingkat aktivitas olahraga, pengalaman latihan, serta jumlah kalori yang terbakar.
Sebaliknya, variabel seperti Age, Max_BPM, Avg_BPM, Resting_BPM, Height (m), dan BMI memiliki kontribusi yang relatif kecil terhadap pembentukan PC1.
Pembahasan
Grafik kontribusi variabel terhadap Dimensi 2 menunjukkan bahwa variabel yang paling dominan dalam membentuk PC2 adalah:
- Weight (kg)
- BMI
- Water_Intake (liters)
- Height (m)
Variabel Weight (kg) memiliki kontribusi terbesar, yaitu lebih dari 40%, diikuti oleh BMI dengan kontribusi sekitar 29%. Kedua variabel tersebut jauh melampaui garis rata-rata kontribusi sehingga menjadi faktor utama pembentuk komponen utama kedua.
Selain itu, Water_Intake (liters) dan Height (m) juga memberikan kontribusi yang cukup besar terhadap PC2. Sementara itu, variabel seperti Calories_Burned, Fat_Percentage, Max_BPM, Avg_BPM, Resting_BPM, dan Age memiliki kontribusi yang relatif kecil.
Hasil ini menunjukkan bahwa PC2 lebih banyak menggambarkan karakteristik fisik tubuh anggota gym, terutama yang berkaitan dengan berat badan, tinggi badan, dan indeks massa tubuh (BMI).
Kesimpulan PCA
Berdasarkan hasil Principal Component Analysis (PCA), diperoleh 13 komponen utama yang merupakan transformasi dari 13 variabel numerik pada dataset anggota gym. Hasil analisis menunjukkan bahwa komponen utama pertama (PC1) mampu menjelaskan 30,8% variasi data, sedangkan komponen utama kedua (PC2) menjelaskan 16,1% variasi data. Secara kumulatif, kedua komponen tersebut mampu menjelaskan 46,9% variasi total data. Sementara itu, enam komponen utama pertama mampu menjelaskan 81,54% variasi total data sehingga sebagian besar informasi pada data asli tetap dapat dipertahankan meskipun dimensi data direduksi.
Berdasarkan scree plot dan kriteria Kaiser (eigenvalue > 1), terdapat enam komponen utama yang layak dipertahankan, yaitu PC1 hingga PC6. Hal ini menunjukkan bahwa reduksi dimensi dari 13 variabel menjadi 6 komponen utama dapat dilakukan tanpa kehilangan informasi yang signifikan.
Hasil loading factor, biplot, dan kontribusi variabel menunjukkan bahwa komponen utama pertama (PC1) didominasi oleh variabel Experience_Level, Calories_Burned, Session_Duration (hours), Workout_Frequency (days/week), dan Water_Intake (liters), serta berhubungan negatif dengan Fat_Percentage. Oleh karena itu, PC1 dapat diinterpretasikan sebagai komponen yang menggambarkan tingkat aktivitas olahraga dan kebugaran fisik anggota gym. Individu dengan nilai PC1 yang tinggi cenderung memiliki durasi latihan lebih lama, frekuensi olahraga lebih tinggi, pengalaman olahraga yang lebih baik, serta jumlah kalori yang terbakar lebih besar.
Sementara itu, komponen utama kedua (PC2) didominasi oleh variabel Weight (kg), BMI, Height (m), dan Water_Intake (liters). Komponen ini lebih menggambarkan karakteristik fisik tubuh anggota gym, khususnya yang berkaitan dengan ukuran tubuh dan komposisi fisik.
Visualisasi PCA menunjukkan bahwa variabel-variabel yang berkaitan dengan aktivitas olahraga cenderung saling berhubungan positif, sedangkan variabel Fat_Percentage memiliki kecenderungan hubungan yang berlawanan dengan indikator aktivitas olahraga. Selain itu, variabel Weight (kg) dan BMI memiliki hubungan yang kuat karena berada pada arah yang berdekatan pada biplot.
Secara keseluruhan, PCA berhasil menyederhanakan struktur data dengan merangkum informasi dari 13 variabel numerik ke dalam beberapa komponen utama yang lebih ringkas. Komponen utama pertama merepresentasikan aspek aktivitas dan kebugaran fisik, sedangkan komponen utama kedua merepresentasikan karakteristik fisik tubuh. Dengan demikian, PCA efektif digunakan sebagai metode ekstraksi fitur karena mampu mengurangi kompleksitas data sekaligus mempertahankan sebagian besar informasi penting yang terkandung dalam dataset.
6. Insight dan Kesimpulan
Variabel apa yang paling penting?
Berdasarkan hasil analisis menggunakan korelasi, feature selection, dan Principal Component Analysis (PCA), variabel yang paling penting dalam dataset adalah Session_Duration (hours). Variabel ini memiliki korelasi tertinggi terhadap Calories_Burned yaitu sebesar 0,908, menunjukkan bahwa semakin lama durasi latihan maka semakin besar jumlah kalori yang terbakar.
Pada metode feature selection, hasil LASSO menunjukkan bahwa Session_Duration tetap dipertahankan dalam model dengan koefisien positif yang cukup besar, menandakan bahwa variabel tersebut memiliki kontribusi penting dalam menjelaskan variasi Calories_Burned. Selain itu, variabel Avg_BPM, Resting_BPM, HR_Efficiency, dan Calorie_per_Hour juga terpilih sebagai variabel yang informatif. Sementara itu, metode Stepwise memilih HR_Efficiency, Avg_BPM, Resting_BPM, dan Calorie_per_Hour sebagai kombinasi variabel terbaik berdasarkan kriteria AIC. Hal ini menunjukkan bahwa faktor efisiensi detak jantung dan intensitas latihan memiliki pengaruh yang kuat terhadap pembakaran kalori.
Selain Session_Duration, variabel penting lainnya adalah Experience_Level, Workout_Frequency (days/week), Fat_Percentage, dan Avg_BPM. Experience_Level dan Workout_Frequency memiliki hubungan positif yang kuat terhadap aktivitas olahraga, sedangkan Fat_Percentage menunjukkan hubungan negatif yang cukup kuat. Hal ini mengindikasikan bahwa individu yang lebih berpengalaman dan lebih sering berolahraga cenderung memiliki persentase lemak tubuh yang lebih rendah serta membakar kalori lebih banyak.
Hasil PCA memperkuat temuan tersebut. Pada komponen utama pertama (PC1), variabel dengan loading terbesar adalah Experience_Level (0,439), Calories_Burned (0,437), Session_Duration (0,433), Workout_Frequency (0,393), dan Fat_Percentage (-0,410). Oleh karena itu, PC1 dapat diinterpretasikan sebagai komponen aktivitas dan kebugaran fisik. Sementara itu, PC2 didominasi oleh Weight (kg) dan BMI yang lebih merepresentasikan karakteristik fisik tubuh.
Secara keseluruhan, Session_Duration (hours) dapat dianggap sebagai variabel paling penting dalam dataset karena secara konsisten muncul sebagai variabel dominan pada analisis korelasi, feature selection, maupun PCA. Temuan ini menunjukkan bahwa lamanya durasi latihan merupakan faktor utama yang memengaruhi tingkat pembakaran kalori dan kebugaran anggota gym.
Apakah reduksi dimensi berhasil?
Berdasarkan hasil Principal Component Analysis (PCA), reduksi dimensi dapat dinyatakan berhasil. Hal ini ditunjukkan oleh kemampuan enam komponen utama pertama (PC1–PC6) dalam menjelaskan 81,54% variasi total data. Dengan demikian, jumlah dimensi berhasil disederhanakan dari 13 variabel numerik menjadi 6 komponen utama tanpa kehilangan sebagian besar informasi yang terkandung dalam data.
Selain itu, berdasarkan kriteria Kaiser, hanya enam komponen yang memiliki eigenvalue lebih besar dari 1 sehingga layak dipertahankan. Hasil scree plot juga menunjukkan bahwa setelah komponen keenam, tambahan variasi yang dijelaskan oleh komponen berikutnya relatif kecil. Oleh karena itu, penggunaan enam komponen utama sudah cukup representatif untuk menggambarkan karakteristik data secara keseluruhan.
Keberhasilan reduksi dimensi ini menunjukkan bahwa PCA mampu mengurangi kompleksitas data sekaligus mempertahankan informasi penting, sehingga analisis menjadi lebih sederhana dan efisien tanpa mengurangi kualitas informasi secara signifikan.
Apa makna substantif dari principal components?
Makna substantif dari principal components dapat dijelaskan berdasarkan variabel-variabel yang memiliki loading factor terbesar. Komponen utama pertama (PC1) merepresentasikan tingkat aktivitas dan kebugaran fisik anggota gym karena didominasi oleh variabel Experience_Level, Session_Duration, Workout_Frequency, dan Calories_Burned, serta berhubungan negatif dengan Fat_Percentage. Dengan demikian, PC1 menggambarkan seberapa aktif dan bugar seorang anggota gym.
Sementara itu, komponen utama kedua (PC2) merepresentasikan karakteristik fisik tubuh anggota gym karena didominasi oleh variabel Weight (kg), BMI, dan Water_Intake. Komponen ini menggambarkan perbedaan ukuran dan komposisi tubuh antar anggota gym.
Secara keseluruhan, PCA menunjukkan bahwa karakteristik anggota gym dapat diringkas ke dalam dua dimensi utama, yaitu aspek aktivitas dan kebugaran fisik (PC1) serta aspek kondisi fisik tubuh (PC2). Kedua komponen tersebut mampu menggambarkan struktur utama data secara lebih sederhana tanpa kehilangan sebagian besar informasi penting.
Insight apa yang diperoleh dari data?
1. Durasi Latihan Merupakan Faktor yang Paling Penting
Berdasarkan hasil analisis korelasi, variabel Session_Duration (hours) memiliki korelasi tertinggi dengan Calories_Burned yaitu sebesar \(r = 0.908\). Selain itu, variabel ini juga menjadi salah satu kontributor utama pada komponen utama pertama (PC1). Temuan ini menunjukkan bahwa semakin lama durasi latihan yang dilakukan anggota gym, semakin besar jumlah kalori yang dapat dibakar selama sesi latihan.
2. Anggota yang Lebih Berpengalaman Cenderung Lebih Bugar
Variabel Experience_Level memiliki hubungan positif yang kuat dengan Workout_Frequency (days/week) (\(r = 0.837\)) dan Session_Duration (hours) (\(r = 0.765\)), serta hubungan negatif dengan Fat_Percentage (\(r = -0.654\)). Hasil ini menunjukkan bahwa anggota gym yang lebih berpengalaman cenderung berlatih lebih sering, memiliki durasi latihan yang lebih panjang, dan memiliki persentase lemak tubuh yang lebih rendah dibandingkan anggota yang kurang berpengalaman.
3. Persentase Lemak Tubuh Berhubungan Negatif dengan Kebugaran
Variabel Fat_Percentage memiliki hubungan negatif terhadap Calories_Burned, Session_Duration (hours), dan Experience_Level. Hal ini mengindikasikan bahwa individu yang lebih aktif berolahraga dan memiliki tingkat kebugaran yang lebih baik cenderung memiliki persentase lemak tubuh yang lebih rendah. Dengan kata lain, aktivitas olahraga yang konsisten berkontribusi terhadap komposisi tubuh yang lebih sehat.
4. Terdapat Informasi yang Tumpang Tindih pada Weight dan BMI
Hasil analisis multikolinearitas menunjukkan bahwa variabel Weight (kg) dan BMI memiliki korelasi yang sangat kuat serta nilai VIF yang tinggi. Kondisi ini menunjukkan bahwa kedua variabel membawa informasi yang hampir sama sehingga menyebabkan redundansi informasi dalam dataset. Oleh karena itu, diperlukan proses feature selection maupun reduksi dimensi untuk menyederhanakan struktur data.
5. Karakteristik Anggota Gym Dapat Diringkas Menjadi Dua Aspek Utama
Hasil Principal Component Analysis (PCA) menunjukkan bahwa sebagian besar variasi data dapat dijelaskan oleh dua komponen utama:
- PC1 (Aktivitas dan Kebugaran Fisik), yang didominasi oleh variabel Session_Duration (hours), Calories_Burned, Workout_Frequency (days/week), dan Experience_Level.
- PC2 (Karakteristik Fisik Tubuh), yang didominasi oleh variabel Weight (kg) dan BMI.
Temuan ini menunjukkan bahwa karakteristik anggota gym pada dasarnya dapat dipahami melalui dua dimensi utama, yaitu tingkat aktivitas olahraga dan kondisi fisik tubuh.
6. Reduksi Dimensi Berhasil Dilakukan
Hasil PCA menunjukkan bahwa 13 variabel numerik dapat direduksi menjadi 6 komponen utama yang mampu mempertahankan 81,54% variasi total data. Hal ini menunjukkan bahwa sebagian besar informasi penting dalam dataset tetap dapat dipertahankan meskipun jumlah dimensi data berhasil dikurangi secara signifikan.
Kesimpulan
Berdasarkan seluruh tahapan analisis yang telah dilakukan, variabel yang paling berpengaruh dalam menggambarkan kebugaran anggota gym adalah Session_Duration (hours), Experience_Level, Workout_Frequency (days/week), dan Fat_Percentage. Hasil feature selection dan PCA menunjukkan bahwa tidak semua variabel memiliki kontribusi yang sama penting, sehingga reduksi dimensi diperlukan untuk memperoleh representasi data yang lebih sederhana dan efisien.
Analisis PCA berhasil mereduksi 13 variabel numerik menjadi 6 komponen utama dengan tetap mempertahankan 81,54% variasi data. Komponen utama pertama merepresentasikan aspek aktivitas dan kebugaran fisik, sedangkan komponen utama kedua merepresentasikan karakteristik fisik tubuh. Dengan demikian, PCA terbukti efektif dalam menyederhanakan struktur data tanpa kehilangan sebagian besar informasi penting yang terkandung dalam dataset.
Secara keseluruhan, hasil analisis menunjukkan bahwa anggota gym yang lebih aktif, lebih berpengalaman, dan memiliki durasi latihan yang lebih panjang cenderung membakar lebih banyak kalori serta memiliki persentase lemak tubuh yang lebih rendah. Temuan ini memberikan gambaran bahwa konsistensi dan intensitas latihan merupakan faktor utama yang berperan dalam meningkatkan kebugaran fisik anggota gym.