Pengantar Data Sains

Tugas 6 : Regresi 1


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/arifin.alicia/
RPubs https://rpubs.com/aliciaarifin/
Nama Alicia Arifin
NIM 20214920001
Prodi Statistika, 2021

Group 1:
1. Alicia Arifin
2. Diyas Arya Nugroho
3. Dhela Asafiani Agatha

Regresion 1 : K-nearest neighbor

Chapter Learning Objectives

Pada akhir bab, pembaca akan dapat melakukan hal berikut:
• Mengenali situasi dimana analisis regresi sederhana akan sesuai untuk membuat prediksi.
• Menjelaskan algoritma regresi tetangga K-terdekat (KNN) dan dapat menjelaskan bagaimana perbedaannya dari klasifikasi KNN.
• Menafsirkan output regresi KNN.
• Dalam dataset dengan dua atau lebih variabel, melakukan regresi tetangga K-terdekat di R menggunakan alur kerja tidymodels.
• Menjalankan validasi silang di R untuk memilih jumlah tetangga.
• Mengevaluasi akurasi prediksi regresi KNN dalam R menggunakan kumpulan data pengujian dan kesalahan prediksi kuadrat rata-rata akar (RMSPE).
• Dalam konteks regresi KNN, Membandingkan dan mengetahui kontras dari kelebihan sifat fit dan prediksinya (yaitu RMSE vs RMSPE).
• Menjelaskan kelebihan dan kekurangan regresi tetangga K-terdekat.

The regression problem

Pada kali ini, kita akan membahas apa itu regresi. Sebenarnya, regresi sama saja hal nya dengan klasifikasi. Dimana pada proses ini kita akan melakukan sebuah prediksi dari data yang ingin kita prediksi. Akan tetapi, yang menjadi pembeda nya adalah pada regresi, kita akan memprediksi nilai numerik, bukan kategori nya. Kita ambil contoh, kita ingin memprediksi harga dari sebuah rumah dari angka luas rumah nya. Contoh lain adalah ketika kita ingin memprediksi berat badan seseorang dari tinggi badan dan jenis kelamin orang tersebut. Ada lagi ketika kita ingin menentukan suatu bobot jantung dari bobot badan yang dimiliki. Dan masih banyak lagi yang dapat kita lakukan.

Terdapat banyak cara yang dapat kita lakukan untuk menentukan prediksi nilai numerik, tetapi pada tahap ini kita akan fokus pada menentukan nilai prediksi numerik dengan K-NN atau K-Nearest Neighbor. Saat melakukan model regresi, pertama-tama kita perlu untuk membagi data menjadi set pelatihan dan pengujian, untuk memastikan bahwa kita menilai kinerja metode kita pada pengamatan yang tidak terlihat selama pelatihan. Dan akhirnya, kita dapat menggunakan validasi silang untuk mengevaluasi berbagai pilihan parameter model (misalnya, K dalam model tetangga K-terdekat). Perbedaan utamanya adalah bahwa kita sekarang memprediksi variabel numerik, bukan variabel kategoris.

Agar lebih menekankan konsep dari materi ini, mari kita ambil contohnya. Pada prediksi numerik, terkadang untuk menentukan perbedaannya kita pasti membandingkan nilai dari kedua nya. Seperti, ‘apakah tinggi badan jenis kelamin perempuan lebih tinggi dari tinggi badan jenis kelamin laki-laki?’ Tentu kita bisa membandingkan kedua hal ini, Kenapa? Tentu saja karena ini merupakan variabel numerik. Akan tetapi, apakah kita bisa membandingkan ‘Apakah Hijau lebih besar dari Biru?’ Tentu tidak bisa, sangat mustahil. Jadi, dalam tahap ini kita akan lebih fokus ke prediksi variabel numerik nya. Jadi, ayo kita mulai!

Exploring a data set

Untuk mempelajari materi pada kali ini, kita menggunakan dataset dari 932 real estate transactions in Sacramento, California. Hal yang pertama perlu kita lakukan adalah pertanyaan apa yang ingin kita temukan jawabannya. Contoh pertanyaannya, aoakah kita dapat menggunakan ukuran rumah di daerah Sacramento-California untuk memprediksi harga jual rumahnya? Jawaban kuantitatif untuk pertanyaan ini dapat membantu kita mengetahui dan memberi informasi apakah harga tersebut sesuai dengan kondisi luas rumahnya.

Kita bisa memulai analisisnya dengan mengimpor dataset nya dan menetapkan seed nya.

setwd(getwd())
library(tidyverse)
library(tidymodels)
library(gridExtra)

set.seed(5)

sacramento <- read_csv("sacramento.csv")
sacramento

Seperti yang dapat kita lihat di atas, kolom variabel yang dapat kita langsung gunakan adalah kolom sqft dan price. Langkah pertama yang dapat kita lakukan untuk melihat hubungan antara kedua variabel nya adalah dengan menggunakan scatter plot. Kita perlu memplot variabel ukuran rumahnya pada sumbu x (sebagai prediktor) dan variabel harga rumahnya di sumbu y (sebagai targetnya). Mari kita coba untuk membuat plot nya.

eda <- ggplot(sacramento, aes(x = sqft, y = price)) +
  geom_point(alpha = 0.4) +
  xlab("House size (square feet)") +
  ylab("Price (USD)") +
  scale_y_continuous(labels = dollar_format()) + 
  theme(text = element_text(size = 12))

eda

Figure 7.1: Scatter plot of price (USD) versus house size (square feet).

Pada grafik di atas, kita memformat label sumbu untuk menempatkan tanda dolar di depan harga rumah serta koma untuk meningkatkan keterbacaan angka yang lebih besar. Untuk hal ini, kita dapat menggunakan fungsi dollar_format dari fungsi scale_y_continuous.

Dari grafik yang bisa kita lihat di atas, menunjukkan bahwa semakin luas ukuran rumahnya, maka harga penjualannya juga semakin mahal. Hal ini dapat kita gunakan untuk melakukan analisis dalam memprediksi harga rumah yang belum terjual (yang belum diketahui harga jualnya). Akan tetapi pada kasus ini, luas rumah yang besar belum tentu harga nya juga semakin mahal. Hanya saja hal ini memiliki faktor dan kecenderungan yang saling berhubungan.

K-nearest neighbors regression

Nah, untuk mendalami materi ini, kita akan coba melakukan regresi terhadap data sacramento. Kita ambil sample terkecil dahulu untuk melihat prediksinya. Kita ambil data sebanyak 30.

Untuk melakukan langkah ini, kita menggunakan fungsi slice_sample dan memasukkan data secara acak.

small_sacramento <- slice_sample(sacramento, n = 30)

Selanjutnya, katakanlah kita ingin membeli rumah di Sacramento yang luas rumahnya 2000 sqft. Harga yang di iklankan untuk rumah dengan luas ini adalah $350.000. Apakah harga ini terlalu mahal? Harus kah kita melakukan penawaran? Atau bahkan justru harganya sudah pas.

Untuk mengetahui atau memprediksi hal ini, kita dapat menggunakan regresi. Mari kita coba buat grafiknya untuk mengetahui harga prediksinya.

small_plot <- ggplot(small_sacramento, aes(x = sqft, y = price)) +
  geom_point() +
  xlab("House size (square feet)") +
  ylab("Price (USD)") +
  scale_y_continuous(labels = dollar_format()) +
  geom_vline(xintercept = 2000, linetype = "dotted") + 
  theme(text = element_text(size = 12))

small_plot

Figure 7.2: Scatter plot of price (USD) versus house size (square feet) with vertical line indicating 2,000 square feet on x-axis.

Kita bisa melihat hasil grafik yang telah kita buat seperti yang ada di atas. Seperti yang kita lihat, kita bisa mengetahui adanya 5 tetangga terdekat terhadap garis yang menunjukkan luas rumah 2000 sqft. Untuk lebih lanjut, kita akan mencoba melakukan slice 5 tetangga yang terdekat tersebut. Dimana langkah ini dapat lebih meng-highlight 5 tetangga terdekatnya.

nearest_neighbors <- small_sacramento |>
  mutate(diff = abs(2000 - sqft)) |>
  arrange(diff) |>
  slice(1:5) #subset the first 5 rows

nearest_neighbors

7.3 Figure 7.3: Scatter plot of price (USD) versus house size (square feet) with lines to 5 nearest neighbors. png

Grafik di atas (7.3) menunjukkan adanya perbedaan antara ukuran rumah dari 5 tetangga terdekatnya dengan rumah baru yang ingin diprediksi harganya (rumah dengan luas 2000 sqft). KEmudian, untuk memprediksi harga rumahnya, kita perlu mencari mean atau rata-rata dari ke-5 tetangga terdekatnya yang telah kita slice tadi.

prediction <- nearest_neighbors |>
  summarise(predicted = mean(price))

prediction

7.4 Figure 7.4: Scatter plot of price (USD) versus house size (square feet) with predicted price for a 2,000 square-foot house based on 5 nearest neighbors represented as a red dot.

Nah, pada langkah ini dapat kita ketahui bahwa kita mendapatkan nilai prediksi berupa mean sebesar $272687 (yang ditampilkan pada titik merah pada grafik di atas). Tentu harga prediksi ini lebih kecil dibandingkan harga yang terdapat pada iklan tadi (350.000 dollar). Maka dari itu, dari proses regresi yang telah kita buat ini, dapat memudahkan kita dalam memprediksi suatu hal yang ingin kita ketahui. Akan tetapi, ini baru permulaan. Masih banyak variabel yang dapat kita prediksi.

Salah satu kekuatan algoritma regresi KNN yang ingin kita perhatikan pada saat ini adalah kemampuannya untuk bekerja dengan baik dengan hubungan non-linear (yaitu, jika hubungan itu bukan garis lurus). Hal ini berasal dari penggunaan tetangga terdekat untuk memprediksi nilai. Algoritma ini benar-benar memiliki sangat sedikit asumsi tentang seperti apa data itu bekerja.

Training, evaluating, and tuning the model

Pada tahap ini, setelah kita uji coba data set pada tahap-tahap sebelumnya dengan mengambil beberapa data, kita baru dapat menentukan model akhir apa yang akan kita pilih pada data set ini. Sebelumnya kita hanya menggunakan 30 sample dari data set, namun pada tahap ini kita akan menggunakan seluruh data set tersebut.

sacramento_split <- initial_split(sacramento, prop = 0.75, strata = price)
sacramento_train <- training(sacramento_split)
sacramento_test <- testing(sacramento_split)

Selanjutnya, untuk memilih nilai K kita dapat menggunakan metode cross-validation. Dalam klasifikasi KNN, kita gunakan akurasi untuk melihat seberapa baik prediksi kita cocok dengan label yang sebenarnya. Dalam menyeting regresi kita tidak boleh menggunakan metrik yang sama, karena sejatinya prediksi kita itu tidak benar-benar tepat dengan nilai variable respons yang sebenarnya. Maka dari itu, untuk melakukan KNN regresi kita dapat menggunakan Root Mean Square Prediction Error (RMSPE). Secara matematis RMSPE dirumuskan sebagai berikut.

RMSPE Ket : + n adalah jumlah pengamatan
+ yi adalah nilai yang diamati untuk data pengamatan ke-i
+ yi (yang ada ^) adalah nilai prediksi untuk data pengamatan ke-i


RMSPE itu sendiri berguna untuk mencari standar pengamatan error dari model prediksi kita dengan cara menghitung perbedaan squared antara prediksi dan nilai respons data yang sebenarnya. Tujuannya untuk mengetahui apakah perbedaan itu bernilai positif atau negatif. Untuk mengukur seberapa akurat suatu prediksi itu dengan nilai respons kita dapat melihatnya pada nilai RMSPE. Jika nilai RMSPE itu kecil maka jarak prediksi itu mendekati nilai respons. Sebaliknya, jika nilai RMSPE itu besar maka jarak prediksi itu sangat jauh dengan nilai respons. Nah, dalam menggunakan metode cross-validation kita memilih nilai K berdasarkan nilai RMSPE terkecil.

7.5 Figure 7.5: Scatter plot of price (USD) versus house size (square feet) with example predictions (blue line) and the error in those predictions compared with true response values for three selected observations (vertical red lines).


Selanjutnya, kita lakukan cross-validation dan memilih nilai K menggunakan R. Langkah pertama, kita melakukan pre-processing data dengan menggunakan function recipe(). Lalu, kita tentukan metode KNN dan model regresi yang akan digunakan dalam analisis pada data ini menggunakan function set_engine("kknn") dan set_mode("regression").

sacr_recipe <- recipe(price ~ sqft, data = sacramento_train) |>
  step_scale(all_predictors()) |>
  step_center(all_predictors())

sacr_spec <- nearest_neighbor(weight_func = "rectangular", 
                              neighbors = tune()) |>
  set_engine("kknn") |>
  set_mode("regression")

sacr_vfold <- vfold_cv(sacramento_train, v = 5, strata = price)

sacr_wkflw <- workflow() |>
  add_recipe(sacr_recipe) |>
  add_model(sacr_spec)

sacr_wkflw
## == Workflow ====================================================================
## Preprocessor: Recipe
## Model: nearest_neighbor()
## 
## -- Preprocessor ----------------------------------------------------------------
## 2 Recipe Steps
## 
## * step_scale()
## * step_center()
## 
## -- Model -----------------------------------------------------------------------
## K-Nearest Neighbor Model Specification (regression)
## 
## Main Arguments:
##   neighbors = tune()
##   weight_func = rectangular
## 
## Computational engine: kknn

Setelah, melakukan pre-processing untuk menentukan metode dan model yang digunakan, kita akan melakukan cross-validation dengan KNN 1 sampai 200. Yang dimana nantinya akan menghasilkan rata-rata dan standar error dari masing-masing nilai KNN.

gridvals <- tibble(neighbors = seq(from = 1, to = 200, by = 3))

sacr_results <- sacr_wkflw |>
  tune_grid(resamples = sacr_vfold, grid = gridvals) |>
  collect_metrics() |>
  filter(.metric == "rmse")

# show the results
sacr_results

7.6 Figure 7.6: Effect of the number of neighbors on the RMSPE.


Selanjutnya, kita akan memilih nilai KNN yang tepat sesuai dengan nilai rata-rata terkecil.

# show only the row of minimum RMSPE
sacr_min <- sacr_results |>
  filter(mean == min(mean))

sacr_min

Output di atas didapat bahwa RMSPE dengan rata-rata terkecil terjadi ketika nilai K = 58

Underfitting and overfitting

Pada tahap ini kita dapat membandingkan model regresi dengan nilai K yang berbeda. Nilai K yang digunakan adalah 1,3,37,41,250, dan 932.

7.7 Figure 7.7: Predicted values for house price (represented as a blue line) from KNN regression models for six different values for K.

Seperti yang telah dipelajari pada bab sebelumnya, pada tahap ini kita dapat menganalisa apakah model yang kita pakai itu underfitting, overfitting atau sudah sesuai dengan yang kita mau. Pada grafik diatas dapat dilihat bahwa pada K = 1 dan K = 3 itu memiliki model data overfitting, karena trend yang dihasilkan sangat pas pada semua data yang ada tanpa menganalisis pola trend dari data, Model seperti ini tidak akan memberikan prediksi yang akurat. Sedangkan, model data underfitting dapat dilihat pada K = 250 dan K = 932, karena model yang ditampilkan itu terlalu simpel dia tidak dapat memahami atau menganalisis tren yang mendasari data. Model ini juga tidak baik untuk dijadikan sebuah prediksi. Lalu apa model yang baik? Model yang baik adalah model yang mampu menjelaskan tren tanpa dipengaruhi oleh data dan mampu menjelaskan hubungan setiap variablenya. Dapat dilihat pada K = 37 yang dimana menjelaskan bahwa setiap kenaikan ukuran rumah maka kenaikan harga juga meningkat. Namun model ini juga masih belum bisa memberikan kita variasi harga yang istimewa seperti, pada ukuran rumah antara 4000 - 5000 meter persegi memiliki variasi harga yang sama yaitu $500.000. Oleh karena itu, pemilihan nilai K pada analisis ini sangat berpengaruh terhadap tren atau hubungan antar linear atau variable.

Evaluating on the test set

Untuk menilai kualitas model dalam memprediksi data yang tidak terlihat, kami akan menilai RMSPE-nya pada data pengujian. Pertama, kita akan melatih ulang model regresi KNN kami pada seluruh kumpulan data pelatihan (training data set) dengan K = 37. Lalu, kita akan menggunakan predict untuk membuat prediksi pada data pengujian, dan menggunakan metrics function lagi untuk menghitung summary kualitas regresi. Karena kita memutuskan menggunakan regresi dalam set_mode, fungsi metrics tahu cara menghasilkan ringkasan kualitas yang berkaitan dengan regresi, dan bukan, katakanlah, klasifikasi.

kmin <- sacr_min |> pull(neighbors)

sacr_spec <- nearest_neighbor(weight_func = "rectangular", neighbors = kmin) |>
  set_engine("kknn") |>
  set_mode("regression")

sacr_fit <- workflow() |>
  add_recipe(sacr_recipe) |>
  add_model(sacr_spec) |>
  fit(data = sacramento_train)

sacr_summary <- sacr_fit |>
  predict(sacramento_test) |>
  bind_cols(sacramento_test) |>
  metrics(truth = price, estimate = .pred) |>
  filter(.metric == 'rmse')

sacr_summary

Error atau kesalahan Final model test yang kita bikin ini dinilai oleh RMSPE sebanyak $89.279. Perhatikan bahwa RMSPE diukur dalam unit yang sama dengan variabel respons. Dengan kata lain, pada pengamatan baru, kita memperkirakan kesalahan dalam prediksi sekitar 89.279 dollar . Di satu sisi, kabar baik : perkiraan ini hampir sama dengan perkiraan RMSPE validasi silang dari model yang kita setel (yaitu 85.227 dollar ),sehingga kita dapat mengatakan bahwa model tersebut tampaknya menggeneralisasi atau cocok dengan baik ke data baru yang belum pernah dilihat sebelumnya.
Namun, seperti dalam kasus klasifikasi KNN, apakah nilai tersebut untuk RSPE baik atau tidak tergantung cara pengaplikasikannya. Dalam pengaplikasikan ini, error atau kesalahan tidak terlalu besar, tetapi juga tidak dapat diabaikan; $ 89.279 mungkin mewakili sebagian besar dari anggaran pembeli rumah, dan dapatmembuat mereka jadi membeli rumah atau tidak atau apakah mereka mampu mengajukan penawaran di rumah atau tidak.
Gambar 7.8 menunjukkan prediksi bahwa model akhir dari berbagai ukuran rumah yang mungkin kita temui di daerah Sacramento - dari 500 hingga 5000 kaki persegi.

sacr_preds <- tibble(sqft = seq(from = 500, to = 5000, by = 10))

sacr_preds <- sacr_fit |>
  predict(sacr_preds) |>
  bind_cols(sacr_preds)

plot_final <- ggplot(sacramento_train, aes(x = sqft, y = price)) +
  geom_point(alpha = 0.4) +
  geom_line(data = sacr_preds, 
            mapping = aes(x = sqft, y = .pred), 
            color = "blue") +
  xlab("House size (square feet)") +
  ylab("Price (USD)") +
  scale_y_continuous(labels = dollar_format()) +
  ggtitle(paste0("K = ", kmin)) + 
  theme(text = element_text(size = 12))

plot_final

Figure 7.8: Predicted values of house price (blue line) for the final KNN regression model.

Multivariable KNN regression

Seperti dalam klasifikasi KNN, kita dapat menggunakan beberapa prediktor dalam regresi KNN. Dalam pengaturan ini, kami memiliki kekhawatiran yang sama mengenai skala prediktor.
Prediksi dibuat dengan menentukan K observasi yang terdekat dengan titik terbaru yang mau kita prediksi; variabel berskala lebih besar akan lebih berpengaruh daripada skala yang kecil. Tetapi karena recipe yang kami buat di atas skala dan pusat semua variabel prediktor, masalah ini sudah ditangani.
Perhatikan bahwa kami juga memiliki kekhawatiran yang sama mengenai pemilihan prediktor dalam regresi KNN seperti dalam klasifikasi KNN: banyak prediktor tidak selalu lebih baik, dan pilihan prediktor mana yang akan digunakan memiliki pengaruh yang berpotensi besar pada kualitas prediksi. Untungnya, kita dapat menggunakan algoritma seleksi prediktor dari bab klasifikasi dalam regresi KNN juga.


Kami sekarang akan mendemonstrasikan analisis regresi KNN multivariabel dari data real estat Sacramento menggunakan tidymodels. Kali ini kami akan menggunakan ukuran rumah (squere feet) serta jumlah kamar tidur sebagai prediktor kami, dan terus menggunakan harga jual rumah sebagai variabel hasil / target kami yang kami coba prediksi. Itu selalu merupakan praktik yang baik untuk melakukan analisis data eksplorasi, seperti memvisualisasikan data, sebelum kita mulai memodelkan data. Gambar 7.9 menunjukkan bahwa jumlah kamar tidur mungkin memberikan informasi yang berguna untuk membantu memprediksi harga jual rumah.

plot_beds <- sacramento |>
  ggplot(aes(x = beds, y = price)) +
  geom_point(alpha = 0.4) + 
  labs(x = 'Number of Bedrooms', y = 'Price (USD)') + 
  theme(text = element_text(size = 12))

plot_beds

Figure 7.9: Scatter plot of the sale price of houses versus the number of bedrooms.

Gambar 7.9 menunjukkan bahwa ketika jumlah kamar tidur meningkat, harga jual rumah cenderung meningkat juga, tetapi hubungan itu cukup lemah. Apakah menambahkan jumlah kamar tidur ke model kami meningkatkan kemampuan kami untuk memprediksi harga? Untuk menjawab pertanyaan itu, kita harus membuat model regresi KNN baru menggunakan ukuran rumah dan jumlah kamar tidur, dan kemudian kita dapat membandingkannya dengan model yang sebelumnya kita buat yang hanya menggunakan ukuran rumah.
Pertama kita akan membangun spesifikasi model baru dan resep untuk analisis. Perhatikan bahwa kita menggunakan rumus price ~ sqft + beds untuk menunjukkan bahwa kita memiliki dua prediktor, dan mengatur neighbor = tune() untuk memberitahu tidymodels untuk menyetel jumlah tetangga atau titik.

sacr_recipe <- recipe(price ~ sqft + beds, data = sacramento_train) |>
  step_scale(all_predictors()) |>
  step_center(all_predictors())

sacr_spec <- nearest_neighbor(weight_func = "rectangular", 
                              neighbors = tune()) |>
  set_engine("kknn") |>
  set_mode("regression")

Selanjutnya, kita akan menggunakan validasi silang 5 kali lipat untuk memilih jumlah tetangga melalui RMSPE minimum:

gridvals <- tibble(neighbors = seq(1, 200))

sacr_multi <- workflow() |>
  add_recipe(sacr_recipe) |>
  add_model(sacr_spec) |>
  tune_grid(sacr_vfold, grid = gridvals) |>
  collect_metrics() |>
  filter(.metric == "rmse") |>
  filter(mean == min(mean))

sacr_k <- sacr_multi |>
              pull(neighbors)

sacr_multi

Di sini kita melihat kalau nilai RMSPE yang terkecil dari validasi silang terjadi Ketika K = 12. Jika kita ingin membandingkan model regresi KNN multivariabel ini dengan model dengan hanya prediktor tunggal sebagai bagian dari proses penyetelan model (misalnya, jika kita menjalankan seleksi ke depan seperti yang dijelaskan dalam bab tentang mengevaluasi dan menyetel model klasifikasi), kita harus membandingkan akurasi yang diperkirakan hanya menggunakan data pelatihan melalui validasi silang.
Dari hasil sebelumnya, perkiraan akurasi validasi silang untuk model prediktor tunggal adalah 85.227. Perkiraan akurasi validasi silang untuk model multivariabel adalah 82.648. Jadi dalam hal ini, kami tidak meningkatkan model dengan jumlah besar dengan menambahkan prediktor tambahan ini.
Apapun, mari kita lanjutkan analisis untuk melihat bagaimana kita dapat membuat prediksi dengan model regresi KNN multivariabel dan mengevaluasi kinerjanya pada data pengujian. Pertama-tama kita perlu melatih kembali model pada seluruh kumpulan data pelatihan dengan K = 12, dan kemudian menggunakan model itu untuk membuat prediksi pada data pengujian.

sacr_spec <- nearest_neighbor(weight_func = "rectangular", 
                              neighbors = sacr_k) |>
  set_engine("kknn") |>
  set_mode("regression")

knn_mult_fit <- workflow() |>
  add_recipe(sacr_recipe) |>
  add_model(sacr_spec) |>
  fit(data = sacramento_train)

knn_mult_preds <- knn_mult_fit |>
  predict(sacramento_test) |>
  bind_cols(sacramento_test)

knn_mult_mets <- metrics(knn_mult_preds, truth = price, estimate = .pred) |>
                     filter(.metric == 'rmse')
knn_mult_mets

Ketika kami melakukan regresi KNN pada kumpulan data yang sama, dan juga menambahkan jumlah kamar tidur sebagai prediktor, kami memperoleh kesalahan tes RMSPE sebesar 90.953. Gambar 7.10 memvisualisasikan prediksi model yang dilapisi di atas data. Kali ini prediksi adalah permukaan di ruang 3D, bukan garis di ruang 2D, karena kita memiliki 2 prediktor, bukan 1.

3D.1 3D.2 3D.3

Figure 7.10: KNN regression model’s predictions represented as a surface in 3D space overlaid on top of the data using three predictors (price, house size, and the number of bedrooms). Note that in general we recommend against using 3D visualizations; here we use a 3D visualization only to illustrate what the surface of predictions looks like for learning purposes.


Kita dapat melihat bahwa prediksi dalam hal ini, di mana kita memiliki 2 prediktor, membentuk permukaan, bukan garis. Karena predictor baru (jumlah kamar tidur) ini saling berhubungan dengan harga dan tidak selalu ditentukan dengan ukuran rumah, kita mendapat informasi tambahan dan berguna untuk membuat prediksi.
Contoh, dalam model ini kita akan memprediksi bahwa biaya rumah dengan ukuran 2.500 kaki persegi umumnya meningkat sedikit karena jumlah kamar tidur meningkat. Tanpa memiliki prediktor tambahan jumlah kamar tidur, kami akan memprediksi harga yang sama untuk kedua rumah ini.

Strengths and limitations of KNN regression

Seperti klasifikasi KNN (atau algoritma prediksi apa pun dalam hal ini), regresi KNN memiliki kekuatan dan kelemahan :
Kelebihan :
• Merupakan algoritma yang sederhana dan intuitif,
• membutuhkan beberapa asumsi tentang seperti apa data itu, dan
• bekerja dengan baik dengan hubungan non-linear (yaitu, jika hubungan itu bukan garis lurus).


Kelemahan:
• menjadi sangat lambat karena data pelatihan semakin besar,
• mungkin tidak berkinerja baik dengan sejumlah besar prediktor, dan
• mungkin tidak memprediksi jauh melampaui jangkauan input nilai dalam data pelatihan Anda.