Pariwisata telah menjadi aktivitas sosial penting bagi manusia sejak zaman dahulu kala. Industri pariwisata mendapatkan berawal dari motivasi manusia untuk bepergian, pada zaman-zaman sebelumnya orang bepergian untuk bertahan hidup dan kemudian untuk menjalin hubungan perdagangan antara satu sama lain. Seiring manusia berevolusi, manusia mulai bepergian untuk menjelajahi dunia, menjinakkan hewan yang digunakan sebagai alat transportasi hingga penemuan roda membuat perjalanan menjadi lebih mudah dan cepat. Rincian evolusi dan pertumbuhan industri pariwisata dan perhotelan diberikan dalam unit ini untuk memahami bagaimana pariwisata dan perhotelan menanamkan benih-benih industri hotel. 1.
Hotel biasanya diperlukan bagi mereka yang butuh tempat tinggal sementara untuk urusan wisata atau bisnis dan sebagainya. Hotel bukanlah tempat tinggal selamanya atau untuk waktu yang lama seperti kost atau apartemen. Dalam Keputusan Menteri Parpostel no Km 94/HK103/MPPT 1987 disebutkan bahwa hotel merupakan salah satu jenis akomodasi yang menerapkan sebagian atau semua bagian untuk jasa fasilitas penginapan, fasilitator makanan dan minuman serta jasa lainnya bagi masyarakat umum yang dioperasikan secara komersil. 2.
Kunjungan wisatawan mancanegara pada Juni 2023 (Badan Pusat Statistik)
Infografis diatas menunjukkan bahwa memasuki bulan Juni tahun 2023, kunjungan wisatawan mancanegara (wisman) di Indonesia mencapai 1,06 juta kunjungan. Jumlah ini naik 11,44 persen dibandingkan Mei 2023 (month to month) dan naik 119,64 persen dibandingkan bulan yang sama pada tahun lalu (year on year). Wisman yang berkunjung ke Indonesia pada Juni 2023 didominasi oleh wisman yang berasal dari Singapura (16,41 persen), Malaysia (15,88 persen), dan Australia (12,47 persen). Selanjutnya, tingkat Penghunian Kamar (TPK) di hotel bintang pada Juni 2023 mencapai 53,67 persen, naik 3,39 poin secara y-on-y dan naik 4,65 poin secara secara m-to-m. Sejalan dengan TPK hotel bintang, TPK hotel nonbintang pada Juni 2023 mencapai 24,58 persen, naik 0,66 poin secara y-on-y dan naik 0,34 poin secara m-to-m. Sedangkan rata-rata lama tamu menginap di hotel berbintang mengalami kenaikan sebesar 0,05 poin dibandingkan tahun lalu, yaitu mencapai 1,66 hari.
Berdasarkan infografis diatas, jumlah wisatawan di Indonesia terus naik sejak hingga juni tahun lalu hingga tahun ini, dimana kenaikan jumlah wisatawan juga diiringi dengan naiknya kebutuhan akomodasi sementara salah satunya adalah hotel. Namun disamping permintaan kebutuhan akomodasi sementara yang banyak, penyedia layanan akomodasi juga perlu memperhatikan kualitas jasa akomodasinya yang diberikan agar menjadi pilihan pelanggan.
Salah satu cara untuk mempertahankan dan/atau meningkatkan kualitas akomodasi yang diberikan oleh hotel adalah dengan memperhatikan dan melakukan penyesuaian dari umpan balik yang diberikan oleh pengguna berdasarkan pengalamannya selama memakai jasa akomodasi yang diberikan. Projek ini hadir dengan tujuan untuk memberikan sebuah sentiment analysis dari kumpulan umpan balik dari pengguna yang mana informasi yang diperoleh dapat digunakan sebagai saran kepada pihak pengelola dalam mempertahan atau memperbaiki kualitas dari jasa akomodasi yang digunakan.
Untuk dapat mengindentifikasi umpan balik dari pengguna kita dapat melakukan analisa satu per satu umpan balik yang diberikan lalu mengambil kesimpulan apa masukan atau saran yang diberikan oleh pengguna tersebut. Namun hal ini akan menjadi masalah yang dapat memakan banyak waktu ketika umpan balik yang diterima oleh sebuah pengelola berjumlah sangat banyak. Karena itu projek ini hadir untuk membantu melakukan analisa terhadap umpan balik pengguna yang telah menggunakan jasa akomodasi agar pengelola atau pemilik bisnis dapat melakukan penyesesuain dengan cepat.
Project ini akan melibatkan pembangunan model machine learning, khususnya dengan memanfaatkan algoritma Naive Bayes dan/atau random forest, atau model machine learning lainnya yang digunakan untuk melakukan analisa umpan balik pelanggan dimana sentiment analysis diterapkan pada umpan balik pengguna untuk mengukur kepuasan pelanggan dan mengidentifikasi area yang perlu ditingkatkan. Projek ini diharapkan menjadi sebuah sistem yang dapat digunakan untuk analisa umpan balik pengguna yang komprehensif dan cepat yang dapat mengumpulkan, memproses, dan menganalisis data umpan balik pengguna. Sistem ini akan memberikan informasi yang dapat ditindaklanjuti untuk membantu bisnis akomodasi dalam meningkatkan penawaran dan kepuasan pelanggan.
Pada projek ini digunakan sebuah data umpan balik pengguna hotel di Indonesia yang telah dikumpulkan dari platform hotel aggregator, AiryRooms HoASA (IndoNLU) Dataset. Kumpulan data mencakup sepuluh aspek berbeda dari kualitas hotel. Terdapat empat kemungkinan kelas sentimen untuk setiap label sentimen: positif, negatif, netral, dan positif-negatif., dalam bahasa Indonesia. Berisi 2.854 dalam format file CSV. Dimana setiap variable dari dataset ini adalah :
review : berisi umpan balik dari pengguna hotel dalam
bentuk kalimat.
ac : tingkat kepuasan pengguna terhadap Air Conditioner
pada hotel.
air_panas : tingkat kepuasan pengguna terhadap keadaan
air panas hotel.
bau : tingkat kepuasan pengguna terhadap kondisi bau
ruangan hotel.
general : tingkat kepuasan pengguna secara umum.
kebersihan : tingkat kepuasan pengguna terhadap
kebersihan hotel.
linen : tingkat kepuasan pengguna terhadap linen
hotel.
service : tingkat kepuasan pengguna terhadap layanan
hotel.
sunrise_meal : tingkat kepuasan pengguna terhadap
sarapan dari hotel.
tv : tingkat kepuasan pengguna terhadap kondisi TV
hotel.
wifi : tingkat kepuasan pengguna terhadap kondisi WIFI
hotel.
Variabel target untuk model pada projek ini adalah
review, ac, air_panas,
general, kebersihan, linen,
service, sunrise_meal, tv, dan
wifi. Terdapat sembilan variable target sehingga akan
dibuat sembilan model machine learning yang berbeda untuk setiap
variable target yang digunakan. Model yang digunakan berupa model
klasifikasi yaitu Naive Bayes dan/atau random forest.
Output dari project ini berupa dashboard analysis yang menampilkan Exploratory Data dari hasil sentiment analysis yang dilakukan dari data umpan balik pengguna hotel. User dapat memilih input untuk dilakukan sentiment analysis yaitu : 1. Melakukan input kalimat secara manual pada kolom yang tertera, 2. mengunggah file berisi kumpulan umpan balik pengguna. Selanjutnya, kedua input akan dilakukan analisa umpan balik oleh model.
Selain analisa pada umpan balik hotel, projek ini dapat dikembangkan untuk memberikan sentiment analysis pada ranah bisnis bidang lainnya mengingat setiap bisnis tentu akan memilki umpan balik dari pengguna sebagai contoh seperti customer feedback analysis pada retail dan feedback analysis pada sebuah restaurant.
library(tidyverse)
library(stringi)
library(devtools)
library(tokenizers)
library(wordcloud)
library(tidytext)
library(katadasaR)hotel <- read.csv("train_preprocess.csv", encoding = "UTF-8")
str(hotel)## 'data.frame': 2283 obs. of 11 variables:
## $ review : chr "kebersihan kurang..." "sangat mengecewakan... hotel bad image, kebersihan kurang, berisik" "Tempat nyaman bersih tapi tv terlalu tinggi tidak bisa di lihat " "semuanya bagus sesuai profile,dan harga promo untuk suite nya jg sangat murah..komplain cuma water heater yg ka"| __truncated__ ...
## $ ac : chr "neut" "neut" "neut" "neut" ...
## $ air_panas : chr "neut" "neut" "neut" "neg" ...
## $ bau : chr "neut" "neut" "neut" "neut" ...
## $ general : chr "neut" "neut" "neut" "pos" ...
## $ kebersihan : chr "neg" "neg" "pos" "neut" ...
## $ linen : chr "neut" "neut" "neut" "neut" ...
## $ service : chr "neut" "neut" "neut" "neut" ...
## $ sunrise_meal: chr "neut" "neut" "neut" "neut" ...
## $ tv : chr "neut" "neut" "neg" "neut" ...
## $ wifi : chr "neut" "neut" "neut" "neut" ...
Deskripsi dataset :
review : berisi umpan balik dari pengguna hotel dalam
bentuk kalimat.
ac : tingkat kepuasan pengguna terhadap Air Conditioner
pada hotel.
air_panas : tingkat kepuasan pengguna terhadap keadaan
air panas hotel.
bau : tingkat kepuasan pengguna terhadap kondisi bau
ruangan hotel.
general : tingkat kepuasan pengguna secara umum.
kebersihan : tingkat kepuasan pengguna terhadap
kebersihan hotel.
linen : tingkat kepuasan pengguna terhadap linen
hotel.
service : tingkat kepuasan pengguna terhadap layanan
hotel.
sunrise_meal : tingkat kepuasan pengguna terhadap
sarapan dari hotel.
tv : tingkat kepuasan pengguna terhadap kondisi TV
hotel.
wifi : tingkat kepuasan pengguna terhadap kondisi WIFI
hotel.
Variabel target untuk model pada projek ini adalah
review, ac, air_panas,
general, kebersihan, linen,
service, sunrise_meal, tv, dan
wifi. Terdapat sembilan variable target sehingga akan
dibuat sembilan model machine learning yang berbeda untuk setiap
variable target yang digunakan.
library(dplyr)
glimpse(hotel)## Rows: 2,283
## Columns: 11
## $ review <chr> "kebersihan kurang...", "sangat mengecewakan... hotel bad…
## $ ac <chr> "neut", "neut", "neut", "neut", "neg", "neut", "neut", "n…
## $ air_panas <chr> "neut", "neut", "neut", "neg", "neg", "neut", "neut", "ne…
## $ bau <chr> "neut", "neut", "neut", "neut", "neut", "neut", "neut", "…
## $ general <chr> "neut", "neut", "neut", "pos", "neut", "neut", "neut", "n…
## $ kebersihan <chr> "neg", "neg", "pos", "neut", "neut", "neut", "neg", "neut…
## $ linen <chr> "neut", "neut", "neut", "neut", "neg", "neg", "neut", "ne…
## $ service <chr> "neut", "neut", "neut", "neut", "neut", "neut", "neut", "…
## $ sunrise_meal <chr> "neut", "neut", "neut", "neut", "neut", "neut", "neut", "…
## $ tv <chr> "neut", "neut", "neg", "neut", "neut", "neut", "neut", "n…
## $ wifi <chr> "neut", "neut", "neut", "neut", "neut", "neut", "neut", "…
Mengubah data type yang belum sesuai :
hotel <- hotel %>%
mutate(ac = as.factor(ac),
air_panas = as.factor(air_panas),
bau = as.factor(bau),
general = as.factor(general),
kebersihan = as.factor(kebersihan),
linen = as.factor(linen),
service = as.factor(service),
sunrise_meal = (sunrise_meal),
tv = as.factor(tv),
wifi = as.factor(wifi)
)Menghilangkan karakter invalid
library(stringr)
hotel <- hotel %>%
mutate(review = str_replace_all(review, "[^[:alnum:][:space:]]", ""))
head(hotel)Mengubah data string menjadi lowercase
hotel <- hotel %>%
mutate(review = str_to_lower(review))
head(hotel)Menghapus karakter angka
hotel <- hotel %>%
mutate(review = str_replace_all(review, pattern = "[:digit:]", replacement = " "))
head(hotel)Menghapus Puntuation dan Whitespaces
hotel <- hotel %>%
mutate(review = stri_replace_all_charclass(review, pattern = "\\p{WHITE_SPACE}", " "))
head(hotel)Mengubah kata-kata berimbuhan menjadi kata dasar (stemming)
stemming <- function(x){
paste0(map_chr(x,katadasar), collapse = " ")}hotel <- hotel %>%
mutate(review = map_chr(tokenize_words(review), .f = stemming))
head(hotel)Menghapus stopword
stopwords_id <- read.delim("stopwords_id.txt", header = 0)
stopwords_id <- stopwords_id %>%
rename(word = V1)hotel_prep <- hotel %>%
unnest_tokens(word, review) %>%
anti_join(stopwords_id)## Joining with `by = join_by(word)`
hotel_prepPada proposal ini akan dilakukan EDA difokuskan untuk satu variable
target yaitu variabel general yang merupakan tingkat
kepuasan pengguna secara umum.
hotel %>%
ggplot(aes(x = general)) +
geom_bar()
Dari bar plot di atas, dapat dilihat bahwa proporsi kelas neutral lebih
besar dari dua kelas lainnya, positif dan negatif. Insight dapat
digunakan sebagai pertimbangan untuk balancing data dalam membuat model
agar diperoleh performa model yang baik.
hotel %>%
mutate(length_char = nchar(review)) %>%
ggplot(aes(x = length_char)) +
geom_histogram(bins = 10) +
scale_x_continuous(limits = c(0, 300), breaks = c(0,50, 100, 150, 200, 250,300))## Warning: Removed 61 rows containing non-finite values (`stat_bin()`).
## Warning: Removed 2 rows containing missing values (`geom_bar()`).
Plot diatas menunjukkan distribusi dari jumlah karakter setiap umpan balik yang akan diolah. Jika dilihat dari histogram di atas, umpan balik banyak berada pada rentang 0 hingga 100 karakter.
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 kelas positif kata yang paling sering muncul adalah kamar, nyaman, bersih, bagus, baik, kurang, dan selebihnya terdapat pada worldcloud dibawah ini.
hotel %>%
filter(general == "pos") %>%
unnest_tokens(word, review) %>%
anti_join(stopwords_id) %>%
count(word, sort = TRUE) %>%
with(wordcloud(word, n, max.words = 100))## Joining with `by = join_by(word)`
Pada kelas neutral kata yang paling sering muncul adalah kamar,
bersih,kurang, bau,mandi dan selebihnya terdapat pada wordcloud dibawah
ini. Wordcloud untuk label neutral ini adalah visualisasi kata-kata yang
umumnya dianggap netral atau tidak memiliki sentimen positif atau
negatif yang kuat dalam umpan balik pelanggan.
hotel %>%
filter(general == "neut") %>%
unnest_tokens(word, review) %>%
anti_join(stopwords_id) %>%
count(word, sort = TRUE) %>%
with(wordcloud(word, n, max.words = 100))## Joining with `by = join_by(word)`
Pada kelas negatif kata yang paling sering muncul adalah kamar, kecewa,kotor,kurang,mandi, tempat dan selebihnya terdapat pada worldcloud dibawah ini.
hotel %>%
filter(general == "neg") %>%
unnest_tokens(word, review) %>%
anti_join(stopwords_id) %>%
count(word, sort = TRUE) %>%
with(wordcloud(word, n, max.words = 100))## Joining with `by = join_by(word)`
Terdapat beberapa kata yang sama muncul dalam Wordcloud untuk label
target variable positif, neutral, dan negatif. Ini mungkin terjadi
karena kata-kata tertentu dapat digunakan dalam konteks yang berbeda
oleh berbagai orang atau dalam berbagai jenis teks.
Misalnya, kata-kata seperti “kamar” atau “mandi” mungkin muncul dalam Wordcloud untuk semua tiga label sentimen. Kata-kata ini mungkin muncul dalam konteks yang positif jika digunakan untuk menggambarkan sesuatu yang disukai, dalam konteks negatif jika digunakan untuk menggambarkan sesuatu yang tidak disukai, dan dalam konteks netral jika digunakan tanpa sentimen yang jelas. Wordcloud hanyalah salah satu alat visualisasi yang digunakan dalam analisis sentimen, tidak selalu memberikan gambaran yang lengkap tentang sentimen dalam teks. Proses EDA pada tahap ini diharapkan dapat dikembangkan pada saat pemodelan untuk mengetahui kata apa yang memiliki bobot tinggi sehingga bisa dikatakan sebagai informasi untuk menentukkan label.
Overview Design
Slide 1
slide 2