Permasalahan: Pada permasalahan ini, kita akan membandingkan dua model regresi — Regresi Linear dan Support Vector Regression (SVR) — dalam memprediksi popularitas konten AI berdasarkan tingkat kompleksitas konten tersebut. Dataset yang digunakan berisi informasi dari 100 konten AI, termasuk tingkat kompleksitas (skala 1-10) dan popularitas (jumlah views).
# Library yang dibutuhkan
library(e1071)
## Warning: package 'e1071' was built under R version 4.4.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
# Dataset popularitas konten ai
set.seed(42)
popularitas_data <- data.frame(
Panjang = runif(150, 600, 900), # Analog dengan Temp di file asli (skala disesuaikan)
Interaksi = sample(10:200, 150, replace = TRUE)
)
# Tambahkan pola non-linear kuat
popularitas_data$Popularitas <- with(popularitas_data,
50 + 0.3*Panjang + 12*sin(Panjang/50) + # Non-linearitas dominan
0.1*Interaksi + rnorm(150, sd=2) # Noise kecil
)
# Membersihkan data
data_clean <- na.omit(popularitas_data)
# Pembagian data training dan testing
set.seed(42)
train_index <- sample(1:nrow(data_clean), 0.7*nrow(data_clean))
train_data <- data_clean[train_index, ]
test_data <- data_clean[-train_index, ]
# Model regresi linear
lm_model <- lm(Popularitas ~ Panjang, data = train_data)
lm_pred <- predict(lm_model, test_data)
# Model SVR
svr_model <- svm(
Popularitas ~ Panjang,
data = train_data,
type = "eps-regression",
kernel = "radial",
gamma = 0.1, # Optimal untuk non-linearitas
cost = 12, # Nilai tinggi untuk fitting ketat
epsilon = 0.01 # Margin error kecil
)
svr_pred <- predict(svr_model, test_data)
# Visualisasi hasil
ggplot() +
geom_point(aes(x = test_data$Panjang, y = test_data$Popularitas),
color = "black", size = 2) +
geom_line(aes(x = test_data$Panjang, y = lm_pred),
color = "blue", linetype = "dashed", linewidth = 1) +
geom_line(aes(x = test_data$Panjang, y = svr_pred),
color = "red", linetype = "solid", linewidth = 1) +
labs(
title = "Perbandingan SVR vs Regresi Linear: Prediksi Popularitas Konten AI",
x = "Panjang Konten (600-900)",
y = "Popularitas"
) +
theme_minimal() +
scale_x_continuous(breaks = seq(600, 900, by = 50))
# Menghitung MSE
lm_mse <- round(mean((test_data$Popularitas - lm_pred)^2), 2)
svr_mse <- round(mean((test_data$Popularitas - svr_pred)^2), 2)
# Print hasil MSE)
print(paste("MSE Regresi Linear:", lm_mse))
## [1] "MSE Regresi Linear: 81.14"
print(paste("MSE SVR:", svr_mse))
## [1] "MSE SVR: 44.25"
View(popularitas_data) # Tampilkan dalam tampilan tabel
head(popularitas_data) # Tampilkan 6 baris pertama
## Panjang Interaksi Popularitas
## 1 874.4418 51 302.7984
## 2 881.1226 106 314.9246
## 3 685.8419 194 287.0744
## 4 849.1343 166 309.8497
## 5 792.5237 34 289.7557
## 6 755.7288 124 294.6605
summary(popularitas_data) # Statistik deskriptif
## Panjang Interaksi Popularitas
## Min. :600.1 Min. : 10.0 Min. :229.3
## 1st Qu.:686.4 1st Qu.: 52.0 1st Qu.:278.2
## Median :773.0 Median :105.0 Median :293.5
## Mean :761.3 Mean :105.2 Mean :288.0
## 3rd Qu.:831.9 3rd Qu.:160.5 3rd Qu.:303.9
## Max. :896.7 Max. :200.0 Max. :324.7
Interpretasi Hasil: Visualisasi: - Titik-titik hitam = data aktual. - Garis biru putus-putus = hasil regresi linear. - Garis merah solid = hasil SVR. - Kalau pola data agak “membelok”, SVR biasanya bisa mengikuti lekukannya lebih baik. MSE: - Menunjukkan rata-rata kesalahan kuadrat. Makin kecil nilainya, makin bagus prediksinya. - Berdasarkan hasil yang diperoleh, MSE Regresi Linear 81.14 > MSE SVR 44.25 sehingga dapat disimpulkan untuk data(airquality) SVR adalah metode yang lebih baik daripada regresi.