Tata cara penyusunan laporan yang baik menggunakan R Markdown (Rmd) melibatkan beberapa langkah berikut ini secara lebih detail:
Di RStudio, buat dokumen R Markdown baru dengan memilih “File” -> “New File” -> “R Markdown”. Pilih format output yang diinginkan (misalnya, HTML, PDF, atau Word) dan tentukan judul laporan serta informasi metadata lainnya.
Setelah file .Rmd dibuat, Anda akan melihat beberapa bagian dalam file tersebut. Secara umum, struktur file .Rmd terdiri dari beberapa bagian utama, termasuk header, chunk options, teks naratif, dan chunk kode. Berikut adalah penjelasan untuk setiap bagian:
Dalam menghasilkan tampilan yang rapi dari hasil file .Rmd, terdapat beberapa pengaturan yang dapat kita lakukan untuk mempercantik hasil dari penulisan analisa. Header pada R Markdown atau disebut dengan YAML (Yet Another Markup Languange). YAML pada file .Rmd memiliki peranan sebagai tempat untuk menuliskan judul dari proyek yang dikerjakan, nama penulis, tanggal bahkan sampai pengaturan dari table of content.
Dalam Capstone ML, Anda wajib untuk menyertakan YAML yang minimal berisikan informasi, sebagai berikut:
Bagian YAML diawali dengan tanda ---
dan berisi informasi metadata, seperti judul laporan, penulis, tanggal,
dan format output yang diinginkan. Misalnya:
---
title: "Judul Topik Capstone"
author: "Nama Anda"
output:
html_document:
toc: true
toc_float:
collapsed: true
number_sections: true
df_print: paged
---
Sering kali ketika kita mengaktifkan sebuauh library, terdapat sebuah warning ataupun message yang muncul seperti gambar di bawah ini.
Agar nantinya warning ataupun message pada saat pemanggilan library tidak muncul, Anda dapat melakukan pengaturannya dengan menambahkan satu chunk dengan format seperti di bawah ini.
# chunk options
::opts_chunk$set(
knitrmessage = FALSE,
warning = FALSE
)
Terdapat beberapa pengaturan opsional lainnya yang dapat kita tambahkan
fig.align
= bertujuan untuk membuat alignment (posisi
left/right/center)fig.height
& fig.width
= bertujuan
untuk mengatur tinggi & lebar gambar (berupa grafik)out.height
& out.width
= bertujuan
untuk mengatur tinggi & lebar gambarBagian ini digunakan untuk menulis teks naratif, menjelaskan analisis, dan memberikan penjelasan. Anda dapat menggunakan sintaks Markdown untuk memformat teks, menambahkan judul, paragraf, daftar, tautan, dan lainnya. Berikut adalah tata cara menulis teks naratif di Markdown secara detail:
#
diikuti oleh spasi dan judul yang ingin ditulis.
Jumlah tanda #
menentukan tingkat kepentingan judul, dengan
#
tunggal untuk judul utama dan ##
,
###
, dan seterusnya untuk tingkat yang lebih rendah.
Contoh:# Ini adalah judul utama
## Ini adalah judul tingkat kedua
# Heading 1
Tujuan dari penggunaan heading 1 adalah untuk menuliskan bagian
rubrics yang akan dikerjakan, seperti
Model Fitting and Evaluation
.
Penggunaan Heading 1 dapat dibuat dengan menggunakan simbol #
## Heading 2
Tujuan dari penggunaan heading 2 adalah untuk menuliskan proses yang
dikerjakan pada bagian sub-rubrics yang akan dikerjakan, seperti
Compare multiple model
.
Penggunaan Heading 2 dapat dibuat dengan menggunakan simbol ##
NB: Untuk penambahan heading berikutnya silahkan tambahkan jumlah #.
Ini adalah paragraf pertama.
Ini adalah paragraf kedua.
*
) atau
garis bawah (_
). Untuk membuat teks miring, tambahkan tanda
asterisk atau garis bawah di sekitar teks yang ingin dimiringkan. Untuk
membuat teks tebal, tambahkan dua tanda asterisk atau garis bawah di
sekitar teks yang ingin ditebalkan. Contoh:Ini adalah *teks miring* dan ini adalah **teks tebal**.
-
) atau angka (1.
) di
awal setiap item daftar. Pastikan Anda memberikan satu spasi setelah
tanda dash atau angka. Misalnya:- Item 1
- Item 2
- Subitem 2.1
- Subitem 2.2
1. Item A
2. Item B
[teks tautan](URL)
. Misalnya:Ini adalah [tautan ke Google](https://www.google.com/).

. Teks alternatif
akan ditampilkan jika gambar tidak dapat ditampilkan. Misalnya:
>
di awal setiap baris kutipan.
Misalnya:> Ini adalah contoh blok kutipan.
> Ini adalah baris kedua dalam kutipan.
Kode: Untuk menampilkan kode, Anda dapat
menggunakan tanda backtick untuk menandai teks sebagai kode inline.
Untuk menyisipkan blok kode yang lebih panjang, Anda dapat menggunakan
tiga tanda backtick (```
) sebelum dan setelah blok kode.
Misalnya:
Inline code: print("Hello, World!")
Blok kode:
print("Ini adalah contoh blok kode.")
x <- 10
y <- 20
z <- x + y
print(z)
|
) sebagai pemisah antara kolom, dan garis
pemisah (---
) sebagai baris pemisah antara header tabel dan
isi tabel. Misalnya:| Nama | Usia |
|--------|------|
| John | 30 |
| Sarah | 28 |
^
), subskrip
(~
), dan garis horizontal (---
). Anda dapat
menggunakan sintaks tersebut sesuai kebutuhan.Bagian ini digunakan untuk menulis dan mengeksekusi chunk kode R. Anda dapat menambahkan chunk kode dengan menggunakan tanda ```{r} dan menulis kode R di dalamnya.
Tata cara penulisan narasi untuk menjelaskan kode dan proses yang dilakukan dalam laporan dapat mengikuti langkah-langkah berikut:
Klarifikasi Tujuan: Mulailah narasi dengan mengklarifikasi tujuan dari kode atau proses yang akan dijelaskan. Jelaskan secara ringkas apa yang akan dicapai dengan kode tersebut.
Penjelasan Umum: Berikan penjelasan umum tentang apa yang dilakukan oleh kode atau proses tersebut. Gambarkan konsep atau algoritma yang digunakan, serta langkah-langkah yang akan diambil.
Pemahaman Awal: Jika diperlukan, jelaskan pemahaman awal tentang data atau konteks yang terlibat dalam proses atau analisis. Ini dapat mencakup deskripsi tentang variabel, dataset, atau asumsi yang digunakan.
Deskripsi Kode atau Langkah-langkah: Jelaskan kode atau langkah-langkah yang akan dijalankan secara terperinci. Gunakan bahasa yang jelas dan sederhana untuk menjelaskan apa yang dilakukan oleh setiap baris kode atau langkah-langkah.
Pengantar Visualisasi: Jika ada visualisasi yang dihasilkan oleh kode atau proses, berikan pengantar singkat tentang tujuan dan jenis visualisasi yang akan ditampilkan. Jelaskan apa yang ingin Anda komunikasikan melalui visualisasi tersebut.
Penjelasan Hasil: Setelah kode atau proses dijalankan, jelaskan hasil yang dihasilkan. Jelaskan bagaimana hasil tersebut terkait dengan tujuan yang telah ditetapkan sebelumnya. Jika ada kesimpulan atau temuan yang signifikan, sertakan juga penjelasan tentang hal itu.
Pengantar Langkah Berikutnya: Jika ada langkah-langkah atau analisis selanjutnya yang perlu dilakukan setelah kode atau proses ini, berikan pengantar singkat tentang apa yang akan dilakukan selanjutnya. Jelaskan mengapa langkah-langkah tersebut diperlukan dan bagaimana mereka akan membantu dalam analisis lebih lanjut.
Kesimpulan: Akhiri narasi dengan kesimpulan singkat tentang kode atau proses yang telah dijelaskan. Jelaskan apakah tujuan yang ditetapkan telah tercapai dan apa yang telah dipelajari dari proses tersebut.
Dalam menjelaskan kode, pastikan untuk mengikuti prinsip-prinsip tata bahasa yang baik, seperti memberikan penjelasan yang cukup detail, menghindari penggunaan istilah teknis yang tidak jelas, dan menggunakan contoh atau ilustrasi jika diperlukan. Selain itu, pastikan narasi Anda terorganisir dengan baik dan mudah diikuti oleh pembaca.
Secara spesifik, setiap rubrics dari Capstone ML yang kami sediakan. Anda harus mengerjakan beberapa rubrics besar sebagai berikut.
Berikut adalah panduan dalam penulisan setiap poinnya:
Pada bagian ini, akan diawali dengan pembacaan data. Silakan membaca data dan menampilkan maksimal 6 baris saat akan dikenitkan, seperti contoh di bawah ini:
head(iris)
Selain menampilkan data, Anda juga dapat menjelaskan intuisi dari masing-masing kolom data yang ditunjukkan.
Deskripsi Kolom Data:
Sepal.Length
: Panjang dari ukuran daunSepal.Width
: Lebar dari ukuran daunPetal.Length
: Panjang dari ukuran bungaPetal.Width
: Lebar dari ukuran bungaSpecies
: Jenis spesies (setosa, versicolor,
virginica)Setelah melakukan pemanggilan data dan memberikan deskripsi, Anda dapat melanjutkan dengan beberapa tahap pembersihan data. Kami harap Anda dapat menjelaskan dengan jelas tahapan yang dilakukan dalam proses pembersihan data. Sebagai contoh, tahap berikutnya adalah memeriksa tipe data dan mengubahnya jika diperlukan. Berikut adalah contoh pengerjaan yang kami harapkan.
Tahapan berikutnya yang perlu dilanjutkan adalah melakukan eksplorasi data. Sebagai contoh, terdapat dua eksplorasi yang ingin dilakukan. Mari kita jelaskan setiap bagian pembahasan secara rinci. Berikut adalah contoh narasi yang disusun untuk setiap eksplorasi.
EDA1: Pengecekan dengan summary()
Pada tahap ini, kita akan melakukan eksplorasi data menggunakan
fungsi summary()
. Fungsi ini memberikan ringkasan dari 5
perhitungan statistik untuk kolom dengan tipe data numerik, serta
perhitungan frekuensi kemunculan untuk kolom dengan tipe data
kategorikal. Mari kita terapkan fungsi ini pada data yang kita
miliki.
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Dari hasil fungsi summary()
, kita dapat menemukan
beberapa temuan sebagai berikut:
EDA2: Pengecekan outlier
Setelah mengecek penyebaran data pada kolom-kolom numerik, kita dapat
melihat apakah terdapat outlier dalam data menggunakan visualisasi
boxplot()
. Fungsi boxplot()
digunakan untuk
menganalisis lebih lanjut kolom numerik yang kita pilih, dengan
menyediakan argumen nama_data$nama_kolom_numerik
.
boxplot(iris$Sepal.Width)
Dari visualisasi di atas, kita dapat mengetahui bahwa rentang lebar
yang dianggap normal berkisar antara 2.25 hingga 4. Jika lebar lebih
kecil atau lebih besar dari rentang tersebut, dapat dikategorikan
sebagai outlier. Selain melihat visualisasi Boxplot, kita juga dapat
mencari informasi tentang jumlah nilai outlier yang sebenarnya ada.
Untuk itu, kita dapat menyimpan hasil boxplot pada sebuah variabel dan
menggunakan $out
untuk menampilkan outlier.
<- boxplot(iris$Sepal.Width) box_sw
$out box_sw
## [1] 4.4 4.1 4.2 2.0
Dari hasilnya, kita dapat mengetahui bahwa data kita hanya memiliki sedikit nilai yang dianggap outlier. Hanya terdapat 4 pengamatan yang dianggap sebagai outlier dari total 150 pengamatan data.
Dari contoh pengerjaan di atas, kami berharap Anda dapat melakukan eksplorasi data dari data yang telah disiapkan, menjelaskan fungsi-fungsi yang digunakan, dan mengungkapkan wawasan dari setiap eksplorasi yang dilakukan. Selain itu, kami juga berharap Anda dapat membagi setiap eksplorasi menjadi sub-heading atau menggunakan format yang terstruktur untuk mempermudah pemahaman.
Setelah melewati dua tahapan di awal, tahapan ketiga yang perlu Anda lakukan adalah mempersiapkan data agar lebih siap sebelum di-implementasikan ke model machine learning yang akan digunakan. Sebagai contoh, kita ingin melakukan tahapan cross validation.
Tahapan cross validation adalah tahapan yang kita gunakan untuk mengetahui seberapa baik performa model kita memprediksi terhadap data baru.
Lantas, bagaimana cara mengetahui apakah model yang kita buat telah
baik dalam memprediksi data baru? Di sinilah mengapa kita melakukan
Train-test splitting. Kita membagi data kita menjadi 2 kelompok, yaitu
data train
dan test
.
train
: Data yang model gunakan untuk
training.test
: Data untuk evaluasi model (Untuk melihat
seberapa baik model memprediksi terhadap data yang tidak digunakan untuk
training)Jika diibaratkan, seorang siswa dapat dikatakan pintar ketika dapat
menjawab benar soal-soal ujian yang tidak pernah dikerjakannya pada
soal-soal latihan untuk persiapan ujian. Data train
diibaratkan soal latihan, dan data test
diibaratkan soal
ujian. Adapun model
kita diibaratkan sebagai siswa.
Sekarang, mari kita coba lakukan pemisahan data dengan menggunakan fungsi yang terdapat pada chunk di bawah ini.
# Penentuan nilai random
set.seed(123)
# Pengaturan pemisahan data dengan fungsi initial split dari library rsample
<- initial_split(data = iris, # parameter untuk mengisi data yang digunakan
init prop = 0.8, # parameter mengatur proporsi untuk data train
strata = Species) # parameter untuk memberitahu kolom target
# Membagi data untuk data train dengan fungsi training()
<- training(init)
data_train
# Membagi data untuk data test dengan fungsi testing()
<- testing(init) data_test
Setelah menjalan fungsi di atas, kita sudah berhasil untuk melakukan
pembagian data yang akan digunakan sebagai data latih dan data uji.
Terdapat dua hal yang perlu di perhatikan, jangan mengubah angka pada
fungsi set.seed()
dan jumlah prorposi yang dialokasikan
pada data latih kita, tujuannya agar hasil dari model yang kita buat
tidak berubah ketika kita melakukan pengulangan dari awal.
Tahapan berikutnya yang perlu kita lakukan adalah mengecek proporsi data pada data latih yang kita miliki.
prop.table(table(data_train$Species))
##
## setosa versicolor virginica
## 0.3333333 0.3333333 0.3333333
Dari hasil pengamatan di atas, kita mengetahui bahwa proporsi data untuk setiap kelas target yang kita miliki adalah seimbang. Akan tetapi jika data tersebut belum proporsional, kita dapat membuat tahapan selanjutnyab yaitu tahapan balancing data.
Dari contoh pengerjaan di atas, kami mengharapkan Anda berhasil melakukan Data Preprocessing beserta menjelaskan tahapan-tahapan yang terdapat pada bagian tersebut secara runtut dan dapat menyambungkan penjelsasan sebelumnya dengan tahapan yang akan dilakukan setelahnya.
Pada bagian ini, kami akan meminta Anda untuk membuat sebuah model dan melakukan evaluasi terhadap hasilnya. Sebagai contoh, kita akan melakukan tahapan “Model and Evaluation”.
Dalam dataset yang kita miliki, kelas target adalah multikelas, sehingga kita tidak dapat menggunakan model regresi logistik karena model tersebut hanya digunakan untuk prediksi pada kelas biner (2 kelas) saja. Namun, tidak perlu khawatir, masih terdapat model lain yang dapat digunakan, salah satunya adalah K-NN (K-Nearest Neighbors), serta model pembanding yang akan kita gunakan adalah Random Forest.
Model 1: K-NN
Salah satu alasan mengapa kita memilih model K-NN adalah karena model ini sangat cocok ketika semua variabel dalam bentuk numerik, karena model K-NN menggunakan perhitungan jarak Euclidean.
Tahap pertama yang perlu kita lakukan adalah menentukan nilai K,
dengan menggunakan akar kuadrat dari jumlah pengamatan data yang kita
miliki menggunakan fungsi sqrt()
.
sqrt(nrow(data_train))
## [1] 10.95445
Dari hasil perhitungan di atas, kita dapat membulatkan ke atas nilai
K yang akan digunakan menjadi 11. Ini dikarenakan salah satu aturan
praktis dalam menentukan nilai K adalah memilih nilai K yang ganjil.
Setelah itu, kita dapat membuat model K-NN dengan menggunakan fungsi
knn()
dari paket class
.
Pada fungsi knn()
, terdapat 4 parameter yang perlu
diisi, yaitu:
train
= data train - prediktor dengan tipe numeriktest
= data test - prediktor dengan tipe numerikcl
= data train - label (target) aktual
(kategorikal)k
= jumlah K yang telah ditentukan sebelumnya<- knn(train = data_train %>% select(-Species),
knn_pred test = data_test %>% select(-Species),
cl = as.factor(data_train$Species),
k = 11)
head(knn_pred)
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
Setelah melakukan pemodelan dan mendapatkan hasil prediksi, kita
dapat melakukan evaluasi menggunakan matriks kebingungan (confusion
matrix) dengan menggunakan fungsi confusionMatrix()
dari
paket caret
.
<-
eval_knn confusionMatrix(data = knn_pred,
reference = as.factor(data_test$Species))
eval_knn
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 10 0
## virginica 0 0 10
##
## Overall Statistics
##
## Accuracy : 1
## 95% CI : (0.8843, 1)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : 4.857e-15
##
## Kappa : 1
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 1.0000 1.0000
## Specificity 1.0000 1.0000 1.0000
## Pos Pred Value 1.0000 1.0000 1.0000
## Neg Pred Value 1.0000 1.0000 1.0000
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3333 0.3333
## Detection Prevalence 0.3333 0.3333 0.3333
## Balanced Accuracy 1.0000 1.0000 1.0000
Dari hasil evaluasi di atas, model K-NN telah menghasilkan prediksi dengan performa yang sangat baik, karena semua data test dapat diprediksi dengan benar oleh model yang telah disiapkan. Meskipun hasil evaluasi menunjukkan bahwa model tersebut telah menghasilkan prediksi yang baik, masih terdapat satu model lain yang akan kita coba pada bagian selanjutnya.
Model 2: Random Forest
Pada pembuatan model pembanding atau model kedua, silakan terapkan langkah-langkah yang sama dengan contoh penjelasan pembuatan model K-NN.
Dari contoh pengerjaan di atas, kami berharap Anda dapat menjelaskan fungsi-fungsi atau parameter-parameter yang digunakan dalam pembuatan model, dan dalam tahapan prediksi, harap sertakan penjelasan mengenai hasil yang diperoleh. Selain itu, jika Anda melakukan proses penyetelan model (model tuning), harap dijelaskan penyetelan apa yang dilakukan dan hasil yang diperoleh.
Dalam rangka membandingkan beberapa model yang dibuat dalam rubrik ini, disarankan untuk membuat sebuah dataframe baru yang mengumpulkan informasi penting dari setiap model. Berikut ini adalah contoh pembuatan dataframe baru:
<- data_frame(Model = "K-NN",
compare_knn Accuracy = round((eval_knn$overall[1] * 100), 2),
Recall = round((eval_knn$byClass[1] * 100), 2),
Precision = round((eval_knn$byClass[3] * 100), 2))
<- data_frame(Model = "RF",
compare_rf Accuracy = 92,
Recall = 90,
Precision = 98)
rbind(compare_knn, compare_rf)
Dengan menggunakan dataframe ini, Anda dapat dengan mudah membandingkan dan melihat performa dari setiap model yang telah dibuat.
Diharapkan dengan contoh di atas, Anda dapat membuat dan mengisi dataframe dengan informasi yang relevan dari setiap model yang dibuat.
Pada bagian kesimpulan, Anda dapat memberikan ringkasan mengenai temuan yang Anda peroleh dari tahapan EDA, model mana yang memberikan performa terbaik, proses yang Anda lakukan untuk meningkatkan hasil model, saran bisnis yang dapat Anda berikan berdasarkan topik yang diambil, dan sebagainya. Anda juga dapat mencantumkan link referensi yang Anda gunakan.