Data Career Day (DCD) merupakan salah satu program career support algoritma yg dibuat untuk memfasilitasi alumni untuk mendapatkan kesempatan rekrutmen dari hiring partner melalui tahapan yang sudah disiapkan. Untuk mengikuti DCD ini, partisipan diwajibkan untuk membuat sebuah project personal yang memenuhi standar dari algoritma yang nantinya akan dipresentasikan secara langsung di hadapan hiring partner maupun secara tidak langsung (video tapping).

Tahapan DCD secara keseluruhan akan berlangsung selama +- 3 bulan mengikuti timeline berikut:

Rubrics DCD

Pengerjaan project akan berlangsung selama 2 bulan pada tahapan mentoring yang terbagi menjadi 2 fase:

Business Mentor

Pada tahapan BM yang berlangsung selama 3 pekan, partisipan akan diminta untuk membuat sebuah proposal project dengan kesempatan mentoring 1 kali per-pekan. Proposal akan diberikan feedback dan penilaian oleh tim mentor dengan total poin maksimal sebesar 40 poin mengikuti rubrik penilaian berikut:

LATAR BELAKANG (17 POIN)

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

PEMAHAMAN MASALAH (5 POIN)

  • (5 poin) Tujuan dari project jelas

PENGUMPULAN DATA (8 POIN)

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

PERSIAPAN DATA (10 POIN)

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

NOTE: Penilaian rubrik BM dilakukan sebagai acuan untuk peserta bisa lanjut ke tahapan dcd selanjutnya.


Technical Chaperone

Pada tahapan TC yang berlangsung selama 4 pekan, partisipan akan diminta untuk menyelesaikan dashboard berdasarkan proposal yang telah dibuat dengan kesempatan mentoring 1 kali per-pekan dan 2 kali sesi cross mentor. Dashboard yang dibuat akan diberikan penilaian oleh tim mentor dengan total poin maksimal sebesar 60 poin mengikuti rubrik penilaian berikut:

MACHINE LEARNING (25 POIN)

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

VISUALIZATION (20 POIN)

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

KESIMPULAN (7 POIN)

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

TINGKAT KESULITAN PROJECT (8 POIN)

  • (3 poin) Kompleksitas Data
    • Jumlah fitur
    • Structure / unstructure dataset
    • Sumber data (satu sumber atau multi sumber) & Cara memperoleh data (web scrapping / lainnya)
  • (5 poin) Teknik Analisis & Penerapan
    • Eksplorasi data (sederhana / mendalam)
    • Melakukan Perbandingan model
    • Melakukan Tuning model untuk memperoleh hasil optimal
    • Dashboard (basic / exploratif)
    • Project implementatif untuk personal atau perusahaan

NOTE: Penilaian rubrik TC dilakukan pada sesi cross mentor 1 & 2 sebagai acuan untuk peserta bisa lanjut ke tahapan dcd selanjutnya.


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 × 6
##      ID label tanggal   judul                          narasi `nama file gambar`
##   <dbl> <dbl> <chr>     <chr>                          <chr>  <chr>             
## 1    71     1 17-Aug-20 Pemakaian Masker Menyebabkan … "A ca… 71.jpg            
## 2   461     1 17-Jul-20 Instruksi Gubernur Jateng ten… "Yth.… 461.png           
## 3   495     1 13-Jul-20 Foto Jim Rohn: Jokowi adalah … "Joko… 495.png           
## 4   550     1 8-Jul-20  ini bukan politik, tapi kenya… "Maaf… 550.png           
## 5   681     1 24-Jun-20 Foto Kadrun kalo lihat foto i… "Kadr… 681.jpg           
## 6   736     1 17-Jun-20 event promo smartphone JNE 20… "sela… 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 × 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…
## # ℹ 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 × 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…
## # ℹ 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 × 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…
## # ℹ 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 × 6
##       ID label tanggal   judul                          `nama file gambar` 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             call…
##  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             rece…
##  9    71     1 17-Aug-20 Pemakaian Masker Menyebabkan … 71.jpg             shar…
## 10    71     1 17-Aug-20 Pemakaian Masker Menyebabkan … 71.jpg             that 
## # ℹ 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.