BACKGROUND OVERVIEW

Banyak cara orang memulai aktivitas di pagi hari dengan dengan banyak cara. Menikmati minuman hangat di pagi hari salah satu hal baik yang dilakukan untuk menyegarkan tubuh, salah satunya menikmati secangkir teh atau kopi di pagi hari. Kafein dari teh maupun kopi yang dikonsumsi oleh dewasa kalangan usia lanjut, memiliki fungsi fisik yang jauh lebih baik ketika masuk pada usia tua. Dimana penelitian ini dipimpin oleh Profesor Koh Woon Puay dari program riset kesehatan hidup lebih lama di Sekolah Kedokteran Yong Loo Lin di Universitas Nasional Singapura dan diterbitkan pada 21 juli 2023 di Journal of the American Medical Directors Association (JAMDA).

Kopi sendiri yang sudah ada sejak dulu, kini semakin banyak dan terus bertambah penikmatnya dari waktu ke waktu. Sehingga konsumsi dan produksinya pun terus meningkat dan memberikan keuntungan bagi petani kopi itu sendiri hingga ke customer sebagai penikmat nya. Dimana hal tersebut berdasarkan data dari International Coffee Organization (ICO) atau icocoffee.org, diperkirakan pada tahun 2023/2024 pasar kopi dunia akan meningkat 2,2% menjadi 177,0 juta kantong dengan surplus sebesar 1,.0 juta kantong kopi.

Dan berdasarkan dari databoks.katadata.co.id, menunjukkan bahwa Indonesia menjadi produsen kopi terbesar ke-3 di dunia pada 2022/2023 yang telah memproduksi kopi sebanyak 11,85 juta kantong. Dengan demikian, memicu semakin banyaknya permintaan pada biji kopi dan semakin meningkatnya jumlah usaha coffee shop di Indonesia. Hal tersebut disampaikan oleh Asosiasi Pengusaha Kopi dan Cokelat Indonesia (APKCI) yang memperkirakan pada tahun 2023, jumlah kedai kopi di Indonesia akan mencapai 10 ribu toko dengan pendapatan dari bisnis coffee shop diperkirakan akan mencapai 80 triliun rupiah.

Tidak hanya biji kopi yang memiliki banyak peningkatan permintaan, namun alat-alatnya pun semakin banyak di gandrungi oleh banyak orang yang ingin meracik atau membuat secangkir kopi dari hasil racikannya sendiri. Hal tersebut menjadi peluang yang cukup bagus untuk menciptakan serta menyediakan alat-alat dalam peracikan kopi,  hingga banyak memunculkan brand-brand yang bersaing yang membuat konsumennya harus lebih selektif dan juga cermat dalam memilih berbagai produk yang ada di pasaran sesuai dengan kebutuhan serta kualitas dari barang itu sendiri.

Dan pada era serba digital saat ini, konsumen kini memiliki kecenderungan suatu pilihan berdasarkan keputusan mereka pada review produk yang mereka baca di internet.

Berdasarkan informasi referensi dari beberapa sumber menunjukkan bahwa : > Powerreviews.com, Research Power of Reviews 2023 74% konsumen mengatakan bahwa, penilaian dan ulasan adalah cara utama mereka mempelajari produk yang belum pernah mereka beli sebelumnya. 98% pembeli mengatakan ulasan adalah sumber penting saat membuat keputusan pembelian. Hampi 45% konsumen tidak akan membeli suatu produk jika tidak ada ulasan yang tersedia untuk produk tersebut. > Bazaarvoice.com, Blog Exploring The Bazaarvoice Shopper Experience Index 2022 Pada tahun 2022 menunjukkan bahwa sebanyak 36% customer ingin membaca review, photo dan juga video dari customer lain. > Spiegel Medill North Western.edu, How Online Reviews Influence Sales Saat produk mulai menampilkan ulasan, tingkat konversi meningkat dengan cepat. Kemungkinan membeli produk dengan lima ulasan adalah 270% lebih besar dibandingkan kemungkinan membeli produk tanpa ulasan.

Berdasarkan informasi tersebut dan dengan seiringnya perkembangan teknologi, perusahaan dapat menggunakan metode analisis sentimen dan pemodelan topik        untuk memahami preferensi konsumen melalui review produk yang tersedia secara online. Sehingga dengan melihat banyaknya barang pembelian berdasarkan produk yang banyak di review, maka alternative brewing dapat menambah atau menjalin kerjasama dengan brand lain yang belum joint kerjasama. Sehingga akan menambah penawaran kepada customer preferensi pilihan barang lain. Dan isi juga menjadi salah satu evaluasi yang baik untuk perkembangan brand-brand coffee maker tersebut.

PROBLEM SCOPE

Project ini akan menggunakan dataset dari web https://alternativebrewing.com.au/  yang berisi review produk alat-alat kopi dan kopi dari berbagai macam brand. Dataset tersebut akan diproses dan dianalisis menggunakan R. Saya akan menggunakan pendekatan Lexicon Based dan metode Support Vector Machine (SVM) untuk analisis sentimen, serta Latent Dirichlet Allocation (LDA) untuk pemodelan topik. Analisis sentimen Lexicon dan SVM akan memberikan gambaran tentang emosi positif, negatif, atau netral yang ada dalam review produk. Sedangkan LDA akan membantu dalam menentukan topik utama yang dibahas dalam review tersebut. Ini berarti project ini bertujuan untuk mengidentifikasi sentimen utama dari review serta topik-topik yang paling sering dibahas oleh konsumen.

BUSINESS IMPACT

Analisis sentimen dan review produk pada alternative brewing  ini memiliki potensi untuk memberikan dampak bisnis sebagai berikut:
– Pemahaman konsumen yang Lebih Baik : Dengan memahami sentimen konsumen terhadap produk atau brand tertentu, perusahaan dapat lebih memahami kebutuhan dan keinginan konsumen mereka.       Ini dapat membantu dalam pengembangan produk baru atau peningkatan produk yang ada.
– Pengembangan Produk : Analisis ulasan dapat membantu perusahaan mengidentifikasi fitur atau aspek produk yang paling disukai atau tidak disukai oleh konsumen. Informasi ini dapat         digunakan untuk menginformasikan brand untuk mendesain dan pengembangan produk di masa mendatang.
– Peningkatan Layanan konsumen : Dengan memahami masalah atau keluhan yang sering muncul dalam ulasan, perusahaan dapat berusaha untuk memperbaiki area tersebut dan meningkatkan            kepuasan konsumen.
Proyek ini berpotensi untuk memberikan nilai yang signifikan bagi perusahaan dalam industri kopi, membantu mereka untuk menerapkan strategi pemasaran yang tepat, lebih responsif     terhadap kebutuhan dan preferensi konsumen, dan akhirnya meningkatkan kepuasan konsumen dan hasil bisnis.

TARGET USER

Target pengguna dari project ini adalah perusahaan dan pemasar yang tertarik untuk memahami persepsi konsumen terhadap produk mereka. Analisis ini dapat membantu mereka memahami sentimen konsumen dan topik yang paling dibahas dalam review produk, memberikan gambaran yang jelas tentang apa yang dihargai oleh konsumen, apa yang tidak mereka sukai, dan apa yang bisa diperbaiki. Sebagai contoh, jika pemodelan topik menunjukkan bahwa banyak review yang membahas tentang keluhan kualitas alat atau kopi dari brand tertentu, ini adalah tanda bahwa perusahaan mungkin perlu melihat dan mereview kembali produk yang mereka buat tersebut.

PROJECT OUTPUT

Tujuan dari project ini adalah untuk memberikan gambaran menyeluruh tentang sentimen dan topik dalam review produk brand alat kopi pada alternative brewing. Kami akan membuat sebuah program dengan R yang mampu melakukan analisis sentimen menggunakan Lexicon Based dan SVM dan pemodelan topik menggunakan LDA. Output dari project ini akan berupa dashboard interaktif yang memvisualisasikan hasil analisis sentimen dan pemodelan topik. Dashboard ini akan menunjukkan distribusi sentimen dalam review produk dan topik-topik utama yang dibahas. Output ini tidak hanya memberikan wawasan yang bermanfaat bagi perusahaan brand kopi tersebut, tetapi juga dapat digunakan sebagai alat yang efektif dalam pembuatan keputusan bisnis baik untuk perusahaan brand kopi atau alternative brewing.

DATA PRE-PROCESSING

Import Library

library(rvest)
library(dplyr)
library(tidyr)
library(ggplot2)
library(tidyverse)
library(lubridate)
library(GGally)
library(factoextra)
library(FactoMineR)
library(animation)
library(ggiraphExtra)
library(xml2)
library(syuzhet)
library(wordcloud)
library(tm)
library(tmap)
library(quanteda)
library(stringi)
library(tidytext)
library(RColorBrewer)
library(syuzhet)

Read Data

Hal pertama yang harus kita lakukan yaitu import data kita terlebih dahulu read.csv.

data_ab <- read.csv("alternativebrewing.csv")

Data Inspection

Kita gunakan head() untuk melihat urutan data teratas dan gunakan tail() untuk melihat urutan data paling bawah.

head(data_ab)
tail(data_ab)

Cek struktur tipe data yang kita miliki menggunakan glimpse()

glimpse(data_ab)
#> Rows: 1,920
#> Columns: 11
#> $ No                   <int> 1, 2, 3, 4, 5, 6, 31, 32, 33, 34, 35, 36, 13, 14,…
#> $ product.category     <chr> "Manual Brewing", "Manual Brewing", "Manual Brewi…
#> $ product.name         <chr> "AeroPress Coffee Maker", "AeroPress Coffee Maker…
#> $ product.price        <int> 456000, 456000, 456000, 456000, 456000, 456000, 5…
#> $ review.count         <int> 1199, 1199, 1199, 1199, 1199, 1199, 205, 205, 205…
#> $ review.author        <chr> "Joseph M.", "DEAN S.", "Dimuth H.", "Benjamin T.…
#> $ review.title         <chr> "Great aeropress", "Aero magic", "Minimalist perf…
#> $ review.content       <chr> "Great product, does an amazing job", "Love the A…
#> $ review.date          <chr> "9/30/2023", "9/25/2023", "9/12/2023", "9/6/2023"…
#> $ review.helpfullness  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0…
#> $ review.unhelpfulness <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

Dari fungsi glimpse() yang telah kita jalankan diatas, kita mendapatkan informasi bahwa terdapat 1.920 baris dan 11 kolom. Memuat informasi columns sebagai berikut :

No                  : No urut data
product.category    : Kategori produk
product.name        : Nama produk
product.price       : Harga produk
review.count        : Jumlah ulasan atau review
review.author       : Nama penulis ulasan atau review
review.title        : Judul ulasan atau review
review.content      : Isi ulasan atau review
review.date         : Tanggal dipublikasikannya ulasan atau review
review.helpfullness : Jumlah ulasan atau review yang dianggap membantu (jumlah like ulasan)
review.unhelpfulness: Jumlah ulasan atau review yang dianggap tidak membantu (jumlah unlike ulasan)

Dan dari data tersebut, kita tidak akan menggunakan semua data. Kita hanya akan berfokus pada data yang ingin kita gunakan saja. Untuk bagian kolom, kita hanya akan menggunakan data review.content untuk analisanya, dan untuk observasinya kita akan menggunakan struktur data data_ab yang ada.

#melihat struktur data

length(unique(data_ab$product.name))
#> [1] 70

Pemilihan Data Observasi

Pemilihan observasi data berfokus pada Hario produk dengan jumlah observasi yang paling banyak untuk dianalisa.

data_coffee <- data_ab[grepl("Hario", data_ab$product.name, ignore.case = TRUE), ]
length(unique(data_coffee$product.name))
#> [1] 8
data <- data_coffee %>% 
  filter(!is.na(review.content)) %>% 
  distinct()

product_populer <- data %>% 
  group_by(product.name) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n))

product_populer

Dari product_populer kita mendapatkan data bahwa produk Delter Cold Drip Coffee MakerHario Cold Brew Pot 1L memiliki total review paling banyak yaitu 1467.

selected_product <- data_coffee %>% 
  filter(product.name %in% c("Hario Cold Brew Pot 1L")) %>%
select(review.content, review.helpfullness)
selected_product

Data Cleaning

Pada proses selanjutnya kita akan membersihkan kolom review.content. Dimana pada kaolom tersebut merupakan kolom yang berisi review dari pembelian produk oleh konsumen. Untuk dianalisa lebih lanjut agar hasilnya akurat, kita perlu melakukan pembersihan data pada kolom tersebut yaitu dengan: - Membuat corpus. - Mengubah semua karakter string kata ke format huruf kecil semua (lowercase). Hal ini bertujuan agar kata yang sama memiliki makna yang sama pula. - Menghilangkan angka, karena karakter ini tidak dibutuhkan dalam analisis teks selanjutnya. - Menghilangkan tanda baca (punctuation). - Menghilangkan kata hubung yang sering muncul tapi tidak punya arti yang signifikan (Stopwords).

selected_product$review.content <- selected_product$review.content %>% str_replace_all("’", "'")
corpus <- Corpus(VectorSource(selected_product$review.content))

corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, removeWords, stopwords("english"))

remove_uninformative_words <- function(corpus) {
    uninformative_words <- c("can", "will", "didn't", "'re", "'m", "get", "'ve", "'s", "like", "don't", "just")
    corpus <- tm_map(corpus, content_transformer(tolower))
    corpus <- tm_map(corpus, removeWords, uninformative_words)
    return(corpus)}

corpus <- remove_uninformative_words(corpus)

head(corpus$content, 3)
#> [1] "great product really easy  use  minimal pieces making  super easy  clean  use  regret  didnt   sooner    drinking bitter coffee   long"                 
#> [2] "absolutely love   brew last  days every coffee lover needs one"                                                                                         
#> [3] "easy  order  quick delivery  easy  use   enjoying  cold brew  day width  splash  coconut milk  ice   barista back   day   testify   cold brew jug   job"

Sekarang kita membuat wordcloud untuk melihat kata apa yang sering muncul. 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. Dan untuk wordcloud ini datanya tidak kami ambil dari corpus, melainkan menggunakan data data_ab yang memiliki lebih banyak kosa kata.

palette <- brewer.pal(n = 9, "Paired")
wordcloud(corpus,colors = palette)

Setelah product.name kita proses, maka kita masukkan kembali ke dalam dataset.

process_reviews <- sapply(corpus, as.character)

selected_product$review.content <- process_reviews

head(selected_product)

Analisa Sentimen

Kita akan menggunakan pendekatan lexicon-based dan metode SVM untuk analisis sentimen kita. Untuk menganalisis sentimen menggunakan pendekatan lexicon-based dan SVM, kita bisa menggunakan library syuzhet dalam R. Syuzhet menggunakan empat metode berbeda untuk ekstraksi sentimen: metode “syuzhet”, “bing”, “afinn”, dan “nrc”. Project ini akan menggunakan metode bing. Metode bing ini didasarkan pada pendekatan lexicon yang dikembangkan oleh Bing Liu dan kolaboratornya. Lexicon ini hanya berisi daftar kata-kata yang dianggap positif atau negatif, dan analisis sentimen dilakukan dengan menghitung frekuensi kata-kata positif dan negatif dalam teks.

#sentiment reviews
sentiment.score <- get_sentiment(selected_product$review.content, method = "bing")

#add sentiment reviews to the data frame
selected_product$sentiment.score <- sentiment.score

selected_product

Setelah mendapatkan sentiment.count nya, kita coba bandingkan dengan variabel di dalam data: review.count. Asumsinya semakin tinggi review.count yang diberikan, maka sentiment.count meningkat pula.

ggplot(selected_product, aes(x = sentiment.score)) +
  geom_histogram(binwidth = 1) +
  theme_minimal() +
  xlab("Review Count") +
  ylab("Count") +
  ggtitle("Distribution of Sentiment Count")

# Calculate average sentiment count
mean_sentiment.score <- mean(selected_product$sentiment.score, na.rm = TRUE)
mean_sentiment.score
#> [1] 2.007498

Data sentimen count nya berdistribusi normal. Karena nilai signifikansinya lebih dari atau sama dengan 0,05.

Sekarang kita coba lihat kecenderungannya dari sentiment count lebih banyak ke arah positif atau negatif. Nilai 0 dianggap masuk ke sentimen negatif karena dianggap tidak merekomendasikan produknya.

selected_product$sentiment.category <- ifelse(selected_product$sentiment.score > 1, "Positive", "Negative")

table(selected_product$sentiment.category)
#> 
#> Negative Positive 
#>      603      864

Dari hasil data tersebut dapat diketahui bahwa, terdapat lebih banyak review positive sebanyak 864. Dan memiliki review negative lebih sedikit sebanyak 603. Oleh karena itu model ini bisa dikembangkan lebih lanjut untuk mengetahui bobot mana yang lebihh tinggi sebagai informasi yang paling kuat.