Cara melakukan validasi silang untuk kinerja model di r
Dalam statistik, kita sering membuat model karena dua alasan:
- Memahami hubungan antara satu atau lebih variabel prediktor dan variabel respon.
- Gunakan model untuk memprediksi pengamatan di masa depan.
Validasi silang berguna untuk memperkirakan seberapa baik suatu model mampu memprediksi observasi di masa depan.
Misalnya, kita dapat membangun model regresi linier berganda yang menggunakan usia dan pendapatan sebagai variabel prediktor dan status default sebagai variabel respon. Dalam hal ini, kita mungkin ingin menyesuaikan model tersebut dengan kumpulan data dan kemudian menggunakan model tersebut untuk memprediksi, berdasarkan pendapatan dan usia pemohon baru, kemungkinan bahwa mereka akan gagal membayar pinjamannya.
Untuk menentukan apakah model memiliki kemampuan prediksi yang kuat, kita perlu menggunakannya untuk membuat prediksi pada data yang belum pernah dilihat sebelumnya. Ini akan memungkinkan kita memperkirakan kesalahan prediksi model.
Menggunakan Validasi Silang untuk Memperkirakan Kesalahan Prediksi
Validasi silang mengacu pada berbagai cara untuk memperkirakan kesalahan prediksi. Pendekatan umum untuk validasi silang adalah:
1. Sisihkan sejumlah observasi dalam kumpulan data – biasanya 15-25% dari seluruh observasi.
2. Sesuaikan (atau “latih”) model berdasarkan observasi yang kami simpan dalam kumpulan data.
3. Uji seberapa baik model dapat membuat prediksi tentang observasi yang tidak kita gunakan untuk melatih model.
Mengukur kualitas suatu model
Saat kita menggunakan model yang sesuai untuk membuat prediksi tentang observasi baru, kita dapat menggunakan beberapa metrik berbeda untuk mengukur kualitas model, termasuk:
Multiple R-squared: Ini mengukur kekuatan hubungan linier antara variabel prediktor dan variabel respon. Kelipatan R-kuadrat dari 1 menunjukkan hubungan linier sempurna, sedangkan kelipatan R-kuadrat dari 0 menunjukkan tidak ada hubungan linier. Semakin tinggi kelipatan R-squared maka semakin besar kemungkinan variabel prediktor memprediksi variabel respon.
Root mean square error (RMSE): mengukur kesalahan prediksi rata-rata yang dibuat oleh model saat memprediksi nilai observasi baru. Ini adalah jarak rata-rata antara nilai sebenarnya dari suatu observasi dan nilai yang diprediksi oleh model. Nilai RMSE yang lebih rendah menunjukkan kesesuaian model yang lebih baik.
Mean Absolute Error (MAE): Ini adalah perbedaan absolut rata-rata antara nilai sebenarnya dari suatu observasi dan nilai yang diprediksi oleh model. Metrik ini umumnya kurang sensitif terhadap outlier dibandingkan RMSE. Nilai MAE yang lebih rendah menunjukkan kecocokan model yang lebih baik.
Menerapkan empat teknik validasi silang yang berbeda di R
Kami kemudian akan menjelaskan cara menerapkan teknik validasi silang berikut di R:
1. Pendekatan set validasi
2. validasi silang k-fold
3. Abaikan validasi silang
4. Validasi silang k-fold berulang
Untuk mengilustrasikan cara menggunakan teknik-teknik yang berbeda ini, kita akan menggunakan subset dari dataset R bawaan mtcars :
#define dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Kita akan membangun model regresi linier berganda dengan menggunakan disp , hp dan drat sebagai variabel prediktor dan mpg sebagai variabel respon.
Pendekatan set validasi
Pendekatan set validasi bekerja sebagai berikut:
1. Bagilah data menjadi dua set: satu set digunakan untuk melatih model (yaitu memperkirakan parameter model) dan set lainnya digunakan untuk menguji model. Umumnya, set pelatihan dihasilkan dengan memilih 70-80% data secara acak, dan 20-30% data sisanya digunakan sebagai set pengujian.
2. Buat model menggunakan dataset pelatihan.
3. Gunakan model untuk membuat prediksi tentang data set pengujian.
4. Ukur kualitas model menggunakan metrik seperti R-squared, RMSE, dan MAE.
Contoh:
Contoh berikut menggunakan kumpulan data yang kami definisikan di atas. Pertama, kita bagi datanya menjadi
satu set pelatihan dan satu set pengujian, menggunakan 80% data sebagai set pelatihan dan 20% sisanya sebagai set pengujian. Selanjutnya, kita membangun model menggunakan set pelatihan. Kemudian kami menggunakan model tersebut untuk membuat prediksi tentang set pengujian. Terakhir, kami mengukur kualitas model menggunakan R-squared, RMSE dan MAE.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #split the dataset into a training set (80%) and test set (20%). training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE) train <- data[training_obs, ] test <- data[-training_obs, ] # Build the linear regression model on the training set model <- lm(mpg ~ ., data = train) # Use the model to make predictions on the test set predictions <- model %>% predict(test) #Examine R-squared, RMSE, and MAE of predictions data.frame(R_squared = R2(predictions, test$mpg), RMSE = RMSE(predictions, test$mpg), MAE = MAE(predictions, test$mpg)) #R_squared RMSE MAE #1 0.9213066 1.876038 1.66614
Saat membandingkan model yang berbeda, model yang menghasilkan RMSE terendah pada set pengujian adalah model yang disukai.
Keuntungan dan kerugian dari pendekatan ini
Keuntungan pendekatan set validasi adalah sederhana dan efisien secara komputasi. Kekurangannya adalah model yang dibangun hanya menggunakan sebagian dari total data. Jika data yang kita tinggalkan dari set pelatihan berisi informasi menarik atau berharga, model tidak akan memperhitungkannya.
pendekatan validasi silang k-fold
Pendekatan validasi silang k-fold bekerja sebagai berikut:
1. Bagi data secara acak menjadi k “lipatan” atau himpunan bagian (misalnya, 5 atau 10 himpunan bagian).
2. Latih model pada semua data, sisakan hanya satu subset.
3. Gunakan model untuk membuat prediksi tentang data dari subset yang ditinggalkan.
4. Ulangi proses ini hingga masing-masing k subset digunakan sebagai set pengujian.
5 . Ukur kualitas model dengan merata-ratakan kesalahan uji k. Ini diketahui
sebagai kesalahan validasi silang.
Contoh
Dalam contoh ini, pertama-tama kita membagi data menjadi 5 subset. Kemudian kami menyesuaikan model tersebut dengan menggunakan semua kecuali sebagian data. Kemudian kami menggunakan model tersebut untuk membuat prediksi tentang subset yang ditinggalkan dan mencatat kesalahan pengujian (menggunakan R-squared, RMSE, dan MAE). Kami ulangi proses ini sampai setiap subset digunakan sebagai set pengujian. Kemudian kita tinggal menghitung rata-rata dari 5 kesalahan pengujian.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets (or "folds") to use train_control <- trainControl(method = "cv", number = 5) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #Summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold) #Summary of sample sizes: 26, 25, 26, 25, 26 #Resampling results: # # RMSE Rsquared MAE #3.095501 0.7661981 2.467427 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Keuntungan dan kerugian dari pendekatan ini
Keuntungan pendekatan validasi silang k-fold dibandingkan pendekatan set validasi adalah pendekatan ini membangun model beberapa kali dengan menggunakan bagian data yang berbeda setiap kali, sehingga kita tidak perlu menghilangkan data penting saat membuat model.
Bagian subjektif dari pendekatan ini adalah memilih nilai yang akan digunakan untuk k, yaitu jumlah himpunan bagian untuk membagi data. Secara umum, nilai k yang lebih rendah menghasilkan bias yang lebih tinggi tetapi variabilitasnya lebih rendah, sedangkan nilai k yang lebih tinggi menghasilkan bias yang lebih rendah tetapi variabilitasnya lebih tinggi.
Dalam praktiknya, k umumnya dipilih sama dengan 5 atau 10, karena jumlah himpunan bagian ini cenderung menghindari terlalu banyak bias dan terlalu banyak variabilitas secara bersamaan.
Tinggalkan pendekatan One Out Cross-Validation (LOOCV).
Pendekatan LOOCV bekerja sebagai berikut:
1. Bangun model menggunakan semua kecuali satu observasi dalam kumpulan data.
2. Gunakan model untuk memprediksi nilai observasi yang hilang. Catat kesalahan pengujian prediksi ini.
3. Ulangi proses ini untuk setiap observasi dalam kumpulan data.
4. Ukur kualitas model dengan merata-ratakan semua kesalahan prediksi.
Contoh
Contoh berikut menunjukkan cara menggunakan perform LOOCV untuk kumpulan data yang sama dengan yang digunakan pada contoh sebelumnya:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #specify that we want to use LOOCV train_control <- trainControl( method = "LOOCV" ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Leave-One-Out Cross-Validation #Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... #Resampling results: # # RMSE Rsquared MAE #3.168763 0.7170704 2.503544 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Keuntungan dan kerugian dari pendekatan ini
Keuntungan LOOCV adalah kami menggunakan semua titik data, yang secara umum mengurangi potensi bias. Namun, karena kita menggunakan model tersebut untuk memprediksi nilai setiap observasi, hal ini dapat menyebabkan variabilitas yang lebih besar dalam kesalahan prediksi.
Kelemahan lain dari pendekatan ini adalah pendekatan ini harus sesuai dengan sejumlah besar model sehingga menjadi tidak efisien dan berat secara komputasi.
Pendekatan validasi silang k-fold yang berulang
Kita dapat melakukan validasi silang k-fold berulang hanya dengan melakukan validasi silang k-fold beberapa kali. Kesalahan terakhir adalah kesalahan rata-rata dari jumlah pengulangan.
Contoh berikut melakukan validasi silang 5 kali lipat, diulangi sebanyak 4 kali:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets to use and number of times to repeat k-fold CV train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4 ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 4 times) #Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... #Resampling results: # # RMSE Rsquared MAE #3.176339 0.7909337 2.559131 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Keuntungan dan kerugian dari pendekatan ini
Keuntungan dari pendekatan validasi silang k-fold berulang adalah bahwa untuk setiap pengulangan, data akan dipecah menjadi subkumpulan yang sedikit berbeda, yang akan memberikan perkiraan kesalahan prediksi model yang lebih tidak bias. Kerugian dari pendekatan ini adalah komputasinya intensif karena kita harus mengulangi proses penyesuaian model beberapa kali.
Bagaimana memilih jumlah lipatan dalam validasi silang
Bagian paling subyektif dari validasi silang adalah menentukan berapa banyak lipatan (yaitu subset) yang akan digunakan. Secara umum, semakin kecil jumlah lipatan, semakin bias estimasi kesalahannya, namun variabelnya akan semakin kecil. Sebaliknya, semakin tinggi jumlah lipatannya, semakin kecil bias kesalahan estimasinya, namun akan semakin bervariasi.
Penting juga untuk mengingat waktu perhitungan. Untuk setiap lipatan, Anda perlu melatih pola baru, dan meskipun prosesnya lambat, proses ini bisa memakan waktu lama jika Anda memilih jumlah lipatan yang banyak.
Dalam praktiknya, validasi silang biasanya dilakukan sebanyak 5 atau 10 kali lipat, karena hal ini memberikan keseimbangan yang baik antara variabilitas dan bias, sekaligus efisien secara komputasi.
Bagaimana memilih model setelah melakukan validasi silang
Validasi silang digunakan untuk mengevaluasi kesalahan prediksi suatu model. Hal ini dapat membantu kita memilih antara dua atau lebih model yang berbeda dengan menyoroti model mana yang memiliki kesalahan prediksi terendah (berdasarkan RMSE, R-squared, dll.).
Setelah kami menggunakan validasi silang untuk memilih model terbaik, kami kemudian menggunakan semua data yang tersedia agar sesuai dengan model yang dipilih. Kami tidak menggunakan contoh model aktual yang kami latih selama validasi silang untuk model akhir kami.
Misalnya, kita dapat menggunakan validasi silang 5 kali lipat untuk menentukan model mana yang lebih baik digunakan di antara dua model regresi yang berbeda. Namun, setelah kami mengidentifikasi model mana yang terbaik untuk digunakan, kami menggunakan semua data agar sesuai dengan model akhir. Dengan kata lain, kami tidak melupakan lipatan apa pun saat membuat model akhir.