1. Pendahuluan

Support Vector Regression (SVR) adalah metode regresi berbasis Support Vector Machine (SVM). SVR mencoba meminimalkan error sambil menjaga margin error yang disebut epsilon-tube. Tujuan SVR adalah mencari fungsi prediksi \(f(x)\) yang tidak menyimpang lebih dari \(\epsilon\) dari nilai target \(y_i\) untuk semua data. Rumus utama dari SVR:

\[ \min_{w,b,\xi,\xi^*} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n (\xi_i + \xi^*_i) \] dengan kendala:

\[ \begin{cases} y_i - (w \cdot x_i + b) \leq \epsilon + \xi_i \\ (w \cdot x_i + b) - y_i \leq \epsilon + \xi^*_i \\ \xi_i, \xi^*_i \geq 0 \end{cases} \] Di mana \(w\) adalah bobot, \(b\) adalah bias, \(\xi_i, \xi^*_i\) adalah slack variables untuk error yang melebihi \(\epsilon\), dan \(C\) adalah parameter penalti. Model SVR memiliki dua varian utama:

\[ \min_{w,b} \sum_{i=1}^n (y_i - (w \cdot x_i + b))^2 \] yaitu residual sum of squares. OLS mudah diinterpretasikan, tapi tidak tahan terhadap outlier. SVR dan OLS akan dibandingkan dalam laporan ini menggunakan metrik: RMSE (Root Mean Square Error): \[ RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2} \] MAE (Mean Absolute Error): \[ MAE = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i| \] R² (Coefficient of Determination): \[ R^2 = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2} \]

2. Preprocessing Data

Kita gunakan dataset mtcars dan memilih mpg (miles per gallon) sebagai target variabel dan hp (horsepower) sebagai prediktor (untuk memudahkan visualisasi 1D).

data("mtcars")
df <- mtcars %>% select(mpg, hp)

# Normalisasi fitur (diperlukan untuk SVR)
preProc <- preProcess(df, method = c("center", "scale"))
df_scaled <- predict(preProc, df)

head(df_scaled)
##                          mpg         hp
## Mazda RX4          0.1508848 -0.5350928
## Mazda RX4 Wag      0.1508848 -0.5350928
## Datsun 710         0.4495434 -0.7830405
## Hornet 4 Drive     0.2172534 -0.5350928
## Hornet Sportabout -0.2307345  0.4129422
## Valiant           -0.3302874 -0.6080186

3. Pembangunan Model

3.1 Model OLS

ols_model <- lm(mpg ~ hp, data = df_scaled)
summary(ols_model)
## 
## Call:
## lm(formula = mpg ~ hp, data = df_scaled)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.9477 -0.3505 -0.1469  0.2625  1.3665 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.149e-17  1.133e-01   0.000        1    
## hp          -7.762e-01  1.151e-01  -6.742 1.79e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6409 on 30 degrees of freedom
## Multiple R-squared:  0.6024, Adjusted R-squared:  0.5892 
## F-statistic: 45.46 on 1 and 30 DF,  p-value: 1.788e-07

3.2 Model SVR Linear

svr_linear <- svm(mpg ~ hp, data = df_scaled, type = "eps-regression",
                   kernel = "linear", cost = 1, epsilon = 0.1)

3.3 Model SVR RBF

svr_rbf <- svm(mpg ~ hp, data = df_scaled, type = "eps-regression",
                kernel = "radial", cost = 1, epsilon = 0.1, gamma = 0.1)

4. Evaluasi Model

Gunakan metrik: RMSE, MAE, dan R².

# Prediksi
df_scaled$ols_pred <- predict(ols_model, df_scaled)
df_scaled$svr_linear_pred <- predict(svr_linear, df_scaled)
df_scaled$svr_rbf_pred <- predict(svr_rbf, df_scaled)

# Fungsi evaluasi
eval_metrics <- function(actual, predicted){
  rmse <- rmse(actual, predicted)
  mae <- mae(actual, predicted)
  r2 <- cor(actual, predicted)^2
  return(data.frame(RMSE=rmse, MAE=mae, R2=r2))
}

ols_metrics <- eval_metrics(df_scaled$mpg, df_scaled$ols_pred)
svr_linear_metrics <- eval_metrics(df_scaled$mpg, df_scaled$svr_linear_pred)
svr_rbf_metrics <- eval_metrics(df_scaled$mpg, df_scaled$svr_rbf_pred)

# Gabungkan hasil
results <- rbind(OLS=ols_metrics, SVR_Linear=svr_linear_metrics, SVR_RBF=svr_rbf_metrics)
knitr::kable(results)
RMSE MAE R2
OLS 0.6205955 0.4824087 0.6024373
SVR_Linear 0.6387548 0.4534672 0.6024373
SVR_RBF 0.5711685 0.3924555 0.7267450

Tabel tersebut memuat ringkasan metrik evaluasi model (RMSE, MAE, dan R²) dari tiga metode regresi yaitu OLS, SVR Linear, dan SVR RBF. Berdasarkan data yang ditampilkan:

Secara keseluruhan, evaluasi kuantitatif ini mendukung temuan visualisasi sebelumnya yang menunjukkan superioritas model SVR RBF dalam memodelkan hubungan antara variabel pada dataset mtcars.

5. Visualisasi Model dan Residual

5.1 Visualisasi Model

ggplot(df_scaled, aes(x=hp, y=mpg)) +
  geom_point(color='blue') +
  geom_line(aes(y=ols_pred), color='green', size=1, linetype="dashed", alpha=0.7) +
  geom_line(aes(y=svr_linear_pred), color='red', size=1, alpha=0.7) +
  geom_line(aes(y=svr_rbf_pred), color='purple', size=1, alpha=0.7) +
  labs(title="Perbandingan Model: OLS, SVR Linear, SVR RBF",
       x="Horsepower (scaled)", y="MPG (scaled)") +
  theme_minimal()

Gambar ini memperlihatkan perbandingan garis prediksi dari tiga model (OLS, SVR Linear, dan SVR RBF) terhadap data sebenarnya (titik biru). Berikut interpretasinya:

  • OLS (garis hijau putus-putus): Model linier yang cocok untuk hubungan linier, tapi pada data ini terlihat underfitting terutama pada data di ujung-ujung.
  • SVR Linear (garis merah): Lebih fleksibel dari OLS, sedikit lebih baik dalam mengikuti pola data, tetapi masih linier.
  • SVR RBF (garis ungu): Paling fleksibel di antara ketiganya, mampu menangkap pola non-linear pada data, terutama di bagian ujung-ujung yang melengkung.

Secara keseluruhan, SVR RBF lebih baik dalam menangkap variasi pola data yang non-linear, sedangkan OLS cenderung oversimplifikasi dan SVR Linear berada di antara keduanya.

5.2 Visualisasi Epsilon-tube dan Support Vectors

# Visualisasi hanya untuk SVR Linear (1D)
sv_index <- svr_linear$index
ggplot(df_scaled, aes(x=hp, y=mpg)) +
  geom_point(color='blue') +
  geom_line(aes(y=predict(svr_linear, df_scaled)), color='red', size=1) +
  geom_point(data=df_scaled[sv_index,], aes(x=hp, y=mpg), color='black', size=2, shape=8) +
  labs(title="Epsilon-tube dan Support Vectors (SVR Linear)",
       x="Horsepower (scaled)", y="MPG (scaled)") +
  theme_minimal()

Gambar ini menunjukkan garis prediksi model SVR Linear (garis merah) serta data aktual (titik biru) dan support vectors (bintang biru). Secara akademik:

  • Garis merah merepresentasikan prediksi model SVR Linear yang mengikuti pola linier antara horsepower (hp) dan miles per gallon (mpg) pada data mtcars.
  • Titik-titik biru adalah data aktual, sementara simbol bintang biru menandai support vectors, yaitu titik-titik yang berada pada batas margin dan menjadi penentu fungsi prediksi.
  • Distribusi support vectors di sepanjang garis margin menandakan pengaruhnya dalam membentuk garis regresi SVR Linear. Hal ini berbeda dengan OLS yang menggunakan semua data.
  • Visualisasi ini menekankan keunggulan SVR Linear dalam mengontrol kompleksitas model melalui pemilihan support vectors, yang membuatnya lebih robust terhadap outlier dibanding OLS.

Secara keseluruhan, gambar ini memperlihatkan peran kunci support vectors dan epsilon-tube dalam membentuk model SVR Linear yang stabil dan adaptif.

5.3 Visualisasi Residual

df_scaled <- df_scaled %>%
  mutate(ols_resid = mpg - ols_pred,
         svr_linear_resid = mpg - svr_linear_pred,
         svr_rbf_resid = mpg - svr_rbf_pred)

df_long <- df_scaled %>%
  pivot_longer(cols = c(ols_resid, svr_linear_resid, svr_rbf_resid),
               names_to = "model", values_to = "residual")

ggplot(df_long, aes(x=model, y=residual, fill=model)) +
  geom_boxplot(alpha=0.7) +
  labs(title="Distribusi Residual",
       y="Residual", x="Model") +
  theme_minimal()

Gambar boxplot residual ini menunjukkan distribusi residual dari tiga model: OLS, SVR Linear, dan SVR RBF. Berikut interpretasinya:

  • Model OLS memiliki residual yang cukup tersebar dan beberapa outlier signifikan.
  • Model SVR Linear menunjukkan residual yang lebih terkonsentrasi di sekitar median dan memiliki sedikit outlier.
  • Model SVR RBF menunjukkan distribusi residual yang serupa dengan SVR Linear, dengan variasi residual yang lebih kecil daripada OLS.

Kesimpulan: Model SVR Linear dan SVR RBF menghasilkan distribusi residual yang lebih sempit, menunjukkan kecenderungan untuk memberikan prediksi yang lebih stabil dan robust dibandingkan OLS.

6. Eksplorasi Pengaruh Parameter (epsilon, C, gamma)

# Contoh: variasi epsilon
epsilon_values <- seq(0, 1, by=0.2)
epsilon_results <- data.frame()

for(eps in epsilon_values){
  svr <- svm(mpg ~ hp, data=df_scaled, type='eps-regression',
              kernel='radial', cost=1, gamma=0.1, epsilon=eps)
  pred <- predict(svr, df_scaled)
  metrics <- eval_metrics(df_scaled$mpg, pred)
  metrics$epsilon <- eps
  epsilon_results <- rbind(epsilon_results, metrics)
}

ggplot(epsilon_results, aes(x=epsilon, y=RMSE)) +
  geom_line() + geom_point() +
  labs(title="Pengaruh Nilai Epsilon pada RMSE (SVR RBF)",
       x="Epsilon", y="RMSE") +
  theme_minimal()

Gambar tersebut menunjukkan bahwa RMSE menurun ketika nilai epsilon meningkat hingga sekitar 0.5, lalu naik lagi. Ini mengindikasikan adanya nilai optimal epsilon untuk meminimalkan RMSE. Hasil ini menjadi petunjuk bahwa tuning parameter epsilon (dan juga parameter lain seperti C dan gamma) penting untuk mendapatkan model yang optimal. Untuk menemukan kombinasi parameter optimal tersebut, dilakukan tuning (lihat Bagian 7) yang menggunakan grid search untuk mencari nilai C dan gamma terbaik, sehingga model SVR RBF menjadi lebih akurat dan generalizable.

7. Tuning Parameter C dan Gamma

# Tuning C dan gamma menggunakan grid search
tune_result <- tune(svm, mpg ~ hp, data=df_scaled,
                     ranges=list(cost=c(0.1, 1, 10), gamma=c(0.01, 0.1, 1)),
                     kernel='radial', epsilon=0.1)

# Menampilkan parameter terbaik
tune_result$best.parameters
##   cost gamma
## 6   10   0.1
# Menampilkan summary tuning
summary(tune_result)
## 
## Parameter tuning of 'svm':
## 
## - sampling method: 10-fold cross validation 
## 
## - best parameters:
##  cost gamma
##    10   0.1
## 
## - best performance: 0.2962928 
## 
## - Detailed performance results:
##   cost gamma     error dispersion
## 1  0.1  0.01 1.0001763  0.8473421
## 2  1.0  0.01 0.6326294  0.6087353
## 3 10.0  0.01 0.4332514  0.3578524
## 4  0.1  0.10 0.6762422  0.6610176
## 5  1.0  0.10 0.3782765  0.3771587
## 6 10.0  0.10 0.2962928  0.2814435
## 7  0.1  1.00 0.5762918  0.5783126
## 8  1.0  1.00 0.3490891  0.3271549
## 9 10.0  1.00 0.3693195  0.3183527

Penjelasan:

8. Interpretasi Hasil dan Kesimpulan Aplikatif

Hasil evaluasi dan visualisasi menunjukkan bahwa model SVR RBF memiliki performa prediksi terbaik. Hal ini tercermin dari nilai RMSE dan MAE terendah, serta nilai R² tertinggi dibandingkan model lainnya. Model SVR RBF mampu menangkap pola non-linear, sehingga sangat tepat untuk diterapkan pada data dengan karakteristik serupa.

Dalam aplikasi praktis, pemilihan model yang tepat menjadi kunci. Model linier (OLS dan SVR Linear) lebih cocok untuk hubungan linier, sedangkan SVR RBF sangat disarankan ketika terdapat pola non-linear. Temuan ini menunjukkan pentingnya pemahaman karakteristik data sebelum memutuskan model regresi yang akan digunakan. Dengan demikian, hasil prediksi yang akurat dan andal dapat diperoleh, mendukung pengambilan keputusan berbasis data secara efektif.