LAPORAN PROYEK SAINS DATA
ANALISIS SENTIMEN BERBASIS ASPEK TERHADAP PERTANDINGAN ARAB VS INDONESIA DI KUALIFIKASI
PIALA DUNIA 2026 PUTARAN 3 ZONA ASIA GRUP C
Disusun Untuk Mata Kuliah Proyek Sains Data Semester Ganjil Tahun Ajaran 2024/2025
DISUSUN OLEH:
Irham Ahmad Musyadad* 10121107 Qaisha Fadhil Ahmad 10121114 M. Daffa Abdulloh 10121120 M. Abdul Rohman Sidik 10121122
Taufiqur Rohman 10121123
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK DAN ILMU KOMPUTER
UNIVERSITAS KOMPUTER INDONESIA
DAFTAR ISI
DAFTAR ISI...i
DAFTAR GAMBAR...ii
DAFTAR TABEL... iii
BAB I PENDAHULUAN... 1
1.1 Latar Belakang Masalah... 1
1.2 Rumusan Masalah... 2
1.3 Batasan Masalah...2
1.4 Tujuan Penelitan...3
1.5 Manfaat Penelitian...3
1.6 Metodologi Penelitian...3
1.6.1 Metode Pengumpulan Data...4
1.6.2 Metode Tahapan Analisis...4
1.6.3 Implementasi...5
1.6.4 Pengujian... 5
1.6.5 Penarikan Kesimpulan...6
BAB II LANDASAN TEORI...7
2.1 Analisis Sentimen Berbasis Aspek...7
2.2 Youtube...7
2.3 Web Scraping...7
2.4 Pembobotan TF-IDF...8
2.5 Piala Dunia...8
2.6 Kualifikasi Piala Dunia Zona Asia...8
2.7 Text Preprocessing... 9
2.7.1 Case Folding...9
2.7.2 Cleaning... 9
2.7.3 Tokenizing...9
2.7.4 Normalization... 9
2.7.5 Stemming... 10
2.7.6 Convert Negation...10
2.7.7 Stopword Removal...10
2.8 Confusion Matrix...10
2.9 Random Forest...11
BAB III PEMBAHASAN... 12
3.1 Analisis Proses...12
3.1.1 Analisis Preprocessing Data...12
3.1.2 Pembobotan TF-IDF... 15
3.2 Pemilihan Algoritma...16
3.3 Tahapan Akuisisi Data...16
3.3.1 Sumber Data... 16
3.3.1.1 Deskripsi Sumber Data:...16
3.3.1.2 Alasan Pemilihan Sumber Data:...16
3.3.1.2.1 Relevansi...16
3.3.1.2.2 Volume Data...16
3.3.1.2.3 Variasi Sentimen...16
3.3.2 Proses Pengumpulan Data...16
3.3.2.1 Metode Pengumpulan Data...16
3.3.2.2 Kendala dalam Pengumpulan Data...17
3.3.2.2.1 Kualitas Data...17
3.3.2.2.2 Kebijakan YouTube...17
3.3.3 Deskripsi Dataset...17
3.3.3.1 Ukuran Dataset...17
3.3.3.2 Jumlah Variabel...17
3.3.3.3 Jumlah Entri...17
3.4 Tahapan Pemrosesan Data...18
3.4.1 Pembersihan Data...18
3.4.2 Transformasi Data...18
3.4.2.1 Normalisasi... 18
3.4.2.2 Tokenization...19
3.4.2.3 Stopword Removal...19
3.4.2.4 Stemming...20
3.5 Tahapan Pemilihan Model...20
3.5.1 Pemilihan Model...20
3.5.3 Proses Pelatihan Model...21
3.5.4 Evaluasi Model...21
3.6 Tahapan Visualisasi Data...24
BAB IV KESIMPULAN DAN SARAN...35
4.1 Kesimpulan...35
4.2 Saran... 35
DAFTAR PUSTAKA...36
LAMPIRAN...38
DAFTAR GAMBAR
Gambar 1. 1 Metode Penelitian...3 Gambar 3. 1 Indonesia Menyerang
Gambar 3. 2 Indonesia Bertahan Gambar 3. 3 Arab Menyerang Gambar 3. 4 Arab Bertahan
Gambar 3. 5 Kondisi Lapangan Home Gambar 3. 6 Kondisi Lapangan Away
Gambar 3. 7 Visualisasi Indonesia Menyerang Home Gambar 3. 8 Visualisasi Inndonesia Menyerang Away Gambar 3. 9 Viusalisasi Indonesia Bertahan Home Gambar 3. 10 Visualisasi Indonesia Bertahan Away Gambar 3. 11 Visualisasi Arab Saudi Menyerang Home Gambar 3. 12 Visualisasi Arab Saudi Menyerang Away Gambar 3. 13 Visualisasi Arab Saudi Bertahan Home Gambar 3. 14 Visualisasi Arab Saudi Bertahan Away Gambar 3. 15 Visualisasi Kondisi Lapangan Home Gambar 3. 16 Visualisasi Kondisi Lapangan Away
DAFTAR TABEL
Tabel 2. 1 Confusion Matrix... 10 Tabel 3. 1 Cleaning
Tabel 3. 2 Case Folding Tabel 3. 3 Tokenization Tabel 3. 4 Normalisasi Tabel 3. 5 Convert Negation Tabel 3. 6 Stopword Removal Tabel 3. 7 Stemming
Tabel 3. 8 Perhitungan TF-IDF Tabel 3. 9 Contoh Pembersihan Tabel 3. 10 Contoh Normalisai Tabel 3. 11 Contoh Tokenization Tabel 3. 12 Contoh Stopword Removal Tabel 3. 13 Contoh Stemming
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Sentimen publik terhadap pertandingan sepak bola sering kali menjadi topik yang menarik untuk dianalisis, terutama dalam perhelatan besar seperti Piala Dunia.
Dalam era digital, platform media sosial seperti Twitter dan YouTube menjadi sumber utama untuk mengamati opini dan sentimen masyarakat. Menurut penelitian oleh B. Liu, analisis sentimen dapat memberikan wawasan berharga mengenai pandangan pendukung terhadap tim nasional, strategi pelatih, dan performa pemain di lapangan [1].
Namun, analisis sentimen terhadap tim nasional di tingkat kualifikasi Piala Dunia masih jarang dilakukan, khususnya untuk zona Asia. Dalam konteks Kualifikasi Piala Dunia 2026, sentimen terhadap tim nasional pada Grup C Zona Asia menjadi topik yang menarik untuk dieksplorasi, mengingat keberagaman latar belakang negara-negara dalam grup tersebut. Data dari FIFA menunjukkan bahwa popularitas sepak bola di Asia terus meningkat, dengan jumlah penonton yang signifikan baik di stadion maupun melalui platform digital [2].
Pertandingan antara Arab Saudi dan Indonesia dalam Kualifikasi Piala Dunia 2026 menjadi fokus utama dalam proyek ini. Arab Saudi, sebagai salah satu kekuatan sepak bola di Asia, memiliki basis penggemar yang besar dan dukungan yang kuat dari masyarakatnya. Di sisi lain, Indonesia, dengan populasi yang besar dan antusiasme tinggi terhadap sepak bola, juga memiliki penggemar yang setia.
Menurut laporan dari Nielsen Sports, Indonesia memiliki salah satu basis penggemar sepak bola terbesar di Asia Tenggara, yang menunjukkan potensi besar untuk analisis sentimen [3].
Berdasarkan penjelasan di atas, rumusan masalah penelitian ini adalah bagaimana melakukan analisis sentimen terhadap masing-masing negara pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia Grup C menggunakan algoritma Random Forest untuk mengidentifikasi dan mengklasifikasikan sentimen publik terhadap tim nasional Arab Saudi dan Indonesia. Pemahaman terhadap opini dan dukungan publik dapat memberikan gambaran tentang dinamika dukungan dan kritik terhadap performa tim-tim nasional tersebut.
Dengan menggunakan teknik analisis sentimen berbasis aspek dan algoritma Random Forest, proyek ini bertujuan untuk mengeksplorasi bagaimana penggemar dari kedua negara mengekspresikan pendapat mereka mengenai pertandingan ini, baik dari segi strategi, performa pemain, maupun hasil akhir. Hasil dari analisis ini diharapkan dapat memberikan wawasan yang lebih dalam mengenai persepsi publik terhadap sepak bola di kawasan Asia, serta kontribusi terhadap pengembangan strategi tim nasional di masa mendatang.m
1.2 Rumusan Masalah
Berdasarkan penjelasan uraian latar belakang, maka rumusan masalah penelitian ini adalah bagaimana melakukan analisis sentimen terhadap masing- masing negara pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia Grup C menggunakan algoritma Random Forest untuk mengidentifikasi dan mengklasifikasikan sentimen publik terhadap tim nasional Arab Saudi dan Indonesia.
1.3 Batasan Masalah
Berdasarkan penelitian yang dilakukan supaya lebih terarah dan sesuai dengan yang dimaksudkan, batasan masalah pada penelitian ini adalah sebagai berikut:
1. Proses pengambilan data menggunakan bahasa negara masing masing lalu diterjemahkan ke Bahasa Indonesia
2. Kriteria data yang diambil yang berhubungan dengan tim nasional Arab vs Indonesia pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia Grup C.
3. Url video kandang :
a. Pertandingan Penuh : https://www.youtube.com/watch?
v=g6n3F_4vHFs
b. Cuplikan : https://www.youtube.com/watch?
v=ZnLlg2J9kMY 4. Url vidio tandang :
a. Pertandingan penuh : https://www.youtube.com/watch?v=TbPJNb5- sgs
b. Cuplikan : https://www.youtube.com/watch?v=z-
uB64inVRk
5. Pengambilan terakhir diambil pada tanggal 25 November 2024.
6. Pelabelan dilakukan secara manual.
7. Pembobotan kata menggunakan TF-IDF.
1.4 Tujuan Penelitan
Tujuan penelitian ini adalah melakukan analisis sentimen pada komentar youtube terhadap pendukung tim nasional pada masing masing negara pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia dengan algoritma Random Forest.
1.5 Manfaat Penelitian
Pada penelitian ini diharapkan dapat mengetahui kecenderungan sentimen pendukung terhadap tim nasional pada masing masing negara pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia.
1.6 Metodologi Penelitian
Metode penelitian ini adalah bagian bagian penting dalam sebuah penelitian yang menjelaskan secara rinci tentang pendekatan, teknik, dan prosedur yang digunakan untuk mengumpulkan, menganalisis, dan menginterpretasikan data.
Bagian ini biasanya mencakup berbagai elemen yang memungkinkan penelitian dilaksanakan secara sistematis dan terukur. Berikut adalah elemen yang terdapat dalam metodologi penelitian:
Gambar 1. 1 Metode Penelitian 1.6.1 Metode Pengumpulan Data
Metode pengumpulan data yang digunakan dalam penelitian ini adalah sebagai berikut:
1. Studi Literatur
Studi literatur adalah untuk mencari teori – teori yang relevan terhadap penelitian sejenis yang pernah dilakukan sebelumnya yang berkaitan dengan penemuan sebelumnya, karena bertujuan untuk mendapatkan solusi dari permasalahan yang sedang dihadapi.
2. Pengumpulan Dataset
YouTube adalah sumber data yang digunakan dalam analisis sentimen ini, berdasarkan komentar pengguna youtube terhadap performa tim masing- masing negara yang bertanding pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia Grup C.
Setelah mendapatkan data berdasarkan komentar pengguna youtube terhadap performa tim masing-masing negara yang bertanding pada Kualifikasi Piala Dunia 2026 Putaran 3 Zona Asia Grup C langkah selanjutnya, mengambil data komentar denga cara mencrawling data komentar tersebut.
1.6.2 Metode Tahapan Analisis
Berikut merupakan tahapan analisis pada penelitian ini adalah sebagai berikut:
1. Analisis Text Pre-processing, kalimat dari opini yang terkumpul akan diproses sehingga data yang didapat menjadi lebih terstruktur dan mudah untuk diolah. Tahapan pre-processing yang dilakukan terdiri dari Case Folding, Cleaning, Tokenizing, Normalization, Stemming, Convert Negation, Stopword Removal.
2. Analisis Metode, analisis klasifikasi menggunakan metode Random Forest. Random Forest merupakan salah satu teknik ensemble yang mengkombinasikan sejumlah pohon keputusan, di mana setiap pohon dilatih dengan data latih yang berbeda dan fitur acak. Proses ini membantu meningkatkan akurasi dalam mengklasifikasikan data dengan menghadirkan prediksi yang lebih stabil. Algoritma Random Forest mampu menangani sejumlah besar data dengan berbagai fitur, dan hasil akhir diperoleh melalui pengambilan keputusan di node akhir pohon, yang memungkinkan klasifikasi yang akurat.
1.6.3 Implementasi
Pada tahapan implementasi, pertama-tama melakukan pengambilan data dari sumber yang relevan. Setelah itu, data yang diperoleh diproses melalui beberapa tahapan preprocessing, yang dimulai dengan cleaning untuk menghapus karakter-karakter yang tidak diperlukan, seperti tanda baca atau angka. Kemudian, dilakukan case folding untuk mengubah seluruh teks menjadi huruf kecil, agar analisis kata menjadi konsisten. Proses berikutnya adalah tokenizing, yaitu memecah teks menjadi kata-kata atau token, dilanjutkan dengan normalization untuk menyederhanakan bentuk kata, dan convert negation untuk menangani kata-kata yang mengandung negasi.
Selanjutnya, dilakukan stopword removal untuk menghapus kata-kata yang tidak memiliki makna penting, seperti "dan" atau "yang", serta stemming untuk mengubah kata-kata ke bentuk dasarnya. Setelah data selesai diproses, dilakukan pemisahan data menjadi dua bagian: data pelatihan (training set) dan data pengujian (test set), yang bertujuan untuk melatih model dan menguji
menggunakan metode TF-IDF (Term Frequency-Inverse Document Frequency) untuk merepresentasikan kata-kata berdasarkan frekuensinya.
Untuk mengatasi ketidakseimbangan data, saya menerapkan teknik SMOTE (Synthetic Minority Over-sampling Technique), yang menghasilkan sampel sintetis untuk kelas minoritas guna meningkatkan keseimbangan data. Setelah itu, saya menggunakan algoritma Random Forest untuk melakukan klasifikasi pada data. Sebagai langkah terakhir, saya melakukan visualisasi hasil analisis, pertama dengan menggambarkan distribusi aspek besar negara yang ada dalam dataset, dan kedua, memvisualisasikan teks menggunakan Wordcloud untuk menampilkan kata-kata yang paling sering muncul dalam data.
1.6.4 Pengujian
Pada tahapan ini akan dilakukan pengujian dan evaluasi performansi dari analisis sentimen berbasis aspek dengan menerapakan metode Random Forest Classifier terhadap pertandingan Arab Saudi vs Indonesia di kualifikasi piala dunia 2026 round 3.
1.6.5 Penarikan Kesimpulan
Pada tahapan ini akan dilakukan penarikan kesimpulan berdasarkan hasil dari tahapan pengujian dalam klasifikasi mengggunakan metode pada analisis sentimen berbasis aspek terhadap pertandingan arab saudi vs indonesia di kualifikasi piala dunia 2026 round 3.
BAB II
LANDASAN TEORI
2.1 Analisis Sentimen Berbasis Aspek
Analisis Sentimen adalah proses yang digunakan untuk mengidentifikasi atau menganalisis opini seseorang mengenai suatu objek atau produk tertentu, yang dapat dikategorikan sebagai positif, negatif atau netral. Berbeda dengan informasi faktual, opini dan sentimen memiliki sifat subjektif. Oleh karena itu, penting untuk memeriksa sekumpulan opini dari berbagai pihak, karena pandangan tersebut bersifat subjektif dan berasal dari lebih satu individu. Hal ini memerlukan sebuah ringkasan untuk mewakili pendapat yang ada [9].
2.2 Youtube
Youtube merupakan platform media sosial yang menyajikan video dengan durasi tertentu, yang dibuat oleh para pembuat konten dengan berbagai genre.
Tingginya minat masyarakat dalam menggunakan youtube telah membuat platform ini semakin dimanfaatkan oleh berbagai kalangan. Di Indonesia, Youtube menempati posisi sebagai salah satu media sosial terpopuler, dengan jumlah pengguna mencapai 170 juta, atau sekitar 93,8 persen dari total populasi 181,9 juta pengguna internet berusia 16 – 64 tahun, menurut laporan dari
solopos.com. Selain itu, Youtube juga menyediakan fitur umpan balik seperti like, dislike, dan komentar terhadap video yang ditayangkan, memungkinkan penonton untuk berinteraksi dan menyampaikan pendapat mereka mengenai konten
tersebut. Tanggapan dari penonton dapat berupa komentar yang konstruktif dan memotivasi bagi kreator, namun juga bisa muncul komentar negatif yang
mengandung unsur SARA (Suku, Ras, Agama dan Antar golongan) terhadap para pembuat konten [10].
2.3 Web Scraping
Web scraping merupakan metode otomatis untuk mengumpulkan dokumen semi-terstruktur dari internet, terutama dari halaman web yang menggunakan markup seperti HTML. Teknik ini bertujuan untuk mengekstrak informasi spesifik dari halaman tersebut. Dengan menggunakan pendekatan ini, data dapat diperoleh dari situs web tanpa perlu dilakukan secara manual. Web scraping memungkinkan pengambilan data secara terarah, sehingga mempermudah pencarian informasi
tertentu dengan lebih efisien[4].
2.4 Pembobotan TF-IDF
Dalam penelitian ini, penulis menggunakan metode Term Frequency-Inverse Document Frequency (TF-IDF), yang merupakan teknik dalam pengolahan teks dan pemodelan bahasa alami. Metode ini bertujuan untuk menilai pentingnya suatu kata (term) dalam dokumen, terutama dalam konteks koleksi dokumen yang lebih luas. TF-IDF mempertimbangkan dua faktor utama, yaitu Term Frequency (TF) dan Inverse Document Frequency (IDF). TF mengukur frekuensi kemunculan suatu kata dalam dokumen, yang biasanya dihitung dengan membagi jumlah kemunculan kata dengan total kata dalam dokumen. Dalam beberapa kasus, TF dapat dimodifikasi dengan skema penimbangan yang lebih kompleks. Sementara itu, IDF mengukur pentingnya suatu kata dalam koleksi dokumen, di mana kata yang jarang muncul di seluruh koleksi cenderung memiliki nilai IDF yang lebih tinggi. IDF dihitung dengan membagi total jumlah dokumen dengan jumlah dokumen yang mengandung kata tersebut, dan hasilnya kemudian diambil logaritma untuk memperhalus skala. Data dalam penelitian ini dikumpulkan melalui pencarian dan analisis teks daring, seperti blog, forum, dan media sosial, yang diposting oleh individu yang mengalami depresi. Teks yang terkumpul kemudian dianalisis menggunakan metode TF-IDF untuk mengukur frekuensi kata kunci dalam dokumen [11].
2.5 Piala Dunia
Piala Dunia FIFA adalah turnamen sepak bola internasional yang diadakan setiap empat tahun oleh Federation Internationale de Football Association (FIFA) dan merupakan acara yang paling dinantikan oleh masyarakat di seluruh dunia.
Pertama kali diselenggarakan pada tahun 1930, turnamen ini telah berkembang menjadi acara olahraga terbesar di dunia, menarik perhatian miliaran penggemar.
Keikutsertaan negara-negara dalam turnamen ini tidak hanya mencerminkan kekuatan sepak bola, tetapi juga menjadi simbol kebanggaan nasional [12].
2.6 Kualifikasi Piala Dunia Zona Asia
Sistem Kualifikasi Piala Dunia FIFA terbagi menjadi beberapa zona geografis, salah satunya adalah zona asia yang dikelola oleh Asian Football Confederation (AFC). Dalam putaran ketiga kualifikasi piala dunia 2026, tim nasional dari berbagai negara asia dibagi kedalam berbagai grup untuk bersaing
mendapatkan tempat di turnamen utama. Tim Nasional Arab Saudi dan Indonesia tergabung dalam Grup C, menjadikan pertandingan ini sebagai sorotan besar di kalangan penggemar sepak bola [13].
2.7 Text Preprocessing
Text Prepocessing adalah mengubah data mentah yang sebelumnya telah dikumpulkan agar dapat diolah lebih lanjut untuk penggunaan model.
Preprocessing melibatkan Folding, Cleaning, Tokenizing, Normalization, Stemming, Convert Negation, Stopword Removal.
2.7.1 Case Folding
Case folding adalah langkah mengubah seluruh huruf dalam dokumen menjadi huruf kecil. Hanya huruf “a” hingga “z” yang akan dipertahankan, sementara karakter non-huruf akan dianggap sebagai pembatas. Proses ini bertujuan untuk menghindari duplikasi data, sehingga kata dengan perbedaan kapitalisasi, tetapi memiliki makna yang sama, tidak akan dianggap sebagai entitas yang berbeda[5].
2.7.2 Cleaning
Cleaning adalah proses menghapus elemen-elemen yang tidak relevan dan mengganggu dalam ulasan, seperti tanda baca, emoji, tautan, serta angka.
Proses ini bertujuan untuk mengurangi gangguan (noise) dan menghindari masalah kualitas data, seperti data yang tidak lengkap, duplikat, outlier, atau data yang tidak valid[6].
2.7.3 Tokenizing
Tokenization adalah proses memecah suatu kalimat dalam dokumen menjadi sejumlah kata. Setiap kata yang dihasilkan dari pemecahan kalimat tersebut akan diolah lebih lanjut[5].
2.7.4 Normalization
Spelling normalization, atau yang sering disebut normalisasi kata, adalah proses yang bertujuan untuk memperbaiki kata-kata dalam teks dokumen yang mungkin salah eja, menggunakan singkatan, atau tidak sesuai dengan aturan bahasa Indonesia. Proses ini bertujuan untuk mengurangi variasi dalam ejaan kata-kata yang memiliki makna serupa, sehingga membantu menyatukan dan merapikan representasi kata-kata tersebut[6].
2.7.5 Stemming
Stemming adalah proses yang bertujuan untuk mengubah kata-kata dalam data ulasan ke bentuk dasarnya menggunakan library Sastrawi. Proses ini dilakukan dengan menghilangkan imbuhan atau afiks yang terdapat pada kata, seperti me-, ber-, di-, -kan, dan -an[6].
2.7.6 Convert Negation
Convert Negation adalah proses mengubah kalimat yang memiliki makna kontradiktif dari kata tersebut. Dalam salah satu proses Feature Extraction, Convert Negation dilakukan dengan menambahkan imbuhan
“NOT_” di awal kata untuk menunjukkan bahwa kalimat tersebut mengandung negasi[7].
2.7.7 Stopword Removal
Stopword removal adalah proses menghilangkan kata-kata yang tidak relevan atau tidak memberikan pengaruh dalam sebuah teks. Stopword merujuk pada kata-kata yang sering muncul tetapi tidak berkontribusi pada sentimen, sehingga dianggap sebagai gangguan (noise) dan dihapus dalam analisis.
Korpus stopword yang digunakan berasal dari kamus bawaan library NLTK, yang kemudian ditambahkan dengan beberapa stopword tambahan[6].
2.8 Confusion Matrix
Confusion matrix adalah tabel yang berisi informasi tentang jumlah data uji yang benar atau jumlah data tes yang salah[8].
Confusion Matrix Kelas Prediksi
Positif Negatif Netral
Kelas Sebenarnya
Positif TPP PFNeg PFNet
Negatif NegFP TNegNeg NegFNet
Netral NetFP NetFNeg TnetNet
Tabel 2. 1 Confusion Matrix
Tingkat akurasi menjelaskan perbandingan jumlah dari prediksi benar
Accuracy= TPP+TNegNeg+TNetNet
TPP+PFNeg+PFNet+NegFP+TNegNeg+NegFNet+NetFP+NetFNeg+TNetNet Keterangan :
1. TPP (True Possitive Positive), merupakan jumlah dokumen yang
dikategorikan dengan benar sebagai bagian dari kelas positif.
2. TNegNeg (True Negative Negative), merupakan jumlah dokumen yang dikategorikan dengan benar sebagai bagian dari kelas negatif.
3. TNetNet (True Netral Netral), merupakan jumlah kelas yang dikategorikan dengan benar sebagai bagian dari kelas netral.
4. PFNeg (Positive False Negatif), merupakan jumlah dokumen kelas positif yang salah diklasifikasikan sebagai dokumen kelas negatif.
5. NegFP (Negatif False Positive), merupakan jumlah dokumen negatif yang salah diklasifikasikan sebagai dokumen kelas positif.
6. PFNet (Positive False Netral), merupakan jumlah dokumen positif yang salah diklasifiasikan sebagai dokumen kelas netral.
7. NetFP (Netral False Positive), merupakan jumlah dokumen netral yang salah diklasifikasikan sebagai dokumen kelas positif.
8. NetFNeg (Netral False Negatif), merupakan jumlah dokumen kelas netral yang salah diklasifikasikan sebagai dokumen kelas negatif.
9. NegFNet (Negatif False Netral), merupakan jumlah dokumen kelas negatif yang salah diklasifikasikan sebagai dokumen kelas netral.
2.9 Random Forest
Random Forest adalah algoritma pembelajaran supervised yang terdiri dari sekumpulan pohon keputusan yang dibangun menggunakan metode bagging.
Metode bagging menggabungkan beberapa model pembelajaran untuk meningkatkan performa keseluruhan. Dalam konteks Random Forest, algoritma ini mengklasifikasikan data dengan membangun berbagai pohon keputusan yang dilatih dengan data latih dan fitur acak yang independen. Hasil akhirnya ditentukan melalui proses penentuan node akar yang berakhir pada beberapa node daun, sehingga mampu mengklasifikasikan sejumlah besar data secara akurat[14].
BAB III PEMBAHASAN
3.1 Analisis Proses
3.1.1 Analisis Preprocessing Data 1. Cleaning
Kalimat Masukan Hasil Cleaning Lagi dan Lagi banyak kesempatan
terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini.
lagi dan lagi banyak kesempatan terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
Tabel 3. 1 Cleaning
2. Case Folding
Kalimat Masukan Hasil Case Folding lagi dan lagi banyak kesempatan
terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
lagi dan lagi banyak kesempatan terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
Tabel 3. 2 Case Folding
3. Tokenization
Kalimat Masukan Hasil Tokenization lagi dan lagi banyak kesempatan
terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
['lagi', 'dan', 'lagi', 'banyak', 'kesempatan', 'terbuang', 'selalu', 'aja', 'sering', 'salah', 'passing', 'egy', 'struick', 'passing', 'nya', 'perlu', 'di', 'perbaiki', 'padahal', 'ragnar', 'sudah', 'beberapa', 'kali', 'berdiri', 'bebas', 'nampak', 'kali', 'di', 'akhir', 'pertandingan', 'rasa', 'kurang', 'puas', 'terlihat', 'dari', 'ragnar', 'wak', 'haji', 'sangat', 'menyala', 'dalam', 'pertandingan', 'ini']
Tabel 3. 3 Tokenization
4. Normalisasi
Kalimat Masukan Hasil Normalisasi ['lagi', 'dan', 'lagi', 'banyak',
'kesempatan', 'terbuang', 'selalu', 'aja', 'sering', 'salah', 'passing', 'egy', 'struick', 'passing', 'nya', 'perlu', 'di', 'perbaiki', 'padahal', 'ragnar', 'sudah', 'beberapa', 'kali', 'berdiri', 'bebas', 'nampak', 'kali', 'di', 'akhir', 'pertandingan', 'rasa', 'kurang', 'puas', 'terlihat', 'dari', 'ragnar', 'wak', 'haji', 'sangat', 'menyala', 'dalam', 'pertandingan', 'ini']
lagi dan lagi banyak kesempatan terbuang selalu saja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas menampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
Tabel 3. 4 Normalisasi
Kalimat Masukan Hasil Convert Negation lagi dan lagi banyak kesempatan
terbuang selalu saja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas menampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
lagi dan lagi banyak kesempatan terbuang selalu saja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas menampak kali di akhir pertandingan rasa kurang_puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini Tabel 3. 5 Convert Negation
6. Stopword Removal
Kalimat Masukan Hasil Stopword Removal lagi dan lagi banyak kesempatan
terbuang selalu saja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas menampak kali di akhir pertandingan rasa kurang_puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
kesempatan terbuang salah passing egy struick passing perbaiki ragnar berdiri bebas menampak pertandingan kurang_puas ragnar wak haji menyala pertandingan
Tabel 3. 6 Stopword Removal 7. Stemming
Kalimat Masukan Hasil Stemming kesempatan terbuang salah passing
egy struick passing perbaiki ragnar berdiri bebas menampak pertandingan kurang_puas ragnar wak haji menyala pertandingan
sempat buang salah passing egy struick passing baik ragnar diri bebas tampak tanding kurang puas ragnar wak haji nyala tanding
Tabel 3. 7 Stemming
3.1.2 Pembobotan TF-IDF
Menggunakan contoh kalimat dengan perhitungan pembobotan Term Frequency- Invers Document.
TFID Fa=T Fa×log
(
D FN a)
T Fa : banyaknya kemunculan setiap kata pada suatu dokumen a N : jumlah seluruh dokumen
D Fa : jumlah dokumen keseluruhan yang memuat kata a
Diberikan 2 contoh kalimat, perhitungan bobot dengan TF-IDF dapat dilihat pada Tabel 3.8
1. suka lihat marselino bagus mainnya cetak gol.
2. penyerang arab depan gawang pasti gagal cetak gol
R1 R2 TF1 TF2 IDF TFIDF
1
TFIDF 2
suka 1 0 0,14 0 0,30 0,04 0
lihat 1 0 0,14 0 0,30 0,04 0
marselino 1 0 0,14 0 0,30 0,04 0
bagus 1 0 0,14 0 0,30 0,04 0
main 1 0 0,14 0 0,30 0,04 0
penyerang 0 1 0 0,125 0,30 0 0,04
arab 0 1 0 0,125 0,30 0 0,04
depan 0 1 0 0,125 0,30 0 0,04
gawang 0 1 0 0,125 0,30 0 0,04
pasti 0 1 0 0,125 0,30 0 0,04
gagal 0 1 0 0,125 0,30 0 0,04
cetak 1 1 0,14 0,125 0 0 0
gol 1 1 0,14 0,125 0 0 0
Tabel 3. 8 Perhitungan TF-IDF
3.2 Pemilihan Algoritma
Dalam penelitian ini, algoritma yang digunakan adalah Random Forest.
Random Forest dipilih karena kemampuannya dalam menangani dataset berukuran besar dan memberikan hasil yang stabil. Sebagai metode ensemble, algoritma ini memanfaatkan kombinasi banyak pohon keputusan untuk menghasilkan prediksi yang lebih akurat dan mengurangi resiko overfitting.
3.3 Tahapan Akuisisi Data 3.3.1 Sumber Data
3.3.1.1 Deskripsi Sumber Data:
Sumber data utama untuk proyek ini berasal dari komentar di platform YouTube. Komentar ini mencerminkan opini dan sentimen publik terhadap pertandingan antara Arab Saudi dan Indonesia dalam Kualifikasi Piala Dunia 2026. Data ini diambil dari video yang relevan dengan pertandingan, yang dapat mencakup tayangan penuh dan cuplikan pertandingan.
3.3.1.2 Alasan Pemilihan Sumber Data:
3.3.1.2.1 Relevansi
YouTube adalah platform yang banyak digunakan oleh penggemar sepak bola untuk berbagi pendapat dan reaksi terhadap pertandingan, sehingga komentar di video dapat memberikan wawasan yang berharga tentang sentimen publik.
3.3.1.2.2 Volume Data
YouTube memiliki volume komentar yang besar, memungkinkan analisis yang lebih komprehensif dan representatif terhadap opini masyarakat.
3.3.1.2.3 Variasi Sentimen
Komentar di YouTube mencakup berbagai perspektif, dari dukungan hingga kritik, yang penting untuk analisis sentimen yang mendalam.
3.3.2 Proses Pengumpulan Data
3.3.2.1 Metode Pengumpulan Data
Library Python youtube_comment_downloader: Data dikumpulkan menggunakan library Python youtube_comment_downloader, yang
dirancang khusus untuk mengunduh komentar dari video YouTube dengan mudah. Library ini memungkinkan pengguna untuk mengunduh komentar dengan hanya beberapa baris kode, sehingga mempermudah proses pengumpulan data.
Contoh penggunaan:
from youtube_comment_downloader import YoutubeCommentDownloader
downloader = YoutubeCommentDownloader()
comments = downloader.get_comments(video_id='VIDEO_ID')
Dengan menggunakan library ini, pengguna dapat dengan cepat mengumpulkan komentar dari video yang relevan tanpa harus berurusan dengan API atau teknik scraping yang lebih kompleks.
3.3.2.2 Kendala dalam Pengumpulan Data 3.3.2.2.1 Kualitas Data
Data yang diambil mungkin mengandung noise, seperti spam atau komentar yang tidak relevan, yang perlu disaring selama proses preprocessing.
3.3.2.2.2 Kebijakan YouTube
Meskipun library ini memudahkan pengunduhan komentar, pengguna tetap harus mematuhi kebijakan dan ketentuan layanan YouTube terkait pengambilan data.
3.3.3 Deskripsi Dataset 3.3.3.1 Ukuran Dataset
Dataset diharapkan mencakup ribuan entri, dengan target untuk mengumpulkan setidaknya 3.000 komentar dari YouTube untuk di analisis, realialisasinya sebanyak 3.863 komentar didapatkan dari beberapa video youtube.
3.3.3.2 Jumlah Variabel
Variabel yang mungkin ada dalam dataset termasuk: ID komentar, teks komentar, tanggal dan waktu, jumlah like, dan sentimen yang teridentifikasi (positif, negatif, netral).
3.3.3.3 Jumlah Entri
Target untuk mengumpulkan setidaknya 5.000 entri dari komentar YouTube untuk analisis yang lebih mendalam.
3.4 Tahapan Pemrosesan Data 3.4.1 Pembersihan Data
Dalam tahap ini, data yang hilang (missing values) akan diidentifikasi dan ditangani. Jika terdapat komentar yang tidak memiliki teks atau informasi penting lainnya, komentar tersebut akan dihapus dari dataset untuk menjaga kualitas data.
Selain itu, duplikasi komentar juga akan diperiksa. Komentar yang sama yang muncul lebih dari sekali akan dihapus untuk memastikan bahwa analisis tidak bias dan tidak terpengaruh oleh pengulangan data.
Contoh Pembersihan:
Kalimat Masukan Hasil Cleaning
Lagi dan Lagi banyak kesempatan terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini.
lagi dan lagi banyak kesempatan terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini Tabel 3. 9 Contoh Pembersihan
3.4.2 Transformasi Data 3.4.2.1 Normalisasi
Normalisasi dilakukan untuk memastikan konsistensi dalam penulisan. Ini termasuk mengubah semua huruf menjadi huruf kecil (case folding) dan menghapus karakter yang tidak perlu.
Contoh Normalisasi :
Kalimat Masukan Hasil Case Folding lagi dan lagi banyak kesempatan
terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas
lagi dan lagi banyak kesempatan terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas
nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
Tabel 3. 10 Contoh Normalisai 3.4.2.2 Tokenization
Proses ini memecah kalimat menjadi kata-kata atau token.
Tokenisasi penting untuk analisis lebih lanjut, seperti penghitungan frekuensi kata.
Contoh Tokenization:
Kalimat Masukan Hasil Tokenization lagi dan lagi banyak kesempatan
terbuang selalu aja sering salah passing egy struick passing nya perlu di perbaiki padahal ragnar sudah beberapa kali berdiri bebas nampak kali di akhir pertandingan rasa kurang puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
['lagi', 'dan', 'lagi', 'banyak', 'kesempatan', 'terbuang', 'selalu', 'aja', 'sering', 'salah', 'passing', 'egy', 'struick', 'passing', 'nya', 'perlu', 'di', 'perbaiki', 'padahal', 'ragnar', 'sudah', 'beberapa', 'kali', 'berdiri', 'bebas', 'nampak', 'kali', 'di', 'akhir', 'pertandingan', 'rasa', 'kurang', 'puas', 'terlihat', 'dari', 'ragnar', 'wak', 'haji', 'sangat', 'menyala', 'dalam', 'pertandingan', 'ini']
Tabel 3. 11 Contoh Tokenization 3.4.2.3 Stopword Removal
Stopword, yaitu kata-kata umum yang tidak memberikan makna signifikan (seperti "dan", "atau", "adalah"), akan dihapus dari dataset.
Contoh Stopword Removal
Kalimat Masukan Hasil Stopword Removal lagi dan lagi banyak kesempatan
terbuang selalu saja sering salah passing egy struick passing nya
kesempatan terbuang salah passing egy struick passing perbaiki ragnar berdiri bebas menampak
sudah beberapa kali berdiri bebas menampak kali di akhir pertandingan rasa kurang_puas terlihat dari ragnar wak haji sangat menyala dalam pertandingan ini
wak haji menyala pertandingan
Tabel 3. 12 Contoh Stopword Removal 3.4.2.4 Stemming
Proses ini mengubah kata ke bentuk dasarnya. Misalnya, kata
"menyala" menjadi "nyala".
Contoh Stemming:
Kalimat Masukan Hasil Stemming kesempatan terbuang salah passing
egy struick passing perbaiki ragnar berdiri bebas menampak pertandingan kurang_puas ragnar wak haji menyala pertandingan
sempat buang salah passing egy struick passing baik ragnar diri bebas tampak tanding kurang puas ragnar wak haji nyala tanding
Tabel 3. 13 Contoh Stemming 3.5 Tahapan Pemilihan Model
3.5.1 Pemilihan Model
a) Random Forest adalah algoritma ensemble learning yang bekerja dengan cara menggabungkan hasil prediksi dari beberapa pohon keputusan (decision trees) untuk menghasilkan prediksi yang lebih akurat dan stabil.
b) Setiap pohon dalam random forest dilatih pada subset data yang berbeda (dengan teknik bootstrapping, yaitu sampling dengan penggantian) dan pada subset fitur yang berbeda. Ini disebut bagging (Bootstrap Aggregating).
c) Prediksi akhir dari Random Forest dihasilkan dengan cara majority voting untuk masalah klasifikasi (kelas yang paling banyak dipilih oleh pohon-pohon keputusan).
Keunggulan Random Forest:
1. Dapat menangani data dengan jumlah fitur yang besar dan beragam.
2. Mengurangi risiko overfitting dibandingkan dengan pohon keputusan tunggal.
3. Tidak membutuhkan banyak pemrosesan data atau pencarian hyperparameter yang rumit.
3.5.2 Melatih Model:
a) Model RandomForestClassifier dilatih menggunakan data pelatihan (X_train_vectorized, y_train), yang sudah diproses menjadi representasi numerik (TF-IDF).
b) Parameter n_estimators=100 menunjukkan bahwa model akan menggunakan 100 pohon keputusan.
c) Random_state=11 memastikan hasil yang konsisten setiap kali kode dijalankan dengan mengatur randomisasi.
3.5.3 Proses Pelatihan Model
a. Data dibagi menjadi dua bagian utama: train set dan test set.
b. Data dibagi dengan proporsi 80:20, di mana 80% data digunakan untuk melatih model dan 20% sisanya digunakan untuk pengujian.
c. Ini dilakukan untuk memastikan model dapat diuji dengan data yang tidak terlihat sebelumnya, memberikan gambaran lebih baik tentang kinerjanya di dunia nyata.
3.5.4 Evaluasi Model
Menggunakan akurasi sebagai metrik evaluasi, maka proses evaluasi model akan fokus pada seberapa banyak prediksi model yang benar dibandingkan dengan total jumlah prediksi yang dilakukan.
Indonesia Menyerang
Gambar 3. 1 Indonesia Menyerang Indonesia Bertahan
Gambar 3. 2 Indonesia Bertahan
Arab Menyerang
Gambar 3. 3 Arab Menyerang Arab Bertahan
Gambar 3. 4 Arab Bertahan
Kondisi Lapangan Home
Gambar 3. 5 Kondisi Lapangan Home Kondisi Lapangan Away
Gambar 3. 6 Kondisi Lapangan Away 3.6 Tahapan Visualisasi Data
Dalam penelitian ini, visualisasi data dilakukan untuk menyajikan hasil analisis sentimen dengan cara yang informatif dan mudah dipahami oleh pengguna.
Alat dan pustaka yang digunakan adalah matplotlib. Matplotlib adalah pustaka visualisasi data berbasis python untuk membuat grafik statis seperti histogram, pie chart, dan bar chart.
Pada bagian ini, berbagai visualisasi data yang dihasilkan akan ditampilkan untuk mendukung analisis dan pemahaman mengenai hasil penelitian. Visualisasi ini mencakup distribusi sentimen untuk setiap aspek, dan wordcloud dari setiap aspek.
1. Distribusi Sentimen Tim Indonesia Aspek Menyerang Home
Gambar 3. 7 Visualisasi Indonesia Menyerang Home
Mayoritas komentar netral (983) menunjukkan penonton tidak terlalu condong ke sentimen positif atau negatif. Sentimen positif (405) mengapresiasi performa menyerang, khususnya kontribusi pemain kunci.
Komentar negatif (39) mengkritik efektivitas serangan dan keputusan taktis.
Secara keseluruhan, performa menyerang tim Indonesia di laga home lebih banyak diapresiasi, meski kritik negatif perlu diperhatikan untuk perbaikan, terutama dalam efektivitas serangan dan penyelesaian akhir..
Gambar 3. 8 Visualisasi Inndonesia Menyerang Away
Pada laga away, komentar netral (1.346) mendominasi, menunjukkan banyak penonton yang tidak mengungkapkan sentimen emosional yang kuat. Sentimen positif (288) lebih rendah dibandingkan laga home (405), mengindikasikan kurangnya apresiasi terhadap performa menyerang tim.
Sentimen negatif (118) juga lebih tinggi dibanding laga home (39), mencerminkan kritik terhadap kelemahan serangan tim. Secara keseluruhan, performa menyerang tim Indonesia di laga away kurang mendapat apresiasi dan lebih banyak dikritik, yang memerlukan evaluasi untuk meningkatkan efektivitas serangan.
3. Distribusi Sentimen Tim Indonesia Aspek Bertahan Home
Gambar 3. 9 Viusalisasi Indonesia Bertahan Home
Pada laga home, mayoritas komentar netral (1.103) menunjukkan bahwa penonton cenderung tidak mengungkapkan sentimen emosional yang kuat terkait aspek pertahanan tim. Sentimen positif (318) mengapresiasi kekuatan pertahanan tim, mencerminkan bahwa banyak yang menghargai kedisiplinan dan soliditas lini belakang. Sementara itu, komentar negatif (6) sangat sedikit, yang mengindikasikan bahwa hampir tidak ada kritik signifikan terhadap aspek pertahanan tim. Secara keseluruhan, performa pertahanan tim Indonesia pada laga home mendapat apresiasi positif, dengan sedikit kritik, menunjukkan bahwa tim tampil solid dan efektif dalam menjaga gawang.
Gambar 3. 10 Visualisasi Indonesia Bertahan Away
Pada laga away, sentimen positif (980) mendominasi, mencerminkan apresiasi yang tinggi terhadap performa tim, khususnya dalam aspek bertahan yang solid dan strategi yang diterapkan. Sentimen netral (739) juga cukup banyak, menunjukkan bahwa sebagian penonton lebih fokus pada analisis tanpa menunjukkan kecenderungan emosional yang jelas.
Sedangkan sentimen negatif (33) relatif sedikit, meskipun ada beberapa kritik terhadap aspek tertentu seperti kesalahan teknis atau kekurangan dalam fase bertahan. Secara keseluruhan, tim Indonesia tampil cukup baik dalam bertahan saat laga away, dengan apresiasi positif yang lebih dominan dan sedikit kritik.
5. Distribusi Sentimen Tim Arab Saudi Aspek Menyerang Home
Gambar 3. 11 Visualisasi Arab Saudi Menyerang Home
Pada laga home, sentimen negatif (61) mendominasi, menunjukkan bahwa banyak komentar mengkritik performa menyerang tim nasional Arab, terutama terkait dengan kurangnya efektivitas dan kesulitan dalam menciptakan peluang. Sentimen netral (53) menunjukkan bahwa sebagian penonton tetap memberikan pandangan yang lebih objektif tanpa kecenderungan emosional yang jelas. Sementara itu, sentimen positif (8) sangat sedikit, menandakan bahwa apresiasi terhadap serangan tim hampir tidak ada. Secara keseluruhan, performa menyerang tim nasional Arab di laga home mendapat banyak kritik dan sedikit apresiasi.
6. Distribusi Sentimen Tim Arab Saudi Aspek Menyerang Away
Gambar 3. 12 Visualisasi Arab Saudi Menyerang Away
Pada laga away, sentimen netral (65) mendominasi, menunjukkan bahwa banyak komentar yang tidak menunjukkan kecenderungan emosional yang jelas mengenai performa menyerang timnasional Arab.
Sentimen negatif (34) mencerminkan adanya kritik terhadap aspek menyerang, mungkin terkait dengan kurangnya peluang berbahaya atau kesulitan dalam menembus pertahanan lawan. Sementara itu, sentimen positif (22) cukup sedikit, menandakan bahwa apresiasi terhadap performa menyerang tim juga terbatas. Secara keseluruhan, timnasional Arab pada laga away tidak banyak mendapat pujian, dengan kritik lebih mendominasi dibandingkan apresiasi.
7. Distribusi Sentimen Tim Arab Saudi Aspek Bertahan Home
Gambar 3. 13 Visualisasi Arab Saudi Bertahan Home
Pada laga home, sentimen netral (99) mendominasi, menunjukkan bahwa banyak komentar yang bersifat deskriptif atau tidak menunjukkan kecenderungan emosional yang kuat terhadap aspek pertahanan timnasional Arab. Sentimen negatif (18) mencerminkan adanya kritik terhadap aspek bertahan tim, mungkin terkait dengan kebocoran peluang atau kesalahan dalam organisasi pertahanan. Sementara itu, sentimen positif (5) sangat sedikit, mengindikasikan bahwa apresiasi terhadap pertahanan tim cukup terbatas. Secara keseluruhan, performa bertahan timnasional Arab di laga home lebih banyak mendapat perhatian netral dan kritik dibandingkan pujian.
8. Distribusi Sentimen Tim Arab Saudi Aspek Bertahan Away
Gambar 3. 14 Visualisasi Arab Saudi Bertahan Away
Pada laga away, sentimen netral (84) mendominasi, menunjukkan bahwa sebagian besar komentar tidak mengungkapkan sentimen emosional yang jelas terkait performa bertahan timnasional Arab. Sentimen negatif (29) mengindikasikan adanya kritik terhadap pertahanan tim, mungkin terkait dengan kesalahan atau kelemahan dalam menghadapi serangan lawan. Sementara itu, sentimen positif (8) sangat sedikit, menandakan bahwa apresiasi terhadap pertahanan tim juga terbatas. Secara keseluruhan, timnasional Arab pada laga away mendapat lebih banyak perhatian netral dan kritik daripada pujian dalam hal bertahan.
9. Distribusi Sentimen Kondisi Lapangan Home
Gambar 3. 15 Visualisasi Kondisi Lapangan Home
Mayoritas komentar terkait Kondisi Lapangan Home bersifat netral (1.441), menunjukkan minimnya perhatian khusus terhadap aspek ini.
Komentar positif (78) mengindikasikan apresiasi terhadap kualitas lapangan, sementara komentar negatif (30) mengarah pada kritik tertentu.
Secara keseluruhan, kondisi lapangan home lebih banyak diterima tanpa protes signifikan.
Gambar 3. 16 Visualisasi Kondisi Lapangan Away
Mayoritas komentar terkait Kondisi Lapangan Away bersifat netral (1.806), menunjukkan bahwa aspek ini tidak menjadi sorotan utama.
Komentar negatif (63) mengindikasikan adanya keluhan terhadap kondisi lapangan, sementara komentar positif (4) sangat minim. Secara keseluruhan, kondisi lapangan away cenderung lebih dikritik dibanding diapresiasi.
BAB IV
KESIMPULAN DAN SARAN
4.1 Kesimpulan
Berdasarkan hasil penelitian yang dilakukan, dapat disimpulkan bahwa algoritma Random Forest berhasil menunjukkan performa yang baik dalam mengklasifikasikan tiga aspek utama, yaitu Aspek Menyerang, Aspek Bertahan, dan Aspek Kondisi Lapangan pada total 1.287 data.
Untuk tim Indonesia, algoritma ini mencapai tingkat akurasi yang memadai dengan 76% pada Aspek Menyerang dan 82% pada Aspek Bertahan, menunjukkan kemampuan yang kuat dalam mengenali pola dan karakteristik yang relevan untuk kedua aspek tersebut.
Untuk tim Arab Saudi, meskipun akurasi sedikit lebih rendah, algoritma ini tetap menunjukkan performa yang baik dengan 72% pada Aspek Menyerang dan 69% pada Aspek Bertahan, yang mengindikasikan bahwa model mampu mengenali pola dalam aspek-aspek ini meskipun tantangannya lebih besar.
Untuk Aspek Kondisi Lapangan, model menunjukkan performa yang sangat baik dengan akurasi 95% pada laga home dan 91% pada laga away, menunjukkan kemampuan algoritma untuk dengan tepat mengklasifikasikan kondisi lapangan berdasarkan data yang tersedia.
Secara keseluruhan, algoritma Random Forest menunjukkan kinerja yang konsisten dan efektif dalam menganalisis aspek-aspek permainan sepak bola baik untuk tim Indonesia maupun Arab Saudi, dengan akurasi yang sangat baik dalam mengklasifikasikan Aspek Kondisi Lapangan dan akurasi yang dapat diandalkan pada aspek lainnya.
4.2 Saran
1. Menggunakan algoritma alternatif untuk membandingkan hasil dan menentukan metode yang paling efektif untuk klasifikasi.
2. Menggunakan dataset dengan jumlah yang lebih besar untuk meningkatkan tingkat akurasi.
DAFTAR PUSTAKA
[1] B. Liu, "Sentiment Analysis and Opinion Mining," Synthesis Lectures on Human-Centered Informatics, vol. 5, no. 1, pp. 1-167, 2012.
[2] FIFA, "FIFA Women's Football Strategy 2020-2026," 2021. [Online].
Available: https://www.fifa.com. [Accessed: Oct. 2023].
[3] Nielsen Sports, "The Future of Football in Southeast Asia," 2020. [Online].
Available: https://www.nielsen.com. [Accessed: Oct. 2023].
[4] M. F. Y. Herjanto and C. Carudin, “Analisis Sentimen Ulasan Pengguna Aplikasi Sirekap Pada Play Store Menggunakan Algoritma Random Forest Classifer,” J. Inform. dan Tek. Elektro Terap., vol. 12, no. 2, pp. 1204–1210, 2024, doi: 10.23960/jitet.v12i2.4192.
[5] M. R. Fajriansyah and Siswanto, “Analisis Sentimen Pengguna Twitter Terhadap Partai Politik Pendukung Calon Gubernur Di Jakarta Menggunakan Algoritma C4 . 5 Decision Tree Learning,” Skanika, vol. 1, no. 2, pp. 697–703, 2018, [Online]. Available:
https://jom.fti.budiluhur.ac.id/index.php/SKANIKA/article/view/278
[6] Cindy Caterine Yolanda, Syafriandi Syafriandi, Yenni Kurniawati, and Dina Fitria, “Sentiment Analysis of DANA Application Reviews on Google Play Store Using Naïve Bayes Classifier Algorithm Based on Information Gain,”
UNP J. Stat. Data Sci., vol. 2, no. 1, pp. 48–55, 2024, doi:
10.24036/ujsds/vol2-iss1/147.
[7] T. B. Rohman, D. Dwi Purwanto, and J. Santoso, “Sentiment Analysis Terhadap Review Rumah Makan di Surabaya Memanfaatkan Algoritma Random Forest,” Fak. Sist. Inf., vol. 60284, 2018.
[8] R. L. Nurdiansyah and K. E. Dewi, “Pengaruh Information Gain Dan Normalisasi Kata Pada Analisis Sentimen Berbasis Aspek,” KOMPUTA J.
Ilm. Komput. dan Inform., vol. 12, no. 2, 2023.
[9] W. Parasati, F. A. Bachtiar, and N. Y. Setiawan, "Analisis Sentimen Berbasis Aspek pada Ulasan Pelanggan Restoran Bakso President Malang dengan Metode Naïve Bayes Classifier," J. Teknol. Inf. dan Ilmu Komputer, vol.
2020, pp. 1-10, 2020. Available:
http://j-ptiik.ub.ac.id/index.php/j-ptiik/article/view/7134.
[10] H. A. R. Harpizon, R. Kurniawan, and others, "Analisis Sentimen Komentar Di YouTube Tentang Ceramah Ustadz Abdul Somad Menggunakan Algoritma Naïve Bayes," Repository UIN Suska, 2022. Available:
https://repository.uin-suska.ac.id/59746/.
[11] L. Annisa and A. D. Kalifia, "Analisis Teknik TF-IDF Dalam Identifikasi Faktor-Faktor Penyebab Depresi Pada Individu," Gudang Jurnal Multidisiplin Ilmu, vol. 2024, pp. 1-12, 2024. Available:
https://gudangjurnal.com/index.php/gjmi/article/view/249.
[12] M. A. Maulana, "Politik, Olahraga, dan Islam Studi Kasus Pembatalan RI Menjadi Tuan Rumah Piala Dunia U-20 2023," Islamic Education, vol. 2023,
pp. 1-10, 2023. Available:
http://maryamsejahtera.com/index.php/Education/article/view/192.
[13] R. A. Rakhman, "Pengaruh Iklan Squeeze Frame pada Pertandingan Kualifikasi Piala Dunia Timnas Indonesia Terhadap Respon Afektif Penonton," Jurnal Komunikasi, Sosial dan Ilmu Politik, vol. 2025, pp. 1-15,
2025. Available:
https://jurnal.researchideas.org/index.php/retorika/article/view/197.
[14] A. A. Firdaus, A. I. Hadiana, and others, "Klasifikasi Sentimen pada Aplikasi Shopee Menggunakan Fitur Bag of Word dan Algoritma Random Forest,"
Research: Journal of..., vol. 2024, pp. 1-12, 2024. Available:
https://www.jurnal.ranahresearch.com/index.php/R2J/article/view/994.
LAMPIRAN
1. Meng Import Dataset import pandas as pd
pd.options.mode.chained_assignment = None # Nonaktifkan warning
gabungan_sentimen = pd.read_csv('gabungan_sentimen.csv') gabungan_sentimen =
gabungan_sentimen.drop(columns=['stopwords_removal','is_menyerang','is_kondi si_lapangan','is_bertahan'])
gabungan_sentimen
2. Preprocessing Teks import re
from nltk.tokenize import word_tokenize from nltk.corpus import stopwords
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory
# URL raw GitHub
url = "https://raw.githubusercontent.com/panggi/pujangga/master/resource/
formalization/formalizationDict.txt"
# Membaca file dari URL
df_slang_word = pd.read_csv(url, sep="\t", header=None, names=["Informal",
"Formal"])
# Konversi DataFrame ke dictionary untuk lookup
slang_dict = dict(zip(df_slang_word["Informal"], df_slang_word["Formal"]))
# Mengubah teks menjadi lowercase def case_folding(text):
text = text.lower() return text
# membersihkan teks def cleaning(text):
# Ganti koma dengan koma yang diikuti spasi text = re.sub(r',', ', ', text)
# Ganti titik dengan titik yang diikuti spasi text = re.sub(r'\.', '. ', text)
# Hapus angka
text = re.sub(r'\d+', '', text)
# Hapus tanda baca dan simbol (kecuali huruf dan spasi) text = re.sub(r'[^\w\s]', '', text)
# Hapus karakter tambahan (opsional, jika ada spasi berlebihan)
text = re.sub(r'\s+', ' ', text).strip() return text
# mentokenisasi teks def tokenizing(text):
# Tokenisasi teks
tokens = word_tokenize(text) return tokens
# mengganti slang words def slang_words(tokens):
return [slang_dict.get(token, token) for token in tokens]
# mengubah kata menjadi kata dasar def stemming(tokens):
# Membuat stemmer Sastrawi factory = StemmerFactory()
stemmer = factory.create_stemmer()
# Stemming setiap token menggunakan Sastrawi stems = [stemmer.stem(token) for token in tokens]
return stems
# menggabungkan kata negasi dengan kata selanjutnya def convert_negation(tokens):
# Mengubah kata negasi menjadi bentuk aslinya
negation_words = ['tidak', 'bukan', 'tak', 'jangan', 'belum', 'tiada', 'takut', 'kurang']
for i in range(len(tokens)):
if tokens[i] in negation_words and i < len(tokens) - 1:
tokens[i + 1] = f"{tokens[i]}_{tokens[i + 1]}"
return tokens
# menghapus stopwords
def stopwords_removal(tokens):
# Menghapus stopwords
stop_words = set(stopwords.words('indonesian'))
# Menambahkan stopwords secara manual
additional_stopwords = ["dong", "nih", "sih", "aja", "deh" ,"hihi","nya"]
stop_words.update(additional_stopwords)
filtered_tokens = [token for token in tokens if token not in stop_words]
return filtered_tokens
3. Penerapan Preprocessing ke Dataset gabungan_sentimen['case_folding'] =
gabungan_sentimen['cleaning'] =
gabungan_sentimen['case_folding'].apply(cleaning)
gabungan_sentimen['tokenizing'] =
gabungan_sentimen['cleaning'].apply(tokenizing)
gabungan_sentimen['slang_words'] =
gabungan_sentimen['tokenizing'].apply(slang_words)
gabungan_sentimen['stemming'] =
gabungan_sentimen['slang_words'].apply(stemming)
gabungan_sentimen['convert_negation'] =
gabungan_sentimen['stemming'].apply(convert_negation)
gabungan_sentimen['stopwords_removal'] =
gabungan_sentimen['convert_negation'].apply(stopwords_removal)
gabungan_sentimen
4. Prediksi Sentimen untuk Indonesia (HOME dan AWAY)
id = gabungan_sentimen[['stopwords_removal','pertandingan', 'negara']]
id = id[id['negara'] == 'id']
id = id.drop(columns=['negara']).reset_index(drop=True)
id
a. Prediksi Menyerang HOME
id_menyerang_home = id[id['pertandingan'] == 'HOME']
id_menyerang_home
import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_id_menyerang.pkl', 'rb') as file:
loaded_model_id_menyerang = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_id_menyerang.pkl', 'rb') as file:
loaded_vectorizer_id_menyerang = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_id_menyerang.transform(id_menyerang_home['stopwords_rem oval'].apply(lambda x: ' '.join(x)))
predictions = loaded_model_id_menyerang.predict(test_text_vectorized)
id_menyerang_home.loc[:, 'menyerang'] = predictions
id_menyerang_home['menyerang'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = id_menyerang_home['menyerang'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['gray', 'green', 'red'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value + 40, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Indonesia Menyerang Home") plt.xticks(rotation=0)
# Tampilkan plt.show()
b. Prediksi Menyerang AWAY
id_menyerang_away = id[id['pertandingan'] == 'AWAY']
id_menyerang_away import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_id_menyerang.pkl', 'rb') as file:
loaded_model_id_menyerang = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_id_menyerang.pkl', 'rb') as file:
loaded_vectorizer_id_menyerang = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_id_menyerang.transform(id_menyerang_away['stopwords_rem oval'].apply(lambda x: ' '.join(x)))
predictions = loaded_model_id_menyerang.predict(test_text_vectorized)
id_menyerang_away.loc[:, 'menyerang'] = predictions
id_menyerang_away['menyerang'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = id_menyerang_away['menyerang'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['gray', 'green', 'red'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value + 45, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Indonesia Menyerang Away") plt.xticks(rotation=0)
# Tampilkan plt.show()
c. Prediksi Bertahan HOME
id_bertahan_home = id[id['pertandingan'] == 'HOME']
id_bertahan_home
import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_id_bertahan.pkl', 'rb') as file:
loaded_model_id_bertahan = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_id_bertahan.pkl', 'rb') as file:
loaded_vectorizer_id_bertahan = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_id_bertahan.transform(id_bertahan_home['stopwords_removal' ].apply(lambda x: ' '.join(x)))
predictions = loaded_model_id_bertahan.predict(test_text_vectorized)
id_bertahan_home.loc[:, 'bertahan'] = predictions
id_bertahan_home['bertahan'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = id_bertahan_home['bertahan'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['gray', 'green', 'red'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value + 40, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Indonesia Bertahan Home") plt.xticks(rotation=0)
# Tampilkan plt.show()
d. Prediksi Bertahan AWAY
id_bertahan_away = id[id['pertandingan'] == 'AWAY']
id_bertahan_away
import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_id_bertahan.pkl', 'rb') as file:
loaded_model_id_bertahan = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_id_bertahan.pkl', 'rb') as file:
loaded_vectorizer_id_bertahan = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_id_bertahan.transform(id_bertahan_away['stopwords_removal' ].apply(lambda x: ' '.join(x)))
predictions = loaded_model_id_bertahan.predict(test_text_vectorized)
id_bertahan_away.loc[:, 'bertahan'] = predictions
id_bertahan_away['bertahan'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = id_bertahan_away['bertahan'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['green', 'gray', 'red'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value + 40, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Indonesia Bertahan Away") plt.xticks(rotation=0)
# Tampilkan plt.show()
5. Prediksi Sentimen untuk Arab (HOME dan AWAY)
ar = gabungan_sentimen[['stopwords_removal','pertandingan', 'negara']]
ar = ar[ar['negara'] == 'ar']
ar = ar.drop(columns=['negara']).reset_index(drop=True)
ar
a. Prediksi Menyerang HOME
ar_menyerang_home = ar[ar['pertandingan'] == 'HOME']
ar_menyerang_home
import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_ar_menyerang.pkl', 'rb') as file:
loaded_model_ar_menyerang = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_ar_menyerang.pkl', 'rb') as file:
loaded_vectorizer_ar_menyerang = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_ar_menyerang.transform(ar_menyerang_home['stopwords_rem oval'].apply(lambda x: ' '.join(x)))
predictions = loaded_model_ar_menyerang.predict(test_text_vectorized)
ar_menyerang_home.loc[:, 'menyerang'] = predictions
ar_menyerang_home['menyerang'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = ar_menyerang_home['menyerang'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['red', 'gray', 'green'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Arab Saudi Menyerang Home") plt.xticks(rotation=0)
# Tampilkan plt.show()
b. Prediksi Menyerang AWAY
ar_menyerang_away = ar[ar['pertandingan'] == 'AWAY']
ar_menyerang_away
import pickle
# Memuat model dari file pickle
with open('model/random_forest_model_ar_menyerang.pkl', 'rb') as file:
loaded_model_ar_menyerang = pickle.load(file)
# Memuat vectorizer dari file pickle
with open('model/tfidf_vectorizer_model_ar_menyerang.pkl', 'rb') as file:
loaded_vectorizer_ar_menyerang = pickle.load(file)
print("Model dan vectorizer berhasil dimuat dari file.")
test_text_vectorized =
loaded_vectorizer_ar_menyerang.transform(ar_menyerang_away['stopwords_rem oval'].apply(lambda x: ' '.join(x)))
predictions = loaded_model_ar_menyerang.predict(test_text_vectorized)
ar_menyerang_away.loc[:, 'menyerang'] = predictions
ar_menyerang_away['menyerang'].value_counts()
import matplotlib.pyplot as plt import seaborn as sns
# Data
counts = ar_menyerang_away['menyerang'].value_counts()
label_mapping = {-1: "Negatif", 0: "Netral", 1: "Positif"} # Mapping label counts.index = counts.index.map(label_mapping) # Ubah label
# Plot
plt.figure(figsize=(10,6))
ax = sns.barplot(x=counts.index, y=counts.values, palette=['gray', 'red', 'green'])
# Tambahkan nilai di atas batang
for i, value in enumerate(counts.values):
ax.text(i, value, str(value), ha='center', va='bottom', fontsize=12, fontweight='bold', color='black')
# Label
plt.xlabel("Kategori Sentimen") plt.ylabel("Jumlah")
plt.title("Distribusi Sentimen Arab Saudi Menyerang Away") plt.xticks(rotation=0)
# Tampilkan