Data Career Day (DCD) merupakan program career support algoritma yg dibuat untuk memfasilitasi alumni untuk mendapatkan kesempatan rekrutmen dari hiring partner melalui tahapan yang sudah disiapkan.

Pada Data Career Day, pada Business Mentor dan Technical Chaperone phase, akan diberikan penilaian. Adapun total poin yang bisa diperoleh pada Business Mentor (BM) phase adalah 40/40 yang akan didapat dari proposal project yang dihasilkan setelah mentoring dengan BM. Sedangkan, pada Technical Chaperone (TC) phase, akan diperoleh penialaian maksimal 60/60 yang akan didapat dari penilaian dashboard dan machine learning yang dihasilkan. Info detail mengenai timeline dan sheet penilaian dari Data Career Day 12.0 bisa diakses melalui link berikut DCD 12.0 Information.

Rubrics DCD

Business Mentor

LATAR BELAKANG (17 POIN)

  • Permasalahan yang ingin diselesaikan (5 poin)
  • Project Impact (3 = Low, 5 = Medium, 8 = High)
  • Pengguna yang akan mendapatkan manfaat dari project jelas (4 poin)

PEMAHAMAN MASALAH (5 POIN)

  • Tujuan dari project jelas (5 poin)

PENGUMPULAN DATA (8 POIN)

  • Teknik pengumpulan data (primer/sekunder) sudah baik (4 poin) Data yang digunakan sudah sesuai dengan kebutuhan bisnisnya (4 poin)

PERSIAPAN DATA (10 POIN)

  • Pemilihan mengenai target dan prediktor yang digunakan (2 poin)
  • Tahapan eksplorasi data yang digunakan sudah tepat (8 poin)

Technical Chaperone

MACHINE LEARNING (25 POIN)

  • Pemilihan model machine learning berdasarkan karakteristik data (5 poin)
  • Model evaluation yang dipilih sudah tepat (2 poin)
  • Model performance sudah bagus (8 poin)
  • Interpretasi dari model (4 poin)
  • Tuning model yang sudah dilakukan (6 poin)

VISUALIZATION (20 POIN)

  • Membuat plot yang menjelaskan cerita yang jelas (3 poin)
  • Memiliki tampilan layout yang rapih (2 poin)
  • Memiliki tampilan plot yang rapih (3 poin)
  • Tooltip yang sesuai dan rapih (tidak ada underscore, duplikasi nama kolom, dsb) (3 poin)
  • Pemilihan warna yang sesuai (1 poin)
  • Pemilihan jenis plot yang sesuai (2 poin)
  • Menampilkan input yang reaktif (2 poin)
  • Terdeploy tanpa error di shinyapps.io (4 poin)

KESIMPULAN (7 POIN)

  • Insight business apa yang dapat diperoleh dari hasil output? (5 poin)
  • Rekomendasi apa yang dapat Bapak/Ibu berikan ke user dari hasil project yang dikerjakan? (2 poin)

TINGKAT KESULITAN PROJECT (8 POIN)

  • Low = 1 poin, Medium = 3, High = 5
  • Penggunaan metode yang digunakan di industri lain (3 poin)

Contoh Proposal DCD

Identifikasi Berita Hoax pada Konten Media Sosial

Background

Indonesia sendiri menjadi salah satu negara yang sebagian penduduknya telah melek teknologi. Hal ini tidak menutup kemungkinan bahwa teknologi modern telah masuk dan mempengaruhi peradaban pada daerah pelosok Indonesia sejak lama. Data dari Hotsuite pada tahun 2020-pun menunjukkan bahwa penggunaan koneksi mobile phone telah melampaui total populasi penduduk Indonesia sendiri.

Dari data di atas kita dapat melihat bahwa 64% penduduk Indonesia telah menggunakan dan mengakses internet. Selain itu tercatat sekitar 59% dari mereka aktif dalam bersosial media. Bisa kita lihat di sekitar lingkungan kita bahwa satu orang tidak hanya memiliki satu sosial media. Umumnya mereka mempunyai dan aktif pada 2 atau lebih social media. Tujuan penggunaannya pun beragam mulai dari mencari dan menjalin pertemanan, sharing ide dan hobi, iklan layanan dan produk, hingga penyebaran informasi lainnya.

Gambar di atas menunjukkan bahwa Youtube menjadi media sosial yang paling sering digunakan di Indonesia sebesar 88% disusul oleh Whatsapp, Facebook, Instagram dan media sosial lain dibawahnya. Hal ini tidak mengherankan karena semakin kesini semua bentuk informasi baik berupa tulisan, gambar, ataupun suara bisa disajikan dalam bentuk konten bergerak/video oleh seorang content creator Youtube ataupun pengguna youtube lainnya. Hal ini juga yang akhirnya membuka peluang penyebaran informasi dan berita anatar penduduk Indonesia bahkan bangsa lainnya di seluruh dunia.

Media sosial telah membawa dampak yang cukup besar dan signifikan terhadap perubahan cara berkomunikasi antar individu atau kelompok. Media ini cenderung lebih disukai karena terbilang sangat cepat dan murah dalam penyebaran infromasi dan berita dibandingkan dengan cara tradisional terdahulu misalnya media cetak dan sejenisnya. Salah satu implikasi dan pengaruh media sosial ini bisa kita lihat dengan semakin meningkatnya konsumsi informasi pada media sosial seperti Youtube, Twitter, Facebook, Whatsapp, dan sebagainya. Akan tetapi peningkatan konsumsi informasi ini juga mempengaruhi peningkatan penyebaran konten atau berita hoax pada media sosial tersebut.

Hoax sendiri mengacu pada isu-isu yang disebarkan dan mengandung informasi yang tidak relevan, bohong, dan beberapa diantaranya digunakan untuk menyerang individu, kelompok ataupun sebuah produk tertentu. Kebohongan ini jika tersebar luas tentunya akan merusak citra dan kredibilitas seseorang atau kelompok tertentu hingga menyebabkan keresahan dalam masyarakat, kerusuhan antar individu dan kelompok, bahkan memecah belah kerukunan antar umat beragama dan bangsa lainnya di seluruh dunia. Masalah besar yang bisa ditimbulkan oleh konten hoax ini sangat serius mengingat peran sosial media yang penting dalam mempengaruhi cara pandang seseorang di berbagai bidang. Contoh paling dekat yang bisa kita lihat adalah berita palsu yang memojokkan pasangan calon presiden saat akan diadakan pemilihan umum (Pemilu), penulisan berita oleh oknum yang tidak bertanggung jawab yang ditujukan untuk menyerang citra individu atau kelompok suku tertentu, informasi khasiat tumbuhan dan produk yang sering dibuat broadcast message di Whatsapp, clickbait judul konten di Youtube atau link iklan yang disisipkan pada badan berita yang mengarah ke website yang tidak jelas. Oleh karenanya, pendeteksian informasi atau berita hoax menjadi sesuatu yang harus dikritisi.

Project semacam ini sangatlah bermanfaat untuk dunia digital baik sebagai penyedia portal berita ataupun masyarakat luas dalam upaya pencegahan penyebaran berita hoax yang tidak bertanggung jawab. Bagi pelaku penyedia layanan berita, model machine learning yang dihasilkan nantinya dapat membantu memfilter mana berita yang termasuk hoax atau tidak. Sementara untuk masyarakat sendiri, mereka bisa berpartisipasi untuk melaporkan berita yang terindikasi hoax sebagai upaya pengurangan penyebaran hoax di masyarakat.

Problem Statement

Untuk mengidentifikasi sebuah berita atau konten hoax kita bisa menganalisis satu persatu dari berita tersebut dan menilai apakah berita tersebut mengandung unsur/indikator hoax atau tidak. Metode berfikir kritis bisa dimanfaatkan oleh manusia untuk menyelesaikan permasalahan ini. Masalahnya, berita atau konten tersebut menyebar sangat cepat dan memungkinkan individu lain untuk mengembangkan dan memodifikasi menjadi versi baru dari informasi yang ada sehingga kuantitas dari konten yang dihasilkan akan bertambah dan target pembaca juga semakin meluas. Artinya, kapasitas kita dalam menyelesaikan masalah ini dengan metode berfikir kritis saja tidaklah cukup. Selain itu beberapa pertimbangan lainnya adalah teknik analisis yang dilakukan oleh manusia bersifat “post event analysis” atau analisis yang dilakukan setelah konten-konten hoax tersebut muncul dan bahkan menjadi viral.

Project Idea

Pencegahan penyebaran berita hoax dapat dilakukan dengan identifikasi berita atau konten sosial sedini mungkin sebelum berita hoax tersebut viral di masyarakat. Oleh karena itu, pada project ini akan dikembangkan sebuah model klasifikasi untuk mengidentifikasi apakah sebuah informasi berupa tulisan pada media sosial Twitter mengandung informasi hoax atau tidak.

Problem Scope

Pada project ini akan digunakan sebuah data berita yang ada pada sosial media Twitter yang diambil dari situs Kaggle dengan judul “Indonesia False News(Hoax) Dataset”. Dataset ini mengandung informasi sebagai berikut:

  • ID : id konten
  • label : label berita (0 tidak hoax, 1 hoax)
  • tanggal : tanggal konten atau berita dimuat
  • judul : judul berita
  • narasi : deskripsi berita yang dimuat
  • nama file gambar : judul tautan dari gambar yang dimuat

Selanjutnya, kebutuhan pembuatan model machine learning untuk mengidentifikasi apakah berita atau konten tersebut hoax atau tidak hanya akan menggunakan variabel label sebagai kelas identitas dan variabel narasi yang akan diekstrak lebih lanjut agar lebih mendukung dan mempermudah pemodelan.

Sedangkan modelnya sendiri akan dibuat sebuah model klasifikasi dengan memanfaatkan algoritma Naive Bayes dan Random Forest.

Output

Output dari project ini berupa dashboard analysis yang menampilkan Exploratory Data untuk menunjukkan kata-kata yang menyebabkan sebuah berita berpotensi untuk digolongkan sebagai sebuah informasi hoax atau bukan. Selain itu, user juga dapat menginputkan file berita baru yang nantinya oleh model akan diidentifikasi sebagai berita hoax/bukan.

Business Impact: Selain identifikasi pada sosial media Twitter, project ini bisa dikembangkan untuk mendeteksi dini berita hoax pada soial media lainnya termasuk portal berita atau website lainnya agar informasi yang disajikan lebih berkualitas dan dari segi pembacapun bisa mengenali lebih cepat informasi yang didapat agar tidak salah kaprah ke depannya. Selain mengidentifikasi tulisan, project ini dapat dikembangkan lebih lanjut untuk mengidentifikasi sebuah konten berita yang bukan hanya dilihat atau dipertimbangkan dari segi tulisan namun bisa dalam bentuk pindaian gambar atau sejenisnya.

Exploratory Data Analysis

Membaca Data

library(tidyverse)
library(stringi)
library(katadasaR)
library(tokenizers)
library(wordcloud)
library(tidytext)
data <- read_csv("data_input/Data Latih BDC.csv")
head(data)
## # A tibble: 6 x 6
##      ID label tanggal  judul               narasi               `nama file gamb~
##   <dbl> <dbl> <chr>    <chr>               <chr>                <chr>           
## 1    71     1 17-Aug-~ Pemakaian Masker M~ "A caller to a radi~ 71.jpg          
## 2   461     1 17-Jul-~ Instruksi Gubernur~ "Yth.Seluruh Anggot~ 461.png         
## 3   495     1 13-Jul-~ Foto Jim Rohn: Jok~ "Jokowi adalah pres~ 495.png         
## 4   550     1 8-Jul-20 ini bukan politik,~ "Maaf Mas2 dan Mbak~ 550.png         
## 5   681     1 24-Jun-~ Foto Kadrun kalo l~ "Kadrun kalo lihat ~ 681.jpg         
## 6   736     1 17-Jun-~ event promo smartp~ "selamat siang tema~ 736.png

Deskripsi data:

  • ID : id konten
  • label : label berita (0 tidak hoax, 1 hoax)
  • tanggal : tanggal konten atau berita dimuat
  • judul : judul berita
  • narasi : deskripsi berita yang dimuat
  • nama file gambar : judul tautan dari gambar yang dimuat

Pada pemodelan nantinya kita hanya akan membutuhkan variabel narasi dan label saja. Variabel narasi sendiri masih terdiri dari string teks panjang yang nantinya akan kita olah terlebih dahulu sebelum masuk ke tahap exploratory data ataupun pemodelan machine learning.

dim(data)
## [1] 4231    6

Persiapan Data

data <- data %>% 
  mutate(label = as.factor(case_when(label == 1 ~ "Hoax",
                                   TRUE ~ "Tidak Hoax")))

Dalam pengolahan data teks, teksntunya ada sedikit perbedaan dasar dalam mempersiapkan data yang akan dianalisis. Berbeda sedikit dengan pengolahan data biasa(raw data), pengolahan data teks membutuhkan beberapa proses seperti berikut:

Mengubah semua karakter string kata ke format huruf kecil semua (lowercase) Hal ini bertujuan agar kata yang sama memiliki makna yang sama pula. Contoh, kata dinas, Dinas, dan DINAS dianggap 3 kata yang berbeda karena format penulisannya menggunakan huruf kecil, campuran huruf kecil dan besar, serta huruf besar semua. Agar memiliki makna yang sama(dinas=Dinas=DINAS) maka kita akan menyeragamkan penulisannya menjadi lowercase.

data %>% 
  select(narasi) %>% 
  mutate(narasi = str_to_lower(narasi))
## # A tibble: 4,231 x 1
##    narasi                                                                       
##    <chr>                                                                        
##  1 "a caller to a radio talk show recently shared that his wife was hospitalize~
##  2 "yth.seluruh anggota grup sesuai instruksi gubernur jawa tengah hasil rapat ~
##  3 "jokowi adalah presiden terbaik dlm sejarah bangsa indonesia. jim rohn, moti~
##  4 "maaf mas2 dan mbak2, ini bukan politik, tapi kenyataan pak jokowi berhasil ~
##  5 "kadrun kalo lihat foto ini panas dingin . ."                                
##  6 "selamat siang teman teman fb ku semuanya\U0001f929,cuman mau memberi inform~
##  7 "lihatlah mereka sudah mempersiapkan diri dengan baik untuk menguasai negri ~
##  8 "italia punya fasilitas perawatan kesehatan tercanggih tapi semuanya gagal m~
##  9 "polisi goblok. bukanya cpet” d tolongin malah d liati aja"                  
## 10 "polisi china telah menganiaya wanita uighur lehernya di cekik pake kaki ,me~
## # ... with 4,221 more rows

Menghapus angka Tujuannya adalah untuk menghapus angka karena karakter ini tidak dibutuhkan dalam analisis teks selanjutnya.

data %>% 
  select(narasi) %>% 
  mutate(narasi = str_to_lower(narasi),
         narasi = str_replace_all(narasi, pattern = "[:digit:]", replacement = " "))
## # A tibble: 4,231 x 1
##    narasi                                                                       
##    <chr>                                                                        
##  1 "a caller to a radio talk show recently shared that his wife was hospitalize~
##  2 "yth.seluruh anggota grup sesuai instruksi gubernur jawa tengah hasil rapat ~
##  3 "jokowi adalah presiden terbaik dlm sejarah bangsa indonesia. jim rohn, moti~
##  4 "maaf mas  dan mbak , ini bukan politik, tapi kenyataan pak jokowi berhasil ~
##  5 "kadrun kalo lihat foto ini panas dingin . ."                                
##  6 "selamat siang teman teman fb ku semuanya\U0001f929,cuman mau memberi inform~
##  7 "lihatlah mereka sudah mempersiapkan diri dengan baik untuk menguasai negri ~
##  8 "italia punya fasilitas perawatan kesehatan tercanggih tapi semuanya gagal m~
##  9 "polisi goblok. bukanya cpet” d tolongin malah d liati aja"                  
## 10 "polisi china telah menganiaya wanita uighur lehernya di cekik pake kaki ,me~
## # ... with 4,221 more rows

Menghapus punctuation dan whitespace

Punctuation atau tanda baca juga menjadi unsur yang harus dihapus selain angka. Tujuannya sama yaitu karena karakter ini tidak memiliki pengaruh dan tidak akan digunakan pada analisis selanjutnya.

data %>% 
  select(narasi) %>% 
  mutate(narasi = str_to_lower(narasi),
         narasi = str_replace_all(narasi, pattern = "[:digit:]", replacement = " "),
         narasi = str_replace_all(narasi, pattern = "[:punct:]", replacement = " "),
         narasi = stri_replace_all_charclass(narasi, pattern = "\\p{WHITE_SPACE}",
                                             " "))
## # A tibble: 4,231 x 1
##    narasi                                                                       
##    <chr>                                                                        
##  1 "a caller to a radio talk show recently shared that his wife was hospitalize~
##  2 "yth seluruh anggota grup sesuai instruksi gubernur jawa tengah hasil rapat ~
##  3 "jokowi adalah presiden terbaik dlm sejarah bangsa indonesia  jim rohn  moti~
##  4 "maaf mas  dan mbak   ini bukan politik  tapi kenyataan pak jokowi berhasil ~
##  5 "kadrun kalo lihat foto ini panas dingin    "                                
##  6 "selamat siang teman teman fb ku semuanya\U0001f929 cuman mau memberi inform~
##  7 "lihatlah mereka sudah mempersiapkan diri dengan baik untuk menguasai negri ~
##  8 "italia punya fasilitas perawatan kesehatan tercanggih tapi semuanya gagal m~
##  9 "polisi goblok  bukanya cpet  d tolongin malah d liati aja"                  
## 10 "polisi china telah menganiaya wanita uighur lehernya di cekik pake kaki  me~
## # ... with 4,221 more rows

Melakukan Stemming Stemming adalah proses mengubah kata berimbuhan menjadi kata dasar.

stemming <- function(x){
  paste0(map_chr(x,katadasar), collapse = " ")}
data %>% 
  mutate(narasi = str_to_lower(narasi),
         narasi = str_replace_all(narasi, pattern = "[:digit:]", replacement = " "),
         narasi = str_replace_all(narasi, pattern = "[:punct:]", replacement = " "),
         narasi = stri_replace_all_charclass(narasi, pattern = "\\p{WHITE_SPACE}",
                                             " "),
         narasi = map_chr(tokenize_words(narasi), .f = stemming))

Menghapus Stopwords

Stopword merupakan kata yang diabaikan dalam pemrosesan teks, kata-kata ini biasanya disimpan ke dalam stop lists.Proses ini dilakukan dengan tujuan untuk menghapus kata yang mempunyai frekuensi kemunculan yang tinggi misalnya kata penghubung seperti “dan”, “atau”, “tapi”, “akan” dan lain sebagainya.

stopwords_id <- read.delim("stopwords-id.txt", header = 0)
stopwords_id <- stopwords_id %>% 
  rename(word = V1)
data %>% 
  mutate(narasi = str_to_lower(narasi),
         narasi = str_replace_all(narasi, pattern = "[:digit:]", replacement = " "),
         narasi = str_replace_all(narasi, pattern = "[:punct:]", replacement = " "),
         narasi = stri_replace_all_charclass(narasi, pattern = "\\p{WHITE_SPACE}",
                                             " "),
         narasi = map_chr(tokenize_words(narasi), .f = stemming)) %>% 
  unnest_tokens(word, narasi) %>% 
  anti_join(stopwords_id)
## # A tibble: 78,032 x 6
##       ID label tanggal   judul                          `nama file gamba~ word  
##    <dbl> <dbl> <chr>     <chr>                          <chr>             <chr> 
##  1    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            a     
##  2    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            caller
##  3    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            to    
##  4    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            a     
##  5    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            radio 
##  6    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            talk  
##  7    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            show  
##  8    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            recen~
##  9    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            shared
## 10    71     1 17-Aug-20 Pemakaian Masker Menyebabkan ~ 71.jpg            that  
## # ... with 78,022 more rows

Visualisasi EDA

Proporsi kelas narasi

data %>% 
  ggplot(aes(x = label)) +
  geom_bar()

Dari bar plot di atas, kita dapat melihat bahwa proporsi berita yang hoax lebih besar daripada berita yang tidak hoax. Insight ini nantinya bisa kita gunakan sebagai pertimbangan untuk menambah data dengan kelas bukan hoax jika hasil pemodelan jelek karena faktor kelas data yang tidak seimbang.

Selain melihat proporsi kelas, kita juga bisa melihat distribusi dari jumlah karakter setiap berita yang akan diolah. Jika dilihat dari histogram di bawah ini, rata-rata karakter pada setiap berita sekitar 0-200 karakter.

data %>% 
  mutate(length_char = nchar(narasi)) %>% 
  ggplot(aes(x = length_char)) +
  geom_histogram(bins = 10) +
  scale_x_continuous(limits = c(0, 1200), breaks = c(0,200, 400, 600, 800, 1000,1200))

Kita juga bisa melihat rata-rata jumlah kata pada setiap kalimat yang ada pada sebuah narasi berita. Plot di bawah ini menunjukkan rata-rata jumlah kata pada setiap kalimat berkisar antara 3 sampai dengan 9 kata.

data %>% 
  mutate(length_words = as.numeric(map_chr(str_split(narasi, pattern = " "), 
                                           .f = length))) %>% 
  ggplot(aes(x = length_words)) +
  geom_histogram(bins = 30)

Wordcloud

Sederhananya, wordcloud adalah gambar yang menunjukkan daftar kata-kata yang digunakan dalam sebuah teks, umumnya semakin banyak kata yang digunakan semakin besar ukuran kata tersebut dalam gambar. Pada visualisasi di bawah ini, akan ditampilkan wordcloud untuk data dari kelas poitif dan negatif.

data_baru %>% 
  filter(label == 1) %>% 
  unnest_tokens(word, narasi) %>% 
  anti_join(stopwords_id) %>% 
  count(word, sort = TRUE) %>% 
  with(wordcloud(word, n, max.words = 100))

Pada kelas positif(hoax), beberapa kata yang sering muncul adalah orang, tidak, indonesia, jokowi, negara, china, semua, orang, dan lain sebagainya. Bagaimana dengan kemunculan kata di kelas negatif?

data_baru %>% 
  filter(label == 0) %>% 
  unnest_tokens(word, narasi) %>% 
  anti_join(stopwords_id) %>% 
  count(word, sort = TRUE) %>% 
  with(wordcloud(word, n, max.words = 100))

Pada kelas negatif(tidak hoax), kata yang paling sering muncul adalah tidak, indonesia, hoax, berita, foto, dan lain sebagainya. Jika diperhatikan kata yang sering muncul pada kelas positif dan kelas negatif hampir mirip. Oleh karena itu, proses EDA pada tahap ini nantinya bisa dikembangkan pada saat pemodelan untuk mengetahui kata apa yang memiliki bobot tinggi sehingga bisa dikatakan sebagai informasi hoax/bukan hoax.