
- Use Case Data Science dalam Penjualan: Menganalisis Sentimen Pelanggan
- Menyiapkan Dataset
- Menerapkan Metode BOW
- Menggunakan Model Machine Learning Terawasi untuk Memprediksi Sentimen
- Kesimpulan
Use case data science dapat terkait dengan hampir semua industri yang mengumpulkan atau dapat mengumpulkan data dalam jumlah besar. Toko dan situs e-niaga adalah tempat terjadinya pengalaman pelanggan nyata dari orang-orang yang tertarik oleh kampanye pemasaran, sekaligus tempat dikumpulkannya data pembelian berharga milik suatu merek atau perusahaan. Di sinilah orang membuat keputusan akhir apakah mereka benar-benar ingin membeli produk tertentu, apakah mereka tertarik membeli sesuatu yang sebelumnya tidak direncanakan, berapa banyak yang siap mereka bayarkan, apakah mereka akan kembali ke toko ini, dan ulasan seperti apa yang akan mereka tinggalkan tentang pengalaman mereka sebagai pelanggan.
Memang, ulasan pelanggan merupakan sumber data yang solid untuk menganalisis dan memahami hal-hal apa yang dapat diubah atau diperkuat di seluruh proses penjualan. Menganalisis data dengan cara ini dapat menurunkan biaya, meningkatkan efisiensi operasional, memperbaiki pengalaman pelanggan, menemukan peluang baru, mengembangkan bisnis, dan pada akhirnya meningkatkan pendapatan. Mari kita lihat lebih dekat bagaimana informasi berharga ini dapat dianalisis dan dimodelkan menggunakan algoritma data science, untuk memperoleh wawasan tersembunyi dan menangkap pesan keseluruhan dari setiap pelanggan secara individual.
Use Case Data Science dalam Penjualan: Menganalisis Sentimen Pelanggan
Analisis sentimen pelanggan adalah proses otomatis untuk mengidentifikasi emosi pelanggan saat mereka menggunakan layanan atau produk dari perusahaan tertentu. Ini biasanya berupa data tekstual tidak terstruktur yang dikumpulkan dari survei online, media sosial, tiket dukungan, formulir umpan balik, ulasan produk, forum, panggilan telepon, email, dan chatbot. Dalam machine learning, analisis sentimen pelanggan dilakukan melalui natural language processing (NLP) yang menerapkan metode statistik dan linguistik untuk mengekstrak sentimen positif, negatif, dan netral langsung dari data teks. Intinya, proses ini menghasilkan dua parameter:
- Polaritas: menunjukkan apakah sebuah sentimen positif atau negatif.
- Magnitudo: menunjukkan kekuatan sentimen tersebut.
Analisis sentimen pelanggan adalah alat kunci bagi bisnis modern karena membantu memperoleh wawasan yang dapat ditindaklanjuti, menemukan dan memperbaiki masalah berulang yang kritis yang membuat pelanggan tidak puas, memperkuat fitur produk atau layanan yang memicu emosi positif pelanggan, dan secara keseluruhan membuat keputusan berbasis data yang lebih efisien. Pada tingkat yang lebih rinci, analisis sentimen pelanggan memungkinkan kita untuk:
- meningkatkan layanan pelanggan dan karena itu pengalaman pelanggan,
- meningkatkan loyalitas pelanggan,
- menurunkan churn rate,
- memperbarui produk dan layanan secara tepat waktu,
- mengoptimalkan kampanye pemasaran,
- mengantisipasi tren dan pasar baru,
- menjaga reputasi tinggi perusahaan kami,
- meningkatkan keuntungan.
Seperti halnya tugas analisis teks lainnya, beberapa kendala dapat ditemui saat melakukan analisis sentimen pelanggan. Misalnya, algoritma NLP tidak menangkap sarkasme dalam beberapa ulasan dan mengategorikannya secara keliru. Algoritma juga kadang gagal mengurai singkatan yang sangat spesifik atau kata-kata slang yang jarang digunakan.
Menyiapkan Dataset
Mari kita telusuri bagaimana analisis sentimen pelanggan bekerja dalam praktik menggunakan dataset ulasan film IMDB:
import pandas as pd
movies = pd.read_csv('movies.csv', index_col=0).reset_index(drop=True)
print(f'Number of reviews: {movies.shape[0]:,}\n')
print(movies.head())
Number of reviews: 7,501
review label
0 This short spoof can be found on Elite's Mille... 0
1 A singularly unfunny musical comedy that artif... 0
2 An excellent series, masterfully acted and dir... 1
3 The master of movie spectacle Cecil B. De Mill... 1
4 I was gifted with this movie as it had such a ... 0
Kita memiliki dua kolom: satu berisi teks setiap ulasan, dan satu lagi berisi estimasi sentimen keseluruhan: positif (1) atau negatif (0).
Mari hitung persentase ulasan positif dan negatif:
round(movies['label'].value_counts()*100/len(movies['label'])).convert_dtypes()
0 50
1 50
Name: label, dtype: Int64
Dengan demikian, kita memiliki proporsi ulasan positif dan negatif yang hampir sama.
Menerapkan Metode BOW
Langkah berikutnya adalah mengubah data teks menjadi bentuk numerik karena model machine learning hanya dapat bekerja dengan fitur numerik. Secara khusus, kita akan membuat fitur yang menghitung berapa kali setiap kata muncul dalam ulasan terkait. Pendekatan paling dasar dan langsung untuk tujuan ini disebut bag-of-words (BOW) yang membangun kosakata dari semua kata yang muncul dalam dokumen dan menghitung frekuensi setiap kata di setiap ulasan. Hasilnya, kita akan memperoleh fitur-fitur baru, masing-masing untuk satu kata, beserta frekuensinya.
Mari terapkan metode BOW pada dataset kita:
from sklearn.feature_extraction.text import CountVectorizer
# Creating new features
vect = CountVectorizer(max_features=200)
vect.fit(movies.review)
X_review = vect.transform(movies.review)
X_df = pd.DataFrame(X_review.toarray(), columns=vect.get_feature_names())
# Combining the new features with the label
movies_bow = pd.concat([movies['label'], X_df], axis=1)
print(movies_bow.head())
label 10 about acting action actors actually after again all ... \
0 0 0 0 0 0 0 0 0 0 0 ...
1 0 1 0 1 0 1 0 0 0 3 ...
2 1 0 0 0 0 0 0 1 0 0 ...
3 1 0 0 0 1 0 0 0 0 0 ...
4 0 1 0 0 1 0 0 0 0 3 ...
will with without work world would years you young your
0 0 1 0 0 0 1 0 0 0 0
1 2 7 1 0 0 2 0 3 0 2
2 0 2 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 0 1 1 0
4 0 2 0 1 0 0 0 0 0 0
[5 rows x 201 columns]
Di atas, kami menerapkan parameter opsional max_features untuk hanya mempertimbangkan 200 kata yang paling sering digunakan dan menghindari potensi overfitting model.
Menggunakan Model Machine Learning Terawasi untuk Memprediksi Sentimen
Sekarang, kita akan menggunakan model machine learning terawasi untuk memprediksi sentimen. Karena kita ingin memperkirakan apakah sentimen dari ulasan baru termasuk kategori positif atau negatif berdasarkan ulasan yang sudah diberi label, kita kembali berhadapan dengan masalah klasifikasi. Lagi-lagi, mari gunakan algoritma regresi logistik dan ukur akurasi model:
Accuracy score: 0.754
Confusion matrix:
[[37.62772101 13.23856064]
[11.32829853 37.80541981]]
Kita melihat bahwa model memberi label 11% dari semua ulasan yang positif sebagai negatif, dan 13% sebagai positif padahal sebenarnya negatif. Untuk meningkatkan akurasi model, kita dapat mempertimbangkan mengecualikan stopword (yaitu kata-kata berinformasi rendah yang terlalu sering muncul, seperti "about", "will", "you", dll.) dan memperbesar ukuran kosakata.
Saat menerapkan metode BOW, kita bisa berakhir dengan ratusan atau bahkan ribuan fitur baru dalam dataframe. Ini dapat menghasilkan model yang terlalu kompleks: overfitted, dengan terlalu banyak fitur dan parameter yang tidak perlu. Salah satu cara mengatasinya adalah menggunakan regularisasi, yang membatasi fungsi model. Parameter yang perlu disetel di sini adalah C, yang merepresentasikan kekuatan regularisasi. Mari uji 2 nilai parameter ini: 100 dan 0.1, dan lihat mana yang memberikan kinerja model terbaik pada data uji:
lr_1 = LogisticRegression(C=100)
lr_1.fit(X_train, y_train)
predictions_1 = lr_1.predict(X_test)
lr_2 = LogisticRegression(C=0.1)
lr_2.fit(X_train, y_train)
predictions_2 = lr_2.predict(X_test)
print(f'Accuracy score, lr_1 model: {round(accuracy_score(y_test, predictions_1), 3)}\n'
f'Accuracy score, lr_2 model: {round(accuracy_score(y_test, predictions_2), 3)}\n\n'
f'Confusion matrix for lr_1 model, %:\n{confusion_matrix(y_test, predictions_1)/len(y_test)*100}\n\n'
f'Confusion matrix for lr_2 model, %:\n{confusion_matrix(y_test, predictions_2)/len(y_test)*100}')
Accuracy score, lr_1 model: 0.753
Accuracy score, lr_2 model: 0.756
Confusion matrix for lr_1 model, %:
[[37.53887161 13.32741004]
[11.32829853 37.80541981]]
Confusion matrix for lr_2 model, %:
[[37.67214571 13.19413594]
[11.19502443 37.93869391]]
Perbedaan akurasi model saat menggunakan nilai parameter C yang dipilih tidak signifikan. Kita mungkin dapat menemukan parameter yang meningkatkan kinerja model lebih jauh dengan bereksperimen pada lebih banyak nilai. Namun, di sini kita hanya memiliki 200 fitur baru, sehingga model kita tidak terlalu kompleks dan langkah regularisasi sebenarnya tidak terlalu diperlukan dalam kasus ini.
Alih-alih memprediksi label 0 atau 1 menggunakan fungsi predict, kita bisa memprediksi probabilitas sentimen menggunakan predict_proba. Di sini perlu diingat bahwa kita tidak dapat langsung menerapkan accuracy score atau confusion matrix pada probabilitas yang diprediksi, karena metrik tersebut hanya bekerja dengan kelas. Karena itu, kita perlu mengenkodenya lebih lanjut sebagai kelas. Secara default, probabilitas yang lebih tinggi atau sama dengan 0,5 diterjemahkan ke kelas 1, jika tidak ke kelas 0.
lr = LogisticRegression()
lr.fit(X_train, y_train)
# Predicting the probability of the 0 class
predictions_prob_0 = lr.predict_proba(X_test)[:, 0]
# Predicting the probability of the 1 class
predictions_prob_1 = lr.predict_proba(X_test)[:, 1]
print(f'First 10 predicted probabilities of class 0: {predictions_prob_0[:10].round(3)}\n'
f'First 10 predicted probabilities of class 1: {predictions_prob_1[:10].round(3)}')
First 10 predicted probabilities of class 0: [0.246 0.143 0.123 0.708 0.001 0.828 0.204 0.531 0.121 0.515]
First 10 predicted probabilities of class 1: [0.754 0.857 0.877 0.292 0.999 0.172 0.796 0.469 0.879 0.485]
Kesimpulan
Ada banyak pendekatan bermanfaat lain yang dapat kita terapkan pada dataset untuk melakukan analisis sentimen yang lebih rinci:
- menggunakan n-gram (kombinasi kata) alih-alih hanya kata tunggal untuk menjaga konteks,
- mengecualikan stopword,
- membatasi ukuran kosakata berdasarkan nilai frekuensi atas atau bawah,
- membuat fitur numerik tambahan yang menggambarkan panjang setiap ulasan atau jumlah tanda baca (yang kadang berkorelasi dengan magnitudo sentimen),
- mengecualikan angka, beberapa karakter, kata dengan panjang tertentu, atau mempertimbangkan pola kata yang lebih kompleks,
- menerapkan stemming dan lemmatization, yakni mereduksi kata ke akarnya,
- menggunakan pendekatan yang lebih canggih daripada BOW untuk membuat kosakata, misalnya TfIdf (term frequency inverse document frequency) yang memperhitungkan seberapa sering sebuah kata muncul dalam satu ulasan dibandingkan dengan ulasan lainnya.
- menggunakan beberapa pustaka khusus yang dirancang untuk analisis sentimen, seperti TextBlob, SentiWordNet, VADER (Valence Aware Dictionary and Sentiment Reasoner).
Jika Anda tertarik mengeksplorasi teknik-teknik ini dan teknik berguna lainnya untuk melakukan analisis sentimen yang mendalam, lihat kursus Sentiment Analysis in Python.
