PERTANYAAN-PERTANYAAN MENARIK TENTANG DATA SCIENCE DI BRI

Tantangan Menulis Hari ke-104

Oleh: Bernardus Ari Kuncoro

Dalam acara TalksON ke-41 minggu lalu, saya dipercaya sebagai moderator. Topiknya tentang Optimasi persediaan uang cash pada kantor cabang atau unit di BRI. Mas Risal Andika yang menjadi nara sumber.

Dalam webinar tersebut, machine learning digunakan untuk memodelkan berapa uang tunai yang mesti dipersiapkan di tiap kantor cabang BRI. Ada 5000-an model machine learning yang dibangun. Menarik, bukan?

Terdapat 200-an peserta yang mengikuti dari mana-mana. Lewat Zoom. Berikut ini adalah pertanyaan-pertanyaan yang muncul.

Beberapa ada yang sudah dijawab. Namun mengingat keterbatasan waktu, banyak pertanyaan yang belum sempat dibahas.


Wirasta C. Pambudi to Me (Direct Message) (7:32 PM)
Kak mau nanya, dalam melakukan prediksi machine learning, tools apa yang di gunakan?
Wirasta C. Pambudi to Me (Direct Message) (7:35 PM)
Seberapa besar peran data science di BRI?
Wirasta C. Pambudi to Me (Direct Message) (7:38 PM)
karena di perusahaan saya hal prediktif seperti ini sudah pernah dilakukan namun hasil perhitungan berdasarkan statistic seperti ini mentah di mata direksi, sehingga peran data science di perusahaan saya tidak powerfull, mohon penjelasannya

Yulinda to Everyone (7:42 PM)
seberapa presisi prediksi data dr machine learning dg eksisting

Arif RH to Everyone (7:42 PM)
Itu metode evaluasi yg bagus itu yg mana ?

Edo Pratama to Everyone (7:43 PM)
mas, model ini tiap berapa kali dilakukan update nya?

Bima Priambodo to Everyone (7:44 PM)
mas bagaimana life cycle maintenance modelnya?

Rio to Everyone (7:44 PM)
[tanya] evaluasi yang MASE tadi untuk MAE2nya dari mana ya?

Fakhri Rizal Santosa to Me (Direct Message) (7:46 PM)
Siapakah inisiator dalam merubah metode moving average menjadi ML, apakah karena temuan dari team data scientist atau memang menjadi issue di level management / unit bisnis?

Kurnia Andre Febrian to Everyone (7:46 PM)
mas, terkadang saya mengalami stuck, mengaplikasikan persamaan matematis ke codingnya. ada kah tips untuk mengurangi itu? ehehhe

Rio to Everyone (7:50 PM)
[tanya] kalau di BRI, dalam satu project data science kan tadi dibilang ada data engineer, data analyst, data scientist, sama dari product. biasanya berapa orang yang terlibat ya dalam satu project data science tersebut? terus waktunya berapa lama? apakah sepanjang tahun atau beberapa bulan?

Bima Priambodo to Everyone (7:52 PM)
model sampai 5000 unique,, bagaimana cara maintenance modelnya mas?? life scyclenya bagaimana ms?

Nofriandi to Everyone (7:59 PM)
materi persentasi nanti dishare nggak mas?

David Kurniawan

  1. Bahasa pemrograman dan platform apa yang sering digunakan BRI?
  2. Machine learning mengikuti trend and seasonality, lalu bagaimana solusi untuk pandemi seperti sekarang ini dimana datasetnya akan sangat berbeda dan akan susah untuk diprediksi?
  3. Bagaimana mengetahui atau tracking model kita perlu retraining setelah deploymenet?

Iren Ramadhan:
Halo mas, tadi sempat disebutkan bahwa cukup sulit untuk memprediksi di saat Corona seperti ini (dependen kepada peraturan pemerintah). Untuk di BRI sendiri ketika keadaan seperti sekarang, apakah metode predictionnya masih sama seperti yang dipresentasikan saat ini atau ada metode lain ya? Terima kasih

Revalda:
selamat malam, izin bertanya, apakah pada case ini, BRI memasukkan semua variable yang ada pada slide, atau ada eliminasi sehingga tidak semua fitur dimasukkan ke model? lalu jika dilakukan menggunakan metode apa?

Abduh Riski:

  1. bagi yang tertarik untuk melakukan penelitian juga tentang prediksi kas bri seperti ini, apakah bisa mendapatkan data yang diperlukan? bagaimana caranya?
  2. apa Bahasa pemrograman yang digunakan oleh teman2 bri dalam menndevelop model machine learningynya.

Heri Wahyu:
Pada Feature Engineering, jika kita membuat feature baru, apakah berarti pada saat model digunakan nanti datasetnya juga harus dilakukan feature engineering juga untuk membuat feature baru tersebut ya ?

Arnawisuda:
Utk lebih mempelajari materi hari ini, apakah dimungkinkan kami mendapatkan data2 primer yg dpt diolah seperti yg disampaikan narasumber??

Robby:
Selamat malam host IYKRA, berikut beberapa pertanyaan yang saya ajukan. Semoga bisa diajukan, terimakasih.

  1. Berapa hari prediksi kedepan yang ideal dan hari pengiriman uang untuk Cash In dan Cash Out pada unit kerja maupun kantor cabang BRI?
  2. Algoritma apa yang paling tepat dan sering diterapkan dalam prediksi Cash in dan Cash out?
  3. Berapa hari jeda remodeling yang sering dilakukan di BRI?
  4. Ada banyak unit kerja dan kantor cabang, berarti perlu analisis prediksi 1 per 1 unit kerja dan kantor cabang di BRI?
  5. Error rate (MAPE, MAE, MASE) apa yang biasa digunakan? Berapa batas error rate yang ideal yang digunakan dalam prediksi Cash in dan Cash out di BRI?

Muhammad Ashabul Kahfi:
Mas, mau tanya apakah ada best practice untuk mengetahui bahwa data yang dimiliki bisa dilakukan prediksi menggunakan machine learning

Kevin Prasetio:
mengapa menggunakan mape ? tidak menggunakan LSE atau MSE?

Charisma

  1. Apakah ada sample dataset yang bisa digunakan untuk melakukan prediction seperti kasus yang dilakukan kak risal?misalkan di kaggle atau lainnya. 2. tools apa aja yang digunakan kak risal supaya menghasilkan prediction dg machine learning tersebut? 3. metode evaluasi yang mana yg paling bagus dalam penggunaan machine learning?

Tris DIanasari
Selamat malam bapak Risal, berikut beberapa pertanyaan yang saya ajukan:

  1. Setelah diperoleh model akan dilakukan iterasi, kapan iterasi akan berhenti?
  2. Apakah ada treatment data sebelum masuk model? seperti data preparation (missing value, outlier dll)
  3. Berapa proporsi data training dan data testing?
  4. Bagaimana cara melakukan seleksi variabel sebelum masuk model?
  5. Setelah pembentukan model, apakah dilakukan proses backtesting untuk menguji kestabilan model?
  6. Hasil proyeksi dapat memprediksi sampai jangka waktu kapan?

Terima Kasih

Prasetyo:

  1. Prediksi terkait kebutuhan kas unit kerja dapat tersaji H- berapa kah dr kebutuhan? untuk mengantisipasi kekurangan kas agar unit kerja punya waktu untuk melakukan Tambahan Kas 2. jika terjadi Rush/penarikan banyak dan tiba2 karena adanya kebutuhan mendadak/ ada perubahan data bisa langsung mengupdate kah? tks

Andi:
Hi, pengen nanya Kak, terkait unexpected factor seperti keputusan libur pemerintah. Bagaimana treatmentnya ya?

Aditya EKa:
apakah melakukan perhitungan prediksi machine learning setiap hari? atau tiap minggu?

Andi:
Hi, pengen nanya Kak, terkait unexpected factor seperti keputusan libur pemerintah. Bagaimana treatmentnya ya?

I Wayan:
Dalam pengembangan terlihat menggunakan beberapa metode. seperti ARIMA, Linear Regression, dll. Apa yg menjadi kelebihan dan kekurangan masing2 metode sehingga perlu dilakukan kombinasi?

Kurnia Andre:
mas, terkadang saya mengalami stuck, mengaplikasikan persamaan matematis ke codingnya. ada kah tips untuk mengurangi itu? ehehhe

Adinda Oktavia:
bagaimana tim data scientist melakukan penyesuaian rumus/metodologi yang diapplikasikan pada saat kondisi ekonomi tidak menentu (contoh saat Cov 19)? dan seberapa besar effect dari kebijakan cashless yang saat ini banyak berlaku untuk transaksi yang ada.

Ocha Alieffi:
aya mau tanya kak proses pola kolaborasi dengan tim lain (DE,DA,dll) seperti apa ya gambarannya

Izin bertanya mas, kan tadi disebutkan menggunakan OLS. Berarti untuk asumsi-asumsi klasiknya harus terpenuhi. Bagaimana ketika terdapat beberapa asumsi-asumsi tersebut tidak terpenuhi? Sehingga, apa yg harus dilakukan untuk dapat dilakukan analisis lebih lanjut?

Andi:
`Nanya lagi kak, tadi dikatakan bahwa proporsi predictior itu 20%nya merupakan input dari subject-matter expert. bagaimana menentukan apakah “wejangan” dari subject matter-expert di-accept atau enggak ??

Kalideres, 12 Juli 2021

OBROLAN TENTANG MACHINE LEARNING DI BANK RAKYAT INDONESIA

Tantangan Menulis Hari ke-95

Oleh: Bernardus Ari Kuncoro

Hai Para Data Enthusiasts,

Saya akan menemani Mas Risal Andika T. berdiskusi dalam acara #TalksON41 IYKRA X BRI: Optimasi Uang Kas di Kantor Cabang Bank BRI Menggunakan Prediksi Machine Learning

Yuk, dicatat tanggalnya!

­čŚô Kamis, 8 Juli 2021
ÔîÜ´ŞĆ Pukul 7 – 8 malam

*

Kurangnya efisiensi dalam pengelolaan uang tunai yang beredar di lapangan, khususnya di unit kerja dapat meningkatkan biaya operasional dan hilangnya potensi penggunaan uang tunai untuk bisnis perbankan BRI.

Untuk mengatasi itu, tim Enterprise Data Management BRI membangun sebuah model berbasiskan Machine Learning yang dapat memberikan rekomendasi pengelolaan uang tunai sehingga diharapkan mampu menekan biaya operasional dan mengurangi hilangnya kesempatan bisnis BRI dalam penggunaan uang tunai.

Penasaran bagaimana cara membuatnya? Mari kita saksikan dan diskusikan di #TalksON41 IYKRA x BRI bersama Risal Andika Tridisaputra (Data Science Product Manager BRI) dan dimoderatori oleh Ari Kuncoro (Head of Analytics Center of Excellence IYKRA)

Apa saja yang akan dibahas?
1. Bagaimana cara memulai mengidentifikasi suatu masalah yang ditemukan dalam bisnis
2. Bagaimana cara membangun end-to-end solution produk data science
3. Bagaimana tampilan Cash Prediction
4. Bagaimana cara untuk mengevaluasi Prediction Model
5. Machine learning life cycle di bank BRI

Apa yang akan kamu dapatkan?
– e-certificate
– materi presentasi
– Gabung ke grup Telegram Kelas Data by IYKRA

Daftar sekarang, GRATIS di https://bit.ly/talksoniykraxbri

* Kontributor: Tim TalksON IYKRA dan BRI.

Kalideres, 13 Januari 2021

BAGGING VS BOOSTING

Tantangan Menulis Hari ke-92

Oleh: Bernardus Ari Kuncoro

Tahukah Anda tentang istilah Bagging dan Boosting?

Bagging dan Boosting ini merupakan bagian dari metode ADVANCED supervised learning. Dikenal luas dengan nama Ensemble Learning.

Bagging adalah singkatan dari Bootstraping Aggregating. Ide pembuatan modelnya adalah dengan dibangunnya sejumlah dataset dari sampling secara acak, lalu diterapkan algoritma supervised learning yang homogen terhadap masing-masing dataset. Hasil dari masing-masing model diagregasikan dengan cara voting (cari yang terbanyak) atau averaging (cari rata-ratanya).

Boosting memiliki ide untuk melakukan pelatihan model yang homogen dan dilakukan secara berulang-ulang. Langkah pengulangan saat ini memiliki tujuan minimisasi error yang lebih rendah daripada langkah sebelumnya.

Agak rumit memang. Saya coba untuk memberikan analogi ini kepada Anda.

Filosofi Bagging ini mirip dengan cara Anda belajar kelompok (Collaborative Learning). Sedangkan Boosting ini punya analogi yang selaras dengan belajar mandiri dan dilakukan secara berulang-ulang (Gradual Learning).

Lebih lanjut, Anda bisa belajar lagi tentang Random Forest, Adaboost, LightGBM, dan algoritma ensemble learning lainnya.

Kalideres, 30 Juni 2021

KAPAN MESTI PAKAI ML?

Tantangan Menulis Hari ke-90

Oleh: Bernardus Ari Kuncoro

Sangat penting untuk Anda ketahui bahwa Machine Learning (ML) bukan merupakan satu-satunya solusi untuk semua persoalan. Ada kasus-kasus khusus yang mana Anda tidak butuh teknik ML.

Dalam kondisi penentuan prediksi yang menggunakan aturan sederhana, komputasi matematis, atau langkah-langkah yang sudah diprogram, ML sungguh tidak perlu.

Berikut ini adalah dua kondisi di mana Anda membutuhkan ML.

  1. Anda tidak bisa mengkodekan aturan jika-maka secara sederhana. Ambil contoh, Anda ingin melakukan klasifikasi apakah email yang Anda terima merupakan spam atau bukan. Pada aturan yang melibatkan terlalu banyak faktor, maka akan menjadi sangat sulit untuk manusia mengkodekan aturan ini secara akurat. Dalam memecahkan masalah ini, Anda butuh ML.
  2. Anda tidak bisa memperbesar (scale) pekerjaan. Mungkin saja Anda bisa mengidentifikasi ratusan email untuk menentukan apakah email tersebut spam atau bukan. Akan tetapi, pekerjaan ini menjadi sangat kompleks apabila melibatkan jutaan atau bahkan milyaran email.

Sumber: Amazon ML

Kalideres, 28 Juni 2021

FILOSOFI RANDOM FOREST

Tantangan Menulis Hari ke-198

Oleh: Bernardus Ari Kuncoro

Dalam tulisan sebelumnya ada ulasan saya tentang pohon keputusan. Diibaratkan sebagai vegetasi individu yang sedang growing. Ada urutan langkah-langkah yang harus dilakukan. 

Lantas jika ratusan pohon ditumbuhkan, bagaimana? 

Begitulah algoritma Random Forest. Beragam pohon keputusan disemai secara acak. Dibiarkan mereka memilih variabel dan observasi sesuai dengan benih-benihnya.

Sejumlah pohon tertentu yang biasanya tidak kurang dari 100 didewasakan. Hasil akhir keputusannya dapat lebih kuat. Bisa memiliki power yang mengutamakan kepentingan banyak pihak.

Namun, kelemahannya juga ada. Butuh biaya berupa proses rumit dan waktu yang lama. Sehingga membutuhkan prosesor yang mumpuni. 

Jika Random Forest dan Decision Tree ini dianggap sebagai sistem pemerintahan sebuah negara, maka negara demokratis-lah yang dianggap sebagai representasi random forest. Sedangkan decision tree ini adalah pengejawantahan dari sistem pemerintahan kerajaan.

Bagus yang mana? Tergantung. Tidak bisa dipukul rata. Ada raja yang cakap dan beres mengatur negaranya. Ada pula sistem pemerintahan demokrasi yang korup dan malah acak kadut memimpin bangsanya.

Bagi seorang manusia yang mau hidup dan berkomunitas dengan berkualitas, membuat keputusan dengan keseimbangan dan kesabaran itu diperlukan. Agar keputusan-keputusan kecil maupun besar bisa diambil tanpa penyesalan.

Santuy. Tapi tetap waspada!

Berikut ini adalah karya turunan dari hasil tulisan ini. Silakan menikmati karya versi lainnya.

Kalideres, 14 Februari 2021

FILOSOFI DECISION TREE

Tantangan Menulis Hari ke-197

Oleh: Bernardus Ari Kuncoro 

Dalam sebuah algoritma, Anda mengenal adanya urutan langkah. Sedikit demi sedikit ada hal-hal yang mesti dijalani. Proses yang wajib dilalui untuk meraih tujuan. 

Untuk algoritma decision tree, beberapa keputusan-keputusan dibuat. Mana variabel-variabel yang dianggap penting didahulukan sebagai akar. Mana yang kurang penting ditaruh sebagai ranting. Hingga ujung dahan terkecil.

Anda pun mengenal entropy, di mana semakin heterogen suatu node, maka semakin tinggi entropy. Sebaliknya semakin homogen, maka semakin rendah entropy. Anda juga diajak untuk mengenal Gini. Yang fungsinya mirip dengan entropy. Kalau Anda tertarik untuk mengenal perbedaannya, bisa dibaca lebih dalam di sini.

Kalau dipikirkan lebih dalam, hidup itu laksana menumbuhkan pohon-pohon keputusan. Satu hari terdapat ada beragam keputusan yang Anda buat. Mulai dari makan, minum, belanja, bekerja, dan sebagainya.

Itu baru satu pohon. Jika banyak pohon bagaimana? Ada nama khusus algoritmanya, yaitu Random Forest.

Bersambung!

Kalideres, 13 Februari 2021

K-MEANS AND HIERARCHICAL CLUSTERING IN PYTHON

Tonight, 5 June 2020, I was assigned by IYKRA to deliver “Clustering” online class training at Data MBA Batch #3 program. I would like to show you the summary of the class. Here the agenda is.

  • Pre-Quiz (19:00 – 19:05)
  1. Theory of unsupervised learning: Clustering (19:05 – 19:20)
  2. K-Means Clustering (19:20 – 19:40)
  3. Hierarchical Clustering (19:40 – 20:00)
  4. Measurement Parameters for Clustering (20:00 – 20:15)
  5. Hands on and Exercise of K-Means Clustering and Hierarchical Clustering with Python (20:15 – 20:45)
  • Q & A (20:45 – 20:55)
  • Post-Quiz (20:55 – 21:00)

Note: The hands on will be delivered in Python (Point 5).

Continue reading “K-MEANS AND HIERARCHICAL CLUSTERING IN PYTHON”

Kembali Mengajar, karena Diundang

Tahun 2018 sudah memasuki bulan Maret. Tak terasa. Jakarta masih saja panas, sehingga membuat sebagian besar penduduknya harus menyamankan diri dengan Air Conditioner (AC).┬á Tak terkecuali saya.┬áSebagai catatan pada saat saya menuliskan postingan ini, AC kamar tidur bocor dan belum sempat dibersihin karena tukangnya sibuk. Sudah hampir sebulan kejadian ini berlangsung, sehingga harus kita tampung dengan ember. lol. Dan pagi dini hari ini ceritanya epik, posisi embernya nggak pas… alhasil lantai basah dan mesti nge-pel di tengah tidur nyenyak ku.

Back to the topic about work.

Sejak bulan kedelapan di tahun yang lalu, saya mulai meniti karya di tempat yang baru. Artinya sudah tujuh bulan saya berkarya di tempat tersebut. Tidak mudah memang menjalaninya terutama dari sisi birokrasi yang terkesan kaku dan rempong dengan tetek bengeknya, per-HR-an yang tidak sesuai ekspektasi, dan beberapa alat penunjang kerja yang awalnya tidak memuaskan.

Tapi saya akan bertahan karena banyak positifnya. Orang-orang setim yang mau maju, mau memperbaiki, dan saling mendukung. Sepertinya Tuhan menjawab doa saya, mengingat di tahun 2017 saya tiga kali pindah kerja. Ini dia quote yang membuat saya kuat.

Saya percaya Tuhan pasti selalu menunjukkan jalan bagi orang yang percaya. Ibarat Musa ditunjukkan jalan oleh Tuhan untuk membebaskan kaum Israel dari perbudakan Mesir, demikian pula Tuhan menunjukkan saya jalan terbaik.

Kembali diminta mengajar.

Awal tahun 2017 ini saya mulai diminta untuk mengajar setelah rehat kira-kira hampir 9 bulan. Topiknya ya nggak jauh-jauh dari kerjaan tentang Data, R, SQL, Machine Learning, dan sebangsanya. Thank You IYKRA (Fajar dan Zizah) atas undangannya. Awalnya agak sulit, tapi kalau dijalani, ya OK juga. Saya sendiri merasakan dampak positif yang luar biasa, karena saya “dipaksa” untuk belajar, karena memang hal ini wajib dilakukan sebagai persiapan sebelum mengajar.

Selama dua bulan terakhir ini, saya sudah mengajar selama 4x. Lumayan banyak ya… Dan nanti bakalan ada lagi bulan April dan Mei. Terus terang saya senang mengingat hasilnya bisa dipakai untuk ganti dan pasang AC. ­čÖé┬áBut,┬álebih dari itu, saya merasa senang kalau orang lain merasakan manfaat dari apa yang saya bagikan.

I believe I don’t have to wait until I am reach to share with others.

– BAK, 2018 –

Pertama, saya ngajar workshop di future force fair. Itu dihadiri oleh 180 peserta. Formatnya workshop tentang R. Anda bisa lihat materinya gratis tanpa dipungut pajak ataupun se-sen rupiah pun di sini. (Anda tinggal klik kanan, lalu “save Link as” atau “save target as”.

Ini beberapa foto saya ketika mengajar. Guanteng yo?

Kedua, saya ngajar ggplot2 dan dplyr. Materinya bisa didownload di sini.

Ketiga, saya ngajar sql for data analisis. Materinya bisa didownload di sini.

Keempat, saya ngajar advanced sql. Materinya bisa didownload di sini.

There will be more interesting story to tell when I teach and give speech. So, stay tuned!

 

The comparison between randomForest and ranger

A couple days ago I had a chance to be a speaker on internal data scientist meeting at the company that I work for: Stream Intelligence. The meeting is usually held on monthly basis, and the last meeting in October was 6th meeting. We used Skype for Business to connect between the Data Scientists in Jakarta and in London.

I delivered a topic titled Random forest in R: A case study of a telecommunication company. For those who do not know Random Forest, an Indian guy, Gopal Malakar, had made a video uploaded in Youtube. He elaborated the definition of random forest. First of all, check the video out!

Based on the video, one important thing that you have to remember about random forest is that, it is a collection of trees. It was built by a number of decision trees. Each decision trees is formed by random variables and observations of the training data.

Supposed that we have trained a random forest model, and it was made from 100 decision trees. One test observation was inputted on the model. The decision tree outputs will result 60Y and 40N. Hence the output of random forest model is Y with score or probability 0.6.

OK, let’s practice how to train random forest algorithm for classification in R. I just knew it couple weeks ago from Datacamp course, that there are two random forest packages: 1) randomForest and 2) ranger. They recommend ranger, because it is a lot faster than original randomForest.

To prove it, I have created a script using Sonar dataset and caret package for machine learning, with methods: ranger / rf, and tuneLength=2 (this argument refers to mtry, or number of variables that was used to create trees in random forest). In random Forest, mtry is the hyperparameter that we can tune.

# Load some data 
library(caret)
library(mlbench)
data(Sonar)

# Fit a model with a deeper tuning grid 
ptm <- proc.time()
model <- train(Class~., data = Sonar, method="ranger",tuneLength=2)
proc.time() - ptm

ptm2 <- proc.time()
model_rf <- train(Class~., data = Sonar, method="rf",tuneLength=2)
proc.time() - ptm2

Output of ranger training

> proc.time() - ptm
user system elapsed
22.37 0.29 23.66

Output of random forest training

> proc.time() - ptm2
user system elapsed
26.75 0.29 27.80

So, the random forest training with ranger function is 26.75-22.37 = 4.38 seconds or 25% faster than original random forest (Assume we use user time).

However, if I tried to change tuneLength parameter with 5. It reveals that the original randomForest function is faster than ranger. Hmmm… seems that I have to upload a question to stackoverflow or Datacamp experts.

> library(mlbench)
> data(Sonar)
> 
> # Fit a model with a deeper tuning grid 
> ptm <- proc.time()
> model <- train(Class~., data = Sonar, method="ranger",tuneLength=5)
> proc.time() - ptm
   user  system elapsed 
 137.19    0.69  141.67 
> 
> ptm2 <- proc.time()
> model_rf <- train(Class~., data = Sonar, method="rf",tuneLength=5)
> proc.time() - ptm2
   user  system elapsed 
  79.30    0.10   81.55

Comparing The Machine Learning Methods with ROC Curve

Yesterday I continued a Datacamp online course named Introduction to Machine Learning. Frankly, this course is very useful to strengthen my understanding in machine learning! Plus, I am a big fan of R! The more you repeat the course, the more you understand the meaning of it. Well, the topic was about “comparing the methods”. It is part of chapter 3 – Classification topic, precisely at the end of the chapter. It says that the powerful tool to compare the machine learning methods, especially classification, is ROC Curve. FYI, out of the record, this ROC curve analysis was also requested by the one of the client. ­čśë

What is ROC?

ROC stands for Receiver Operating Characteristic. In statistics, it is a graphical plot that illustrates the performance of a binary classifier system as its discrimination threshold is varied.  Electrical engineers and radar engineers during World War II firstly developed the ROC curve for detecting objects of enemy, then soon used by psychologist to account for perceptual detection of stimuli. At this point, ROC analysis has been used in medicine, radiology, biometrics, machine learning, and data mining research. (Source: here).

The sample of ROC curve is illustrated in the Figure 1. The horizontal axis represents the false-positive rate (FPR), while vertical axis represents the true-positive rate (TPR). The true-positive rate is also known as sensitivity, recall or probability of detection in machine learning. The false-positive rate is also known as the fall-out or probability of false alarm and can be calculated as (1 Ôłĺspecificity).

ROC Curve - Source: Wikipedia
Figure 1. ROC Curve – Source: Wikipedia.

How to create this curve in R?

You need:

  • Classifier that outputs probabilities
  • ROCR Package installed

Suppose that you have a data set called adult that can be downloaded here from UCIMLR. It is a medium sized dataset about the income of people given a set of features like education, race, sex, and so on. Each observation is labeled with 1 or 0: 1 means the observation has annual income equal or above $50,000, 0 means the observation has an annual income lower than $50,000. This label information is stored in the income variable. Then data split into train and test. Upon splitting, you can train the data using a method e.g. decision tree (rpart), predict the test data with “predict” function and argument type=”prob”, and aha… see the complete R code below.

set.seed(1)

# Build a model using decision tree: tree
tree <- rpart(income ~ ., train, method = "class")

# Predict probability values using the model: all_probs
all_probs <- predict(tree,test,type="prob")

# Print out all_probs
all_probs

# Select second column of all_probs: probs
probs <- all_probs[,2]

# Load the ROCR library
library(ROCR)

# Make a prediction object: pred
pred <- prediction(probs,test$income)

# Make a performance object: perf
perf <- performance(pred,"tpr","fpr")

# Plot this curve
plot(perf)

The plot result is as follow:

ROC result of DT
Figure 2. ROC result of Decision Tree

How to interpret the result of ROC?

Basically, the closer the curve to the upper left corner, the better the classifier. In other words, the “area under curve” should be closed to maximum value, which is 1. We can do comparison of performance based on ROC curve of two methods which are Decision Tree (DT) and K-Nearest Neighbor K-NN as seen in Figure 3. It shows that the DT method that represented by red line outperforms K-NN that represented by green line.

ROC Result of DT and KNN
Figure 3. ROC Result of Decision Tree and K-Nearest Neighbor

The R Code to draw Figure 3 is represented by the following code:

# Load the ROCR library
library(ROCR)

# Make the prediction objects for both models: pred_t, pred_k
# probs_t is the result of positive prediction of Decision Tree Model 
# probs_k is the result of positive prediction of K-Nearest Neighbor
pred_t <- prediction(probs_t, test$spam)
pred_k <- prediction(probs_k, test$spam)

# Make the performance objects for both models: perf_t, perf_k
perf_t <- performance(pred_t,"tpr","fpr")
perf_k <- performance(pred_k,"tpr","fpr")

# Draw the ROC lines using draw_roc_lines()
draw_roc_lines(perf_t,perf_k)

Area under curve (AUC) parameter can also be calculated by running this command below. It shows that the AUC of DT is 5% greater than K-NN.

# Make the performance object of pred_t and pred_k: auc_t and auc_k
auc_t <- performance(pred_t,"auc")
auc_k <- performance(pred_k,"auc")

# Print the AUC value
auc_t@y.values[[1]] # AUC result is 0.9504336
auc_k@y.values[[1]] # AUC result is 0.9076067

Summary

  • ROC (Receiver Operator Characteristic) Curve is a very powerful performance measure.
  • It is used for binomial classification.
  • ROCR is a great package to be used in R for drawing ROC curve
  • The closer the curve to the upper left of area, the better the classifier.
  • The good classifier has big area under curve.