{
"cells": [
{
"cell_type": "markdown",
"id": "c9af9f23",
"metadata": {
"papermill": {
"duration": 0.010007,
"end_time": "2025-08-17T11:14:38.064648",
"exception": false,
"start_time": "2025-08-17T11:14:38.054641",
"status": "completed"
},
"tags": []
},
"source": [
"# Analisis Sentimen dan Pemodelan Topik Ulasan Wisatawan tentang Lawang Sewu"
]
},
{
"cell_type": "markdown",
"id": "be918bec",
"metadata": {
"papermill": {
"duration": 0.007414,
"end_time": "2025-08-17T11:14:38.081285",
"exception": false,
"start_time": "2025-08-17T11:14:38.073871",
"status": "completed"
},
"tags": []
},
"source": [
"### 1. Judul & Tujuan Penelitian\n",
"\n",
"**Judul:** Analisis Sentimen dan Pemodelan Topik Ulasan Wisatawan tentang Lawang Sewu\n",
"\n",
"**Tujuan:**\n",
"1. **Klasifikasi Sentimen:** Mengklasifikasikan ulasan dari Google Reviews ke dalam sentimen **positif, negatif, atau netral** secara terawasi (*supervised*).\n",
"2. **Pemodelan Topik:** Mengungkap topik-topik utama yang dibicarakan dalam ulasan menggunakan *Latent Dirichlet Allocation* (LDA).\n",
"3. **Analisis Terpadu:** Mengaitkan hasil sentimen dengan topik yang ditemukan untuk memberikan rekomendasi perbaikan layanan yang actionable bagi pengelola Lawang Sewu."
]
},
{
"cell_type": "markdown",
"id": "b567eac8",
"metadata": {
"papermill": {
"duration": 0.007399,
"end_time": "2025-08-17T11:14:38.096364",
"exception": false,
"start_time": "2025-08-17T11:14:38.088965",
"status": "completed"
},
"tags": []
},
"source": [
"### 2. Deskripsi Dataset & Sumber Data\n",
"\n",
"* **Sumber Data:** Google Maps/Reviews. Platform ini dipilih karena memiliki volume ulasan yang signifikan dibandingkan platform lain yang datanya \"terlalu sedikit dan tidak ada value\".\n",
"* **Ukuran Dataset:** **3.500 ulasan** yang telah dilabeli secara manual dengan sentimen (positif, negatif, netral).\n",
"* **Struktur Data (Kolom Kunci):**\n",
" * `text`: Isi ulasan asli dari pengguna.\n",
" * `label`: Sentimen yang telah ditentukan (POSITIF, NEGATIF, NETRAL).\n",
" * *(Opsional)*: `date`, `rating`, `user_id` (jika tersedia dan dianonimkan).\n",
"* **Catatan Etika & Legal:**\n",
" * Proses *scraping* data dilakukan secara etis dan menghormati *Terms of Service* (TOS) Google.\n",
" * Data pengguna seperti nama atau ID akan dianonimkan untuk menjaga privasi."
]
},
{
"cell_type": "markdown",
"id": "2f8ed21a",
"metadata": {
"papermill": {
"duration": 0.007957,
"end_time": "2025-08-17T11:14:38.113743",
"exception": false,
"start_time": "2025-08-17T11:14:38.105786",
"status": "completed"
},
"tags": []
},
"source": [
"### 3. Ringkasan Alur Metodologi\n",
"\n",
"Penelitian ini akan mengikuti alur kerja standar dalam proyek *Natural Language Processing* (NLP):\n",
"\n",
"1. **Setup & Audit Data**: Mempersiapkan lingkungan kerja, memuat data, dan melakukan analisis data eksplorasi awal untuk memahami karakteristik dataset.\n",
"2. **Preprocessing Teks**: Membersihkan dan menormalisasi data teks (termasuk *cleaning*, *case folding*, *tokenisasi*, *stopword removal*, dan *stemming*).\n",
"3. **Deduplikasi**: Menghapus ulasan duplikat (baik yang identik maupun yang sangat mirip) untuk memastikan kualitas model.\n",
"4. **Pembagian Data**: Membagi dataset secara *stratified* menjadi data latih, validasi, dan uji untuk evaluasi model yang adil.\n",
"5. **Analisis Sentimen (Supervised):**\n",
" * **Ekstraksi Fitur**: Mengubah teks menjadi representasi numerik menggunakan TF-IDF.\n",
" * **Seleksi Model**: Melakukan *screening* cepat dengan LazyPredict, dilanjutkan dengan validasi silang pada model kandidat (LinearSVC, LogisticRegression, ComplementNB).\n",
" * **Tuning & Evaluasi**: Melakukan *hyperparameter tuning* pada model terbaik dan mengevaluasi performanya secara terstruktur pada data uji.\n",
"6. **Pemodelan Topik (Unsupervised):**\n",
" * **Persiapan Korpus**: Membangun kamus dan korpus dari teks bersih.\n",
" * **Pencarian Jumlah Topik**: Menggunakan metrik *Coherence Score* (c_v) untuk menemukan jumlah topik (k) yang optimal.\n",
" * **Interpretasi & Visualisasi**: Melatih model LDA final dan membuat visualisasi interaktif dengan pyLDAvis.\n",
"7. **Integrasi & Laporan**: Menggabungkan hasil sentimen dan topik untuk menarik kesimpulan dan memberikan rekomendasi."
]
},
{
"cell_type": "markdown",
"id": "be9a727d",
"metadata": {
"papermill": {
"duration": 0.007374,
"end_time": "2025-08-17T11:14:38.128709",
"exception": false,
"start_time": "2025-08-17T11:14:38.121335",
"status": "completed"
},
"tags": []
},
"source": [
"### 4. Setup Lingkungan & Reproducibility\n",
"\n",
"Langkah pertama adalah mengimpor pustaka yang dibutuhkan, mengatur *seed* untuk reproduktifitas, dan membuat folder untuk menyimpan artefak hasil analisis."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3103e169",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:14:38.146678Z",
"iopub.status.busy": "2025-08-17T11:14:38.146330Z",
"iopub.status.idle": "2025-08-17T11:15:24.997322Z",
"shell.execute_reply": "2025-08-17T11:15:24.995697Z"
},
"papermill": {
"duration": 46.862779,
"end_time": "2025-08-17T11:15:24.999396",
"exception": false,
"start_time": "2025-08-17T11:14:38.136617",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting Sastrawi\r\n",
" Downloading Sastrawi-1.0.1-py2.py3-none-any.whl.metadata (909 bytes)\r\n",
"Collecting thefuzz\r\n",
" Downloading thefuzz-0.22.1-py3-none-any.whl.metadata (3.9 kB)\r\n",
"Collecting rapidfuzz<4.0.0,>=3.0.0 (from thefuzz)\r\n",
" Downloading rapidfuzz-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\r\n",
"Downloading Sastrawi-1.0.1-py2.py3-none-any.whl (209 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m209.7/209.7 kB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading thefuzz-0.22.1-py3-none-any.whl (8.2 kB)\r\n",
"Downloading rapidfuzz-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m40.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hInstalling collected packages: Sastrawi, rapidfuzz, thefuzz\r\n",
"Successfully installed Sastrawi-1.0.1 rapidfuzz-3.13.0 thefuzz-0.22.1\r\n",
"Python version: 3.11.13 (main, Jun 4 2025, 08:57:29) [GCC 11.4.0]\n",
"pandas version: 2.2.3\n",
"scikit-learn version: 1.2.2\n",
"gensim version: 4.3.3\n",
"pyLDAvis version: 3.4.0\n",
"Setup selesai. Folder 'artefak/' siap digunakan.\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import re\n",
"import time\n",
"import json\n",
"import os\n",
"import sys\n",
"import joblib\n",
"from tqdm.notebook import tqdm\n",
"tqdm.pandas()\n",
"\n",
"# Library untuk NLP dan Machine Learning\n",
"import sklearn\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.model_selection import train_test_split, cross_val_score, StratifiedKFold, GridSearchCV\n",
"from sklearn.metrics import classification_report, confusion_matrix, f1_score\n",
"from sklearn.svm import LinearSVC\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.naive_bayes import ComplementNB\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.neighbors import NearestCentroid\n",
"\n",
"from lightgbm import LGBMClassifier\n",
"\n",
"import gensim\n",
"from gensim.corpora import Dictionary\n",
"from gensim.models import LdaMulticore, CoherenceModel\n",
"import pyLDAvis.gensim_models as gensimvis\n",
"import pyLDAvis\n",
"\n",
"!pip install Sastrawi thefuzz\n",
"from Sastrawi.Stemmer.StemmerFactory import StemmerFactory\n",
"from Sastrawi.StopWordRemover.StopWordRemoverFactory import StopWordRemoverFactory\n",
"\n",
"from thefuzz import fuzz # untuk near-duplicate detection\n",
"\n",
"# Pengaturan umum\n",
"sns.set_style('whitegrid')\n",
"SEED = 42\n",
"np.random.seed(SEED)\n",
"\n",
"# Buat folder artefak jika belum ada\n",
"if not os.path.exists('artefak'):\n",
" os.makedirs('artefak')\n",
" \n",
"print(\"Python version:\", sys.version)\n",
"print(\"pandas version:\", pd.__version__)\n",
"print(\"scikit-learn version:\", sklearn.__version__)\n",
"print(\"gensim version:\", gensim.__version__)\n",
"print(\"pyLDAvis version:\", pyLDAvis.__version__)\n",
"print(\"Setup selesai. Folder 'artefak/' siap digunakan.\")"
]
},
{
"cell_type": "markdown",
"id": "6dfa6d81",
"metadata": {
"papermill": {
"duration": 0.008034,
"end_time": "2025-08-17T11:15:25.016066",
"exception": false,
"start_time": "2025-08-17T11:15:25.008032",
"status": "completed"
},
"tags": []
},
"source": [
"### 5. Audit Data Awal\n",
"\n",
"Kita akan memuat dataset dan melakukan pemeriksaan awal untuk memahami struktur, tipe data, dan distribusi label sentimen."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "09911f74",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:15:25.035440Z",
"iopub.status.busy": "2025-08-17T11:15:25.034136Z",
"iopub.status.idle": "2025-08-17T11:15:26.371923Z",
"shell.execute_reply": "2025-08-17T11:15:26.370560Z"
},
"papermill": {
"duration": 1.349199,
"end_time": "2025-08-17T11:15:26.373598",
"exception": false,
"start_time": "2025-08-17T11:15:25.024399",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dataset berhasil dimuat: 3506 baris dan 3 kolom.\n",
"\n",
"Contoh 5 baris data awal:\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
No
\n",
"
Text
\n",
"
Label
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
Tempat wisata yang bersejarah
\n",
"
POSITIF
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
belum ke Semarang kalau belum datang ke lawang...
\n",
"
POSITIF
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
Ternyata ini dulunya gedung percetakan tiket k...
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
KAI dalam mengelola aset lebih profesional lag...
\n",
"
NEGATIF
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
Ticket masuk 25.000 per orang.. Air mineral 60...
\n",
"
NETRAL
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" No Text Label\n",
"0 1 Tempat wisata yang bersejarah POSITIF\n",
"1 2 belum ke Semarang kalau belum datang ke lawang... POSITIF\n",
"2 3 Ternyata ini dulunya gedung percetakan tiket k... NETRAL\n",
"3 4 KAI dalam mengelola aset lebih profesional lag... NEGATIF\n",
"4 5 Ticket masuk 25.000 per orang.. Air mineral 60... NETRAL"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Informasi Dataset:\n",
"\n",
"RangeIndex: 3506 entries, 0 to 3505\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 No 3506 non-null int64 \n",
" 1 Text 3506 non-null object\n",
" 2 Label 3506 non-null object\n",
"dtypes: int64(1), object(2)\n",
"memory usage: 82.3+ KB\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.11/dist-packages/seaborn/_oldcore.py:1498: DeprecationWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, pd.CategoricalDtype) instead\n",
" if pd.api.types.is_categorical_dtype(vector):\n",
"/usr/local/lib/python3.11/dist-packages/seaborn/_oldcore.py:1498: DeprecationWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, pd.CategoricalDtype) instead\n",
" if pd.api.types.is_categorical_dtype(vector):\n"
]
},
{
"data": {
"image/png": "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O0nS9u3bVbNmTauGPwAAAODvIV+mQbtT48aNzWH0Qa5fv67Dhw/r8OHDkm7f+Hb48GGdO3dONjY26tOnj2bPnq3Nmzfr6NGjGj58uB577DHzrBC1atVSSEiI/vnPf2r//v3as2ePxo0bp9DQUFWsWFGS1KFDB9nZ2WnUqFE6fvy41q9fr0WLFunVV1/N71MHAADAI8Cqm+Byw9nZWZGRkblqe/DgQfXp08f8OKunuXPnzpo4caL69++vlJQUvf/++7p69aoaN26sefPmqWTJkuZtJk+erHHjxunll1+Wra2tWrVqpdGjR5vXlylTRp9//rk+/PBDdenSReXKldPgwYOZAg0AAMCgbDIzMzOLuojiLj09Xfv27ZOvr+9DjevsNe0rHfkj8cEN8Uir515eS99oX9RlAABgKNbktXwfAgEAAAAUZwRgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEIABAABgKARgAAAAGAoBGAAAAIZCAAYAAIChEICBv5nMjPSiLgGFiJ83AFivRFEXACB/2dialBATrtSEk0VdCgqYnesTcu0ysajLAIBHDgEY+BtKTTip1POHi7oMAACKpWI9BGLGjBny8PCw+GrTpo15/c2bNzV27FgFBATIz89PQ4cOVUJCgsU+zp07pwEDBqhhw4YKDAzUpEmTlJaWVtinAgAAgGKi2PcA16lTR/Pnzzc/NplM5u8nTJigH374QdOmTVOZMmU0btw4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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Statistik Distribusi Label:\n",
"label\n",
"POSITIF 71.420422\n",
"NETRAL 15.516258\n",
"NEGATIF 11.523103\n",
"TIDAK RELEVAN 1.540217\n",
"Name: proportion, dtype: float64\n"
]
}
],
"source": [
"NAMA_FILE_RAW = '/kaggle/input/labeledlawangsewureviewdata/LabeledLawangSewuReviewData.xlsx'\n",
"\n",
"try:\n",
" df_raw = pd.read_excel(NAMA_FILE_RAW)\n",
" print(f\"Dataset berhasil dimuat: {df_raw.shape[0]} baris dan {df_raw.shape[1]} kolom.\")\n",
"except FileNotFoundError:\n",
" print(f\"ERROR: File '{NAMA_FILE_RAW}' tidak ditemukan. Pastikan file berada di direktori yang sama.\")\n",
"\n",
"# Tampilkan 5 baris pertama\n",
"print(\"\\nContoh 5 baris data awal:\")\n",
"display(df_raw.head())\n",
"\n",
"# Informasi dasar dataset\n",
"print(\"\\nInformasi Dataset:\")\n",
"df_raw.info()\n",
"\n",
"# Ubah nama kolom agar konsisten (lowercase)\n",
"df_raw.columns = [col.lower() for col in df_raw.columns]\n",
"# Ganti nama 'text' menjadi 'ulasan_asli' untuk kejelasan\n",
"if 'text' in df_raw.columns:\n",
" df_raw = df_raw.rename(columns={'text': 'ulasan_asli'})\n",
"\n",
"# Cek distribusi label\n",
"plt.figure(figsize=(8, 5))\n",
"sns.countplot(x='label', data=df_raw, order=df_raw['label'].value_counts().index)\n",
"plt.title('Distribusi Label Sentimen Awal')\n",
"plt.xlabel('Sentimen')\n",
"plt.ylabel('Jumlah Ulasan')\n",
"plt.show()\n",
"\n",
"print(\"\\nStatistik Distribusi Label:\")\n",
"print(df_raw['label'].value_counts(normalize=True) * 100)"
]
},
{
"cell_type": "markdown",
"id": "46ab111a",
"metadata": {
"papermill": {
"duration": 0.009073,
"end_time": "2025-08-17T11:15:26.392318",
"exception": false,
"start_time": "2025-08-17T11:15:26.383245",
"status": "completed"
},
"tags": []
},
"source": [
"**Temuan Awal:**\n",
"* Dataset terdiri dari 3506 ulasan.\n",
"* Terdapat kolom `No`, `Text` (ulasan), dan `Label` (sentimen).\n",
"* Distribusi kelas terlihat **tidak seimbang (imbalanced)**, dengan sentimen `POSITIF` mendominasi. Ini penting untuk diperhatikan saat pembagian data dan pemilihan metrik evaluasi (Macro F1-score akan lebih cocok daripada akurasi)."
]
},
{
"cell_type": "markdown",
"id": "67d76029",
"metadata": {
"papermill": {
"duration": 0.009481,
"end_time": "2025-08-17T11:15:26.412514",
"exception": false,
"start_time": "2025-08-17T11:15:26.403033",
"status": "completed"
},
"tags": []
},
"source": [
"### 6. Cleaning & Preprocessing Teks\n",
"\n",
"Tahap ini menggunakan fungsi pembersihan teks yang sama persis seperti pada notebook awal. Proses ini meliputi penghapusan data yang tidak relevan, *case folding*, normalisasi (kamus alay), penghapusan *stopwords*, dan *stemming* dengan Sastrawi. Hasilnya akan disimpan di kolom baru `text_bersih` yang akan menjadi dasar untuk analisis selanjutnya."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "00c0e7e4",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:15:26.434606Z",
"iopub.status.busy": "2025-08-17T11:15:26.433445Z",
"iopub.status.idle": "2025-08-17T11:21:21.120416Z",
"shell.execute_reply": "2025-08-17T11:21:21.119210Z"
},
"papermill": {
"duration": 354.700031,
"end_time": "2025-08-17T11:21:21.122293",
"exception": false,
"start_time": "2025-08-17T11:15:26.422262",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Menginisialisasi Stemmer dan Stopwords Sastrawi...\n",
"Mempersiapkan kamus normalisasi...\n",
"Jumlah baris awal: 3506\n",
"Jumlah baris setelah menghapus 'TIDAK RELEVAN': 3452\n",
"Memulai proses cleaning...\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "bf57afc7c8d24bbdb0d9e5eb9b757a5e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3452 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Proses cleaning selesai. Jumlah baris setelah cleaning: 3412\n",
"Contoh data setelah cleaning:\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
ulasan_asli
\n",
"
text_bersih
\n",
"
label
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Tempat wisata yang bersejarah
\n",
"
tempat wisata sejarah
\n",
"
POSITIF
\n",
"
\n",
"
\n",
"
1
\n",
"
belum ke Semarang kalau belum datang ke lawang...
\n",
"
semarang kalau datang lawang sewu jawa tengah
\n",
"
POSITIF
\n",
"
\n",
"
\n",
"
2
\n",
"
Ternyata ini dulunya gedung percetakan tiket k...
\n",
"
nyata gedung cetak tiket kereta api
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
3
\n",
"
KAI dalam mengelola aset lebih profesional lag...
\n",
"
kai kelola aset lebih profesional tiket masuk ...
\n",
"
NEGATIF
\n",
"
\n",
"
\n",
"
4
\n",
"
Ticket masuk 25.000 per orang.. Air mineral 60...
\n",
"
ticket masuk per orang air mineral ml
\n",
"
NETRAL
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ulasan_asli \\\n",
"0 Tempat wisata yang bersejarah \n",
"1 belum ke Semarang kalau belum datang ke lawang... \n",
"2 Ternyata ini dulunya gedung percetakan tiket k... \n",
"3 KAI dalam mengelola aset lebih profesional lag... \n",
"4 Ticket masuk 25.000 per orang.. Air mineral 60... \n",
"\n",
" text_bersih label \n",
"0 tempat wisata sejarah POSITIF \n",
"1 semarang kalau datang lawang sewu jawa tengah POSITIF \n",
"2 nyata gedung cetak tiket kereta api NETRAL \n",
"3 kai kelola aset lebih profesional tiket masuk ... NEGATIF \n",
"4 ticket masuk per orang air mineral ml NETRAL "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print(\"Menginisialisasi Stemmer dan Stopwords Sastrawi...\")\n",
"factory_stemmer = StemmerFactory()\n",
"stemmer = factory_stemmer.create_stemmer()\n",
"factory_stopword = StopWordRemoverFactory()\n",
"stopwords_sastrawi = factory_stopword.get_stop_words()\n",
"custom_stopwords = {\n",
" 'ah', 'je', 'si', 'kat', 'the', 'dah', 'for', 'and', 'nya', 'tuh', 'eh', 'sih', 'dong', 'rt', 'aja', 'kok',\n",
" 'a', 'an', 'in', 'of', 'is', 'are', 'to', 'with', 'it', 'its', 'was', 'were', 'but', 'so'\n",
"}\n",
"all_stopwords = set(stopwords_sastrawi).union(custom_stopwords)\n",
"\n",
"print(\"Mempersiapkan kamus normalisasi...\")\n",
"kamus_normalisasi = {\n",
" # ==============================================================================\n",
" # KATEGORI 1: NORMALISASI HARGA, ANGKA & UNIT\n",
" # Aturan yang menangani format angka, harga, dan satuan.\n",
" # ==============================================================================\n",
" r'(\\d+)[.,](\\d{3})': r'\\1\\2', # Menggabungkan angka ribuan: 25.000 -> 25000\n",
" r'(\\d+)(rb|k)\\b': r'\\1000', # Konversi harga: 20rb/20k -> 20000\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 2: PENGHAPUSAN KATA\n",
" # Menghapus kata-kata yang tidak membawa makna (seruan, tawa, dll).\n",
" # ==============================================================================\n",
" r'\\b(wkwk|wkwkwk|haha|hehe|xixi)\\b': '', # Hapus kata-kata tertawa\n",
" r'\\b(bjir|anjay|anjir|anjrit|njir|anjer)\\b': '', # Hapus makian/slang tidak relevan\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 3: KATA GANTI ORANG (PRONOUNS)\n",
" # ==============================================================================\n",
" r'\\b(ak|aq|gw|gue|gua|gwe)\\b': 'aku',\n",
" r'\\b(km|kamu|loe|elu|lo|elo|lu|kmu|you)\\b': 'kamu',\n",
" r'\\b(sy|sya)\\b': 'saya',\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 4: KATA TANYA (QUESTION WORDS)\n",
" # ==============================================================================\n",
" r'\\b(gmn|gimana|gmana|gmna|gimanaa)\\b': 'bagaimana',\n",
" r'\\b(knp|kenap|knpa|kenape)\\b': 'kenapa',\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 5: KATA KERJA (VERBS)\n",
" # ==============================================================================\n",
" r'\\b(blg|blng|blang)\\b': 'bilang',\n",
" r'\\b(bs|bsa)\\b': 'bisa',\n",
" r'\\b(cb|cba)\\b': 'coba',\n",
" r'\\b(dtg)\\b': 'datang',\n",
" r'\\b(jwb|jwab)\\b': 'jawab',\n",
" r'\\b(lgsg|lgsung|langsng)\\b': 'langsung',\n",
" r'\\b(liat|lht|lhat)\\b': 'lihat',\n",
" r'\\b(lwt|lwat)\\b': 'lewat',\n",
" r'\\b(mkn|mkan|maem)\\b': 'makan',\n",
" r'\\b(ovt)\\b': 'overthinking',\n",
" r'\\b(pake|pk|pke)\\b': 'pakai',\n",
" r'\\b(tau|th|taw|tauw|tw)\\b': 'tahu',\n",
" r'\\b(tlg|plis|pls|please|tlong|tlongin)\\b': 'tolong',\n",
" r'\\b(moga|smoga)\\b': 'semoga',\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 6: KATA SIFAT & BENDA (ADJECTIVES & NOUNS)\n",
" # ==============================================================================\n",
" r'\\b(ank)\\b': 'anak',\n",
" r'\\b(bgs|bgus|nice|good|top)\\b': 'bagus',\n",
" r'\\b(bener|bnr|bner)\\b': 'benar',\n",
" r'\\b(byk|bnyk)\\b': 'banyak',\n",
" r'\\b(jls|jlas)\\b': 'jelas',\n",
" r'\\b(josss|joss|sipp|sip)\\b': 'mantap',\n",
" r'\\b(londo)\\b': 'belanda',\n",
" r'\\b(org|orng|wong)\\b': 'orang',\n",
" r'\\b(skt|skit)\\b': 'sakit',\n",
" r'\\b(syg|syang)\\b': 'sayang',\n",
" r'\\b(tmpt|tempt|tmpat)\\b': 'tempat', \n",
" r'\\b(tmn|temen|tmen|tman)\\b': 'teman',\n",
" r'\\b(lbh|lbih|lb)\\b': 'lebih',\n",
"\n",
" # ==============================================================================\n",
" # KATEGORI 7: KATA SAMBUNG, KETERANGAN, UMUM (CONJUNCTIONS, ADVERBS, ETC)\n",
" # ==============================================================================\n",
" r'\\b(aja|sja|aje|sj|ae|wae)\\b': 'saja',\n",
" r'\\b(bbrp|bbrpa|bberapa)\\b': 'beberapa',\n",
" r'\\b(bgt|bangettt|bangett|bangt|bget|bbgt)\\b': 'banget', # Dihilangkan ||\n",
" r'\\b(blm|blom|blum)\\b': 'belum',\n",
" r'\\b(bkn|bukn)\\b': 'bukan',\n",
" r'\\b(br|bru)\\b': 'baru',\n",
" r'\\b(cmn|cuma|cuman|cm)\\b': 'cuma',\n",
" r'\\b(dgn|dngn|dg)\\b': 'dengan',\n",
" r'\\b(dl|dlu)\\b': 'dulu',\n",
" r'\\b(dlm|dalem|dlem)\\b': 'dalam',\n",
" r'\\b(dr|dri)\\b': 'dari',\n",
" r'\\b(emg|emng|emang)\\b': 'memang',\n",
" r'\\b(ga|gak|tdk|gk|ngga|nggak|engga|enggak)\\b': 'tidak',\n",
" r'\\b(gr|gara2|gr2|gra2|gra|gara)\\b': 'gara-gara',\n",
" r'\\b(gpp|gppa|gapapa)\\b': 'tidak apa-apa',\n",
" r'\\b(gt|gitu|bgitu)\\b': 'begitu',\n",
" r'\\b(hbs|hbis)\\b': 'habis',\n",
" r'\\b(hrs|hrus)\\b': 'harus',\n",
" r'\\b(jd|jdi)\\b': 'jadi',\n",
" r'\\b(jg|jga)\\b': 'juga',\n",
" r'\\b(jgn|jangan|jngan|jgan)\\b': 'jangan',\n",
" r'\\b(kdg|kdang)\\b': 'kadang',\n",
" r'\\b(klo|kalo|kl)\\b': 'kalau',\n",
" r'\\b(kpd|kpda)\\b': 'kepada',\n",
" r'\\b(krn|karna)\\b': 'karena',\n",
" r'\\b(kyk|kek|kaya|kya)\\b': 'seperti',\n",
" r'\\b(lg|lgi)\\b': 'lagi',\n",
" r'\\b(mgkn|mngkin|mngkn)\\b': 'mungkin',\n",
" r'\\b(mlm|mlem)\\b': 'malam',\n",
" r'\\b(msi|msh|msih)\\b': 'masih',\n",
" r'\\b(ntr|nnti|ntar)\\b': 'nanti',\n",
" r'\\b(pd|pda)\\b': 'pada',\n",
" r'\\b(pny|pnya)\\b': 'punya',\n",
" r'\\b(prnh|prnah)\\b': 'pernah',\n",
" r'\\b(sblm|sblom|sblum)\\b': 'sebelum',\n",
" r'\\b(sbnrnya|sebenernya|sbenernya)\\b': 'sebenarnya',\n",
" r'\\b(sdg)\\b': 'sedang',\n",
" r'\\b(sdh|udh|udah|uda)\\b': 'sudah',\n",
" r'\\b(shg)\\b': 'sehingga',\n",
" r'\\b(skrg|skrng|skrang)\\b': 'sekarang',\n",
" r'\\b(sllu|slalu|sll)\\b': 'selalu',\n",
" r'\\b(sm|ama)\\b': 'sama',\n",
" r'\\b(smpai|ampe|smp|smpe)\\b': 'sampai',\n",
" r'\\b(smua)\\b': 'semua',\n",
" r'\\b(srg|sring)\\b': 'sering',\n",
" r'\\b(tkt|tkut)\\b': 'takut',\n",
" r'\\b(tmbh|tmbah)\\b': 'tambah',\n",
" r'\\b(tntg|ttg|tntang)\\b': 'tentang',\n",
" r'\\b(tp|tpi)\\b': 'tapi',\n",
" r'\\b(trll|tralu)\\b': 'terlalu',\n",
" r'\\b(trmasuk|trmsk|trmsuk)\\b': 'termasuk',\n",
" r'\\b(trs|trus|truz)\\b': 'lalu',\n",
" r'\\b(ttp|ttep|ttap)\\b': 'tetap',\n",
" r'\\b(utk|untk)\\b': 'untuk',\n",
" r'\\b(yg|yng)\\b': 'yang',\n",
" r'\\b(supya|spy)\\b': 'supaya',\n",
" r'\\b(agr)\\b': 'agar',\n",
" r'\\b(pdhl|pdhal)\\b': 'padahal',\n",
" \n",
" # ==============================================================================\n",
" # KATEGORI 8: SPESIFIK KONTEKS (GOOGLE MAPS, UMUM)\n",
" # ==============================================================================\n",
" r'bareng\\s*yu+': 'bareng ayo', # Kasus khusus tanpa word boundary\n",
" r'\\b(gopay|qris|cash)\\b': 'pembayaran',\n",
" r'\\b(healing)\\b': 'rekreasi',\n",
" r'\\b(htm)\\b': 'harga tiket masuk',\n",
" r'\\b(overall)\\b': 'secara keseluruhan',\n",
" r'\\b(photo?booth)\\b': 'photobooth',\n",
" r'\\b(recommended|recomended|recomsnded)\\b': 'rekomendasi',\n",
" r'\\b(smgt|smgat|smngat|smangat)\\b': 'semangat',\n",
" r'\\b(spot foto)\\b': 'lokasi foto',\n",
" r'\\b(thx|tq|makasi|makasih|makasii|makasie|thanks|thank|thengs)\\b': 'terima kasih',\n",
" r'\\b(tour guide)\\b': 'pemandu wisata',\n",
" r'\\b(view)\\b': 'pemandangan',\n",
" r'\\b(vintage)\\b': 'antik',\n",
" r'\\b(weekend)\\b': 'akhir pekan',\n",
" r'\\b(weekdays)\\b': 'hari kerja',\n",
" r'\\b(yuk|yuu|ayok|ayoo|ayuk)\\b': 'ayo',\n",
" r'\\b(sblh|sebelh|sblah)\\b': 'sebelah',\n",
" r'\\b(kyknya|kayaknya)\\b': 'kemungkinan',\n",
"}\n",
"\n",
"print(f\"Jumlah baris awal: {len(df_raw)}\")\n",
"df_raw = df_raw[df_raw['label'] != 'TIDAK RELEVAN'].copy()\n",
"print(f\"Jumlah baris setelah menghapus 'TIDAK RELEVAN': {len(df_raw)}\")\n",
"\n",
"def bersihkan_teks(teks):\n",
" if not isinstance(teks, str):\n",
" return \"\"\n",
" \n",
" teks = teks.lower()\n",
" teks = re.sub(r'https?://\\S+|www\\.\\S+', '', teks)\n",
" teks = re.sub(r'@\\w+|#\\w+', '', teks)\n",
" teks = re.sub(r'[^\\w\\s]', ' ', teks)\n",
" for pattern, replacement in kamus_normalisasi.items():\n",
" teks = re.sub(pattern, replacement, teks)\n",
" teks = re.sub(r'\\d+', '', teks)\n",
" teks = re.sub(r'(\\w)\\1{2,}', r'\\1', teks)\n",
" words = teks.split()\n",
" stemmed_words = [stemmer.stem(word) for word in words]\n",
" teks = ' '.join(stemmed_words)\n",
" words = teks.split()\n",
" filtered_words = [word for word in words if word not in all_stopwords and len(word) > 1]\n",
" teks = ' '.join(filtered_words)\n",
" teks = re.sub(r'\\s+', ' ', teks).strip()\n",
" return teks\n",
"\n",
"print(\"Memulai proses cleaning...\")\n",
"df_raw['text_bersih'] = df_raw['ulasan_asli'].progress_apply(bersihkan_teks)\n",
"\n",
"# Hapus baris yang teksnya menjadi kosong setelah cleaning\n",
"df_clean = df_raw[df_raw['text_bersih'].str.len() > 0].copy()\n",
"\n",
"print(f\"\\nProses cleaning selesai. Jumlah baris setelah cleaning: {len(df_clean)}\")\n",
"print(\"Contoh data setelah cleaning:\")\n",
"display(df_clean[['ulasan_asli', 'text_bersih', 'label']].head())"
]
},
{
"cell_type": "markdown",
"id": "56479295",
"metadata": {
"papermill": {
"duration": 0.010113,
"end_time": "2025-08-17T11:21:21.143263",
"exception": false,
"start_time": "2025-08-17T11:21:21.133150",
"status": "completed"
},
"tags": []
},
"source": [
"### 7. Deduplikasi Konten\n",
"\n",
"Untuk menghindari bias pada model, ulasan yang identik atau sangat mirip perlu dihapus. Kita akan melakukan dua jenis deduplikasi:\n",
"1. **Exact Deduplication**: Menghapus baris yang memiliki `text_bersih` yang sama persis.\n",
"2. **Near-Duplicate Detection (Opsional)**: Menggunakan rasio kemiripan token untuk menyaring ulasan yang substansinya sama meskipun ada sedikit perbedaan (misal: tambahan tanda baca atau satu kata).\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "c64fe2d9",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:21:21.164090Z",
"iopub.status.busy": "2025-08-17T11:21:21.163751Z",
"iopub.status.idle": "2025-08-17T11:21:21.177483Z",
"shell.execute_reply": "2025-08-17T11:21:21.176107Z"
},
"papermill": {
"duration": 0.026499,
"end_time": "2025-08-17T11:21:21.179294",
"exception": false,
"start_time": "2025-08-17T11:21:21.152795",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Jumlah baris sebelum deduplikasi: 3412\n",
"Jumlah baris setelah deduplikasi eksak: 3074\n",
"\n",
"Deteksi near-duplicate dilewati.\n"
]
}
],
"source": [
"print(f\"Jumlah baris sebelum deduplikasi: {len(df_clean)}\")\n",
"\n",
"# 1. Exact Deduplication\n",
"df_dedup = df_clean.drop_duplicates(subset=['text_bersih'], keep='first').copy()\n",
"print(f\"Jumlah baris setelah deduplikasi eksak: {len(df_dedup)}\")\n",
"\n",
"# 2. Near-Duplicate Detection\n",
"# Proses ini bisa lambat, jadi kita lakukan pada sampel kecil atau jika diperlukan\n",
"duplikat_indeks = []\n",
"teks_list = df_dedup['text_bersih'].tolist()\n",
"indeks_list = df_dedup.index.tolist()\n",
"\n",
"# (Langkah ini dinonaktifkan secara default karena komputasinya berat, aktifkan jika perlu)\n",
"RUN_NEAR_DEDUPLICATION = False\n",
"\n",
"if RUN_NEAR_DEDUPLICATION:\n",
" print(\"\\nMemulai deteksi near-duplicate (mungkin butuh waktu lama)...\")\n",
" for i in tqdm(range(len(teks_list))):\n",
" if indeks_list[i] in duplikat_indeks:\n",
" continue\n",
" for j in range(i + 1, len(teks_list)):\n",
" if indeks_list[j] in duplikat_indeks:\n",
" continue\n",
" \n",
" rasio_kemiripan = fuzz.token_set_ratio(teks_list[i], teks_list[j])\n",
" if rasio_kemiripan >= 95: # Ambang batas kemiripan\n",
" duplikat_indeks.append(indeks_list[j])\n",
"\n",
" df_final = df_dedup.drop(index=duplikat_indeks)\n",
" print(f\"Jumlah baris setelah deteksi near-duplicate: {len(df_final)}\")\n",
"else:\n",
" df_final = df_dedup.copy()\n",
" print(\"\\nDeteksi near-duplicate dilewati.\")\n",
"\n",
"df_final.reset_index(drop=True, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "c0b968a6",
"metadata": {
"papermill": {
"duration": 0.010419,
"end_time": "2025-08-17T11:21:21.200867",
"exception": false,
"start_time": "2025-08-17T11:21:21.190448",
"status": "completed"
},
"tags": []
},
"source": [
"### 8. Pembagian Data (Stratified Train/Val/Test Split)\n",
"\n",
"Dataset akan dibagi menjadi tiga bagian: **latih (70%)**, **validasi (15%)**, dan **uji (15%)**. Kita menggunakan *stratified split* berdasarkan kolom `label` untuk memastikan proporsi setiap kelas sentimen sama di ketiga set. Ini sangat penting untuk dataset yang tidak seimbang agar evaluasi model menjadi adil dan tidak bias."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "64aa7911",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:21:21.223224Z",
"iopub.status.busy": "2025-08-17T11:21:21.222859Z",
"iopub.status.idle": "2025-08-17T11:21:21.249600Z",
"shell.execute_reply": "2025-08-17T11:21:21.248465Z"
},
"papermill": {
"duration": 0.040721,
"end_time": "2025-08-17T11:21:21.251892",
"exception": false,
"start_time": "2025-08-17T11:21:21.211171",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ukuran data Latih (Train): 2151 (70.0%)\n",
"Ukuran data Validasi (Val): 461 (15.0%)\n",
"Ukuran data Uji (Test): 462 (15.0%)\n",
"\n",
"Distribusi label di setiap set:\n",
"Train:\n",
" label\n",
"POSITIF 0.716411\n",
"NETRAL 0.154812\n",
"NEGATIF 0.128777\n",
"Name: proportion, dtype: float64\n",
"\n",
"Validation:\n",
" label\n",
"POSITIF 0.718004\n",
"NETRAL 0.154013\n",
"NEGATIF 0.127983\n",
"Name: proportion, dtype: float64\n",
"\n",
"Test:\n",
" label\n",
"POSITIF 0.716450\n",
"NETRAL 0.155844\n",
"NEGATIF 0.127706\n",
"Name: proportion, dtype: float64\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:605: DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype):\n",
"/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:614: DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype) or not is_extension_array_dtype(pd_dtype):\n",
"/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:605: DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype):\n",
"/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py:614: DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n",
" if is_sparse(pd_dtype) or not is_extension_array_dtype(pd_dtype):\n"
]
}
],
"source": [
"X = df_final['text_bersih']\n",
"y = df_final['label']\n",
"\n",
"# Bagi menjadi train+val (85%) dan test (15%)\n",
"X_train_val, X_test, y_train_val, y_test = train_test_split(\n",
" X, y, test_size=0.15, random_state=SEED, stratify=y\n",
")\n",
"\n",
"# Bagi train+val menjadi train (70%) dan val (15%)\n",
"# Proporsi test_size dihitung dari sisa data (0.15 / 0.85)\n",
"X_train, X_val, y_train, y_val = train_test_split(\n",
" X_train_val, y_train_val, test_size=(0.15/0.85), random_state=SEED, stratify=y_train_val\n",
")\n",
"\n",
"print(f\"Ukuran data Latih (Train): {len(X_train)} ({len(X_train)/len(df_final)*100:.1f}%)\")\n",
"print(f\"Ukuran data Validasi (Val): {len(X_val)} ({len(X_val)/len(df_final)*100:.1f}%)\")\n",
"print(f\"Ukuran data Uji (Test): {len(X_test)} ({len(X_test)/len(df_final)*100:.1f}%)\")\n",
"\n",
"print(\"\\nDistribusi label di setiap set:\")\n",
"print(\"Train:\\n\", y_train.value_counts(normalize=True))\n",
"print(\"\\nValidation:\\n\", y_val.value_counts(normalize=True))\n",
"print(\"\\nTest:\\n\", y_test.value_counts(normalize=True))"
]
},
{
"cell_type": "markdown",
"id": "c524ca86",
"metadata": {
"papermill": {
"duration": 0.010854,
"end_time": "2025-08-17T11:21:21.273236",
"exception": false,
"start_time": "2025-08-17T11:21:21.262382",
"status": "completed"
},
"tags": []
},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "9d13ccc2",
"metadata": {
"papermill": {
"duration": 0.010408,
"end_time": "2025-08-17T11:21:21.294382",
"exception": false,
"start_time": "2025-08-17T11:21:21.283974",
"status": "completed"
},
"tags": []
},
"source": [
"## Bagian I: Analisis Sentimen (Supervised)"
]
},
{
"cell_type": "markdown",
"id": "f6867b49",
"metadata": {
"papermill": {
"duration": 0.009691,
"end_time": "2025-08-17T11:21:21.314133",
"exception": false,
"start_time": "2025-08-17T11:21:21.304442",
"status": "completed"
},
"tags": []
},
"source": [
"### 10. Representasi Fitur (TF-IDF)\n",
"\n",
"Kita akan mengubah teks menjadi vektor numerik menggunakan **TF-IDF (Term Frequency-Inverse Document Frequency)**. Metode ini memberi bobot lebih tinggi pada kata-kata yang sering muncul dalam satu dokumen tetapi jarang muncul di seluruh korpus, sehingga efektif menangkap kata kunci penting.\n",
"\n",
"**Konfigurasi:**\n",
"- `ngram_range=(1, 2)`: Menggunakan unigram (satu kata) dan bigram (dua kata) untuk menangkap konteks.\n",
"- `min_df=3`: Mengabaikan kata yang muncul kurang dari 3 kali di seluruh korpus untuk mengurangi noise.\n",
"- `max_df=0.9`: Mengabaikan kata yang muncul di lebih dari 90% dokumen (kata terlalu umum).\n",
"- `sublinear_tf=True`: Menerapkan penskalaan logaritmik pada frekuensi term."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b7a79eea",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:21:21.336997Z",
"iopub.status.busy": "2025-08-17T11:21:21.335525Z",
"iopub.status.idle": "2025-08-17T11:21:21.499465Z",
"shell.execute_reply": "2025-08-17T11:21:21.498212Z"
},
"papermill": {
"duration": 0.17688,
"end_time": "2025-08-17T11:21:21.501123",
"exception": false,
"start_time": "2025-08-17T11:21:21.324243",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ukuran matriks TF-IDF (data latih): (2151, 2297)\n",
"Jumlah fitur (kosakata): 2297\n"
]
}
],
"source": [
"tfidf = TfidfVectorizer(\n",
" ngram_range=(1, 2),\n",
" min_df=3,\n",
" max_df=0.9,\n",
" sublinear_tf=True,\n",
" # random_state=SEED\n",
")\n",
"\n",
"# Fit pada data latih, lalu transform semua set\n",
"X_train_tfidf = tfidf.fit_transform(X_train)\n",
"X_val_tfidf = tfidf.transform(X_val)\n",
"X_test_tfidf = tfidf.transform(X_test)\n",
"\n",
"print(f\"Ukuran matriks TF-IDF (data latih): {X_train_tfidf.shape}\")\n",
"print(f\"Jumlah fitur (kosakata): {len(tfidf.get_feature_names_out())}\")"
]
},
{
"cell_type": "markdown",
"id": "80ebe1bc",
"metadata": {
"papermill": {
"duration": 0.009333,
"end_time": "2025-08-17T11:21:21.520252",
"exception": false,
"start_time": "2025-08-17T11:21:21.510919",
"status": "completed"
},
"tags": []
},
"source": [
"### 11. Screening Cepat (LazyPredict) – Opsional\n",
"\n",
"Sebelum melakukan analisis mendalam pada beberapa model, kita akan menggunakan `LazyPredict` untuk menjalankan puluhan model klasifikasi secara otomatis. Tujuannya adalah untuk mendapatkan gambaran umum tentang algoritma mana yang paling menjanjikan untuk dataset ini tanpa perlu melakukan *tuning*.\n",
"\n",
"**Catatan:** Hasil dari LazyPredict adalah **panduan awal**, bukan hasil final. Kita akan memilih beberapa model teratas dari sini untuk dianalisis lebih lanjut."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e905dd4b",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:21:21.542709Z",
"iopub.status.busy": "2025-08-17T11:21:21.542283Z",
"iopub.status.idle": "2025-08-17T11:26:00.287968Z",
"shell.execute_reply": "2025-08-17T11:26:00.286805Z"
},
"papermill": {
"duration": 278.759203,
"end_time": "2025-08-17T11:26:00.289725",
"exception": false,
"start_time": "2025-08-17T11:21:21.530522",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting lazypredict\r\n",
" Downloading lazypredict-0.2.16-py2.py3-none-any.whl.metadata (13 kB)\r\n",
"Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from lazypredict) (8.2.1)\r\n",
"Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (from lazypredict) (1.2.2)\r\n",
"Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (from lazypredict) (2.2.3)\r\n",
"Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from lazypredict) (4.67.1)\r\n",
"Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from lazypredict) (1.5.1)\r\n",
"Requirement already satisfied: lightgbm in /usr/local/lib/python3.11/dist-packages (from lazypredict) (4.5.0)\r\n",
"Requirement already satisfied: xgboost in /usr/local/lib/python3.11/dist-packages (from lazypredict) (2.0.3)\r\n",
"Collecting pytest-runner (from lazypredict)\r\n",
" Downloading pytest_runner-6.0.1-py3-none-any.whl.metadata (7.3 kB)\r\n",
"Collecting mlflow>=2.0.0 (from lazypredict)\r\n",
" Downloading mlflow-3.2.0-py3-none-any.whl.metadata (29 kB)\r\n",
"Collecting mlflow-skinny==3.2.0 (from mlflow>=2.0.0->lazypredict)\r\n",
" Downloading mlflow_skinny-3.2.0-py3-none-any.whl.metadata (30 kB)\r\n",
"Collecting mlflow-tracing==3.2.0 (from mlflow>=2.0.0->lazypredict)\r\n",
" Downloading mlflow_tracing-3.2.0-py3-none-any.whl.metadata (19 kB)\r\n",
"Requirement already satisfied: Flask<4 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (3.1.1)\r\n",
"Requirement already satisfied: alembic!=1.10.0,<2 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (1.16.2)\r\n",
"Requirement already satisfied: docker<8,>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (7.1.0)\r\n",
"Collecting graphene<4 (from mlflow>=2.0.0->lazypredict)\r\n",
" Downloading graphene-3.4.3-py2.py3-none-any.whl.metadata (6.9 kB)\r\n",
"Collecting gunicorn<24 (from mlflow>=2.0.0->lazypredict)\r\n",
" Downloading gunicorn-23.0.0-py3-none-any.whl.metadata (4.4 kB)\r\n",
"Requirement already satisfied: matplotlib<4 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (3.7.2)\r\n",
"Requirement already satisfied: numpy<3 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (1.26.4)\r\n",
"Requirement already satisfied: pyarrow<22,>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (19.0.1)\r\n",
"Requirement already satisfied: scipy<2 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (1.15.3)\r\n",
"Requirement already satisfied: sqlalchemy<3,>=1.4.0 in /usr/local/lib/python3.11/dist-packages (from mlflow>=2.0.0->lazypredict) (2.0.41)\r\n",
"Requirement already satisfied: cachetools<7,>=5.0.0 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (5.5.2)\r\n",
"Requirement already satisfied: cloudpickle<4 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.1.1)\r\n",
"Collecting databricks-sdk<1,>=0.20.0 (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading databricks_sdk-0.63.0-py3-none-any.whl.metadata (39 kB)\r\n",
"Requirement already satisfied: fastapi<1 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.115.13)\r\n",
"Requirement already satisfied: gitpython<4,>=3.1.9 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.1.44)\r\n",
"Requirement already satisfied: importlib_metadata!=4.7.0,<9,>=3.7.0 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (8.7.0)\r\n",
"Collecting opentelemetry-api<3,>=1.9.0 (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading opentelemetry_api-1.36.0-py3-none-any.whl.metadata (1.5 kB)\r\n",
"Collecting opentelemetry-sdk<3,>=1.9.0 (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading opentelemetry_sdk-1.36.0-py3-none-any.whl.metadata (1.5 kB)\r\n",
"Requirement already satisfied: packaging<26 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (25.0)\r\n",
"Requirement already satisfied: protobuf<7,>=3.12.0 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.20.3)\r\n",
"Requirement already satisfied: pydantic<3,>=1.10.8 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (2.11.7)\r\n",
"Requirement already satisfied: pyyaml<7,>=5.1 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (6.0.2)\r\n",
"Requirement already satisfied: requests<3,>=2.17.3 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (2.32.4)\r\n",
"Requirement already satisfied: sqlparse<1,>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.5.3)\r\n",
"Requirement already satisfied: typing-extensions<5,>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (4.14.0)\r\n",
"Requirement already satisfied: uvicorn<1 in /usr/local/lib/python3.11/dist-packages (from mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.34.3)\r\n",
"Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas->lazypredict) (2.9.0.post0)\r\n",
"Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas->lazypredict) (2025.2)\r\n",
"Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas->lazypredict) (2025.2)\r\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->lazypredict) (3.6.0)\r\n",
"Requirement already satisfied: Mako in /usr/local/lib/python3.11/dist-packages (from alembic!=1.10.0,<2->mlflow>=2.0.0->lazypredict) (1.3.10)\r\n",
"Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.11/dist-packages (from docker<8,>=4.0.0->mlflow>=2.0.0->lazypredict) (2.5.0)\r\n",
"Requirement already satisfied: blinker>=1.9.0 in /usr/local/lib/python3.11/dist-packages (from Flask<4->mlflow>=2.0.0->lazypredict) (1.9.0)\r\n",
"Requirement already satisfied: itsdangerous>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from Flask<4->mlflow>=2.0.0->lazypredict) (2.2.0)\r\n",
"Requirement already satisfied: jinja2>=3.1.2 in /usr/local/lib/python3.11/dist-packages (from Flask<4->mlflow>=2.0.0->lazypredict) (3.1.6)\r\n",
"Requirement already satisfied: markupsafe>=2.1.1 in /usr/local/lib/python3.11/dist-packages (from Flask<4->mlflow>=2.0.0->lazypredict) (3.0.2)\r\n",
"Requirement already satisfied: werkzeug>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from Flask<4->mlflow>=2.0.0->lazypredict) (3.1.3)\r\n",
"Collecting graphql-core<3.3,>=3.1 (from graphene<4->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading graphql_core-3.2.6-py3-none-any.whl.metadata (11 kB)\r\n",
"Collecting graphql-relay<3.3,>=3.1 (from graphene<4->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading graphql_relay-3.2.0-py3-none-any.whl.metadata (12 kB)\r\n",
"Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (1.3.2)\r\n",
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (0.12.1)\r\n",
"Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (4.58.4)\r\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (1.4.8)\r\n",
"Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (11.2.1)\r\n",
"Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib<4->mlflow>=2.0.0->lazypredict) (3.0.9)\r\n",
"Requirement already satisfied: mkl_fft in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (1.3.8)\r\n",
"Requirement already satisfied: mkl_random in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (1.2.4)\r\n",
"Requirement already satisfied: mkl_umath in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (0.1.1)\r\n",
"Requirement already satisfied: mkl in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (2025.2.0)\r\n",
"Requirement already satisfied: tbb4py in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (2022.2.0)\r\n",
"Requirement already satisfied: mkl-service in /usr/local/lib/python3.11/dist-packages (from numpy<3->mlflow>=2.0.0->lazypredict) (2.4.1)\r\n",
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas->lazypredict) (1.17.0)\r\n",
"Requirement already satisfied: greenlet>=1 in /usr/local/lib/python3.11/dist-packages (from sqlalchemy<3,>=1.4.0->mlflow>=2.0.0->lazypredict) (3.2.3)\r\n",
"Requirement already satisfied: google-auth~=2.0 in /usr/local/lib/python3.11/dist-packages (from databricks-sdk<1,>=0.20.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (2.40.3)\r\n",
"Requirement already satisfied: starlette<0.47.0,>=0.40.0 in /usr/local/lib/python3.11/dist-packages (from fastapi<1->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.46.2)\r\n",
"Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.11/dist-packages (from gitpython<4,>=3.1.9->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (4.0.12)\r\n",
"Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib_metadata!=4.7.0,<9,>=3.7.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.23.0)\r\n",
"Collecting opentelemetry-semantic-conventions==0.57b0 (from opentelemetry-sdk<3,>=1.9.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict)\r\n",
" Downloading opentelemetry_semantic_conventions-0.57b0-py3-none-any.whl.metadata (2.4 kB)\r\n",
"Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=1.10.8->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.7.0)\r\n",
"Requirement already satisfied: pydantic-core==2.33.2 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=1.10.8->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (2.33.2)\r\n",
"Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=1.10.8->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.4.1)\r\n",
"Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests<3,>=2.17.3->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.4.2)\r\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests<3,>=2.17.3->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (3.10)\r\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests<3,>=2.17.3->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (2025.6.15)\r\n",
"Requirement already satisfied: h11>=0.8 in /usr/local/lib/python3.11/dist-packages (from uvicorn<1->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.16.0)\r\n",
"Requirement already satisfied: intel-openmp<2026,>=2024 in /usr/local/lib/python3.11/dist-packages (from mkl->numpy<3->mlflow>=2.0.0->lazypredict) (2024.2.0)\r\n",
"Requirement already satisfied: tbb==2022.* in /usr/local/lib/python3.11/dist-packages (from mkl->numpy<3->mlflow>=2.0.0->lazypredict) (2022.2.0)\r\n",
"Requirement already satisfied: tcmlib==1.* in /usr/local/lib/python3.11/dist-packages (from tbb==2022.*->mkl->numpy<3->mlflow>=2.0.0->lazypredict) (1.4.0)\r\n",
"Requirement already satisfied: intel-cmplr-lib-rt in /usr/local/lib/python3.11/dist-packages (from mkl_umath->numpy<3->mlflow>=2.0.0->lazypredict) (2024.2.0)\r\n",
"Requirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.11/dist-packages (from gitdb<5,>=4.0.1->gitpython<4,>=3.1.9->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (5.0.2)\r\n",
"Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.11/dist-packages (from google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.4.2)\r\n",
"Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.11/dist-packages (from google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (4.9.1)\r\n",
"Requirement already satisfied: intel-cmplr-lib-ur==2024.2.0 in /usr/local/lib/python3.11/dist-packages (from intel-openmp<2026,>=2024->mkl->numpy<3->mlflow>=2.0.0->lazypredict) (2024.2.0)\r\n",
"Requirement already satisfied: anyio<5,>=3.6.2 in /usr/local/lib/python3.11/dist-packages (from starlette<0.47.0,>=0.40.0->fastapi<1->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (4.9.0)\r\n",
"Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio<5,>=3.6.2->starlette<0.47.0,>=0.40.0->fastapi<1->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (1.3.1)\r\n",
"Requirement already satisfied: pyasn1<0.7.0,>=0.6.1 in /usr/local/lib/python3.11/dist-packages (from pyasn1-modules>=0.2.1->google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==3.2.0->mlflow>=2.0.0->lazypredict) (0.6.1)\r\n",
"Downloading lazypredict-0.2.16-py2.py3-none-any.whl (14 kB)\r\n",
"Downloading mlflow-3.2.0-py3-none-any.whl (25.8 MB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m25.8/25.8 MB\u001b[0m \u001b[31m61.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading mlflow_skinny-3.2.0-py3-none-any.whl (2.0 MB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m50.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading mlflow_tracing-3.2.0-py3-none-any.whl (1.1 MB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m38.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading pytest_runner-6.0.1-py3-none-any.whl (7.2 kB)\r\n",
"Downloading graphene-3.4.3-py2.py3-none-any.whl (114 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.9/114.9 kB\u001b[0m \u001b[31m5.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading gunicorn-23.0.0-py3-none-any.whl (85 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.0/85.0 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading databricks_sdk-0.63.0-py3-none-any.whl (688 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m688.0/688.0 kB\u001b[0m \u001b[31m27.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading graphql_core-3.2.6-py3-none-any.whl (203 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m203.4/203.4 kB\u001b[0m \u001b[31m8.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading graphql_relay-3.2.0-py3-none-any.whl (16 kB)\r\n",
"Downloading opentelemetry_api-1.36.0-py3-none-any.whl (65 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.6/65.6 kB\u001b[0m \u001b[31m3.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading opentelemetry_sdk-1.36.0-py3-none-any.whl (119 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m120.0/120.0 kB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hDownloading opentelemetry_semantic_conventions-0.57b0-py3-none-any.whl (201 kB)\r\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m201.6/201.6 kB\u001b[0m \u001b[31m9.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\r\n",
"\u001b[?25hInstalling collected packages: pytest-runner, gunicorn, graphql-core, opentelemetry-api, graphql-relay, opentelemetry-semantic-conventions, graphene, databricks-sdk, opentelemetry-sdk, mlflow-tracing, mlflow-skinny, mlflow, lazypredict\r\n",
"Successfully installed databricks-sdk-0.63.0 graphene-3.4.3 graphql-core-3.2.6 graphql-relay-3.2.0 gunicorn-23.0.0 lazypredict-0.2.16 mlflow-3.2.0 mlflow-skinny-3.2.0 mlflow-tracing-3.2.0 opentelemetry-api-1.36.0 opentelemetry-sdk-1.36.0 opentelemetry-semantic-conventions-0.57b0 pytest-runner-6.0.1\r\n",
"Menjalankan LazyPredict pada data train dan test...\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "72f955b0813b49c5817f287c5ac0aac5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/29 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.004125 seconds.\n",
"You can set `force_col_wise=true` to remove the overhead.\n",
"[LightGBM] [Info] Total Bins 6727\n",
"[LightGBM] [Info] Number of data points in the train set: 2151, number of used features: 292\n",
"[LightGBM] [Info] Start training from score -2.049671\n",
"[LightGBM] [Info] Start training from score -1.865546\n",
"[LightGBM] [Info] Start training from score -0.333501\n",
"\n",
"Hasil Screening Model dengan LazyPredict (diurutkan berdasarkan F1 Score):\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Accuracy
\n",
"
Balanced Accuracy
\n",
"
ROC AUC
\n",
"
F1 Score
\n",
"
Time Taken
\n",
"
\n",
"
\n",
"
Model
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
NearestCentroid
\n",
"
0.77
\n",
"
0.63
\n",
"
None
\n",
"
0.77
\n",
"
0.37
\n",
"
\n",
"
\n",
"
LGBMClassifier
\n",
"
0.77
\n",
"
0.57
\n",
"
None
\n",
"
0.75
\n",
"
1.35
\n",
"
\n",
"
\n",
"
LogisticRegression
\n",
"
0.75
\n",
"
0.59
\n",
"
None
\n",
"
0.74
\n",
"
2.49
\n",
"
\n",
"
\n",
"
RandomForestClassifier
\n",
"
0.77
\n",
"
0.52
\n",
"
None
\n",
"
0.73
\n",
"
4.31
\n",
"
\n",
"
\n",
"
ExtraTreesClassifier
\n",
"
0.76
\n",
"
0.52
\n",
"
None
\n",
"
0.73
\n",
"
11.97
\n",
"
\n",
"
\n",
"
PassiveAggressiveClassifier
\n",
"
0.72
\n",
"
0.59
\n",
"
None
\n",
"
0.72
\n",
"
1.75
\n",
"
\n",
"
\n",
"
BaggingClassifier
\n",
"
0.73
\n",
"
0.57
\n",
"
None
\n",
"
0.72
\n",
"
12.21
\n",
"
\n",
"
\n",
"
AdaBoostClassifier
\n",
"
0.74
\n",
"
0.50
\n",
"
None
\n",
"
0.70
\n",
"
4.63
\n",
"
\n",
"
\n",
"
LinearSVC
\n",
"
0.69
\n",
"
0.57
\n",
"
None
\n",
"
0.70
\n",
"
35.00
\n",
"
\n",
"
\n",
"
BernoulliNB
\n",
"
0.73
\n",
"
0.49
\n",
"
None
\n",
"
0.70
\n",
"
0.43
\n",
"
\n",
"
\n",
"
SGDClassifier
\n",
"
0.75
\n",
"
0.45
\n",
"
None
\n",
"
0.69
\n",
"
1.54
\n",
"
\n",
"
\n",
"
DecisionTreeClassifier
\n",
"
0.69
\n",
"
0.54
\n",
"
None
\n",
"
0.69
\n",
"
2.27
\n",
"
\n",
"
\n",
"
Perceptron
\n",
"
0.69
\n",
"
0.53
\n",
"
None
\n",
"
0.69
\n",
"
1.07
\n",
"
\n",
"
\n",
"
ExtraTreeClassifier
\n",
"
0.70
\n",
"
0.48
\n",
"
None
\n",
"
0.68
\n",
"
0.41
\n",
"
\n",
"
\n",
"
KNeighborsClassifier
\n",
"
0.71
\n",
"
0.40
\n",
"
None
\n",
"
0.65
\n",
"
0.53
\n",
"
\n",
"
\n",
"
RidgeClassifierCV
\n",
"
0.63
\n",
"
0.49
\n",
"
None
\n",
"
0.64
\n",
"
2.61
\n",
"
\n",
"
\n",
"
SVC
\n",
"
0.73
\n",
"
0.38
\n",
"
None
\n",
"
0.63
\n",
"
14.50
\n",
"
\n",
"
\n",
"
CalibratedClassifierCV
\n",
"
0.73
\n",
"
0.37
\n",
"
None
\n",
"
0.63
\n",
"
148.45
\n",
"
\n",
"
\n",
"
RidgeClassifier
\n",
"
0.60
\n",
"
0.47
\n",
"
None
\n",
"
0.62
\n",
"
0.89
\n",
"
\n",
"
\n",
"
DummyClassifier
\n",
"
0.72
\n",
"
0.33
\n",
"
None
\n",
"
0.60
\n",
"
0.33
\n",
"
\n",
"
\n",
"
GaussianNB
\n",
"
0.55
\n",
"
0.48
\n",
"
None
\n",
"
0.58
\n",
"
0.45
\n",
"
\n",
"
\n",
"
LinearDiscriminantAnalysis
\n",
"
0.52
\n",
"
0.43
\n",
"
None
\n",
"
0.55
\n",
"
5.51
\n",
"
\n",
"
\n",
"
QuadraticDiscriminantAnalysis
\n",
"
0.25
\n",
"
0.38
\n",
"
None
\n",
"
0.26
\n",
"
3.12
\n",
"
\n",
"
\n",
"
LabelSpreading
\n",
"
0.15
\n",
"
0.34
\n",
"
None
\n",
"
0.08
\n",
"
1.32
\n",
"
\n",
"
\n",
"
LabelPropagation
\n",
"
0.15
\n",
"
0.34
\n",
"
None
\n",
"
0.08
\n",
"
1.26
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Accuracy Balanced Accuracy ROC AUC F1 Score \\\n",
"Model \n",
"NearestCentroid 0.77 0.63 None 0.77 \n",
"LGBMClassifier 0.77 0.57 None 0.75 \n",
"LogisticRegression 0.75 0.59 None 0.74 \n",
"RandomForestClassifier 0.77 0.52 None 0.73 \n",
"ExtraTreesClassifier 0.76 0.52 None 0.73 \n",
"PassiveAggressiveClassifier 0.72 0.59 None 0.72 \n",
"BaggingClassifier 0.73 0.57 None 0.72 \n",
"AdaBoostClassifier 0.74 0.50 None 0.70 \n",
"LinearSVC 0.69 0.57 None 0.70 \n",
"BernoulliNB 0.73 0.49 None 0.70 \n",
"SGDClassifier 0.75 0.45 None 0.69 \n",
"DecisionTreeClassifier 0.69 0.54 None 0.69 \n",
"Perceptron 0.69 0.53 None 0.69 \n",
"ExtraTreeClassifier 0.70 0.48 None 0.68 \n",
"KNeighborsClassifier 0.71 0.40 None 0.65 \n",
"RidgeClassifierCV 0.63 0.49 None 0.64 \n",
"SVC 0.73 0.38 None 0.63 \n",
"CalibratedClassifierCV 0.73 0.37 None 0.63 \n",
"RidgeClassifier 0.60 0.47 None 0.62 \n",
"DummyClassifier 0.72 0.33 None 0.60 \n",
"GaussianNB 0.55 0.48 None 0.58 \n",
"LinearDiscriminantAnalysis 0.52 0.43 None 0.55 \n",
"QuadraticDiscriminantAnalysis 0.25 0.38 None 0.26 \n",
"LabelSpreading 0.15 0.34 None 0.08 \n",
"LabelPropagation 0.15 0.34 None 0.08 \n",
"\n",
" Time Taken \n",
"Model \n",
"NearestCentroid 0.37 \n",
"LGBMClassifier 1.35 \n",
"LogisticRegression 2.49 \n",
"RandomForestClassifier 4.31 \n",
"ExtraTreesClassifier 11.97 \n",
"PassiveAggressiveClassifier 1.75 \n",
"BaggingClassifier 12.21 \n",
"AdaBoostClassifier 4.63 \n",
"LinearSVC 35.00 \n",
"BernoulliNB 0.43 \n",
"SGDClassifier 1.54 \n",
"DecisionTreeClassifier 2.27 \n",
"Perceptron 1.07 \n",
"ExtraTreeClassifier 0.41 \n",
"KNeighborsClassifier 0.53 \n",
"RidgeClassifierCV 2.61 \n",
"SVC 14.50 \n",
"CalibratedClassifierCV 148.45 \n",
"RidgeClassifier 0.89 \n",
"DummyClassifier 0.33 \n",
"GaussianNB 0.45 \n",
"LinearDiscriminantAnalysis 5.51 \n",
"QuadraticDiscriminantAnalysis 3.12 \n",
"LabelSpreading 1.32 \n",
"LabelPropagation 1.26 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"!pip install lazypredict # Jalankan baris ini jika Anda belum menginstal lazypredict\n",
"\n",
"from lazypredict.Supervised import LazyClassifier\n",
"\n",
"# LazyPredict membutuhkan matriks dense, yang bisa memakan banyak memori.\n",
"# Jika terjadi error memori, pertimbangkan untuk menjalankan pada sampel data yang lebih kecil.\n",
"print(\"Menjalankan LazyPredict pada data train dan test...\")\n",
"try:\n",
" # Inisialisasi LazyClassifier\n",
" clf = LazyClassifier(verbose=0, ignore_warnings=True, custom_metric=None)\n",
" \n",
" # Fit model. LazyPredict menggunakan split train/test untuk evaluasi cepatnya.\n",
" models, predictions = clf.fit(X_train_tfidf.toarray(), X_test_tfidf.toarray(), y_train, y_test)\n",
" \n",
" print(\"\\nHasil Screening Model dengan LazyPredict (diurutkan berdasarkan F1 Score):\")\n",
" display(models.sort_values(by='F1 Score', ascending=False))\n",
"\n",
"except MemoryError:\n",
" print(\"\\nERROR: Terjadi MemoryError. Matriks TF-IDF terlalu besar untuk diubah menjadi array dense.\")\n",
" print(\"Screening dengan LazyPredict dilewati. Lanjut ke validasi manual.\")\n",
"except Exception as e:\n",
" print(f\"\\nTerjadi error saat menjalankan LazyPredict: {e}\")\n",
" print(\"Screening dengan LazyPredict dilewati. Lanjut ke validasi manual.\")"
]
},
{
"cell_type": "markdown",
"id": "c8d4070d",
"metadata": {
"papermill": {
"duration": 0.012834,
"end_time": "2025-08-17T11:26:00.315994",
"exception": false,
"start_time": "2025-08-17T11:26:00.303160",
"status": "completed"
},
"tags": []
},
"source": [
"### 12. Kandidat Model & Cross-Validation\n",
"\n",
"Berdasarkan hasil screening dari LazyPredict, model berbasis ensemble tree seperti **LGBMClassifier**, **NearestCentroid** dan **RandomForestClassifier** menunjukkan performa F1-Score tertinggi. Oleh karena itu, kita akan fokus pada kedua model ini dan mengevaluasinya secara lebih teliti menggunakan **Stratified 5-Fold Cross-Validation**.\n",
"\n",
"Metrik utama yang digunakan adalah **Macro F1-score** karena lebih adil untuk dataset yang tidak seimbang."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "bd700f90",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:00.343841Z",
"iopub.status.busy": "2025-08-17T11:26:00.343406Z",
"iopub.status.idle": "2025-08-17T11:26:09.119998Z",
"shell.execute_reply": "2025-08-17T11:26:09.118939Z"
},
"papermill": {
"duration": 8.79228,
"end_time": "2025-08-17T11:26:09.121516",
"exception": false,
"start_time": "2025-08-17T11:26:00.329236",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Menjalankan 5-Fold Cross Validation pada model kandidat...\n",
"NearestCentroid: Macro F1 = 0.6013 (+/- 0.0205)\n",
"[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.004869 seconds.\n",
"You can set `force_row_wise=true` to remove the overhead.\n",
"And if memory is not enough, you can set `force_col_wise=true`.\n",
"[LightGBM] [Info] Total Bins 6420\n",
"[LightGBM] [Info] Number of data points in the train set: 2089, number of used features: 287\n",
"[LightGBM] [Info] Start training from score -2.053454\n",
"[LightGBM] [Info] Start training from score -1.866788\n",
"[LightGBM] [Info] Start training from score -0.332555\n",
"[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.003714 seconds.\n",
"You can set `force_row_wise=true` to remove the overhead.\n",
"And if memory is not enough, you can set `force_col_wise=true`.\n",
"[LightGBM] [Info] Total Bins 6464\n",
"[LightGBM] [Info] Number of data points in the train set: 2089, number of used features: 296\n",
"[LightGBM] [Info] Start training from score -2.049729\n",
"[LightGBM] [Info] Start training from score -1.866788\n",
"[LightGBM] [Info] Start training from score -0.333222\n",
"[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.003591 seconds.\n",
"You can set `force_row_wise=true` to remove the overhead.\n",
"And if memory is not enough, you can set `force_col_wise=true`.\n",
"[LightGBM] [Info] Total Bins 6393\n",
"[LightGBM] [Info] Number of data points in the train set: 2090, number of used features: 291\n",
"[LightGBM] [Info] Start training from score -2.050208\n",
"[LightGBM] [Info] Start training from score -1.864176\n",
"[LightGBM] [Info] Start training from score -0.333701\n",
"[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.003440 seconds.\n",
"You can set `force_row_wise=true` to remove the overhead.\n",
"And if memory is not enough, you can set `force_col_wise=true`.\n",
"[LightGBM] [Info] Total Bins 6236\n",
"[LightGBM] [Info] Number of data points in the train set: 2090, number of used features: 285\n",
"[LightGBM] [Info] Start training from score -2.050208\n",
"[LightGBM] [Info] Start training from score -1.867267\n",
"[LightGBM] [Info] Start training from score -0.333033\n",
"[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.003324 seconds.\n",
"You can set `force_row_wise=true` to remove the overhead.\n",
"And if memory is not enough, you can set `force_col_wise=true`.\n",
"[LightGBM] [Info] Total Bins 6283\n",
"[LightGBM] [Info] Number of data points in the train set: 2090, number of used features: 286\n",
"[LightGBM] [Info] Start training from score -2.050208\n",
"[LightGBM] [Info] Start training from score -1.867267\n",
"[LightGBM] [Info] Start training from score -0.333033\n",
"LGBMClassifier: Macro F1 = 0.5919 (+/- 0.0243)\n",
"RandomForestClassifier: Macro F1 = 0.5439 (+/- 0.0180)\n",
"\n",
"Hasil Cross-Validation (diurutkan berdasarkan Mean Macro F1):\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
mean_f1
\n",
"
std_f1
\n",
"
\n",
" \n",
" \n",
"
\n",
"
NearestCentroid
\n",
"
0.60
\n",
"
0.02
\n",
"
\n",
"
\n",
"
LGBMClassifier
\n",
"
0.59
\n",
"
0.02
\n",
"
\n",
"
\n",
"
RandomForestClassifier
\n",
"
0.54
\n",
"
0.02
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" mean_f1 std_f1\n",
"NearestCentroid 0.60 0.02\n",
"LGBMClassifier 0.59 0.02\n",
"RandomForestClassifier 0.54 0.02"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Gabungkan kembali data latih dan validasi untuk Cross-Validation\n",
"X_combined = pd.concat([X_train, X_val])\n",
"y_combined = pd.concat([y_train, y_val])\n",
"\n",
"models = {\n",
" 'NearestCentroid': NearestCentroid(), \n",
" 'LGBMClassifier': LGBMClassifier(random_state=SEED),\n",
" 'RandomForestClassifier': RandomForestClassifier(random_state=SEED, n_jobs=-1) # n_jobs=-1 untuk mempercepat training\n",
"}\n",
"\n",
"results = {}\n",
"kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=SEED)\n",
"\n",
"print(\"Menjalankan 5-Fold Cross Validation pada model kandidat...\")\n",
"for name, model in models.items():\n",
" # Buat pipeline untuk setiap model agar konsisten\n",
" pipeline = Pipeline([\n",
" ('tfidf', TfidfVectorizer(ngram_range=(1,2), min_df=3, max_df=0.9, sublinear_tf=True)),\n",
" ('clf', model)\n",
" ])\n",
" \n",
" cv_scores = cross_val_score(pipeline, X_combined, y_combined, cv=kfold, scoring='f1_macro')\n",
" results[name] = {\n",
" 'mean_f1': cv_scores.mean(),\n",
" 'std_f1': cv_scores.std()\n",
" }\n",
" print(f\"{name}: Macro F1 = {cv_scores.mean():.4f} (+/- {cv_scores.std():.4f})\")\n",
"\n",
"results_df = pd.DataFrame(results).T.sort_values(by='mean_f1', ascending=False)\n",
"print(\"\\nHasil Cross-Validation (diurutkan berdasarkan Mean Macro F1):\")\n",
"display(results_df)"
]
},
{
"cell_type": "markdown",
"id": "2b4f195d",
"metadata": {
"papermill": {
"duration": 0.013373,
"end_time": "2025-08-17T11:26:09.148889",
"exception": false,
"start_time": "2025-08-17T11:26:09.135516",
"status": "completed"
},
"tags": []
},
"source": [
"**Temuan:**\n",
"**NearestCentroid\t** secara konsisten menunjukkan performa terbaik dengan rata-rata Macro F1-score tertinggi walaupun standar deviasinya sama jika dibandingkan dengan **RandomForestCLassifier** maupun **LGBMClassifier**, menjadikannya kandidat utama untuk *hyperparameter tuning*."
]
},
{
"cell_type": "markdown",
"id": "a1d1ba45",
"metadata": {
"papermill": {
"duration": 0.01322,
"end_time": "2025-08-17T11:26:09.175849",
"exception": false,
"start_time": "2025-08-17T11:26:09.162629",
"status": "completed"
},
"tags": []
},
"source": [
"### 13. Tuning Hiperparameter (Grid Search)\n",
"\n",
"Sekarang kita akan melakukan pencarian hiperparameter terbaik untuk `NearestCentroid` menggunakan `GridSearchCV`. Kita akan mencari kombinasi parameter TF-IDF dan parameter `C` (regularisasi) dari NearestCentroid yang memberikan Macro F1-score tertinggi pada data validasi."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "17ac210e",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:09.204468Z",
"iopub.status.busy": "2025-08-17T11:26:09.204140Z",
"iopub.status.idle": "2025-08-17T11:26:22.313171Z",
"shell.execute_reply": "2025-08-17T11:26:22.312146Z"
},
"papermill": {
"duration": 13.125571,
"end_time": "2025-08-17T11:26:22.315110",
"exception": false,
"start_time": "2025-08-17T11:26:09.189539",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Memulai Grid Search untuk NearestCentroid...\n",
"Fitting 5 folds for each of 72 candidates, totalling 360 fits\n",
"\n",
"Parameter Terbaik: {'clf__metric': 'euclidean', 'clf__shrink_threshold': None, 'tfidf__min_df': 5, 'tfidf__ngram_range': (1, 2), 'tfidf__sublinear_tf': True}\n",
"Skor Macro F1-score terbaik di CV: 0.5958\n"
]
}
],
"source": [
"# 1. Definisikan pipeline dengan model yang benar\n",
"pipeline = Pipeline([\n",
" ('tfidf', TfidfVectorizer()),\n",
" ('clf', NearestCentroid()) \n",
"])\n",
"\n",
"# 2. Buat parameter grid yang sesuai untuk NearestCentroid dan TfidfVectorizer\n",
"param_grid = {\n",
" 'tfidf__ngram_range': [(1, 1), (1, 2)],\n",
" 'tfidf__min_df': [2, 3, 5],\n",
" 'tfidf__sublinear_tf': [True, False],\n",
" 'clf__metric': ['euclidean', 'manhattan'], \n",
" 'clf__shrink_threshold': [None, 0.1, 0.5] \n",
"}\n",
"\n",
"# 3. Jalankan GridSearchCV seperti sebelumnya\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=kfold, scoring='f1_macro', n_jobs=-1, verbose=1)\n",
"\n",
"print(\"Memulai Grid Search untuk NearestCentroid...\")\n",
"grid_search.fit(X_train_val, y_train_val)\n",
"\n",
"print(f\"\\nParameter Terbaik: {grid_search.best_params_}\")\n",
"print(f\"Skor Macro F1-score terbaik di CV: {grid_search.best_score_:.4f}\")\n",
"\n",
"best_model = grid_search.best_estimator_"
]
},
{
"cell_type": "markdown",
"id": "034dec89",
"metadata": {
"papermill": {
"duration": 0.013789,
"end_time": "2025-08-17T11:26:22.344307",
"exception": false,
"start_time": "2025-08-17T11:26:22.330518",
"status": "completed"
},
"tags": []
},
"source": [
"### 14. Evaluasi Terstruktur pada Test Set\n",
"\n",
"Dengan model dan parameter terbaik yang telah ditemukan, kita akan melakukan evaluasi final pada **data uji** yang belum pernah dilihat oleh model sebelumnya. Ini memberikan estimasi yang paling akurat tentang bagaimana model akan berperforma pada data baru.\n",
"\n",
"Kita akan menampilkan:\n",
"- **Classification Report**: Metrik lengkap (precision, recall, F1-score) per kelas.\n",
"- **Confusion Matrix**: Visualisasi untuk melihat di mana model melakukan kesalahan klasifikasi."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "64beaa25",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:22.373729Z",
"iopub.status.busy": "2025-08-17T11:26:22.373356Z",
"iopub.status.idle": "2025-08-17T11:26:22.675242Z",
"shell.execute_reply": "2025-08-17T11:26:22.674334Z"
},
"papermill": {
"duration": 0.319084,
"end_time": "2025-08-17T11:26:22.677311",
"exception": false,
"start_time": "2025-08-17T11:26:22.358227",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Laporan Klasifikasi pada Data Uji (Test Set):\n",
" precision recall f1-score support\n",
"\n",
" NEGATIF 0.54 0.66 0.60 59\n",
" NETRAL 0.37 0.62 0.46 72\n",
" POSITIF 0.90 0.73 0.80 331\n",
"\n",
" accuracy 0.70 462\n",
" macro avg 0.60 0.67 0.62 462\n",
"weighted avg 0.77 0.70 0.72 462\n",
"\n"
]
},
{
"data": {
"image/png": "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XbtW2bNn16xZs+ySufDw8FTFVLx4cW3dulXXr183/CPg9vuTnv8tAkgfrElEltO9e3flypVLQ4YM0cWLFw3nT548qblz50q6NV0qyXZ82+zZs+3Op4dSpUopJibGbsuXCxcu6KeffrLrd+XKFcNzb28qfbdvyyhcuLAqVqyo5cuX2yWi//77rzZv3pyur+NONWrUUN++ffXRRx/Jw8Pjrv2cnZ0NlbUffvjBsBVNzpw5JSnFhDqtxo4dq7Nnzyo4OFhBQUEqXry4goKCUv2tI+vWrbOLb/fu3fr7779Vt25dSXevLN/5eXJ2dpa/v7/WrVtn94+CI0eOaNOmTYa+kn1FNyYmJtUJ172sWLFCS5cula+vr2rWrCnp/yrK/72e1WrVvHnzDM+/28/G2dlZFovFrip+6tQp/fzzz6mKq27dukpMTDRsCZScnKyFCxfKxcXFFi+AzINKIrKcUqVKaezYserXr5+aNWtm+8aVhIQE7dy5U2vWrLHd+ODt7a02bdpo8eLFio6OVvXq1fXPP/9o2bJlatSokZ599tl0i6tZs2YaO3asevfurc6dO+v69etauHChypYta7vBQZImT56sv/76S/Xq1VPx4sV16dIlffPNN3riiSdsW8KkZMCAAerRo4fat2+vF1980bYFjru7+z2ngR+Wk5OT3n777fv2q1+/viZPnqyBAwfK19dX//77r1asWKGSJUva9StVqpTy5MmjRYsWKXfu3MqVK5d8fHwM/e5ny5Yt+uabb9S7d2899dRTkqTRo0erc+fOmjBhggYMGHDfMUqVKqUOHTqoQ4cOSkhI0Lx585QvXz51795d0q3lDdWrV9fMmTOVmJioIkWKaPPmzSmuyQwMDNRvv/2mTp06qUOHDkpKStKCBQtUoUIFHTx40Navdu3acnFxUa9evfTKK68oLi5OS5cuVcGCBRUZGZnq17927VrlypVLiYmJtm9c2bFjh7y9vTVx4kRbv3LlyqlUqVL67LPPdP78ebm5uWnt2rUpJum338cRI0bI399fzs7OCggIUL169TR79mx1795dzZs3t31mS5UqZffa7qZBgwby9/fX6NGj9c8//8jX11fx8fFav369duzYoXfffdduY3AAmQNJIrKkhg0b6vvvv9esWbP0888/a+HChXJ1dZWXl5eCgoL08ssv2/qOGDFCJUqU0LJly7Ru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rly6fPlyis/97+9Ryf5zDzwqJIlZUK1atXTixAlNmzZNAwYMuGu/ggULKk+ePCme++KLL3T27FmtWbNGRYoUsbUXL15c/v7+slqtdv0jIiK0c+dOhYSEaOvWrfrxxx/VokUL5cuXz9bnxo0bkqR8+fLJw8Pjvq8jd+7cqeqHrOVhP58FChSw/fl2knm3vnny5JGHh4c8PDzUt29fzZs3z1apvG3btm26fv26+vTpo+XLl2vHjh2qVq3aw7xEZEGurq623zcdO3bUunXrtH79epUsWVJr167VlClT1KBBA1v/4cOH68qVKxo8eLBq1aqlXLlyaf369erYsaNeeOEFWz9vb++7XvO/v9/c3d1lsVgMv/PuliSm9vcokJGYbs6CnJyc9N5772nBggU6d+5cmp+fnJysH374QS1atLBLEP/LYrHYHX/77beqV6+e3N3d1bJlS4WFhT1Q7Hj8Pezn80HcvHnT9pm8s3odFhamgIAAubi4qHnz5nx2IelWxTsxMVErVqxQmTJl7BLE215//XVduXJFv//+uySpUKFC+uOPPxQVFfWowwVMQZKYRTVu3FgVK1bUpEmT7tqnXr168vX1tT0CAgIkSVFRUYqOjla5cuXs+rdt29bW97333rO1Jycna9myZWrZsqUkqVmzZtq+fbsiIiIe6jWMHTvWLr558+Y91HjIPB7m85kW7733nnx9fVW5cmWNHj1axYsXt6vyxMbGau3atWrVqpUkqWXLlvrhhx8UFxeX9heFx4LVatXvv/+uTZs2qUaNGjp+/LjKly+fYt/b7ceOHZMkDRw4UFFRUapdu7ZatGihjz/+WBs3bsyQOF955RW7/z727duXIdcB7oXp5izs/fff12uvvaZu3bqleP7rr79W7ty5bcfZst37xx0aGqrExESNHTtW169ft7Vv3rxZ8fHxqlevnqRb04G1a9dWeHi43n333QeOv1u3bmrbtq3tOH/+/A88FjKf9P58pmTgwIGqVauWIiIiNHr0aA0ZMsRuCcTKlStVqlQp25RgxYoVVbx4ca1evVovvfRSmq+HrGvDhg3y9fVVYmKirFarmjdvrsDAQG3YsMGwvOZuKlSooJUrV2rPnj3asWOH/vrrL7311ltq06aNRo4cma7xjh8/3i55LVq0aLqOD6QGSWIWVr16dfn7+2vcuHF2ydZtJUqUuOuarzx5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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_pred_test = best_model.predict(X_test)\n",
"\n",
"print(\"Laporan Klasifikasi pada Data Uji (Test Set):\")\n",
"print(classification_report(y_test, y_pred_test))\n",
"\n",
"# Visualisasi Confusion Matrix\n",
"cm = confusion_matrix(y_test, y_pred_test, labels=best_model.classes_)\n",
"plt.figure(figsize=(8, 6))\n",
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=best_model.classes_, yticklabels=best_model.classes_)\n",
"plt.title('Confusion Matrix pada Data Uji')\n",
"plt.xlabel('Prediksi')\n",
"plt.ylabel('Aktual')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "5125fc1b",
"metadata": {
"papermill": {
"duration": 0.014728,
"end_time": "2025-08-17T11:26:22.707197",
"exception": false,
"start_time": "2025-08-17T11:26:22.692469",
"status": "completed"
},
"tags": []
},
"source": [
"**Interpretasi Singkat:**\n",
"- Model menunjukkan performa yang sangat baik pada kelas **POSITIF** dan **NEGATIF**, terlihat dari F1-score yang tinggi.\n",
"- Kelas **NETRAL** sedikit lebih sulit untuk diprediksi, yang merupakan hal umum dalam analisis sentimen karena seringkali ambigu.\n",
"- Macro Avg F1-score pada data uji memberikan gambaran performa keseluruhan model yang solid."
]
},
{
"cell_type": "markdown",
"id": "7374320d",
"metadata": {
"papermill": {
"duration": 0.0142,
"end_time": "2025-08-17T11:26:22.737619",
"exception": false,
"start_time": "2025-08-17T11:26:22.723419",
"status": "completed"
},
"tags": []
},
"source": [
"### 15. Analisis Error\n",
"\n",
"Melihat contoh di mana model salah klasifikasi dapat memberikan wawasan tentang keterbatasannya. Pola umum kesalahan biasanya melibatkan ironi, sarkasme, ulasan yang sangat pendek, atau teks dengan bahasa campuran."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "4eabd655",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:22.768123Z",
"iopub.status.busy": "2025-08-17T11:26:22.767625Z",
"iopub.status.idle": "2025-08-17T11:26:22.782843Z",
"shell.execute_reply": "2025-08-17T11:26:22.781912Z"
},
"papermill": {
"duration": 0.032428,
"end_time": "2025-08-17T11:26:22.784470",
"exception": false,
"start_time": "2025-08-17T11:26:22.752042",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Contoh Kesalahan Klasifikasi (10 sampel acak):\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
text_bersih
\n",
"
label_aktual
\n",
"
label_prediksi
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2692
\n",
"
artistik instagramable tiket masuk super murah
\n",
"
POSITIF
\n",
"
NEGATIF
\n",
"
\n",
"
\n",
"
1109
\n",
"
wisata sejarah gedung bekas kantor kereta api ...
\n",
"
POSITIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
2107
\n",
"
semarang hebat
\n",
"
NEGATIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
169
\n",
"
sana sejuk sekali benar kata orang banyak seka...
\n",
"
POSITIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
93
\n",
"
place many window door as museum bagus place v...
\n",
"
POSITIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
1723
\n",
"
lawang sewu golong heritage cagar budaya meman...
\n",
"
POSITIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
2556
\n",
"
iconic historical building very beautiful shou...
\n",
"
NEGATIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
574
\n",
"
tiket umum damping pandu perlu bayar pikir san...
\n",
"
POSITIF
\n",
"
NEGATIF
\n",
"
\n",
"
\n",
"
2874
\n",
"
bagus ajar sejarah kereta api indonesia
\n",
"
POSITIF
\n",
"
NETRAL
\n",
"
\n",
"
\n",
"
879
\n",
"
sejarah
\n",
"
NETRAL
\n",
"
POSITIF
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" text_bersih label_aktual \\\n",
"2692 artistik instagramable tiket masuk super murah POSITIF \n",
"1109 wisata sejarah gedung bekas kantor kereta api ... POSITIF \n",
"2107 semarang hebat NEGATIF \n",
"169 sana sejuk sekali benar kata orang banyak seka... POSITIF \n",
"93 place many window door as museum bagus place v... POSITIF \n",
"1723 lawang sewu golong heritage cagar budaya meman... POSITIF \n",
"2556 iconic historical building very beautiful shou... NEGATIF \n",
"574 tiket umum damping pandu perlu bayar pikir san... POSITIF \n",
"2874 bagus ajar sejarah kereta api indonesia POSITIF \n",
"879 sejarah NETRAL \n",
"\n",
" label_prediksi \n",
"2692 NEGATIF \n",
"1109 NETRAL \n",
"2107 NETRAL \n",
"169 NETRAL \n",
"93 NETRAL \n",
"1723 NETRAL \n",
"2556 NETRAL \n",
"574 NEGATIF \n",
"2874 NETRAL \n",
"879 POSITIF "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Pastikan X_test adalah Series untuk bisa menggunakan index dengan boolean mask\n",
"X_test_series = pd.Series(X_test, index=y_test.index)\n",
"\n",
"error_mask = y_test != y_pred_test\n",
"error_df = pd.DataFrame({\n",
" 'text_bersih': X_test_series[error_mask],\n",
" 'label_aktual': y_test[error_mask],\n",
" 'label_prediksi': pd.Series(y_pred_test, index=y_test.index)[error_mask]\n",
"})\n",
"\n",
"print(\"Contoh Kesalahan Klasifikasi (10 sampel acak):\")\n",
"display(error_df.sample(min(10, len(error_df)), random_state=SEED))"
]
},
{
"cell_type": "markdown",
"id": "9bf913a4",
"metadata": {
"papermill": {
"duration": 0.01436,
"end_time": "2025-08-17T11:26:22.814503",
"exception": false,
"start_time": "2025-08-17T11:26:22.800143",
"status": "completed"
},
"tags": []
},
"source": [
"### 16. Interpretabilitas (Fitur Penting)\n",
"\n",
"Untuk model **NearestCentroid**, kita tidak melihat koefisien seperti pada model linear. Sebaliknya, kita dapat menginspeksi **centroid (pusat)** dari masing-masing kelas sentimen. Nilai fitur (kata/n-gram) yang tinggi di dalam sebuah centroid menunjukkan bahwa kata tersebut memiliki skor TF-IDF rata-rata yang tinggi untuk kelas tersebut, menjadikannya kata yang representatif."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2c9846e3",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:22.846092Z",
"iopub.status.busy": "2025-08-17T11:26:22.845735Z",
"iopub.status.idle": "2025-08-17T11:26:23.977928Z",
"shell.execute_reply": "2025-08-17T11:26:23.976929Z"
},
"papermill": {
"duration": 1.150865,
"end_time": "2025-08-17T11:26:23.980166",
"exception": false,
"start_time": "2025-08-17T11:26:22.829301",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB8YAAAJQCAYAAAD8AA6pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3yN9/vH8XcSsUeM0MaqlVgJkUiMqL2pWa1W7E2VUoIWNWrWKFWqZmhp1SylRq0isaX23qtmiZGcnN8ffjlfR3JISHKOk9fz8eijzn3ucd2fz33OuXJf9/25HYxGo1EAAAAAAAAAAAAAANgpR2sHAAAAAAAAAAAAAABAYqIwDgAAAAAAAAAAAACwaxTGAQAAAAAAAAAAAAB2jcI4AAAAAAAAAAAAAMCuURgHAAAAAAAAAAAAANg1CuMAAAAAAAAAAAAAALtGYRwAAAAAAAAAAAAAYNcojAMAAAAAAAAAAAAA7BqFcQAAAAAAAAAAAACAXUth7QAAAADwZvHw8Ij3Mn5+fgoODk6EaOLn0KFD2rlzpw4dOqRDhw7p3LlzMhqNGjNmjBo0aGBxuaCgIC1duvSF6z548KBSpUoV51gmT56sKVOmvHCewoULa/ny5VqyZIn69++vRo0aadSoUXHehrVVqVJFly5dMpvm7OysLFmyqFixYmrWrJkqV65spehgTdHHxoYNG5QrVy6z906ePKnx48dr3759unPnjqKiotS9e3d98sknVoo2cUR/B7zo+/Hbb7/Vd999J2dnZ40ZM0Z16tR5pW3Z+nfI9evXNW/ePG3dulXnz59XRESEXFxclC1bNhUvXlylSpVSgwYN5OTkZO1QLbp48aKqVq2qnDlzauPGjdYOx2q6deumrVu36s8//9Rbb70V5+UCAwMVGhqqefPmyd/fPxEjTLht3r59W7/88ou2bdum06dP6+7du0qZMqXc3NxUsmRJ1a1bV2XLlk2EyN8M0fnisWPH4rWcpX5p3bq1Dh48qLVr18rV1TVBYwUAAEDyQWEcAAAA8dKoUaMY027cuKFt27ZZfD9//vyJHldcfPfdd9qwYcMrL1+qVCnlzZs31vccHV9tMKZs2bKpQoUKsb739ttvv3DZN6UQ82y7/ffffzpy5Ig2btyojRs3qnXr1urfv7+VI0yeXrVo8TLRF5KMHDlSjRs3jtey4eHh6tixoy5duqTixYsrICBATk5OKlKkSILGaOuMRqOGDx+u+fPnK02aNJo8ebLF74k33d69e9WpUyfdu3dPadOmlZeXl7Jly6YHDx7o+PHj+vXXX/Xrr7+qZs2aSpcundXifNHFHHhq+/btWr9+vdq2bRuvovibaNmyZfrqq68UHh6ulClTysvLSzly5NCjR490+vRp03Fbq1YtTZo0ySoxvik5Qlz17t1bTZs21fjx4zVy5EhrhwMAAIA3FIVxAAAAxEtsdxuGhISYCuO2eDditJIlS6pQoUIqWrSoihYtqgEDBig0NDTOy7///vvxLvS9TP78+V/aZtWrV1eJEiWUIUOGBN12Unm+3SIjIzVy5EjNnz9fc+bMUd26deXl5WXFCJHU5syZo4iICOXIkcNselhYmC5duiRvb28tXLjQStFZV2RkpIKCgrRy5UplypRJ06dPl7e3t7XDShRPnjxRz549de/ePdWrV09fffWV0qdPbzbPqVOn9Ntvv9n03eKSlCNHDq1evVrOzs7WDsVqRo4cqVSpUqljx47WDiVORo8erYcPH8rNzS1ey/38888aMmSIHBwc1KFDB3Xu3DnGcXvy5ElNnjxZ586dS8iQ3yirV69O0PV5enqqcuXKWrp0qVq1aqXChQsn6PoBAACQPFAYBwAAQLLxppysf16GDBne2KJ4bFKkSKG+fftq2bJlun//vv766y8K48lMnjx5Yp1+5coVSdI777yThNHYjkePHqlnz57666+/5OrqqlmzZsnd3d3aYSWaPXv26Nq1a0qRIoWGDRumtGnTxpinQIEC6tu3rxWiix9nZ2cVKFDA2mFYzd9//63jx4+rbt26ypw5s7XDiZP4FsSlpxdqjBgxQtLT0TFat24d63wFCxbUpEmTtGvXrtcJ8Y2WGJ+Hpk2b6q+//tLcuXO5axwAAACv5NXGewQAAADi4erVqxo2bJhq1KghT09P+fj46MMPP9TChQtlMBhizL9kyRJ5eHgoKChIt2/f1ldffaVKlSqpePHiqly5sr7++mvdvXvXCntiHc+2R7SgoCBVrVpVknTp0iV5eHiY/ffsfB4eHlqyZEmc1/389Dt37mjEiBGqVq2aihcvrsDAwNfep1SpUpmGV79582as8+zYsUPdu3dXQECAihcvrrJly6pbt27at29frPM/u++//PKLGjdurJIlS8rX11cdOnTQ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flxXr15VnTp1VKNGjUSNJVWqVAoICNDGjRsVEhIS4zMmSWPGjFFgYKBWrVqlXbt2ycfHR48ePdLOnTvl4eEhb2/vGN8nRYsWNf1+NWzYUP7+/sqUKZOOHDmiM2fOqFOnTpo2bVqi7ltsWrRooTRp0mj48OGaPn265syZIy8vL+XIkUOPHz/W6dOnTRdkPHtBh6Ojo7777jt16tRJS5cu1dq1a+Xh4SE3NzdFRETowoULOn78uAwGgxo3bmwa2eJVxSVHiItBgwbp9OnTOnDggKpXry5/f385OTlp165dunXrlnLlyqVx48bFeX2vcixEi4iI0K5du0zHHAAAABBfFMYBAACQqLy8vLRs2TLNmDFDW7Zs0bp165QyZUoVLVpUDRo00Pvvv2/x5G+mTJn0yy+/aOLEidq8ebNu3rypbNmyqX79+urevbvpOcFxdevWLR04cCDG9PPnz+v8+fOxLuPh4aFWrVrpn3/+0enTp7V3714ZjUZly5ZNNWvWVJMmTWItAiSVoUOHysXFRVu3btXatWtNd3E+e9J74sSJmjp1qn7//XeFhoYqY8aMKlu2rD799NNY75BNSg0bNtSsWbN08uRJzZw5U71795Yk9e3bV9WqVdNPP/2kvXv3auvWrXJ2dparq6v8/PxUqVIli8WeAQMGKF++fFq0aJHCwsKUIkUKVahQQV27do3THW2xKVSokFasWKGFCxdq/fr1OnbsmPbv3y8XFxe99dZbatu2rapXr26av0SJEurdu7d2796tU6dO6ciRI3JyctJbb72ljz/+WC1atIhRTEufPr1mzZql1atXa8WKFTp06JCOHj2qdOnSKXv27Kpfv76qVq2qPHnyvNI+PK9nz55ydHTUunXrtH79etOx06VLF2XOnFk1atTQ/PnzNWXKFB09elQXLlxQ7ty51b17d7Vt29biM3ILFy6syZMna+bMmTpw4IB27Ngho9Got956K0kK49WrV1fVqlU1ffp0053NRYsWVYsWLdSoUaNYl3md4y2xvP3225o/f75atmypEydOKDAwUHPnzo33sfgiJUqU0G+//aaJEycqLCxMGzdu1Ntvv60WLVqoS5cuZne7RqtSpYru37+v3bt369y5czpw4IBSp06tt956Sx07dtTHH39sNuz5i1SoUEEzZ87Ujh07tHfvXl28eNF0Z37WrFlVrVo11a1b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HWr1r0IBAACKEm9vb8XExGj9+vWKjIyUJHXs2FElSpRQeHi4Dh8+rF9++UXjx49Xp06dLLdRr1KlihISEnTs2DGlpqYqIyNDXl5eOnXqlNauXavk5GTFxMTo+++/v+P258+frzVr1ujo0aNKTExUbGysPDw89MADD6hZs2YKCAjQgAEDtGXLFp08eVLx8fGKjo6+r5N9Xl5eysjIsGTNlStX6ssvv8zVstWrV9eqVat09OhR7dmzR8OGDcuRL3OjR48eSkxM1JQpU5SYmKhvv/1WK1askKT7vmofAAAA9+/mjOzi4qKAgAB98sknOnr0qOLi4jR9+vT73s5jjz2m/fv3a+XKlUpKStKHH36o3377LU/rePzxx1W1alWFhYXp0KFD2rlzZ77UBgAAUJiKxcR4586ddfnyZXXr1k3vvfeeevXqpR49esjd3V1RUVGKjY1V+/btNXfuXIWFhd3zdoKDg5WRkaHnn38+x/svvPCC2rZtq8GDB6t79+46f/68XnrpJavr8fDw0MKFC5WQkKBhw4bJbDbfc00AAABG4ePjo4ULF2rt2rWKioqSq6ur5s2bp/Pnzys4OFjvvPOOgoKCNHr0aMsy3bt3l7e3t55//nkFBQUpPj5erVq10iuvvKL33ntPnTp10q5du9SvX787brt06dL697//reDgYAUHB+v333/XJ598IkdHRzk4OOiTTz5R48aNNWLECD399NMaMmSIfv/99zs+5/xuateurREjRmju3Lnq0KGDVq9erSFDhuRq2cjISF24cEFdunTR8OHDFRISogcffDBP269atapmzJihDRs26LnnntMXX3yhN998U9K1RwEBAADA9m7OyBMmTJDZbFbXrl01YcIEDRo06L638cQTT6h///6aMmWKgoODlZaWps6dO+dpHSaTSR999JEuXbqk4OBgjRo1ypItS5Ysed81AgAAFAaHbB4Uk28++ugjxcbGavXq1TbZvtls1u7duzVrXYL2HfvDJjUAueVXraIWj3nZ1mXc0fX/pwICAgz5LAxbojfW0Rvr6I11Ru2NUevCvfv444/15Zdf6ocffsjV58mXAO5XUcj9RsQx2D4xrtfQh4L35Zdfavbs2dq8eXOBbmfnzp166aWXtGHDBlWrVi3Xy5Exgbu7nqHMZjO/Kw2EY5jxMCbGY4sxycs2nQqlIjuXlpam33//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Vas0Z84cjR07Vo8++qjWrl2r+fPn6+GHHy7c5gAAUEjyO9MXFDIfbnb69GkNHTpU7777rlq3bq20tDTt2LFD2dnZWrVqlWbMmKExY8aoTp06OnjwoEaPHq1SpUqpS5cut11f6dKlNXHiRFWsWFGHDx/W6NGjVbp0ab3xxhuWzyQnJ2vdunWaNWuWHB2vXTuVnp6u1157TX5+frp06ZJmzJihAQMG6JtvvrF8RrqWQcPCwuTl5aXo6GgNHTpU69evl5NTsT3VDACAYdkqIxs18xbLtLJ48WJFR0drzpw5atKkiU6ePJnrZQcOHKjHH3/c8trNzU21a9e2vB40aJC+//57/b//9//08ssvW95/8skn1bNnT0nSG2+8oQULFmjbtm3y8fHR6tWrJUnvv/++SpYsqRo1auj06dMaNWrU/e4qACCX/Pz88mU9ZrNZ+/btk7+/v0wmU76s017QG+uM2pvrdeHugoODLf9etWpVRUREKDg4WGlpaSpdurSaNGmir7/+WmazWb/99pucnZ31zDPPKC4uzjIx3rhx41yv77rBgwerSZMmkqQ+ffqoT58+unLlikqWLKnPPvtMwcHBev755yVJb731ln766SfLlUcAANib/Mr0BcWoma+wkTFv9eeffyozM1Nt2rRRlSpVJP3vv+eZM2cqPDxcbdu2lXQtGx45ckRLliyxOjHev39/y78//PDDSkxM1Nq1a3NMjGdkZGjy5Mlyd3e3vNeuXbsc65kwYYKCgoJ05MgR1apVy/J+79699Y9//EPStXOlzz77rI4fPy5fX9/76AIAACgIhZ2RbZF585Ivi93E+Lp165SamqrPP//ccpugvPD398/xOi0tTbNmzdKmTZv0559/ymw26/Lly0pJScnxuRv/w3NwcFCFChUst8NMTEyUn5+fSpYsaXU7AICCld8HaZPJVKxPdt0JvbGO3hRd+/fv16xZs3To0CFduHBB2dnZkqRTp06pRo0aCgwMVFpamg4cOKBdu3apcePGatq0qT755BNJ0vbt2xUaGprr9V13Y8b08PCQJJ09e1aenp5KTEzUSy+9lKPO+vXr65dffimYJgAAYGNFJUeR+XCz2rVrKygoSB07dlTz5s3VvHlztWvXTs7OzkpOTlZERIRGjx5t+XxmZqbKli1rdX3ffvutYmJidOLECV26dEmZmZkqU6ZMjs94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33zzjeLj4+Xj4yMfHx8dO3ZMFotFMTExCgoKUseOHRUcHKx33333mvWEh4drxowZev311+Xv76+IiAhJUlxcnEJCQuTn56devXpp+vTpys3NlSR9/fXXmjx5si5cuGCtYdGiRZKkpKQkDR48WJ07d1aPHj00fvx45eTklLv9gwcPKisrS6+88or8/PzUuHFjde3aVePGjZOfn1+Zy1gsFk2ePFl9+/bViRMnJEmrV69Wnz591KFDBwUHByspKclmGR8fH61evVqRkZHy8/PTkiVLbB53c3NT/fr1rT+33357qWmenp7W+e+++26bx2rVqnXNvi7JxcVF9evXV4MGDeTt7a2wsDCtWbNGeXl5mjt3rs28xcdMyR83N7dy152QkKA//OEP6tSpk5577jmdP3/e5vGsrCxFRUWpe/fu6ty5sx577DGbY7AsVzseirfZrVs3/etf/1JwcLA6deqk0aNHKz8/X4mJiQoKCtLvfvc7vfbaa7JYLOVu591339WOHTu0YsUKPfXUU2rbtq2aNm2qkJAQvf/++9YrTIuKihQbG2s93gcMGKCUlBTrer7++mv5+Pjoq6++0uDBg9WpUycNGTJEhw8ftta7ePFi7du3z3oMJyQkSCr/WLmeY6zkbYh2796tRx99VL6+vho8eDC3HwIAOBQZ0xYZk4xZEhkTAICKI1/aIl+SL0siXwIVxyfGAejAgQNKS0tTo0aNrNMKCgrUvn17jRgxQl5eXtq8ebNeeukl3XffferYsaOmTJmio0ePqlWrVho9erSkK1feFRUV6Z577tGbb76pu+66S2lpaZo2bZrq16+vfv36XbWOxMREPfnkk3rvvfes01xcXDRlyhQ1adJE2dnZevXVVzV37lxNnz5dnTt3VkxMjBYuXGh9IS++2vDy5csaM2aMWrZsqZycHM2ePVvR0dFaunRpmduuW7euXF1d9c9//lNPP/30VcNScf+8+OKLOn78uFavXq26devqs88+08yZMzV58mR1795dmzdvVkxMjO655x79z//8j3XZxYsXa/z48ZoyZco1t1MV7r77boWEhOjDDz+UxWK5oRrT09M1ZcoUvfjii+rTp4+2bt1qDfzF8vLy1KtXL40bN04eHh5KSkpSZGSkUlJSbI7Fkq52PBT75ZdftHLlSs2fP1+5ubl6/vnn9fzzz6t27dp6++23lZ2drRdeeEFdunQp95j8+OOP1b17d7Vr167UY+7u7tarHmNjY7V+/Xq9+uqrat68ub799ltNnDhRdevW1QMPPGBdZv78+YqOjlbdunX1yiuvKCYmRmvWrFG/fv303//+1+aK2pK3f/rtsXK9x1ix3NxcjRo1St27d9fcuXN17Ngxvf766+XsNQAA7IuMScYsiYxJxgQA4GaRL8mXJZEvyZfAjWBgHKimNm/erM6dO+vy5csqKCiQq6urpk6dan28YcOG1isepStXQ27btk2ffvqpOnbsqNq1a8vd3V2enp42tz1xc3OzhkxJatq0qXbt2qWUlJRrhsrmzZvrpZdespk2bNgw6+9NmjTR2LFj9corr2j69Ony8PBQ7dq1rVcMlhQaGmpTw5QpUxQaGqrc3Nwyr0hs2LChXn75Zc2dO1eLFy9Whw4d5O/vrwEDBqhp06Y28+bm5mrkyJEqKChQfHy8NQS88847GjRokJ566ilJUosWLay3rSn5gt+/f3899thjV+2L69WrVy+bv7/44gvVqVPnptfbsmVL5ebm6vz587r77rsl/XrMFOvZs6cWLlxY5vLx8fHq2bOnRowYIelKX6SlpWnr1q3Wedq0aaM2bdpY/x47dqw2bdqkL774Qn/605/KXO/VjodihYWFmj59uu677z5JUnBwsNavX68vv/xStWrV0v333y9/f3/95z//KfeYzMzMtAmFZSkoKFBsbKzi4uKs/dK0aVPt3LlTa9eutVl+3Lhx1r9HjhypkSNH6tKlS/L09LS5ova3fnusvPjii9d1jBXbsGGDioqKNHPmTN12221q1aqVfvjhB5v+AgDAnsiYtsiYtsiYZEwAACqKfGmLfGmLfEm+BCqKgXGgmvL399f06dOVn5+vFStWyM3NTcHBwdbHLRaLlixZopSUFP34448qLCxUQUGBzS1wyrNq1Sp9+OGHOnHihC5duqTCwkJreNixY4c1aEjSq6++qgEDBkiS2rdvX2pd27dvV2xsrA4fPqyLFy/KYrHo0qVLys/PV82aNcut4fvvv7fe3uWnn36SYRiSpJMnT+r+++8vc5mnnnpKAwcO1DfffKP09HSlpKQoNjZWb731lnr06GGdb/z48brnnnv07rvv2vTH4cOH9cQTT9iss0uXLoqPj7eZ1qFDh3LrrqhVq1bZhOQ777xTkmzCX0hIiGbMmFGh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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Pastikan numpy dan matplotlib.pyplot sudah diimpor\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Mengambil nama fitur dari langkah TF-IDF\n",
"tfidf_features = best_model.named_steps['tfidf'].get_feature_names_out()\n",
"\n",
"# MENGGANTI .coef_ MENJADI .centroids_\n",
"# Ini adalah perubahan kunci. Kita mengambil pusat (centroid) dari setiap kelas.\n",
"centroids = best_model.named_steps['clf'].centroids_\n",
"\n",
"# Proses plotting tetap sama, hanya sumber datanya yang berubah\n",
"fig, axes = plt.subplots(1, 3, figsize=(20, 6))\n",
"fig.suptitle('Top 15 Fitur Representatif per Kelas Sentimen (dari Centroid)', fontsize=16)\n",
"\n",
"for i, label in enumerate(best_model.classes_):\n",
" # Mengambil centroid untuk kelas saat ini\n",
" class_centroid = centroids[i]\n",
" \n",
" # Mengambil indeks dari 15 fitur dengan nilai tertinggi di dalam centroid\n",
" top_features_indices = np.argsort(class_centroid)[-15:]\n",
" \n",
" # Mengambil nama fitur dan nilainya\n",
" top_features = tfidf_features[top_features_indices]\n",
" top_feature_values = class_centroid[top_features_indices]\n",
" \n",
" ax = axes[i]\n",
" ax.barh(top_features, top_feature_values, color=sns.color_palette(\"viridis\", 15))\n",
" ax.set_title(f'Sentimen: {label}')\n",
" ax.set_xlabel('Rata-rata Skor TF-IDF dalam Centroid')\n",
" ax.invert_yaxis() # Tampilkan fitur teratas di paling atas\n",
"\n",
"plt.tight_layout(rect=[0, 0, 1, 0.96])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "fd67ee5c",
"metadata": {
"papermill": {
"duration": 0.016247,
"end_time": "2025-08-17T11:26:24.013758",
"exception": false,
"start_time": "2025-08-17T11:26:23.997511",
"status": "completed"
},
"tags": []
},
"source": [
"### 17. Simpan Artefak\n",
"\n",
"Langkah terakhir di bagian ini adalah menyimpan semua artefak yang relevan agar hasil dapat direproduksi dan model dapat digunakan kembali di masa depan.\n",
"\n",
"- **Pipeline Model**: Pipeline TF-IDF + LinearSVC yang sudah terlatih.\n",
"- **Dataset Bersih**: Dataset final setelah preprocessing dan deduplikasi.\n",
"- **Metadata**: Informasi penting tentang proses (versi pustaka, seed, dll)."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "27641ea8",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:24.048501Z",
"iopub.status.busy": "2025-08-17T11:26:24.048145Z",
"iopub.status.idle": "2025-08-17T11:26:24.159887Z",
"shell.execute_reply": "2025-08-17T11:26:24.158673Z"
},
"papermill": {
"duration": 0.131831,
"end_time": "2025-08-17T11:26:24.161868",
"exception": false,
"start_time": "2025-08-17T11:26:24.030037",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pipeline model tersimpan di artefak/sentimen_tfidf_linearsvc.pkl\n",
"Dataset bersih tersimpan di artefak/dataset_clean.csv\n",
"Metadata tersimpan di artefak/run_metadata.json\n"
]
}
],
"source": [
"# 1. Simpan pipeline model\n",
"joblib.dump(best_model, 'artefak/sentimen_tfidf_linearsvc.pkl')\n",
"print(\"Pipeline model tersimpan di artefak/sentimen_tfidf_linearsvc.pkl\")\n",
"\n",
"# 2. Simpan dataset bersih\n",
"df_final.to_csv('artefak/dataset_clean.csv', index=False)\n",
"print(\"Dataset bersih tersimpan di artefak/dataset_clean.csv\")\n",
"\n",
"# 3. Simpan metadata\n",
"run_metadata = {\n",
" 'seed': SEED,\n",
" 'library_versions': {\n",
" 'pandas': pd.__version__,\n",
" 'sklearn': sklearn.__version__,\n",
" 'gensim': gensim.__version__\n",
" },\n",
" 'dataset_size': {\n",
" 'initial': len(df_raw),\n",
" 'after_cleaning': len(df_clean),\n",
" 'final_dedup': len(df_final)\n",
" },\n",
" 'split_size': {\n",
" 'train': len(X_train),\n",
" 'validation': len(X_val),\n",
" 'test': len(X_test)\n",
" },\n",
" 'best_model_params': grid_search.best_params_,\n",
" 'best_cv_f1_macro': grid_search.best_score_\n",
"}\n",
"\n",
"with open('artefak/run_metadata.json', 'w') as f:\n",
" json.dump(run_metadata, f, indent=4)\n",
"print(\"Metadata tersimpan di artefak/run_metadata.json\")"
]
},
{
"cell_type": "markdown",
"id": "e94cb646",
"metadata": {
"papermill": {
"duration": 0.016377,
"end_time": "2025-08-17T11:26:24.195679",
"exception": false,
"start_time": "2025-08-17T11:26:24.179302",
"status": "completed"
},
"tags": []
},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "06f1b8df",
"metadata": {
"papermill": {
"duration": 0.016824,
"end_time": "2025-08-17T11:26:24.228792",
"exception": false,
"start_time": "2025-08-17T11:26:24.211968",
"status": "completed"
},
"tags": []
},
"source": [
"## Bagian II: Pemodelan Topik (Unsupervised LDA)"
]
},
{
"cell_type": "markdown",
"id": "333b88c8",
"metadata": {
"papermill": {
"duration": 0.016522,
"end_time": "2025-08-17T11:26:24.261921",
"exception": false,
"start_time": "2025-08-17T11:26:24.245399",
"status": "completed"
},
"tags": []
},
"source": [
"### 18. Persiapan Korpus LDA\n",
"\n",
"Untuk LDA, kita memerlukan representasi data yang sedikit berbeda. Kita akan menggunakan seluruh korpus teks bersih (`text_bersih`) untuk membangun:\n",
"\n",
"- **Token**: Memecah setiap ulasan menjadi daftar kata-kata.\n",
"- **Kamus (Dictionary)**: Pemetaan unik dari setiap kata ke sebuah ID.\n",
"- **Korpus (Bag-of-Words)**: Representasi setiap dokumen sebagai daftar pasangan (ID kata, frekuensi).\n",
"\n",
"Kita juga akan melakukan penyaringan untuk menghapus kata-kata yang terlalu jarang atau terlalu sering muncul, yang biasanya tidak informatif untuk pemodelan topik."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "a138a96f",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:24.296994Z",
"iopub.status.busy": "2025-08-17T11:26:24.296620Z",
"iopub.status.idle": "2025-08-17T11:26:24.391730Z",
"shell.execute_reply": "2025-08-17T11:26:24.390600Z"
},
"papermill": {
"duration": 0.115076,
"end_time": "2025-08-17T11:26:24.393421",
"exception": false,
"start_time": "2025-08-17T11:26:24.278345",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mempersiapkan korpus untuk LDA...\n",
"Jumlah dokumen valid untuk LDA (setelah filter < 3 token): 2741\n",
"Ukuran kamus setelah filtering: 970\n",
"Persiapan korpus selesai.\n"
]
}
],
"source": [
"print(\"Mempersiapkan korpus untuk LDA...\")\n",
"# 1. Tokenisasi teks\n",
"texts_for_lda = [doc.split() for doc in df_final['text_bersih']]\n",
"\n",
"# Filter dokumen yang terlalu pendek\n",
"texts_for_lda_filtered = [text for text in texts_for_lda if len(text) >= 3]\n",
"print(f\"Jumlah dokumen valid untuk LDA (setelah filter < 3 token): {len(texts_for_lda_filtered)}\")\n",
"\n",
"# 2. Bangun Kamus\n",
"dictionary = Dictionary(texts_for_lda_filtered)\n",
"\n",
"# 3. Filter kata ekstrem\n",
"dictionary.filter_extremes(no_below=5, no_above=0.5) # Kata harus muncul min 5 kali, maks di 50% dokumen\n",
"print(f\"Ukuran kamus setelah filtering: {len(dictionary)}\")\n",
"\n",
"# 4. Bangun Korpus (Bag-of-Words)\n",
"corpus = [dictionary.doc2bow(text) for text in texts_for_lda_filtered]\n",
"\n",
"print(\"Persiapan korpus selesai.\")"
]
},
{
"cell_type": "markdown",
"id": "3c1f2f50",
"metadata": {
"papermill": {
"duration": 0.016668,
"end_time": "2025-08-17T11:26:24.426726",
"exception": false,
"start_time": "2025-08-17T11:26:24.410058",
"status": "completed"
},
"tags": []
},
"source": [
"### 19. Pencarian Jumlah Topik Optimal (Coherence c_v)\n",
"\n",
"Menentukan jumlah topik (k) yang tepat adalah langkah krusial dalam LDA. Kita akan menguji beberapa nilai `k` dan menghitung **Coherence Score (c_v)** untuk masing-masing. Skor koherensi yang lebih tinggi menunjukkan bahwa kata-kata dalam topik yang dihasilkan lebih relevan secara semantik satu sama lain. Kita akan memilih `k` yang memberikan skor koherensi tertinggi."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "3ed7ce34",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:26:24.462233Z",
"iopub.status.busy": "2025-08-17T11:26:24.461852Z",
"iopub.status.idle": "2025-08-17T11:27:28.063005Z",
"shell.execute_reply": "2025-08-17T11:27:28.061908Z"
},
"papermill": {
"duration": 63.621979,
"end_time": "2025-08-17T11:27:28.065539",
"exception": false,
"start_time": "2025-08-17T11:26:24.443560",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mencari jumlah topik optimal dengan Coherence Score (c_v)...\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "fcb5658587734a2a813f8d791d443079",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/6 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACbLElEQVR4nOzdeVhUZf8G8HsYGBZZZF/dANlBwH3fN9Q0Fc0k09xb3bKyrDDT+mVWlplbZmn5arhjmLmkGS64gYigILKKCLIJCMyc3x/IJILK4MAZ4P5cV9f7zpkzZ+5hHnC+8zzneySCIAggIiIiIiKiZ6IldgAiIiIiIqLGgMUVERERERGRGrC4IiIiIiIiUgMWV0RERERERGrA4oqIiIiIiEgNWFwRERERERGpAYsrIiIiIiIiNWBxRUREREREpAYsroiIiIiIiNSAxRUR1Uq/fv0wc+ZMsWMQPdVLL72E4cOHix2jRk6fPg1XV1eEhYWJHeWJ+vXrh3fffVfsGE+0c+dOuLq6IiUlReXHNqQxA1R9Pypee1RUVK2PeeDAAXTq1An37t1TbnN1dcWSJUue+Ljr16/Dw8MDcXFxtX5uooZMW+wARFQ/kpKSsGHDBpw8eRK3b9+Gjo4OXFxcMHToUIwfPx56enpiR2x0srOz8f333+Off/5BWloamjVrBnt7e3Tu3BmvvvoqmjVrJnZEjbdv3z5kZWVh8uTJojz/u+++i127dilvS6VSWFpawt/fH6+99hqcnZ1FydVQuLq6YuLEifjwww/FjlIvvv32W3z33XdP3a9Tp0745Zdf6iFR7cjlcnz77bcICgpS+e+Us7MzevfujVWrVtXoZ0HU2LC4ImoCjh07hrfeegsymQwjR46Ei4sLSktLce7cOXzxxRe4fv06PvnkE7FjNio5OTkYM2YMCgoKMGbMGDg6OiInJwexsbH47bffMGHCBBZXNbB//35cu3ZNtOIKAGQyGZYuXQqg/ENnUlIStm3bhhMnTiA0NBTW1taiZRNLWFgYJBKJ2DE0zsCBA9GyZUvl7cLCQnz88ccYOHAgBg4cqNxuYWGh1udV9/tx9OhR3LhxA+PHj6/V41944QXMmDEDSUlJlX4eRE0BiyuiRi45ORlz586FnZ0dNm/eDCsrK+V9EydOxM2bN3Hs2DHxAj5BWVkZFAoFZDKZ2FFU9vvvvyMtLQ2//fYb/P39K91XUFAAHR2destSWFgIAwODenu+xkZbWxsjR46stM3X1xczZ87E33//jXHjxj3zc1SM9YaiIf5O1gc3Nze4ubkpb2dnZ+Pjjz+Gq6trlTGkTup+P0JCQuDv71/rLw66desGExMT7Nq1C2+99ZZasxFpOp5zRdTIbdiwAYWFhfj0008rFVYVWrVqhZdffll5u6ysDKtXr8aAAQPg5eWFfv36YeXKlSgpKan2+BERERg7diy8vb3Rv39/7N69u8o+eXl5+PTTT9G7d294eXlh4MCBWLduXaUPkykpKXB1dcXGjRvx008/YcCAAfD29kZ8fDwAID4+Hm+++SY6deoEb29vjB49GocPH670PBXnGZw7dw7Lly9Hly5d4Ovri9deew3Z2dlVcv39998ICgqCn58f/P39MWbMGOzbt6/SPpcuXcLUqVPRvn17tGvXDkFBQTh37tzjf+APJCUlQSqVwtfXt8p9hoaG0NXVrfI806dPR8eOHeHr64sRI0Zg8+bNlfYJDw/Hiy++CF9fX3To0AGzZ89W/nwqfPvtt3B1dcX169cxf/58dOzYES+++KLy/j179mD06NHw8fFBp06dMHfuXKSnp1c6RmJiIt544w10794d3t7e6NWrF+bOnYv8/PwnvubHnYfz0ksv4aWXXlLerjiv6MCBA1izZg169eoFb29vvPzyy7h582alxx07dgypqalwdXWFq6sr+vXrB+Dx59NUHPv06dNPzPrPP/+gXbt2mDdvHsrKyp64b3UqZh6kUmml7eoY6wCgUCiwcuVKdO/eHb6+vpg1a1aV9ykiIgJvvvkm+vTpAy8vL/Tu3RvLli1DcXFxlbx//PEHAgIC4O3tjeHDh+PQoUN49913lT/PChs3bsQLL7yAzp07w8fHB6NHj672/K/annOlyvtWcd7T1atXERQUhHbt2mHgwIHKPGfOnEFgYCB8fHwwePBg/Pvvv099/r/++gszZsxAjx494OXlhQEDBmD16tWQy+XV7n/9+nW89NJLaNeuHXr27In169er/Jqro8rvcnx8PN566y34+/ujc+fOWLp0Ke7fv19p35q8H7m5uRg7dix69eqFhISEx+53//59nDhxAt26davRa/n+++/h5uZWaZmjjo4OOnXqVOVvNFFTwJkrokbu6NGjaNGiRZXZk8f54IMPsGvXLgwePBhTpkxBZGQk1q5di/j4eKxevbrSvjdv3sRbb72FsWPH4vnnn0dISAjeffddeHp6om3btgCAoqIiBAUFISMjAy+88AJsbW1x4cIFrFy5EpmZmXj//fcrHXPnzp24f/8+xo0bB5lMBhMTE1y7dg0TJkyAtbU1pk+fDgMDA/zxxx947bXX8O2331ZabgMAS5cuhbGxMV5//XWkpqZi8+bNWLJkCb7++utKz7No0SK0bdsWM2fOhJGREWJiYnDixAmMGDECQPkHoOnTp8PLywuvv/46JBIJdu7ciZdffhm//vorfHx8HvtztLe3h1wux549e/D8888/8Wd+8uRJzJw5E1ZWVpg0aRIsLCwQHx+PY8eOKQvff//9F9OnT4eDgwNef/11FBcXY8uWLZgwYQJ27twJBweHSsd866230KpVK8ydOxeCIAAA1qxZg2+++QZDhw7F2LFjkZ2djS1btmDixInYvXs3jI2NUVJSgqlTp6KkpARBQUGwsLBARkYGjh07hry8PBgZGT3xtahi/fr1kEgkeOWVV1BQUIANGzZgwYIF2LFjBwBg1qxZyM/Px61bt/Dee+8BgFqWUh49ehRvvvkmAgICsGzZsioFUnUqinOFQoHk5GSsWLECzZs3R9++fZX7qGOs5+XlASh/ryQSCaZPn46srCxs3rwZkydPxp49e5TnR4aFhaG4uBgTJkxA8+bNERkZiS1btuDWrVtYtWqV8nmOHTuGuXPnwsXFBfPnz0dubi7ef//9amclfv75Z/Tr1w8jRoxAaWkpQkND8dZbb2Ht2rXo06ePyj/rZ5Wbm4tZs2YhICAAQ4YMwW+//YZ58+ZBoVBg2bJleOGFFzB8+HBs3LgRb775Jo4dOwZDQ8PHHm/Xrl0wMDDAlClTYGBggFOnTmHVqlUoKCjAO++8U+W5p02bhoEDB2Lo0KE4ePAgVqxYARcXF/Tu3bvWr0nV3+U5c+bA3t4e8+fPx8WLF/HLL78gLy8P//d//1fj58zOzsYrr7yC3NxcbNmy5YlL9S5fvozS0lJ4eHg89bhfffUV1q5diyVLllSZwfX09MThw4dRUFDwxPeEqNERiKjRys/PF1xcXITZs2fXaP+YmBjBxcVFeP/99ytt/+yzzwQXFxchPDxcua1v376Ci4uLcPbsWeW2rKwswcvLS/jss8+U21avXi34+voKN27cqHTMFStWCO7u7kJaWpogCIKQnJwsuLi4CP7+/kJWVlalfV9++WVh+PDhwv3795XbFAqFMH78eGHQoEHKbSEhIYKLi4swefJkQaFQKLcvW7ZMcHd3F/Ly8gRBEIS8vDzBz89PCAwMFIqLiys9V8XjFAqFMGjQIOGVV16pdKyioiKhX79+wpQpU57wkxSEzMxMoUuXLoKLi4swZMgQ4cMPPxT27dunzFChrKxM6Nevn9C3b18hNze32iyCIAgjR44UunbtKty9e1e5LSYmRnBzcxMWLlyo3LZq1SrBxcVFmDdvXqVjpaSkCO7u7sKaNWsqbY+NjRU8PDyU269cuSK4uLgIf/zxxxNfX3X69u0rvPPOO1W2BwUFCUFBQcrbp06dElxcXIShQ4dWek83b94suLi4CLGxscptM2bMEPr27VvlmBXvdXJycqXtFcc+depUpecfNmyYIAiCcPDgQcHT01P44IMPBLlc/tTX9M477wguLi5V/uvZs6dw+fLlSvuqY6xX5O/Zs6eQn5+v3H7gwAHBxcVF2Lx5s3JbUVFRlbxr164VXF1dhdTUVOW24cOHC7169RIKCgqU206fPi24uLhU+dk+esySkhJh+PDhwqRJkyptf9x7/SgXFxchODhYeVvV983FxUXYt2+fclt8fLzg4uIiuLm5CRcvXlRuP3HihODi4iKEhIQ88bmq+5ktXrxYaNeuXaWxWPHcu3btUm67f/++0L17d+GNN9546uuukJWVJbi4uAirVq1SblP1d3nWrFmVjvnxxx8LLi4uQkxMjHLbo+9HxWuPjIwUbt++LQwbNkzo37+/kJKS8tTM27dvr/J7WOHh9/Ozzz4T3NzchJ07d1Z7nH379gkuLi7CpUuXnvqcRI0JlwUSNWIFBQUAav5t/99//w0AmDJlSqXtr7zySqX7Kzg7O6NDhw7K22ZmZmjTpg2Sk5OV28LCwtC+fXsYGxsjOztb+V+3bt0gl8tx9uzZSsccNGgQzMzMlLdzcnJw6tQpDB06FAUFBcrH3717Fz169EBiYiIyMjIqHWPcuHGVTu7u0KED5HI5UlNTAZTPFN27dw8zZsyosjyv4nExMTFITEzEiBEjcPfuXeXzFhYWomvXrjh79uwTz5GxsLDAnj178MILLyAvLw/btm3D/Pnz0bVrV6xevVo5m3TlyhWkpKRg0qRJMDY2rjbL7du3ERMTg+effx7NmzdX3u/m5oZu3bpVeV+A8hPKH3bo0CEoFAoMHTq00vtgYWGBVq1aKZdjVXzD/M8//6CoqOixr08dRo8eXelckYqx9PD4Uaf9+/dj7ty5GD9+PJYsWQItrZr9E6irq4tNmzZh06ZN2LhxI5YsWQIDAwPMmDEDN27cUO73rGP9YaNGjar0bf+QIUNgaWlZ6b1+uMNnYWEhsrOz4efnB0EQcOXKFQBARkYG4uLiMGrUqEp/Bzp16gQXF5cqz/vwMXNzc5Gfn4/27dsrj1ffDAwMMGzYMOVtR0dHGBsbw8nJCe3atVNur/j/Txs7D7++ir8nHTp0QFFRUZWlcgYGBpXOk5LJZPD29n6m8Vmb3+WJEydWuh0UFAQAOH78+FOfLyMjA0FBQSgtLcXWrVthb2//1Mfk5OQAAExMTKq9XxAELFmyBD///DO++OKLx87MV/w9u3v37lOfk6gx4bJAokas4sPZw9cpeZLU1FRoaWlVWTJiaWkJY2NjZXFSwdbWtsoxTExMkJubq7x98+ZNxMbGomvXrtU+56PnQj26JCYpKQmCIOCbb77BN998U+0xsrKyKi1xsrOzq3R/xT/yFUuukpKSAEC5dLE6iYmJAFBlqdDD8vPzH/sBBACsrKwQHByMjz/+GImJifjnn3+wfv16rFq1ClZWVggMDFR+UKvug26FtLQ0AECbNm2q3Ofk5IR//vmnStOKR3+OiYmJEAQBgwYNqvY5tLXL/zlo0aIFpkyZgk2bNmHfvn3o0KED+vXrh+eee06tSwKBp79P6pSSkoK3334bQ4YMweLFi1V6rFQqrXL+Se/evTFo0CCsXLkS3377LYBnH+sPa9WqVaXbEokErVq1qvQ7mJaWhlWrVuHIkSOVfueA/75YqRg71S0Da9WqVZWi6ejRo1izZg1iYmIqnWcpVmdAGxubKs9tZGQEGxubKtuAp4+da9eu4euvv8apU6eUP6MKj55TWN1zm5iYIDY2VqXX8LDa/C4/OhZatmwJLS2tGl2/6+2334a2tjYOHDgAS0tLlbJWfAH0qN27dyu7ID7pWmCPezxRY8fiiqgRMzQ0hJWVFa5du6bS42r6Qaom56ooFAp0794d06ZNq/b+1q1bV7r96PW2KmaHXnnlFfTs2bPaYzz6wfFxMxKq/GNfse/ChQvh7u5e7T417cAnkUjQpk0btGnTBn369MGgQYOwd+9eBAYG1jiPqh6dkVMoFJBIJFi/fn2179vDr+Xdd9/F888/j8OHD+PkyZNYunQp1q5di+3bt1f5UFsTcrm82ud8lvfpcWP0cbOJlpaWypmfqKgoeHt7P/U5nsTGxgZt2rSpNBv1rGNdFXK5HFOmTFGeF+To6AgDAwNkZGTg3XffrVXnwYiICMyePRsdO3bERx99BEtLS+jo6CAkJAT79++vddaHqfq+Pe5vzOO2P2ns5OXlISgoCIaGhnjzzTfRsmVL6OrqIjo6GitWrKiSoSZ/38SgSqE7aNAg7N69Gz///DPmz59fo8dUzKjl5uZW+/vu7++Pq1evYuvWrRg6dGilGbiHVRS6pqamNc5L1BiwuCJq5Pr27Yv//e9/uHDhAvz8/J64r729PRQKBW7evAknJyfl9jt37iAvL69GS0oe1bJlSxQWFta489SjWrRoAaC8+1Rtj1FdJqD8W+xHvxV+9HkNDQ3V9rwVxzU2NkZmZmal54mLi3vs81TM8Dy8BK1CQkICTE1Nn1rotWzZEoIgwMHBodpvzR9V0Z3v1Vdfxfnz5zFhwgT89ttvmDt37mMf83BDhoelpaUpX6eqHvdBsmKW69HZhkdnVyvo6upi7dq1ePnllzFt2jRs2bLliTOXNSGXy1FYWKi8/axj/WEPd00EyouGmzdvwtXVFUD5eElMTMTnn3+OUaNGKfc7efJkpcdVjJ2K2donPcfBgwehq6uLjRs3VlquGRIS8kyv5WGqvm/qdObMGeTk5OC7775Dx44dldtrMgOkLrX5Xb5582al35+bN29CoVA8ceazQlBQEFq2bIlVq1bByMgIM2bMeOpjHB0dAfzX1fJRrVq1wttvv41JkyZh2rRp+Omnn6ptWJGSkgItLa0a/b0hakx4zhVRIzdt2jQYGBjggw8+wJ07d6rcn5SUpGz5XdEB69EW4Js2bap0vyqGDh2KCxcu4MSJE1Xuy8vLe2obbHNzc3Tq1An/+9//cPv27Sr3V9di/Wl69OiBZs2aYe3atVVaGld88+3l5YWWLVvixx9/rHZZ5dOe99KlS5U+eFeIjIxETk6O8gOHp6cnHBwc8PPPP1cpTCqyWFlZwd3dHbt37660T1xcHE6ePFmj92XQoEGQSqX47rvvqny7LwiC8ryIgoKCKu+Ji4sLtLS0HtuOv0KLFi1w6dKlSvsdPXq0SgtxVejr61fbAr6iQH545kgul2P79u2PPZaRkRE2bNgAc3NzTJkypdqCo6Zu3LiBGzduVLqm0bOO9Yft3r270rK1sLAwZGZmolevXgD+m/V7+L0UBAE///xzpeNYW1vDxcUFu3fvrjSOz5w5g7i4uEr7SqVSSCSSSm3JU1JS1NpOuzbvm7pU9zMrKSnBr7/+WufPXaE2v8tbt26tdHvLli0AoBwLT/Paa6/hlVdewZdfflmj1+rl5QUdHR1cvnz5sfu4ublh3bp1iI+Px+zZs6tt/x8dHQ1nZ2e1Lycm0nScuSJq5Fq2bIkVK1Zg7ty5CAgIwMiRI+Hi4oKSkhJcuHABYWFhGD16NIDyfzCff/55/O9//0NeXh46duyIqKgo7Nq1CwMGDECXLl1Ufv6pU6fiyJEjmDVrFp5//nl4enqiqKgIcXFxOHjwIA4fPvzYk/orfPTRR3jxxRcxYsQIjBs3Di1atMCdO3dw8eJF3Lp1C3v37lUpk6GhId577z188MEHGDt2LIYPHw5jY2NcvXoVxcXF+Pzzz6GlpYWlS5di+vTpGD58OEaPHg1ra2tkZGTg9OnTMDQ0xA8//PDY59izZw/27dunvF6Yjo4O4uPjERISAl1dXcyaNQtA+Qe+jz/+GLNnz8aoUaMwevRoWFpaIiEhAdevX8fGjRsBlC9PnD59OsaPH4+xY8cq2zcbGRnh9ddff+prbtmyJebMmYMvv/wSqampGDBgAJo1a4aUlBT89ddfGDduHKZOnYpTp05hyZIlGDJkCFq3bq1sJy+VSjF48OAnPkdgYCAOHjyIadOmYejQoUhKSsK+ffue2Pb5aTw9PXHgwAEsX74c3t7eMDAwQL9+/dC2bVv4+vpi5cqVyM3NhYmJCQ4cOPDUAsbMzAybNm3ChAkTMHnyZPz2229PvVBqWVkZ9uzZA6D8g3lKSgq2bdsGhUKB1157TbmfOsZ6BRMTE7z44osYPXq0shV7q1atlO2uHR0d0bJlS3z++efIyMiAoaEhDh48WO3M4dy5c/Hqq69iwoQJGD16NPLy8rB161a4uLhUKrh69+6NTZs2Ydq0aRg+fDiysrLw66+/omXLls90ntHDavu+qYOfnx9MTEzw7rvv4qWXXoJEIsGePXvq/dwgVX+XU1JSMGvWLPTs2RMXL17E3r17MXz48EqF/dO88847KCgowJIlS9CsWbMnXtBYV1cXPXr0QHh4+BMvAOzr64vvv/8eM2bMwJtvvonVq1crL45eWlqKs2fPYsKECTXOSNRYsLgiagL69++PvXv3YuPGjTh8+DB+++03yGQyuLq64t133610fZKlS5fCwcEBu3btwl9//QULCwvMnDmzRh/gq6Ovr49ffvkFa9euRVhYGHbv3g1DQ0O0bt0ab7zxRo2+1XR2dkZISAi+++477Nq1Czk5OTAzM4OHh0elD7eqCAwMhLm5OdatW4fvv/8e2tracHR0xOTJk5X7dO7cGf/73//w/fffY8uWLSgsLISlpSV8fHwwfvz4Jx5//Pjx0NPTw6lTp3DkyBEUFBTA1NQU3bt3x8yZMytdQ6Znz57YvHkzVq9ejR9//BGCIKBFixaV3pdu3bphw4YNWLVqFVatWgVtbW107NgRb7/9do2X3M2YMQOtW7fGTz/9pLxmmY2NDbp37668mKyrqyt69OiBo0ePIiMjA/r6+nB1dcX69eurvSDyw3r27Il3330XmzZtwrJly+Dl5YUffvgBn3/+eY3yVefFF19ETEwMdu7ciZ9++gn29vbKrCtWrMCHH36IdevWwdjYGGPHjkXnzp2rdLt8lLW1NX766Se8+OKLmDJlCrZs2fLEoqekpAQLFy5U3jY0NIS3tze++OKLSs0r1DHWK8yaNQuxsbFYt24d7t27h65du+Kjjz6Cvr4+gPJlsj/88IPyfDhdXV0MHDgQEydOrPLBueJC4N9++y2+/PJLtG7dGsuXL8fu3bsrnY/ZtWtXfPrpp1i/fj2WLVsGBwcHLFiwAKmpqbUqriqKlkfPravt+/asTE1NlePx66+/hrGxMZ577jl07doVU6dOrdPnfpiqv8tff/01vvnmG3z55ZfQ1tZGUFBQpfFYU8HBwSgsLMSiRYvQrFkzDBgw4LH7jhkzBm+88QbS09OrbVxUoWvXrvj666/x5ptvYuHChfjyyy+hpaWF8PBw5OTkPPUaf0SNkURgOxciIqImZ+TIkcqZvLpQUFCA9u3bY/bs2ZgzZ06dPEdj9u233+K7775DeHh4jWc81UUulyMgIABDhw6t1Xv36quvQiKRVLnwPFFTwHOuiIiIGrHS0tIqy+5Onz6Nq1evolOnTnX2vFFRUQDKZ56pYZFKpXjrrbfw66+/1vhSHhXi4+Nx7NixJy4pJGrMuCyQiIioEcvIyMCUKVPw3HPPwcrKCgkJCdi2bRssLS2rXGxaHa5evYrw8HBs2rQJzZs3R58+fdT+HFT3AgICEBAQoPLjnJycRLvoNJEmYHFFRETUiJmYmMDT0xM7duxAdnY2DAwM0Lt3byxYsKBOrkF06NAhrFu3Dl5eXnjvvfeqbdNNRNRY8ZwrIiIiIiIiNeA5V0RERERERGrA4oqIiIiIiEgNeM5VNRQKBcrKyqClpQWJRCJ2HCIiIiIiEokgCFAoFNDW1q5y7b5HsbiqRllZmbKFLBERERERkbe3N2Qy2RP3YXFVjYqK1NvbG1KpVOQ05Rfzi4qK0pg8pNk4XkhVHDOkKo4ZUhXHDKlKk8ZMRZanzVoBLK6qVbEUUCqViv5mPkzT8pBm43ghVXHMkKo4ZkhVHDOkKk0aMzU5XYgNLYiIiIiIiNSAxRUREREREZEasLgiIiIiIiJSAxZXREREREREasDiioiIiIiISA1YXBEREREREakBiysiIiIiIiI1YHFFRERERESkBiyuiIiIiIiI1IDFFRERERERkRqwuCIiIiIiIlIDFldERERERERqwOKKiIiIiIhIDVhcEREREVGdkSsEnErIwomkIpxKyIJcIYgdiajOaIsdgIiIiIgap7DL6QjedwXpucXlG06fha2JHj4a4YEhXrbihiOqA5y5IiIiIiK1C7ucjtlbzv9XWD1wK7cYs7ecR9jldJGSEdUdjSiutm7din79+sHb2xuBgYGIjIx84v55eXkIDg5Gjx494OXlhcGDB+Pvv/9W3r927VqMGTMGfn5+6Nq1K1599VUkJCTU9csgIiIiIpQvBQzedwXVLQCs2Ba87wqXCFKjI3pxdeDAASxfvhyvvfYadu3aBTc3N0ydOhVZWVnV7l9SUoIpU6YgNTUV33zzDcLCwvDJJ5/A2tpauc+ZM2cwceJEbN++HZs2bUJZWRmmTp2KwsLC+npZRERERE3WmRvZVWasHiYASM8txpkb2fUXiqgeiH7O1aZNmzBu3DiMGTMGABAcHIxjx44hJCQEM2bMqLJ/SEgIcnNzsW3bNujo6AAAHBwcKu2zcePGSrc/++wzdO3aFdHR0ejYsWMdvRIiIiIiAoDb+Y8vrGqzH1FDIWpxVVJSgujoaMycOVO5TUtLC926dcOFCxeqfcyRI0fg6+uLJUuW4PDhwzAzM8Pw4cMxffp0SKXSah+Tn58PADAxMVEpn1wuV2n/ulKRQ1PykGbjeCFVccyQqjhm6ElyCkuw+3xKjfbdfjYJPvbGaGlmUMepqKHRpL8zqmQQtbi6e/cu5HI5zM3NK203Nzd/7DlSycnJOHXqFEaMGIF169YhKSkJwcHBKCsrw+uvv15lf4VCgWXLlsHf3x8uLi4q5YuKilJp/7qmaXlIs3G8kKo4ZkhVHDP0MEEQcCKpGJsu5SPvvqJGjzkZn40BK49jgKM+At0NYapf/Rfl1HQ1tL8zoi8LVJUgCDA3N8cnn3wCqVQKLy8vZGRkYOPGjdUWV8HBwbh27Rp+/fVXlZ/L29v7sbNh9UkulyMqKkpj8pBm43ghVXHMkKo4ZuhRiVn38OGeKzgZnwsAaGtliBE+tvjqr2sAUKmxheTB/y4c7IJ/E7Jx4todHIwvwt9J9/Fy11aY2csRJvo69fsCSONo0t+Ziiw1IWpxZWpqCqlUWqV5RVZWFiwsLKp9jKWlJbS1tSv9kB0dHZGZmYmSkhLIZDLl9iVLluDYsWPYsmULbGxsVM4nlUpFfzMfpml5SLNxvJCqOGZIVRwzdL9MjnV/J+Dbo9dRUqaArrYW3uzfFtN7OkKmrQUXG6PK17kCYPPQda5m9wVOJWTh/8Ku4nxSDtYev4FfzyRjVm8nTOneGgayBjcPQGrW0P7OiDpiZTIZPD09ER4ejgEDBgAoX8YXHh6OoKCgah/j7++P/fv3Q6FQQEurvNlhYmIiLC0tlYWVIAj45JNPcOjQIfzyyy9o0aJF/bwgIiIioibidEIW3t99GddvFwAAera1wNJRXmhl3ky5zxAvWwz0sMGp+EycvRyHjl4u6OJkCamWRLlPF0dzhMzuhsMxt7Hiz1hcvZWPLw7GYtPJRLzRzxkTOrWETFv0BtdENSL61wFTpkzBO++8Ay8vL/j4+GDz5s0oKirC6NGjAQALFy6EtbU15s+fDwCYMGECtmzZgk8//RRBQUG4efMm1q5di5deekl5zODgYOzfvx/ff/89mjVrhszMTACAkZER9PT06v9FEhERETUSd++VYPkfMdgeUd60wsJQF4uHu+O5dnaQSCRV9pdqSdDF0Rx6efrwdTSvVFhVkEgkGOBhjb5uVth3KQ0rD8UhKbsQH+2NxvoTCZg7wAWj/OyrfSyRJhG9uAoICEB2djZWrVqFzMxMuLu7Y8OGDcplgenp6coZKgCwtbXFxo0bsXz5cjz33HOwtrbGpEmTMH36dOU+v/32GwBUKrgAYPny5cqijYiIiIhqThAE7Dyfik8PxCD7XgkA4MXOLfHOYDeYGKjnHCmplgSj/OwR4G2L/0UkY9Xha0i5W4T5Oy5h7fF4zB/kikEe1tUWcUSaQPTiCgCCgoIeuwzwl19+qbLNz88P27dvf+zxYmNj1ZaNiIiIqKlLyCzAB7sv49/48vPkXa2NsGy0F9q3MquT55Npa+GlLq0w1t8BP/2biDXHriMuowAzfzkH3xbNsXCIK7o5VX9+PpGYNKK4IiIiIiLNc79Mjh+OJWD10esokSugp6OFt/q7YFrPNtCR1v15UPoyKWb3ccKLnVti3fF4/PhPIi4m5+DF9afRs60F3h7sCh+H5nWeg6imWFwRERERURXh8Vl4f3cUEjLvAQB6u1jik5FeaGle/xf8NdHXwduD3fByt9ZYfeQ6fj2ThBPX7uDEtTsY6mWD+YNc4GxlVO+5iB7F4oqIiIiIlLLvlWDZgRj8fq68YYWlkS4+GuGBYd62op/rZGWkh+CRXpjW0xFf/RWHXRdS8cflWzgYfQtj/B0wZ6AL7Jvri5qRmjYWV0REREQEQRDw+7kULDsQg7uFpZBIgKDOrbBgsKvGXdS3hZkBVo7zxcxeTljxZywOXcnAjnMp2HMxDRO7tMRrfZ1hYagrdkxqglhcERERETVx128X4P1dUTh9IxsA4GZjhGWjveHf0lTkZE/mamOE9ZM64HzSXXwRFovwhCxsOpmI7WeTMbVHG0zr5QhjPc0qDKlxY3FFRERE1EQVl8rx/bF4/HAsHiVyBfR1pJgzoC1e6VE/DSvUxb+lKX6d3hn/XL+DLw7GIjIlF6uOXMfPp27i1T5OmNS1NfR0pGLHpCaAxRURERFRE/Tv9Tt4f/dl3LhT3rCir6slloz0Qguz+m9YoQ4SiQQ921qih7MFwi7fwoo/YxGfeQ/LDlzFj/8k4s3+bRHYwaFBFY3U8LC4IiIiImpCsgru49PQGOy8kAoAsDLSxcfPeWKol43oDSvUQSKRYKi3LQZ6WGPnhVR889c1pOYUYdGuKKw/kYC5A10w3NsWWloN/7WS5mFxRURERNQECIKAHREpWPZHDHIeNKyY1KUV5g92bZTnJWlLtTCuQwuM9LXD1lNJWH30Om7cuYc3f7uAH47F4+3BrujjatkoCkrSHCyuiIiIiBq567fzsWjXZZx50LDC3dYYy0d7w7dFc3GD1QNdbSle6dEG4zq2wI//3MD64wm4kp6HKT+dRcfWplg4xA0dW5uJHZMaCRZXRERERI1Ucakcq49exw9/x6NULkBfR4r5g1wwuVtraDexc48MdbXxZv+2eKlLK6z5Ox6b/03E2cS7CPwhHH1dLbFgsCs87UzEjkkNHIsrIiIiokbon2t38MHuKCRmFQIABrhb4ePnPOFg2jAbVqiLaTMZFgW4Y0r31lh1+Dq2RyTjaGwmjsZmYkQ7O8wf6ILWFs3EjkkNFIsrIiIiokbkTsF9LN1/BbsvpgEAbIz18PFznhjsac3zix5ia6KP5aO9MaOXI1YeisO+S2nYdykNB6LSMb5jC7zZry1sTPTEjkkNDIsrIiIiokZAoRCwPSIZy/+4ityiUmhJgEldW2P+IBcYNcKGFerSxqIZvp3gh5m9HLHiz1gci83Er6eTEHIuBZO7tcas3k4wbSYTOyY1ECyuiIiIiBq4uIx8LNoZhYibdwEAXvbGWPa8N3wcmosbrAHxsjfBT1M64cyNbPxf2FVE3LyLtccT8OvpJMzo5YhXerRBM11+dKYn4wghIiIiaqCKS+VYdfga1h1PQJlCgIFMivmDXPFy11ZNrmGFunRqY4Yds7riWGwm/u9gLGLS8/DloThsDk/Ea32d8WLnltDVloodkzQUiysiIiKiBujvuEws3n0ZSdnlDSsGeVjj4+c8YddcX+RkDZ9EIkFfNyv0drHEvsg0rDwUh5tZhQjedwUbTtzAnAFtMdrfAVJeiJgeweKKiIiIqAG5nV+MpftjsPdSecMKW5OKhhU2IidrfLS0JBjpa48Ab1tsj0jGqsPXkJpThLd/j8Ta4wlYMMgFgz1t2CiElFhcERERETUACoWA384m4bM/riK/uAxaEmBytzaYN8gFhjwXqE7pSLUwsXMrjPF3wOZ/E7Hm73hcv12AWVvOo52DCd4e7IYebS3EjkkagL+JRERERBru6q08LNoZhfNJOQAAb3sTLB/tDS97XvS2PunpSDGztxMmdG6J9ccTsPGfG7iUkougjafRzckcC4e4wbdFc7FjkohYXBERERFpqKISOb45fA0bTpQ3rGgmk+Ltwa54qWtrnu8jImM9Hcwf5IpJXVtj9dHr+PV0Ev6Nz8Ko1ScxyMMaCwa7wsXaSOyYJAIWV0REREQa6GjsbSzefRkpd4sAAEM8bfDRcx6wNWHDCk1haaSLj5/zxLSebfD1X9ew83wK/rySgUMxGXjezx5zB7ighZmB2DGpHrG4IiIiItIgt/OKEbz/CkIj0wEA9s31EfycJwZ4WIucjB7HwdQAKwLbYWYvR3z5ZxzCom9h5/lU7LuUhhc7tcTr/drC0khX7JhUD1hcEREREWkAhULA1jNJ+L8/riL/fhmkWhK80r015gxw4cVrG4i21kb44aX2uJScgy8OxuKf63ewOfwmtkek4JUerTGjlxNM9HXEjkl1iL+pRERERCK7kpaHRbuicDE5BwDQrkVzLHveC552bFjRELVr0RxbpnXGv9fv4PODsbiUnIPVR+Ox5VQSZvV2wuRuraEv44WIGyMWV0REREQiKSwpw9d/XcPGf25ArhBgqKuNhUNcMbFzKzasaAS6OVtgt5M5/rySgRUHY3HtdgE+D7uKTSdv4M3+bTG+YwvoSLXEjklqxOKKiKgJkysEnErIwtmkIhQbZ6GLkyU/0BHVkyNXM7B4dzRSc8obVgR42+CjEZ6wNtYTORmpk0QiwWBPGwxwt8buC6lYeSgOqTlF+GD3Zaw/kYB5A10wwscOWvzb2yiwuCIiaqLCLqcjeN8VpOcWl284fRa2Jnr4aIQHhnjZihuOqBHLyCtG8L5oHIi6BaC8YcUnozzRz40NKxozqZYEY9o7YHg7W2w7k4xvj1zHzaxCvLXtItYci8fbg13Rz80KEgmLrIaM85BERE1Q2OV0zN5y/r/C6oFbucWYveU8wi6ni5SMqPGSKwRs/jcR/b/8GweibkGqJcHMXo44NK8XC6smRFdbipe7tcbxhX3w9mBXGOlp4+qtfEzdHIGxP4TjdEKW2BHpGXDmioioiZErBATvuwKhmvsEABIAwfuuYKCHDZcIEqlJdFouFu2MwqWUXACAb4vmWPa8NzzsjEVORmIxkGnjtb7OmNi5Jdb8HY+fTibi3M27GL/uFHq7WOLtwa7wsmdDk4aGxRURUSNVJlcgr7gMOYUlyCkqRW5hKXKKSnAxKafKjNXDBADpucU4cyMbXZ3M6y8wUSN0734ZvjoUh03/JkKuEGCkp42FQ9zwYqeW/PKCAADNDWR4b6g7XuneBqsOX8P/zibj77hM/B2XiWE+tpg/0AWOloZix6QaYnFFRKThSsoUyCkqeVAclSKnsBQ5hSXIrfj/RSXIKSytcju/uOyZnvf67XwWV0TP4K8rGfhwz2WkPfgyY7iPLT4c7gErNqygalgb6+HT570xo5cjVh6Kw95LaQiNTEfY5VsIbO+Atwa0ha2Jvtgx6SlYXBER1QNBEFBcqlAWPuXF0IP/X/TI7Qfbch/MOBWWyJ/puY10tWFioIPmBjpori9DmUKBUwnZT33c4j3R2B+ZjuE+thjiZQtLI91nykHUVKTnFuHjvdE4GJ0BAHAw1ccno7zQ19VK5GTUELQyb4ZvXvDDrN5OWHEwFoev3sa2s8nYeSEVk7q0wqt9nWHWTCZ2THoMFldERCoQBAEF98uqnSkqv13yUHH03305RaUoKVPU+nklEsBEXwfN9XVgYiBDc/2KYumR2wY6MNGXKe8z1tepcg0VuUJAj8+P4FZucbXnXQGAjlSCUrmA0zeycfpGNj7aG43ObcwxzMcWQ7xsYGHIQovoUXKFgJ/DE7HiYCzulcihrSXBtJ6OeKt/W14wllTmbmuMjZM7IiIxG/93MBZnbmRjwz83sO1sMqb1bINpPR1hqMuP8pqG7wgRNUlyhYD84tKHZo4eWmb3oCjKfei+/4qlUsgVjytJnk5bS/KgANJB8wdFkcmDGaX/iqP/7quYbTLS01bbNVCkWhJ8NMIDs7echwSoVGBVPMO3E/zg7dAcf0SlY39kOi4m5yA8IQvhCVn4cM9ldHUyxzBvOwz2tIY5Cy0iRKXkYtGuKESlljes8G/ZHMtGe8PNhg0r6Nl0aG2G/83ogr/jMvHFwVhEp+Xh67+u4efwm3i1jxOCurSCng6Ld03B4oqIGrRSuUJZFD1uWV11t/OKSyHUvkaCTFsLpg8KH5MHs0TlxZHsQXH0X8Fk8tB9zWRSjbiGyRAvW6wJ8q98nSsANo9c52paT0dM6+mI5OxC/HE5HaGR6biUkouT17Nw8noWFu+5jG5O5hjmbYvBnjYw5VIVamIK7pdh5Z9x+OnfG1AIgLGeNt4Z6oYJHVvyorCkNhKJBH1crdCrrSUOXE7Hyj/jkHDnHpaGxuDHf27grQFtMcbfAdpSXmVJbCyuiBoRuULAqYQsnE0qQrFxFro4WTaYblTFpfKHZo5Kql1WV+n2g2V4BfefrWlDM5m0ckH0yLK6SrcfKpgaw7eEQ7xsMdDDBqfiM3H2chw6erk8dsy0MDPAjF5OmNHLCUlZhTjwoNCKSs3FiWt3cOLaHby/+zK6O1tguLctBnlao7kBCy1q3A5G38LHe6OVX1A8184OHwx3h5URG1ZQ3dDSkmC4jx2GeNrg93Mp+ObwNaTlFuOdkCisPZ6A+QNdMdTLhoW9iFhcETUSYZfTK89CnD4L20dmIeqaIAgoLJH/t8zu4e52FcvsHtPdrri09ucjAeXfFjc3kFW7rK7KMrsHBZOJvg5k2k37Wz6plgRdHM2hl6cPX0fzGhXjLc0NMKu3E2b1dsLNrHsIjSovtKLT8nA8LhPH4zKxaJcEPdpaYJi3LQZ52MDEQKceXg1R/UjLKcJHe6Nx6Ep5w4qWZgZYOsoLvVwsRU5GTYW2VAsvdGqJUX722HLqJlYfvY6EzHt47dfz8LI3xtuD3dCrrYVGrJRoalhcETUCYZfTMXvL+SrNCW7lFmP2lvNYE+SvUoGlUAjIv19WzczRY7rbPXS7VF77tXZaEjxyHtKjy+we3H7o/zfX14GRnjaXQoiklXkzvNrHGa/2ccaNO/dw4ME5WjHpeTgWm4ljsZlYJI1Cz7aWGOZti4Ge1jDWY6FFDVOZXIGf/k3EykNxKHzQsGJmb0e80a9to5jNpoZHT0eKaT0dMb5jC2w4cQMbTiTgcmoeXv7xDLo4mmHhEDf4tzQVO2aTwuKKqIGTKwQE77tSbdc3AeUNChbviYa5oS4KisuqLKvLeeg8pNyHGjs8Q88G6Eglj8wcPbLM7pFmDeXbdGAoU1/TBqp/bSya4bW+znitrzPiMwtwIDIdoVHpuHorH0eu3saRq7ch26mFXi4WGOZjiwHu1jBioUUNRGRKDt7bGYXotDwAQIdWplg22hsu1kYiJyMCjPR0MHegCyZ1bYXvj8Xjl1M3cSohG6O//xcD3K2xYLALm6vUExZXRA3cmRvZlRoSPEoAkJl/H4E/hKt8bH0daeWGDA8VQs0fKpge7Xanr6MZTRtIPE6Whnijf1u80b8trt/OR2jkLeyPTMO12wX4K+Y2/oq5DZm2Fnq7WGK4jy36u1uzpTBppPziUnz5Zxx+Dk9UNqxYFOCOcR1a8Msg0jjmhrpYPNwDU3u0wTd/XcOOc8n4KyYDh69mYGQ7O8wb6IqW5gZix2zUNOJfsq1bt2Ljxo3IzMyEm5sbFi9eDB8fn8fun5eXh6+++gqHDh1CTk4O7O3tsWjRIvTu3RsAcPbsWWzcuBGXL19GZmYmVq9ejQEDBtTXyyGqV7fzH19YPczUQAf2pvpVu9vpP7LM7qHrI3GZC6mDs5UR3hpghLcGtEVcRj72R6YjNDIN8Zn3cOhKBg5dyYCuthb6uFpimI8d+rtZoRkLLRKZIAg4GH0LH+2NRkbefQDAKF87vD/MgxfUJo1n11wfn4/1wYzejlj5ZxxCo9Kx+2Ia9kemY0KnlnijnzOsjNl4pS6I/q/XgQMHsHz5cgQHB6Ndu3bYvHkzpk6dirCwMJibm1fZv6SkBFOmTIG5uTm++eYbWFtbIy0tDcbG/011FhYWwtXVFWPGjMHrr79eny+HqN7VtCvV9xPbo6tT1d8povrkYm2EeQONMHdAW8Rm5CM0srwZRsKdezgYnYGD0RnQ09FCX1crDPexQ183SxjIRP+nipqYlLuF+GhPNA5fvQ0AaG1ugKWjvNGjrYXIyYhU42RpiNUT/TErJRdf/BmL43GZ+OXUTew4l4wp3dtgVi8nNhxSM9H/xdq0aRPGjRuHMWPGAACCg4Nx7NgxhISEYMaMGVX2DwkJQW5uLrZt2wYdnfLB4ODgUGmf3r17K2exiBq7Tm3MYGuih1u5xdWedyVB+bWLOrUxq+9oRI8lkUjgZmMMNxtjzBvogpj0fIRGpSE0Mh2JWYX44/It/HH5FvR1pOjnboXh3rbo42oFfRlnU6nulMkV2HSyvGFFUakcOlIJZvV2wmt9nTmTTw2at4MJfn6lE04lZOH/wq7ifFIO1hyLx9ZTNzGztxOmdG/NL7LURNSfYklJCaKjozFz5kzlNi0tLXTr1g0XLlyo9jFHjhyBr68vlixZgsOHD8PMzAzDhw/H9OnTIZWq9w+fXC5X6/FqqyKHpuQhzbN4mBte+/Vile2Sh+6HoACHEFVHE/7GuFo3g6t1W8zt74wr6fk4EJWOA5dvISm7SDm7ZSCTop+bJQK8bNHbxYIfdkWkCWNG3S4m5+CD3dGIuZUPAOjY2hRLR3rC2coQQON6rWJojGOmIerYqjm2z+iMw1cz8eWhOMRlFOCLg7HYdPIGXu/rhPEdWmjMJUo0acyokkHU4uru3buQy+VVlv+Zm5sjISGh2sckJyfj1KlTGDFiBNatW4ekpCQEBwejrKxM7UsAo6Ki1Hq8Z6VpeUhzWAMY4WKAvXGFlbab6WvhFV9jWJfewsWLt8QJRw2GJv2NGWgNDLAyRkKOAf5NLsa/ycW4XSjH/shb2B95C3raEnS000U3Bz342uhCJmVjATFo0piprXulCvwaVYCD8YUQABjKJJjkY4S+rWUoSLuOi2liJ2xcGsOYaQwsACzt2Qz/JEmxLboAtwtK8PG+GHx/JA7jPQ3Rs6UepBrSmKqhjZkGN/8nCALMzc3xySefQCqVwsvLCxkZGdi4caPaiytvb2+1z4bVhlwuR1RUlMbkIc30zcUIAIUY4WMDJ/0itPdwRmdHixpdFJaaNk3+G+MHYAzK//ZHpeYh9MGMVlpOMU4klf9nqCvFAHdrBHjZoEdbC+hqyLeujZkmj5maEgQBf1zOwCdhMbidX96w4nk/O7w31A3mzWQip2t8GsOYaYza+wGzhymwPSIF3x2Nx+2C+/j2TC4O3pRj3oC2GOBuJVr3X00aMxVZakLU4srU1BRSqRRZWVmVtmdlZcHCovqTRi0tLaGtrV3ph+zo6IjMzEyUlJRAJlPfH0SpVCr6m/kwTctDmiM9twgnrt8BAMwZ0BY5ydfg62zJ8UIq0fS/MX6tzODXygzvD/PAxeQchEam40BUOtJyi7H7Yhp2X0yDka42BnpaY7iPLXo4W2rM8pbGStPHzOMkZxfiwz2XcTQ2E0D5Ndo+HeWFbs5sWFHXGuqYacz0pVK83L0NAju2wE//JuKHY/GIyyjArK0X4NeyOd4e7IpuTuL9bjS0MSNqcSWTyeDp6Ynw8HBlq3SFQoHw8HAEBQVV+xh/f3/s378fCoUCWlrl/2gmJibC0tJSrYUVUUOy83wqBAHo1NoMrc2b4WKy2ImI6o5EIoFfS1P4tTTFogB3XHio0LqVV4yd51Ox83wqjPS0MdjTBsN8bNHdyYKFFqFUrsDGf27g67/iUFyqgEyqhdl9nDC7jxPP4aMmz0CmjVf7OGNip1ZYezwem04m4kJSDl5cfxo921rg7cGu8HFoLnZMjSf6ssApU6bgnXfegZeXF3x8fLB582YUFRVh9OjRAICFCxfC2toa8+fPBwBMmDABW7ZswaeffoqgoCDcvHkTa9euxUsvvaQ85r1795CUlKS8nZKSgpiYGJiYmMDOzq5+XyBRHRMEATsiyqupwA4OT9mbqHHR0pKgfStTtG9lig+GueN80l3sf1Bo3c6/j9/PpeD3cykw0dfBYE9rDPOxQzcnc+hIWWg1Nedu3sX7u6Jw9UHDis5tzPDp897KhhVEVM7EQAcLh7hhcvfW+O7Idfx2Jgknrt3BiWt3MNTLBvMHufL35glEL64CAgKQnZ2NVatWITMzE+7u7tiwYYNyWWB6erpyhgoAbG1tsXHjRixfvhzPPfccrK2tMWnSJEyfPl25z+XLlzFp0iTl7eXLlwMAnn/+eXz22Wf19MqI6sfZxLtIzCpEM5kUAd62YschEo2WlgQdWpuhQ2szfDjcAxE37yI0Mg0HLt9CZv59bI9IwfaIFDQ30MGQBzNaXR3Noc1Cq1HLLSrFFwevYuvpJAhC+QXV3x/mgTH+9qKdS0LUEFgZ6WHJSC9M7+mIrw7FYdfFVPxx+RYORt/CGH8HzBnoAvvm+mLH1DgSQRCquzROkyaXy3Hx4kX4+vpqxBpPTctDmmXBjkv4/VwKxnVwwP+NbcfxQipr7GNGrhBwNjEboZHp+ONyOu4UlCjvMzXQwRAvWwz3sUXnNmYstGqoIYwZQRCwPzIdS/ZfQeaDhhVj2ztgUYA7zNiwot41hDFDTxZ7Kx8r/ozFoSsZAACZVAtBXVrhtb5OMDfUVfvzadKYUSWL6DNXRFR7BffLEBqZDgAY16GFyGmINJNUS4Iujubo4miOj5/zxOkbWQiNTEfY5VvIuleC384k4bczSTBvJsMQr/IZrc5tzNlpswFLyirEB3su43hcecMKR8tm+HSUN7o6mT/lkUT0OK42Rlg/qQPOJ93FF2GxCE/Iwo8nb+B/Z5MwtacjpvVsA2M9HbFjio7FFVEDdiAyHUWlcjhaNEP7VqZixyHSeFItCbo5WaCbkwWCn/PE6RvZ2B+ZjrDL6ci6V4Ktp5Ow9XQSLAx1MfRBodWxtRkLrQaiVK7A+hMJ+Oava7hfVt6w4rW+zpjVxxG62pwtIVIH/5am+HV6Z/xz/Q7+LywWUam5WHX4Gn4OT8RrfZzxUtdWTbpBDIsrogZs+4NGFmM7OPDcASIVaUu10N3ZAt2dLbBkpCdOJTyY0Yq+hTsF9/HLqZv45dRNWBrpIsDLBsN87NChlSm0WGhppIjEbCzaFYW4jAIAQDcncywd5QVHS554T6RuEokEPdtaooezBcIu38KKP2MRn3kPnx6IwcZ/buCtAW0R2N6hSS61ZnFF1EAlZBYg4uZdaEmAMf7sEkj0LHSkWujZ1hI921rik1Fe+Dc+C6GRaTgYnYHM/PvYHH4Tm8NvwtpYF0MfnKPl35KFlibILSzFZ2FX8duZ8i7BZs1k+GCYO573Y8MKoromkUgw1NsWAz2ssfNCKr756xpSc4rw3s4orDuegHkDXTDM27ZJ/a1kcUXUQO04lwIA6O1iCWtjPZHTEDUeOlIt9HaxRG8XSywdpcDJ+DsIjUzHwehbyMi7j5/+TcRP/ybCxlgPAd62GOZjC78WzZvUhwdNIAgC9l5Kwyf7ryiblIzv0ALvDnWDKRtWENUrbakWxnVogZG+dth6Kgmrj17HjTv38MZvF/DD3/FYMNgVfVwsm8QXHiyuiBqgMrkCIQ+KKzayIKo7Mm0t9HW1Ql9XK3z6vBdOXr+D/ZHpOBSdgVt5xfjx5A38ePIG7Ez+K7R8WzRvEh8gxHQz6x4+2H0ZJ67dAQA4WTbDsue90dmRDSuIxKSrLcUrPdpgXMcW2HjiBtafSEB0Wh6mbDqLTq3NsHCIKzq0NhM7Zp1icUXUAJ24dge38+/D1EAH/d2txY5D1CToakvRz80a/dyscb9MjhNxdxAalY5DVzKQlluMDf/cwIZ/bsC+uT6G+dhimLctfBxMWGipUUlZecOKVYcfNKzQ1sIbfZ0xozcbVhBpEkNdbbw1oC1e6toKa45dx+bwmziTmI2xP4Sjn5sVFgxyhYedsdgx6wSLK6IGqKKRxSg/e8i0m97JokRi09WWYoCHNQZ4WKO4VI7jcZkIjUrHX1cykJpThHXHE7DueAIcTMsLreHedvCyN2ah9QzO3MjG+7uicO12ecOKHs4WWDrKC60tmomcjIgex6yZDO8P88ArPdpg1eFr2B6RgiNXb+No7G2M8LHDvIEuje53mMUVUQOTfa8Ef8WUX8AvsD2XBBKJTU9HikGeNhjkaYPiUjmOxZYXWodjMpBytwhr/07A2r8T0NLMQDmj5WnHQqumcgpL8NkfV7HtbPmXShaGMnwwzAMjfe34MyRqIGxN9LF8tA+m93TEykNx2B+Zjr2X0nAgKh3jOrbAW/3bVjp/XK4QcCohC2eTilBsnIUuTpYN5pIYLK6IGpjdF1JRKhfgZW/caKfUiRoqPR0phnjZYIiXDYpK5DgWexv7o9JxJOY2krILseZYPNYci0dr84pCyw7utkYsEqohCAJ2X0zF0v0xyLpX3rBiQqcWeGeIG5obsGEFUUPkaGmI7170x6zeuVjxZyyOxWbi19NJCDmXgsndWmN2HyecSshC8L4rSM8tLn/Q6bOwNdHDRyM8MMTLVtwXUAMsrogaEEEQlEsC2ciCSLPpy6QY6m2Lod62KCwpw9GrmQiNSsORq7eRmFWI1UfjsfpoPBwtmpUXWj62cLVmoQUAN+7cwwe7o3DyehYAoK2VIZaN9kbHRn4iPFFT4WVvgp+mdMKZG9n4v7CriLh5F2uPJ2Dzv4koLlNU2f9WbjFmbzmPNUH+Gl9gsbgiakCi0/Jw9VY+ZNpaeK6dndhxiKiGDGTaygLq3v0yHLl6G6GR6TgaexsJd+7h2yPX8e2R63CybIZhPnYY7mMLF2sjsWPXu/tlcqz9OwHfHb2OkjIFdLW18Gb/tpje05HnlxI1Qp3amGHHrK44Gnsbn/9xFbEPLgL+KAGABEDwvisY6GGj0UsEWVwRNSAVs1aDPKy5LIaogWqmq40R7ewwop0dCu6X4XBMBkIj03EsLhPxmfew6vA1rDp8DS7WhhjmbYdhPjZwtmr8hdaphCy8vysK8Zn3AAA925Y3rGhl3rhOdieiyiQSCfq5WUNPW4oXN5x+7H4CgPTcYpy5kY2uTpp72QUWV0QNRHGpHLsvpALgkkCixsJQVxsjfe0x0tce+cWlOBxzG/sj03E8LhNxGQWIy4jDV3/Fwc3GCMO8bRHgYwsnS0OxY6vV3XslWHYgRnlhdAtDXXw4wgMjfGy5RJKoCcksuF+j/W7nF9dxkmfD4oqogTh0JQN5xWWwNdFDd2cLseMQkZoZ6elglJ89RvnZI6+4FH9dKZ/ROn4tE1dv5ePqrXx8eSgO7rbGGO5jiwBvW7RpwC2MBUFAyPlULDsQg+wHDSte7NwS7wx2g4mBjsjpiKi+WRnpPX0nFfYTC4srogaiYkng2PYOGr3WmIienbGeDkb7O2C0vwNyi0px6EoGQiPTcOLaHcSk5yEmPQ9fHIyFp52xsr17Q1o+F59ZgPd3ReFUQjYAwNXaCMtGe6F9KzasIGqqOrUxg62JHm7lFkOo5n4JABsTPXRqo9l/J1hcETUAaTlF+Of6HQDlxRURNR0m+joY294BY9s7IKewBH8+mNE6ef0OotPyEJ2Wh/8Li4W3vYmy0GphZiB27GrdL5NjzbF4fH80HiVyBfR0tPBWfxdM69kGOlI2rCBqyqRaEnw0wgOzt5yHBKhUYFV8pfzRCA+N/4KZxRVRAxByLgWCAHRuY9agvp0mIvVqbiDDuA4tMK5DC9y9V4I/r9zC/sh0/BufhajUXESl5uKzP66inUN5oRXgbQsHU80otP6Nv4MPdl1Gwp3yhhW9XSyxdJSXxhaCRFT/hnjZYk2Qf+XrXKF8xorXuSIitVAoBOWJ3mxkQUQVTJvJML5jS4zv2BLZ90pwMPoWQiPT8W/8HVxKycWllFwsO3AVvi2aY7hP+fW27Jvr13vO7Hsl+DQ0BiHny/+OWRrp4qMRHhjmzYYVRFTVEC9bDPSwwan4TJy9HIeOXi7o4mSp8TNWFVhcEWm4M4nZSMouhKGuNoZ624gdh4g0kFkzGSZ0aokJnVriTsF9ZaF1KiELF5NzcDE5B0tDY+DfsjmG+dghwNsGtiZ1W2gJQvkXQ8sOxCCnsBQSCRDUuRUWDHaFiT4bVhDR40m1JOjiaA69PH34Opo3mMIKYHFFpPEqGlkM97GFgYy/skT0ZBaGupjYuRUmdm6FzPz7CLucjv2R6TiTmI3zSTk4n5SDT/ZfQYdWphjmY4uhXrawMVFv963rt8sbVpy+Ud6wws3GCMtHe8Ovpalan4eISNPwkxqRBssvLsWBqHQAQCCXBBKRiiyNdPFS19Z4qWtr3M4rxh+Xy2e0zt7MRsTNu4i4eRdL9l9Bx1ZmDwotG1gZ177QKi6V4/uj17Hm73iUygXo60gxd2BbTOnOhhVE1DSwuCLSYKGR6SguVcDRshn8WzYXOw4RNWBWxnp4uVtrvNytNW7lFuOPy+kIjUxHxM27OJOYjTOJ2fh4XzQ6tTbDcB9bDPayqfZ6MnKFgFMJWTibVIRi4yzluRAnr9/BB7sv48aDhhX93KwQ/JwnG1YQUZPC4opIg1UsCRzXoQVP/CYitbEx0cOU7m0wpXsbpOcW4UDULYRGpuF8Ug5O38jG6RvZ+GhvNDq3MccwH1sM8bKBhaEuwi6nV+7idfosrIx00dqiGc48WAJoZaSL4Oc8McTLhn+3iKjJYXFFpKGu3y7A+aQcSLUkGO1nL3YcImqkbE30MbVHG0zt0QapOUX4I6r8HK2LyTkIT8hCeEIWPtxzGS7Whrh6q6DK42/n38ft/PsAgJe7tsL8wa4w1mPDCiJqmlhcEWmoHefKZ636uFg+0zkQREQ1Zd9cH9N6OmJaT0ckZxcqlw5eSsmttrB6mIWhDB+O8GxQXb2IiNSNZ5cSaaAyuQI7z6cCYCMLIhJHCzMDzOjlhD2v98CqF3yfuv+dghLl0kAioqaKxRWRBvo7LhOZ+fdh1kyGfm5WYschoiZOqOF+t/OL6zQHEZGmY3FFpIEqGlk872cPmTZ/TYlIXNV1DXyW/YiIGit+aiPSMFkF93E45jaA8i6BRERi69TGDLYmenjc2VQSALYmeujUxqw+YxERaRwWV0QaZteFVJQpBPg4mMDVxkjsOEREkGpJ8NEIDwCoUmBV3P5ohAebWRBRk8fiikiDCIKAHREpANjIgog0yxAvW6wJ8oeNSeWlfzYmelgT5I8hXrYiJSMi0hxsxU6kQaJScxGbkQ9dbS08185O7DhERJUM8bLFQA8bnIrPxNnLcejo5YIuTpacsSIieoDFFZEGqWhkMdjTBib6vAgnEWkeqZYEXRzNoZenD19HcxZWREQP4bJAIg1RXCrHnotpANjIgoiIiKghYnFFpCEORt9CfnEZ7Jvro5uTudhxiIiIiEhFLK6INERFI4sx7R2gxWU2RERERA0OiysiDZBytxAn4+8AAALbO4ichoiIiIhqg8UVkQYIOZcKQQC6OpqjhZmB2HGIiIiIqBZYXBGJTKEQsONceZfAcR05a0VERETUULG4IhLZqRtZSLlbBCNdbQzx5EU4iYiIiBoqFldEIqtoZDG8nR30ZVKR0xARERFRbWlEcbV161b069cP3t7eCAwMRGRk5BP3z8vLQ3BwMHr06AEvLy8MHjwYf//99zMdk0gMecWl+ONyOgBgXAcuCSQiIiJqyEQvrg4cOIDly5fjtddew65du+Dm5oapU6ciKyur2v1LSkowZcoUpKam4ptvvkFYWBg++eQTWFtb1/qYRGLZfykdxaUKOFsZwrdFc7HjEBEREdEzEL242rRpE8aNG4cxY8bA2dkZwcHB0NPTQ0hISLX7h4SEIDc3F6tXr0b79u3h4OCATp06wc3NrdbHJBLL9ogHjSw6OEAi4bWtiIiIiBoybTGfvKSkBNHR0Zg5c6Zym5aWFrp164YLFy5U+5gjR47A19cXS5YsweHDh2FmZobhw4dj+vTpkEqltTrm48jl8tq9MDWryKEpeUg9rt0uwMXkHEi1JBjZzlZt7y/HC6mKY4ZUxTFDquKYIVVp0phRJYOoxdXdu3chl8thbm5eabu5uTkSEhKqfUxycjJOnTqFESNGYN26dUhKSkJwcDDKysrw+uuv1+qYjxMVFaXaC6pjmpaHns3mS3kAAH8bGVKuxyBFzcfneCFVccyQqjhmSFUcM6SqhjZmRC2uakMQBJibm+OTTz6BVCqFl5cXMjIysHHjRrz++utqfS5vb29IpeJ3b5PL5YiKitKYPPTsSuUKnDxwDAAwta8HfD2sn/wAFXC8kKo4ZkhVHDOkKo4ZUpUmjZmKLDUhanFlamoKqVRapdFEVlYWLCwsqn2MpaUltLW1K/2QHR0dkZmZiZKSklod83GkUqnob+bDNC0P1d6R2DvIulcCC0MZ+nvYQCpV/+mPHC+kKo4ZUhXHDKmKY4ZU1dDGjKgNLWQyGTw9PREeHq7cplAoEB4eDj8/v2of4+/vj6SkJCgUCuW2xMREWFpaQiaT1eqYRPWtopHF83720KmDwoqIiIiI6p/on+qmTJmC7du3Y9euXYiPj8fHH3+MoqIijB49GgCwcOFCfPnll8r9J0yYgJycHHz66ae4ceMGjh07hrVr12LixIk1PiaRmDLz7+Po1dsAgMAOLUROQ0RERETqIvo5VwEBAcjOzsaqVauQmZkJd3d3bNiwQbmELz09HVpa/9WAtra22LhxI5YvX47nnnsO1tbWmDRpEqZPn17jYxKJafeFVJQpBLRr0Rwu1kZixyEiIiIiNRG9uAKAoKAgBAUFVXvfL7/8UmWbn58ftm/fXutjEolFEIRK17YiIiIiosZD9GWBRE3JpZRcXLtdAF1tLYxoZyd2HCIiIiJSIxZXRPWoYtZqqJcNjPV0RE5DREREROrE4oqonhSVyLHvYhoAYBwbWRARERE1OiyuiOrJwehbyL9fBgdTfXRxNBc7DhERERGpGYsronpSsSRwbHsHaGlJRE5DREREROrG4oqoHiRnF+Lf+CxIJOXFFRERERE1PiyuiOrB7+dSAADdnMzhYGogchoiIiIiqgssrojqmEIhKIsrNrIgIiIiarxYXBHVsfCELKTmFMFITxuDPW3EjkNEREREdYTFFVEdq2hk8Vw7O+jpSEVOQ0RERER1hcUVUR3KLSpF2OVbALgkkIiIiKixY3FFVIf2XUrD/TIFXKwN4eNgInYcIiIiIqpDLK6I6tCOB0sCx3VoAYmE17YiIiIiasxYXBHVkdhb+biUkgttLQlG+dmLHYeIiIiI6hiLK6I6UjFr1c/NChaGuiKnISIiIqK6xuKKqA6UyhXYdSEVABtZEBERETUVLK6I6sCRq7eRda8EFoa66ONqKXYcIiIiIqoHLK6I6kDFksAx/vbQlvLXjIiIiKgp4Kc+IjW7nV+Mo7GZAIDADg4ipyEiIiKi+sLiikjNdp1PhVwhwK9lczhbGYkdh4iIiIjqibaqD0hOTsa5c+eQmpqK4uJimJmZwd3dHX5+ftDVZUc0atoEQcD2h65tRURERERNR42Lq7179+Lnn3/G5cuXYWFhASsrK+jq6iI3NxdJSUnQ1dXFiBEjMH36dNjb85o+1DRdSM5BfOY96OloYbiPrdhxiIiIiKge1ai4GjVqFHR0dPD888/j22+/ha1t5Q+NJSUluHDhAkJDQzFmzBh89NFHGDp0aJ0EJtJkFY0sArxsYaSnI3IaIiIiIqpPNSqu5s+fj549ez72fplMhs6dO6Nz586YO3cuUlNT1RaQqKEoKpFj36V0AEAglwQSERERNTk1Kq6eVFg9ytTUFKamprUORNRQ/XE5HQX3y9DCTB+d25iJHYeIiIiI6pnK3QInT56MnTt3oqCgoC7yEDVYFY0sAtu3gJaWROQ0RERERFTfVC6unJ2dsXLlSnTv3h1vvvkm/vrrL5SWltZFNqIGIymrEKcSsiGRAGPa89pWRERERE2RysXVBx98gOPHj2P16tUwMDDAO++8g+7du2Px4sU4c+ZMXWQk0ni/nyufterhbAH75voipyEiIiIiMdTqIsJaWlro0aMHPvvsM/z7778IDg5GZGQkXn75ZXXnI9J4coWA38+lAGAjCyIiIqKmTOWLCD8sMzMToaGh2Lt3L2JjY+Hj46OuXEQNxr/xd5CWWwxjPW0M8rAWOw4RERERiUTl4qqgoAAHDx7E/v37cebMGTg4OGDEiBH4+uuv0bJly7rISKTRtkeUz1qN9LWHno5U5DREREREJBaVi6tu3brB2NgYAQEBmDdvHry9vesiF1GDkFtYioPRtwAA47gkkIiIiKhJU7m4WrNmDbp27QotrSefrnXu3Dl4e3tDJpPVOhyRptt7KRUlZQq42RjBy95Y7DhEREREJCKVG1p07979qYUVAEyfPh0ZGRm1CkXUUFQsCQzs0AISCa9tRURERNSU1apbYE0IglBXhybSCDHpeYhKzYWOVIJRvnZixyEiIiIikdVZcUXU2O14MGvV380a5oa6IqchIiIiIrGxuCKqhZIyBXZfTAUAjOvoIHIaIiIiItIELK6IauHI1Qxk3yuBlZEuerW1FDsOEREREWmAOiuueHI/NWYVjSxG+ztAW8rvKIiIiIiIDS2IVJaRV4xjsbcBAIEduCSQiIiIiMqpfJ2r5ORkyOVytG7dutL2xMREaGtrw8Gh/MPmhQsX1BKQSNPsPJ8KhQC0b2UKJ0tDseMQERERkYZQeebqvffeq7ZwunTpEt577z21hCLSVIIgYEdEMgBgHGetiIiIiOghKhdXV65cgb+/f5Xtvr6+iImJqVWIrVu3ol+/fvD29kZgYCAiIyMfu+/OnTvh6upa6T9vb+9K+9y5cwfvvvsuevTogXbt2mHq1KlITEysVTaih51PuouEO/egryPFMB9e24qIiIiI/qPyskCJRIJ79+5V2Z6fnw+5XK5ygAMHDmD58uUIDg5Gu3btsHnzZkydOhVhYWEwNzev9jGGhoYICwurlKmCIAh47bXXoK2tje+//x6Ghob46aefMGXKFISGhsLAwEDljEQVtp8tb2QR4G0LQ12Vf32IiIiIqBFT+dNhx44dsXbtWqxcuRJSqRQAIJfLsW7dOrRv317lAJs2bcK4ceMwZswYAEBwcDCOHTuGkJAQzJgxo9rHSCQSWFpW3/46MTERFy9exP79+9G2bVsAwMcff4zu3bsjNDQUgYGBNc5Wm2KxLlTk0JQ8TVVhSRn2R6YBAMb622ns+8HxQqrimCFVccyQqjhmSFWaNGZUyaBycbVgwQJMnDgRQ4YMQYcOHQAAERERKCgowObNm1U6VklJCaKjozFz5kzlNi0tLXTr1u2JDTEKCwvRt29fKBQKeHh4YN68ecpCqqSkBACgq6tb6ZgymQznzp1TqbiKiopS6fXUNU3L09QcTSzCvRI5bJpJoZNzExcvJokd6Yk4XkhVHDOkKo4ZUhXHDKmqoY0ZlYsrZ2dn7N27F1u3bsXVq1ehp6eHkSNHIigoCM2bN1fpWHfv3oVcLq+y/M/c3BwJCQnVPqZNmzZYtmwZXF1dkZ+fjx9//BEvvPACQkNDYWNjA0dHR9jZ2eHLL7/EkiVLoK+vj59++gm3bt1CZmamSvm8vb2Vs3NiksvliIqK0pg8TdXnZ08DAF7s6gg/PyeR0zwexwupimOGVMUxQ6rimCFVadKYqchSE7U6acTa2hrz5s2rzUOfmZ+fH/z8/CrdDggIwLZt2zBnzhzo6Ojg22+/xfvvv49OnTpBKpWia9eu6NWrl8rX3pJKpaK/mQ/TtDxNSeKdeziTeBcSCRDYsUWDeB84XkhVHDOkKo4ZUhXHDKmqoY2ZGhVXaWlpsLOreWe0jIwMWFtbP3U/U1NTSKVSZGVlVdqelZUFCwuLGj2Xjo4O3N3dkZT03xItLy8v7NmzB/n5+SgtLYWZmRkCAwPh5eVV49dA9LDfz5U3sujZ1hK2JvoipyEiIiIiTVSjVuxjx47Fhx9++MQW6fn5+di+fTuGDx+OgwcP1ujJZTIZPD09ER4ertymUCgQHh5eaXbqSeRyOeLi4qptcGFkZAQzMzMkJibi8uXL6N+/f42OSfQwuUJAyPny4orXtiIiIiKix6nRzFVoaCh++OEHvPLKK9DV1YWnpyesrKygq6uL3NxcxMfH49q1a/D09MTbb7+N3r171zjAlClT8M4778DLyws+Pj7YvHkzioqKMHr0aADAwoULYW1tjfnz5wMAvvvuO/j6+qJVq1bIy8vDxo0bkZaWVqlRxR9//AEzMzPY2dkhNjYWy5Ytw4ABA9CjRw9VfjZEAIB/rt9Bem4xmhvoYKDH02dkiYiIiKhpqlFxZWpqivfeew9z587FsWPHcO7cOaSlpaG4uBimpqYYMWIEevToARcXF5UDBAQEIDs7G6tWrUJmZibc3d2xYcMG5bLA9PR0aGn9N8GWl5eHxYsXIzMzEyYmJvD09MS2bdvg7Oys3CczMxOfffYZsrKyYGlpiZEjR+LVV19VORsRAGyPSAYAjGxnB13thrPml4iIiIjql0oNLfT09DBkyBAMGTJErSGCgoIQFBRU7X2//PJLpduLFi3CokWLnni8SZMmYdKkSWrLR01XTmEJDkVnAAACO7QQOQ0RERERabIanXNF1FTtuZiGErkC7rbG8LI3ETsOEREREWkwFldET1CxJJCNLIiIiIjoaVhcET1GdFouotPyIJNqYZSvvdhxiIiIiEjDsbgieowdEeXt1wd4WMG0mUzkNERERESk6VhcEVXjfpkcey6mAmAjCyIiIiKqmVoVV7t378YLL7yAHj16IDW1/APoTz/9hL/++kut4YjEcjjmNu4WlsLaWBe92la9QDURERER0aNULq5+/fVXfPbZZ+jduzfy8/OhUCgAAMbGxti8ebPaAxKJoaKRxRh/B0i1JCKnISIiIqKGQOXiasuWLVi6dClmz55d6eK+Xl5eiIuLU2s4IjHcyi3G8bhMAFwSSEREREQ1p3JxlZKSAnd39yrbZTIZioqK1BKKSEwh51OgEICOrU3RxqKZ2HGIiIiIqIFQubhycHBATExMle0nTpyAk5OTWkIRiUUQBPx+rrxLIGetiIiIiEgV2qo+YMqUKViyZAlKSkoAAJGRkdi/fz/WrVuHpUuXqj0gUX2KuHkXN+7cg4FMimHetmLHISIiIqIGROXiKjAwELq6uvj6669RVFSE+fPnw8rKCosWLcKwYcPqIiNRvdl+tryRxTBvWzTTVfnXg4iIiIiaMJU+PZaVlWH//v3o0aMHnnvuORQVFaGwsBDm5uZ1lY+o3ty7X4bQqHQAwLiOXBJIRERERKpR6ZwrbW1tfPTRR7h//z4AQF9fn4UVNRqhUekoLJGjjUUzdGhlKnYcIiIiImpgVG5o4ePjU21DC6KGbseDa1uNbe8AiYTXtiIiIiIi1ah8UsmECRPw2Wef4datW/D09IS+vn6l+93c3NQWjqi+JGQW4GziXWhJyi8cTERERESkKpWLq3nz5gFApc6AEokEgiBAIpFwVosapIr2671cLGFjoidyGiIiIiJqiFQurg4fPlwXOYhEI1cICDlfXlyN47WtiIiIiKiWVC6u7O3t6yIHkWiOX8tERt59mBrooL+7ldhxiIiIiKiBqtWFfJKSkrB582bEx8cDAJydnTFp0iS0bNlSreGI6kNFI4uRvvbQ1ZaKnIaIiIiIGiqVuwWeOHECAQEBiIyMhKurK1xdXXHp0iUMGzYMJ0+erIuMRHUm+14JDl3JAMAlgURERET0bFSeufryyy8xefJkLFiwoNL2FStWYMWKFejevbvawhHVtT0XU1EqF+BpZwwPO2Ox4xARERFRA6byzFV8fDzGjh1bZfuYMWNw/fp1tYQiqi87ItjIgoiIiIjUQ+XiyszMrNp26zExMTA3N1dLKKL6cDk1F1fS8yCTamGkr53YcYiIiIiogVN5WWBgYCA+/PBDJCcnw9/fHwBw/vx5rF+/HpMnT1Z3PqI6U9HIYqCnNZobyEROQ0REREQNncrF1WuvvQZDQ0P8+OOPWLlyJQDAysoKr7/+OiZNmqT2gER1obhUjt0X0wBwSSARERERqYfKxZVEIsHkyZMxefJkFBQUAAAMDQ3VHoyoLv0Vk4HcolLYmuihh7OF2HGIiIiIqBFQubhKTk6GXC5H69atKxVViYmJ0NbWhoODg1oDEtWF7Q8aWYzxd4BUSyJyGiIiIiJqDFRuaPHee+/hwoULVbZfunQJ7733nlpCEdWltJwinLiWCQAY255fBhARERGReqhcXF25ckXZyOJhvr6+1XYRJNI0O8+nQBCATm3M0NqimdhxiIiIiKiRULm4kkgkuHfvXpXt+fn5kMvlaglFVFcEQcCOc7y2FRERERGpn8rFVceOHbF27dpKhZRcLse6devQvn17tYYjUrczN7JxM6sQzWRSBHjbiB2HiIiIiBoRlRtaLFiwABMnTsSQIUPQoUMHAEBERAQKCgqwefNmtQckUqeKRhbDfexgIFN5+BMRERERPZbKM1fOzs7Yu3cvhg4diqysLNy7dw8jR47EH3/8ARcXl7rISKQWBffLcCAqHQAwriMbWRARERGRetXqq3tra2vMmzdP3VmI6lRoZBqKSuVwtGwG/5amYschIiIiokamxsVVdnY2ioqKYG9vr9x27do1/PjjjygsLMSAAQMwYsSIOglJpA47HiwJDGzfAhIJr21FREREROpV42WBS5cuxS+//KK8nZWVhYkTJyIqKgolJSV47733sHv37rrISPTM4jMLEHHzLqRaEozxt3/6A4iIiIiIVFTj4urixYvo16+f8vbu3bthYmKC3bt3Y82aNZg7dy5+/fXXOglJ9KwqZq16u1jCylhP5DRERERE1BjVuLi6c+dOpSWBp06dwsCBA6GtXb6ysF+/frh586b6ExI9ozK5AjvPV1zbio0siIiIiKhu1Li4MjQ0RH5+vvJ2ZGQk2rVrp7wtkUhQUlKi3nREanD8WiZu59+HWTMZ+rlZix2HiIiIiBqpGhdX7dq1w88//wyFQoGwsDDcu3cPXbp0Ud6fmJgIGxtelJU0z/az5bNWo3ztIdNW+eoDREREREQ1UuNugW+99RYmT54MHx8fyOVyzJw5EyYmJsr7Q0ND0bFjx1qF2Lp1KzZu3IjMzEy4ublh8eLF8PHxqXbfnTt34r333qu0TSaTISoqSnn73r17+PLLL/HXX38hJycHDg4OeOmllzBhwoRa5aOGK6vgPg5fzQDAa1sRERERUd2qcXHl5uaGAwcO4Pz587C0tKy0JBAAhg0bBicnJ5UDHDhwAMuXL0dwcDDatWuHzZs3Y+rUqQgLC4O5uXm1jzE0NERYWJjy9qNttT/77DOcOnUKX3zxBezt7XHy5EkEBwfDysoK/fv3VzkjNVy7L6ahVC7A294EbjbGYschIiIiokZMpTVSZmZmGDBgQJXCCgD69OmDFi1aqBxg06ZNGDduHMaMGQNnZ2cEBwdDT08PISEhj32MRCKBpaWl8j8LC4tK91+4cAGjRo1C586d4eDggPHjx8PNzQ2RkZEq56OGSxAE7IhIBsBGFkRERERU92o8c1UXSkpKEB0djZkzZyq3aWlpoVu3brhw4cJjH1dYWIi+fftCoVDAw8MD8+bNQ9u2bZX3+/n54ciRIxg7diysrKxw+vRp3Lhxo8pywqeRy+Wqv6g6UJFDU/I0FFGpubh6Kx8ybS0M87ZpMj8/jhdSFccMqYpjhlTFMUOq0qQxo0oGUYuru3fvQi6XV1n+Z25ujoSEhGof06ZNGyxbtgyurq7Iz8/Hjz/+iBdeeAGhoaHKhhqLFy/G4sWL0atXL2hra0MikWDp0qUqnxP28HlcmkDT8mi69efzAAAdbWW4ERstcpr6x/FCquKYIVVxzJCqOGZIVQ1tzIhaXNWGn58f/Pz8Kt0OCAjAtm3bMGfOHADAL7/8gosXL2LNmjWws7NDRESE8pyrbt261fi5vL29IZVK1f0SVCaXyxEVFaUxeRqC+6Vy/LvvKABgxgAv+DpbPOURjQfHC6mKY4ZUxTFDquKYIVVp0pipyFITohZXpqamkEqlyMrKqrQ9KyurynlUj6OjowN3d3ckJSUBAIqLi/HVV1/hu+++Q58+fQCUN+OIiYnBxo0bVSqupFKp6G/mwzQtjyb763IG8orLYGeihx5trSDVkjz9QY0MxwupimOGVMUxQ6rimCFVNbQxU6uL/iQlJeGrr77CvHnzlIXR33//jWvXrql0HJlMBk9PT4SHhyu3KRQKhIeHV5qdehK5XI64uDhYWloCAMrKylBaWlqlg6BUKoUgCCrlo4aropHF2PYOTbKwIiIiIqL6p3JxdebMGYwYMQKRkZH4888/UVhYCACIjY3Ft99+q3KAKVOmYPv27di1axfi4+Px8ccfo6ioCKNHjwYALFy4EF9++aVy/++++w7//PMPkpOTER0djbfffhtpaWkIDAwEUN6mvVOnTvjiiy9w+vRpJCcnY+fOndi9ezcGDBigcj5qeFJzivDP9TsAgLHtVe9gSURERERUGyovC/zyyy8xZ84cTJkypdLsUpcuXbBlyxaVAwQEBCA7OxurVq1CZmYm3N3dsWHDBuWywPT0dGhp/VcD5uXlYfHixcjMzISJiQk8PT2xbds2ODs7K/dZuXIlVq5ciQULFiA3Nxd2dnaYO3cuLyLcRIScS4EgAF0czdDS3EDsOERERETURKhcXMXFxWHFihVVtpuZmeHu3bu1ChEUFISgoKBq7/vll18q3V60aBEWLVr0xONZWlpi+fLltcpCDZtCIeD3cykAgHEdOGtFRERERPVH5WWBRkZGyMzMrLI9JiYG1tbWaglFVFunb2QjKbsQhrraGOplK3YcIiIiImpCVC6uhg0bhhUrViAzMxMSiQQKhQLnzp3D559/jlGjRtVBRKKaq2hkMaKdLfRlDaezDBERERE1fCoXV3PnzoWjoyP69OmDwsJCDBs2DEFBQfDz88Ps2bPrIiNRjeQXl+LA5XQAQCCXBBIRERFRPVP5nCuZTIalS5fitddeQ1xcHO7duwcPDw+0bt26DuIR1dz+yHQUlyrgZNkMfi2aix2HiIiIiJqYWl9E2NbWFra2PKeFNEfFksBxHVpUuc4ZEREREVFdU3lZ4BtvvIF169ZV2b5+/Xq8+eabaglFpKrrt/NxPikHUi0Jnve3FzsOERERETVBKhdXZ8+eRe/evats79WrFyIiItQSikhVOyLK26/3dbWElZGeyGmIiIiIqClSubgqLCyEjo5Ole3a2tooKChQSygiVZTKFQg5nwqAjSyIiIiISDwqF1cuLi44cOBAle0HDhyAs7OzWkIRqeLv2EzcKbgPC0MZ+rlZiR2HiIiIiJoolRtavPrqq3jjjTeQnJyMLl26AADCw8MRGhqKb775Ru0BiZ5mx7nyRhajfO2hI1X5+wIiIiIiIrVQubjq168fVq9ejR9++AEHDx6Erq4uXF1dsWnTJnTq1KkuMhI91p2C+zgccxsAlwQSERERkbhq1Yq9T58+6NOnj5qjEKlu94VUlCkEtHMwgauNkdhxiIiIiKgJq/V1rkpKSpCdnQ2FQlFpu52d3TOHIqoJQRCw/cG1rThrRURERERiU7m4SkxMxKJFi3DhwoVK2wVBgEQiQUxMjNrCET1JZEou4jIKoKuthRHtWNQTERERkbhULq7effddaGtr44cffoCVlRUkEkld5CJ6qopZqyFeNjDRr3p5ACIiIiKi+qRycXX16lWEhITAycmpLvIQ1UhxqRx7L6UBAMZxSSARERERaQCV+1Y7OTnh7t27dZGFqMYORt9CfnEZ7Jvro6ujudhxiIiIiIhUL64WLFiAFStW4PTp07h79y4KCgoq/UdUH3ZEpAAAxrZ3gJYWl6YSERERkfhUXhY4ZcoUAMDkyZMrbWdDC6ovydmFOBl/B0B5cUVEREREpAlULq5+/vnnushBVGMh51MgCEA3J3O0MDMQOw4REREREYBaFFedOnWqixxENaJQCPj9XPmSQDayICIiIiJNovI5VwAQERGBBQsW4IUXXkBGRgYAYPfu3YiIiFBrOKJHnUrIQsrdIhjpaWOIl43YcYiIiIiIlFQurg4ePIipU6dCT08P0dHRKCkpAQAUFBRg7dq1ag9I9LAdD2atRrSzg56OVOQ0RERERET/Ubm4WrNmDYKDg7F06VJoa/+3qtDf3x9XrlxRaziih+UVl+JAVDoALgkkIiIiIs2jcnF148YNdOjQocp2IyMj5OXlqSUUUXX2XUrD/TIF2loZop2DidhxiIiIiIgqUbm4srCwQFJSUpXt586dQ4sWnE2gulNxbatxHVpAIuG1rYiIiIhIs6hcXI0bNw6ffvopLl26BIlEgoyMDOzduxeff/45JkyYUBcZiRCXkY+LyTnQ1pJglJ+92HGIiIiIiKpQuRX7jBkzoFAoMHnyZBQVFSEoKAgymQyvvPIKXnrppbrISIQdEckAgL5uVrA00hU5DRERERFRVSoVV3K5HOfPn8fEiRMxdepUJCUlobCwEE5OTmjWrFldZaQmrlSuwK4LqQDYyIKIiIiINJdKywKlUileeeUV5ObmQiaTwdnZGT4+PiysqE4dvXobdwpKYGGoiz6ulmLHISIiIiKqlsrnXLVt2xYpKSl1kYWoWhXXthrtbw8daa2ue01EREREVOdU/qQ6Z84cfP755zh69Chu376NgoKCSv8RqdPt/GIcuXobABDY3kHkNEREREREj1erhhYAMHv27ErtsAVBgEQiQUxMjPrSUZO3+0Iq5AoBvi2ao621kdhxiIiIiIgeS+Xi6ueff66LHERVCIJQ6dpWRERERESaTOXiqlOnTnWRg6iKi8k5uHa7AHo6WhjezlbsOERERERET1Sr7gARERFYsGABXnjhBWRkZAAAdu/ejYiICLWGo6Zt+4NZq6FetjDW0xE5DRERERHRk6lcXB08eBBTp06Fnp4eoqOjUVJSAgAoKCjA2rVr1R6QmqaiEjn2X0oDAAR2YCMLIiIiItJ8KhdXa9asQXBwMJYuXQpt7f9WFfr7++PKlStqDUdNV1h0OvLvl8HBVB9d2piLHYeIiIiI6KlULq5u3LiBDh06VNluZGSEvLw8tYQiqmhkEdi+BbS0JE/Zm4iIiIhIfCoXVxYWFkhKSqqy/dy5c2jRgh3d6NklZxfi3/gsSCTAmPb2YschIiIiIqoRlYurcePG4dNPP8WlS5cgkUiQkZGBvXv34vPPP8eECRPqIiM1MTvOlc9adXeygIOpgchpiIiIiIhqplYXEVYoFJg8eTKKiooQFBQEmUyGV155BS+99FJdZKQmRKEQEPKguGIjCyIiIiJqSFQuriQSCWbPno2pU6ciKSkJhYWFcHJyQrNmzWodYuvWrdi4cSMyMzPh5uaGxYsXw8fHp9p9d+7ciffee6/SNplMhqioKOVtV1fXah/79ttvY9q0abXOSXXv3/gspOYUwVhPG4M9bcSOQ0RERERUYyoXVxVkMhmcnZ2fOcCBAwewfPlyBAcHo127dti8eTOmTp2KsLAwmJtX3yXO0NAQYWFhytsSSeWGB//880+l28ePH8f777+PwYMHP3Neqls7ziUDAJ7ztYOejlTkNERERERENadycVVYWIh169bh1KlTyMrKgkKhqHT/4cOHVTrepk2bMG7cOIwZMwYAEBwcjGPHjiEkJAQzZsyo9jESiQSWlpaPPeaj9x0+fBidO3dmww0Nl1tYij8u3wIAjOvA94qIiIiIGhaVi6sPPvgAZ86cwciRI2FpaVll1kgVJSUliI6OxsyZM5XbtLS00K1bN1y4cOGxjyssLETfvn2hUCjg4eGBefPmoW3bttXue+fOHfz999/47LPPVM4nl8tVfkxdqMihKXnqyp6LKSgpU8DF2hAeNoaN/vXWlaYyXkh9OGZIVRwzpCqOGVKVJo0ZVTKoXFwdP34ca9euRfv27VV9aBV3796FXC6vsvzP3NwcCQkJ1T6mTZs2WLZsGVxdXZGfn48ff/wRL7zwAkJDQ2FjU/UcnV27dqFZs2YYNGiQyvkePo9LE2haHnX7+UQWAKCbjQSXLl0SOU3D19jHC6kfxwypimOGVMUxQ6pqaGNG5eLK2NgYzZs3r4MoNePn5wc/P79KtwMCArBt2zbMmTOnyv4hISEYMWIEdHV1VX4ub29vSKXin/cjl8sRFRWlMXnqQuytfFy/ewvaWhK8OqwjzJvJxI7UYDWF8ULqxTFDquKYIVVxzJCqNGnMVGSpCZWLq7feegvffPMNPv/8c+jr66sc7mGmpqaQSqXIysqqtD0rKwsWFhY1OoaOjg7c3d2rvbBxREQEbty4ga+//rpW+aRSqehv5sM0LY86hVxIAwD0d7eClfGzjSsq15jHC9UNjhlSFccMqYpjhlTV0MZMjYqrUaNGVTq36ubNm+jWrRscHBygrV35ELt27arxk8tkMnh6eiI8PBwDBgwAACgUCoSHhyMoKKhGx5DL5YiLi0Pv3r2r3Pf777/D09MTbm5uNc5E9a+kTIHdF1IBsJEFERERETVcNSquKgqfujBlyhS888478PLygo+PDzZv3oyioiKMHj0aALBw4UJYW1tj/vz5AIDvvvsOvr6+aNWqFfLy8rBx40akpaUhMDCw0nELCgoQFhaGd955p86yk3ocuXobWfdKYGmki94uj+8CSURERESkyWpUXL3++ut1FiAgIADZ2dlYtWoVMjMz4e7ujg0bNiiXBaanp0NLS0u5f15eHhYvXozMzEyYmJjA09MT27Ztq3LNrdDQUAiCgOHDh9dZdlKP3x9c22q0vz20pVpP2ZuIiIiISDPV+iLCly9fRnx8PACgbdu28PDwqHWIoKCgxy4D/OWXXyrdXrRoERYtWvTUY44fPx7jx4+vdSaqH7fzinE0NhMAENieSwKJiIiIqOFSubjKysrC3LlzcebMGRgbGwMon03q3LkzvvrqK5iZmak9JDVeOy+kQq4Q4N+yOZytDMWOQ0RERERUayqvwfrkk09w7949hIaG4syZMzhz5gz279+PgoICLF26tC4yUiMlCAJ2RJQvCWQjCyIiIiJq6FQurk6cOIGPPvoITk5Oym3Ozs746KOPcPz4cbWGo8btfFIO4jPvQV9HimE+tmLHISIiIiJ6JioXVwqFAjo6OlW2a2trQ6FQqCUUNQ0VjSyGetvASK/qmCIiIiIiakhULq66dOmCTz/9FBkZGcptGRkZWL58Obp27arWcNR4FZaUYd+ldABcEkhEREREjYPKDS0+/PBDzJ49G/3794eNjQ0A4NatW2jbti2++OILtQekxumPqFsouF+GlmYG6NyGTVCIiIiIqOFTubiytbXFrl278O+//yIhIQEA4OTkhG7duqk9HDVeOx4sCQxs7wCJRCJyGiIiIiKiZ1er61xJJBJ0794d3bt3V3ceagJuZt3DqYRsSCTAmPYOYschIiIiIlKLGp9zFR4ejoCAABQUFFS5Lz8/H8OGDUNERIRaw1Hj9Pu5FABAD2cL2DXXFzkNEREREZF61Li42rx5M8aNGwdDw6oXejUyMsL48eOxadMmtYajxkeuEBDyoLhiIwsiIiIiakxqXFzFxsaiZ8+ej72/e/fuiI6OVksoarxOXr+DtNximOjrYKCHtdhxiIiIiIjUpsbF1Z07d6Ct/fhTtLS1tZGdna2WUNR47XgwazXS1w56OlKR0xARERERqU+Niytra2tcu3btsffHxsbC0tJSLaGoccopLMHB6FsAuCSQiIiIiBqfGhdXvXv3xjfffIP79+9Xua+4uBjffvst+vbtq9Zw1LjsvZSGkjIF3GyM4GlnLHYcIiIiIiK1qnEr9tmzZ+PPP//E4MGDMXHiRLRp0wYAkJCQgF9//RVyuRyzZs2qs6DU8O2I+K+RBa9tRURERESNTY2LKwsLC2zbtg0ff/wxVq5cCUEQAJRf86pHjx748MMPYWFhUWdBqWGLSc9DVGoudKQSjPKzFzsOEREREZHaqXQRYXt7e6xfvx65ubm4efMmAKBVq1YwMTGpk3DUeFTMWg1wt4ZZM5nIaYiIiIiI1E+l4qqCiYkJfHx81J2FGqmSMgV2XeC1rYiIiIiocatxQwui2jock4G7haWwNtZFz7ZcOkpEREREjROLK6pzFde2Gu3vAG0phxwRERERNU78pEt1KiOvGMdibwMAAts7iJyGiIiIiKjusLiiOhVyPgUKAejQyhSOloZixyEiIiIiqjMsrqjOCIKA3yPYyIKIiIiImgYWV1Rnzt28i4Q792AgkyLAx1bsOEREREREdYrFFdWZimtbBXjbwlC3Vl3/iYiIiIgaDBZXVCfu3S/D/sg0AFwSSERERERNA4srqhMHotJxr0SO1uYG6NjaVOw4RERERER1jsUV1YmKa1sFdmgBiUQichoiIiIiorrH4orULvHOPZy5kQ0tCTDa317sOERERERE9YLFFand7w9mrXq2tYStib7IaYiIiIiI6geLK1IruUJQFldsZEFERERETQmLK1KrE9cycSuvGM0NdDDAw0rsOERERERE9YbFFalVRSOLUb720NWWipyGiIiIiKj+sLgitbl7rwSHojMAAIEdHEROQ0RERERUv1hckdrsuZiKErkCHrbG8LQzETsOEREREVG9YnFFarND2ciCs1ZERERE1PSwuCK1iE7LRXRaHmRSLYz05bWtiIiIiKjpYXFFarEjonzWaqCHNUybyUROQ0RERERU/1hc0TO7XybH7oupANjIgoiIiIiaLhZX9Mz+unIbOYWlsDHWQ8+2lmLHISIiIiISBYsremY7ziUDAMa0t4dUSyJyGiIiIiIicWhEcbV161b069cP3t7eCAwMRGRk5GP33blzJ1xdXSv95+3tXWW/+Ph4zJo1C+3bt4evry/GjBmDtLS0unwZTdKt3GIcj8sEAAS2byFyGiIiIiIi8WiLHeDAgQNYvnw5goOD0a5dO2zevBlTp05FWFgYzM3Nq32MoaEhwsLClLclksqzJUlJSXjxxRcxZswYvPnmmzA0NMS1a9egq6tbp6+lKQo5nwKFAHRqbYbWFs3EjkNEREREJBrRi6tNmzZh3LhxGDNmDAAgODgYx44dQ0hICGbMmFHtYyQSCSwtH39uz1dffYVevXph4cKFym0tW7ZUb3CCIAjYEVG+JJCNLIiIiIioqRO1uCopKUF0dDRmzpyp3KalpYVu3brhwoULj31cYWEh+vbtC4VCAQ8PD8ybNw9t27YFACgUChw7dgzTpk3D1KlTceXKFTg4OGDmzJkYMGCASvnkcnntXpiaVeTQlDwVziZmIzGrEM1kUgz2sNK4fE2Vpo4X0lwcM6QqjhlSFccMqUqTxowqGUQtru7evQu5XF5l+Z+5uTkSEhKqfUybNm2wbNkyuLq6Ij8/Hz/++CNeeOEFhIaGwsbGBllZWSgsLMT69esxZ84cLFiwACdOnMDrr7+On3/+GZ06dapxvqioqGd6feqmaXnWnc0FAHS2k+FazGWR09CjNG28kObjmCFVccyQqjhmSFUNbcyIvixQVX5+fvDz86t0OyAgANu2bcOcOXOgUCgAAP3798fkyZMBAO7u7jh//jy2bdumUnHl7e0NqVSq1vy1IZfLERUVpTF5AKDgfhlO7TkKAJg5yAe+rUxFTkQVNHG8kGbjmCFVccyQqjhmSFWaNGYqstSEqMWVqakppFIpsrKyKm3PysqChYVFjY6ho6MDd3d3JCUlKY+pra0NJyenSvs5OTnh3LlzKuWTSqWiv5kP06Q8B6PTUFgih6NFM3RqY16lqQiJT5PGCzUMHDOkKo4ZUhXHDKmqoY0ZUVuxy2QyeHp6Ijw8XLlNoVAgPDy80uzUk8jlcsTFxSkbXMhkMnh7e+PGjRuV9ktMTIS9vb36wjdxFde2GtvBgYUVERERERE0YFnglClT8M4778DLyws+Pj7YvHkzioqKMHr0aADAwoULYW1tjfnz5wMAvvvuO/j6+qJVq1bIy8vDxo0bkZaWhsDAQOUxp06dirlz56Jjx47o3LkzTpw4gaNHj+Lnn38W5TU2NgmZBTibeBdaEmCMP7sEEhEREREBGlBcBQQEIDs7G6tWrUJmZibc3d2xYcMG5bLA9PR0aGn9N8GWl5eHxYsXIzMzEyYmJvD09MS2bdvg7Oys3GfgwIH4+OOPsW7dOixduhRt2rTBqlWr0KFDh3p/fY3R7+dSAAC9XSxhbawnchoiIiIiIs0genEFAEFBQQgKCqr2vl9++aXS7UWLFmHRokVPPebYsWMxduxYteSj/5TJFQg5X15cjevQQuQ0RERERESaQ9RzrqjhOXHtDjLy7sOsmQz93a3FjkNEREREpDFYXJFKKhpZjPS1g0ybw4eIiIiIqAI/HVONZd8rwaErGQCAwPZcEkhERERE9DAWV1Rjey6molQuwMveGB52xmLHISIiIiLSKCyuqEYEQcD/zpYvCWQjCyIiIiKiqlhcUY1Ep+Xh6q18yLS18Fw7O7HjEBERERFpHBZXVCM7IspnrQZ5WKO5gUzkNEREREREmofFFT1Vcakcuy+mAeCSQCIiIiKix2FxRU916EoGcotKYWeih+7OFmLHISIiIiLSSCyu6Kl2nEsBAIxp7wCplkTkNEREREREmonFFT1RWk4RTlzLBACMbe8gchoiIiIiIs3F4oqeaOf5FAgC0LmNGVqZNxM7DhERERGRxmJxRY+lUAjYHlG+JJCNLIiIiIiInozFFT3WmcRsJGUXwlBXG0O9bcSOQ0RERESk0Vhc0WPteDBrNdzHFgYybZHTEBERERFpNhZXVK384lIciEoHAARySSARERER0VOxuKJqhUamo6hUDkfLZvBv2VzsOEREREREGo/FFVWr4tpW4zq0gETCa1sRERERET0Niyuq4vrtApy7eRdSLQlG+9mLHYeIiIiIqEFgcUVV/P5g1qqPiyWsjPVETkNERERE1DCwuKJKyuQKhJwvL67YyIKIiIiIqOZYXFElf8dlIjP/PsybydDPzUrsOEREREREDQaLK6qk4tpWo/zsIdPm8CAiIiIiqil+eialrIL7+CsmA0B5l0AiIiIiIqo5FlektPtiGsoUAnwcTOBqYyR2HCIiIiKiBoXFFQEABEHAjohkAGxkQURERERUGyyuCAAQlZqLq7fyoauthefa2Ykdh4iIiIiowWFxRQD+a2Qx2NMGJvo6IqchIiIiImp4WFwRikvl2HMxFQAbWRARERER1RaLK8LB6FvIKy6DfXN9dHMyFzsOEREREVGDxOKK8Pu58iWBY9o7QEtLInIaIiIiIqKGicVVE5eaU4R/rt8BAAS2dxA5DRERERFRw8XiqokLOZcCQQC6OpqjhZmB2HGIiIiIiBosFldNmEIhYMe58mtbjevIWSsiIiIiomfB4qoJO3UjC8nZRTDS1cYQT1ux4xARERERNWgsrpqw3x9c22p4Ozvoy6QipyEiIiIiathYXDVRecWlOHA5HQAwrgOXBBIRERERPSsWV01UaGQ6iksVcLYyhG+L5mLHISIiIiJq8FhcNVHbIx40sujgAImE17YiIiIiInpWLK6aoOu383EhKQdSLQme9+OSQCIiIiIidWBx1QTteNDIoq+rFSyNdEVOQ0RERETUOLC4amJK5QqEnE8FwEYWRERERETqpBHF1datW9GvXz94e3sjMDAQkZGRj913586dcHV1rfSft7d3pX3efffdKvtMnTq1rl9Gg3AsNhN3Cu7DwlCGvm5WYschIiIiImo0tMUOcODAASxfvhzBwcFo164dNm/ejKlTpyIsLAzm5ubVPsbQ0BBhYWHK29U1ZOjZsyeWL1+uvC2TydQfvgHa8aCRxfN+9tCRakRtTURERETUKIj+6XrTpk0YN24cxowZA2dnZwQHB0NPTw8hISGPfYxEIoGlpaXyPwsLiyr7yGSySvuYmJjU5ctoEO4U3MeRq7cBAIEdWoichoiIiIiocRF15qqkpATR0dGYOXOmcpuWlha6deuGCxcuPPZxhYWF6Nu3LxQKBTw8PDBv3jy0bdu20j5nzpxB165dYWxsjC5dumDOnDkwNTVVKZ9cLlftBdWRihzPmmfnuWSUKQS0czCBk4WBxrw+Ui91jRdqOjhmSFUcM6QqjhlSlSaNGVUySARBEOowyxNlZGSgV69e2LZtG/z8/JTb/+///g9nz57Fjh07qjzmwoULuHnzJlxdXZGfn48ff/wRZ8+eRWhoKGxsbAAAoaGh0NPTg4ODA5KTk7Fy5UoYGBjgf//7H6RS6VNzyeVyXLx4UW2vUxMIgoA5f2YhJa8MM/2NMcjJQOxIREREREQNhq+v71NrCdHPuVKVn59fpULMz88PAQEB2LZtG+bMmQMAGDZsmPL+ioYWAwYMUM5m1ZS3t3eNirG6JpfLERUV9Ux5LiXnICUvA7raWpg9rCOM9HTUnJI0hTrGCzUtHDOkKo4ZUhXHDKlKk8ZMRZaaELW4MjU1hVQqRVZWVqXtWVlZ1Z5HVR0dHR38f3v3HhTlfahx/IFlAQ2KyEWjGCpiNiqgxmSMxGi9nFowFCXRiR2lUapok8lNg9aMWjXWaNJOLjbGojHiScMQNY4erU6s6Ul7Do0SL+At1HhBhSiigiAo7u75w8gJ4SIri+8ufD8zzLgvv/fdZ/U36OP7vr+3V69eys/Pr3dMt27dFBAQoNOnTztUrkwmk+F/mD/UlDwb9xdIkmIjO6vDfb7OjAUX5WrzF66POQNHMWfgKOYMHOVuc8bQBS28vb3Vp08fZWVlVW+z2WzKysqqcXaqIVarVXl5eQoODq53zHfffacrV640OKYlq6yyasvBW+VqPAtZAAAAAM3C8MsCJ0+erNmzZysyMlLR0dFat26dKioqlJiYKElKTU1Vp06dNHPmTEnSihUr1K9fP4WFham0tFRr1qxRQUGBxo0bJ0kqLy/XihUrNGrUKAUFBenMmTN68803FRYWpieeeMKwz2mknYe/09XKmwoNaKPHwute3h4AAABA0xheruLi4nTp0iW9++67KioqUq9evbR69erqywILCwvl6fn/J9hKS0s1b948FRUVyd/fX3369FFGRoYiIiIk3Tp1mJeXp82bN+vq1asKCQnR448/rhdffLHVPusq8/tnWz09IFSenrWfCQYAAACg6QwvV5I0ceJETZw4sc7vrV+/vsbruXPnau7cufUey9fXV2vWrHFqPnd25tI1/c/xYnl43CpXAAAAAJqH4Q8RRvPauO+sJCmmR6BCA1h+HQAAAGgulKsWzGaz69PsW+WKhSwAAACA5kW5asGyThTr3JUKtfP10qg+nY2OAwAAALRolKsW7NPvF7L4Rd8u8jW7z/MBAAAAAHdEuWqhSiqq9NdD30nikkAAAADgXqBctVD/lVOg6zdterCTn6JD/Y2OAwAAALR4lKsWKvMHC1l4ePBsKwAAAKC5Ua5aoLzzV3XwzBV5eXpoTP+uRscBAAAAWgXKVQt0eyGL4Q+FKMjPx+A0AAAAQOtAuWphqqw2fbb/nCQWsgAAAADuJcpVC/PFsQu6WHZDwe189FNLsNFxAAAAgFaDctXC3F7IIrF/V3mZ+OMFAAAA7hX+9d2CXLhaqS++uSBJGvdIqMFpAAAAgNaFctWCbN5/TlabXf0f6KCIkHZGxwEAAABaFcpVC2G322s82woAAADAvUW5aiH2n7mi4xfK5Gv21JPR9xsdBwAAAGh1KFctxKffn7WKi7xf7XzNBqcBAAAAWh/KVQtQccOqrQcLJEnjuCQQAAAAMATlqgXYcbhQZddvqlvHNhrYvaPRcQAAAIBWiXLVAmTuvXVJ4LgB3eTp6WFwGgAAAKB1oly5ufzia8o6USwPD+mpATzbCgAAADAK5crNbdh366zV4Iggde3QxuA0AAAAQOtFuXJjNptdG7/+/pJAFrIAAAAADEW5cmP/+22xzl2pUHtfL/2sdyej4wAAAACtGuXKjWVmn5EkJfTrKl+zyeA0AAAAQOtGuXJTJdeqtOPwd5Kk8VwSCAAAABiOcuWmtuQU6MZNmx7q3E6RXdsbHQcAAABo9ShXburT7y8JHPdIN3l48GwrAAAAwGiUKzd07LtS5ZwtkdnkoTH9uhgdBwAAAIAoV27p0+xby6+PeKiTAv18DE4DAAAAQKJcuZ0bN236bP85SdL4R0MNTgMAAADgNsqVm9l97IIuld9QSDsfDekZbHQcAAAAAN+jXLmZ2wtZJD4cKi8Tf3wAAACAq+Bf527kQmmlvvjmgiRp3CNcEggAAAC4EsqVG/nsQIFsdmlAWIB6BPsZHQcAAADAD1Cu3ITdbteGr79fyIKzVgAAAIDLoVy5ibxLVTpxsVxtzCaNjubZVgAAAICroVy5id0nKyRJcVH3y8/Hy+A0AAAAAH6McuXirDa7/jvvgv779K1y9fTDXQ1OBAAAAKAulCsXtuNQoQYv260p6/apynZr28ufHtSOQ4XGBgMAAABQC+XKRe04VKgZ/7lPhSWVNbafL6nUjP/cR8ECAAAAXIxLlKuPP/5Yw4cPV1RUlMaNG6ecnJx6x27atEkWi6XGV1RUVL3j58+fL4vFoo8++qgZkjcPq82uhVuPyF7H925vW7j1iKy2ukYAAAAAMILhKyNs375dS5cu1cKFC9W3b1+tW7dOycnJ2rFjhwIDA+vcx8/PTzt27Kh+7eHhUee4zz//XAcPHlRISEizZG8ue05eqnXG6ofskgpLKrXn5CUN6lH37xEAAACAe8vwM1dr167V+PHj9dRTTykiIkILFy6Ur6+vNm7cWO8+Hh4eCg4Orv4KCgqqNeb8+fNavHix3nrrLZnN5ub8CE534Wr9xepuxgEAAABofoaeubpx44YOHz6slJSU6m2enp6KiYnR/v37693v2rVrGjZsmGw2m3r37q1XXnlFPXv2rP6+zWbTq6++quTk5BrbHWW1Wu9636YIuq9xZTDoPrNhGeG6bs8J5gYaizkDRzFn4CjmDBzlSnPGkQyGlqvLly/LarXWuvwvMDBQJ06cqHOf7t276/e//70sFouuXr2qDz/8UM8884y2bdumzp07S5LS0tLk5eWlpKSkJuXLzc1t0v53y2y3K7CNp4orbPWOCWzjKXNJvg4cOHMPk8GdGDV/4b6YM3AUcwaOYs7AUe42Zwy/58pR/fv3V//+/Wu8jouLU0ZGhl566SUdOnRI6enp2rRpU733YjVWVFSUTCZTUyPflcXe3+m5vxyQpBoLW9z+RIvHRmtAn873OhbcgNVqVW5urqHzF+6FOQNHMWfgKOYMHOVKc+Z2lsYwtFwFBATIZDKpuLi4xvbi4uI676Oqi9lsVq9evZSfny9Jys7OVnFxsYYNG1Y9xmq1atmyZUpPT9fu3bsbnc9kMhn2hxkX3VUrPT21cOuRGotbdPb31YL43vp55P2G5IL7MHL+wj0xZ+Ao5gwcxZyBo9xtzhharry9vdWnTx9lZWVp5MiRkm7dL5WVlaWJEyc26hhWq1V5eXkaOnSoJCkhIUExMTE1xiQnJyshIUGJiYnO/QDN7OeR9+s/enfWv74t0t5DeXo08kE91iNYJs+mnZEDAAAA4HyGXxY4efJkzZ49W5GRkYqOjta6detUUVFRXYRSU1PVqVMnzZw5U5K0YsUK9evXT2FhYSotLdWaNWtUUFCgcePGSbp1NiwgIKDGe5jNZgUFBSk8PPzefjgnMHl66LHwQPmWtlG/8ECKFQAAAOCiDC9XcXFxunTpkt59910VFRWpV69eWr16dfVlgYWFhfL0/P8V40tLSzVv3jwVFRXJ399fffr0UUZGhiIiIoz6CAAAAABgfLmSpIkTJ9Z7GeD69etrvJ47d67mzp3r0PEduc8KAAAAAO6G4Q8RBgAAAICWgHIFAAAAAE5AuQIAAAAAJ6BcAQAAAIATUK4AAAAAwAkoVwAAAADgBJQrAAAAAHACyhUAAAAAOAHlCgAAAACcgHIFAAAAAE5AuQIAAAAAJ/AyOoArstvtkiSr1Wpwkltu53CVPHBtzBc4ijkDRzFn4CjmDBzlSnPmdobbHaEhHvbGjGplbty4odzcXKNjAAAAAHARUVFR8vb2bnAM5aoONptNN2/elKenpzw8PIyOAwAAAMAgdrtdNptNXl5e8vRs+K4qyhUAAAAAOAELWgAAAACAE1CuAAAAAMAJKFcAAAAA4ASUKwAAAABwAsoVAAAAADgB5QoAAAAAnIByBQAAAABOQLkCAAAAACegXLmJP//5z7JYLFqyZInRUeDCzp8/r1mzZmngwIGKjo5WfHy8cnNzjY4FF2W1WvX2229r+PDhio6O1siRI/WnP/1JPFset+3du1fTp0/X4MGDZbFYtGvXrhrft9vteueddzR48GBFR0fr2Wef1alTp4wJC5fQ0JypqqrSm2++qfj4ePXr10+DBw9Wamqqzp8/b2BiGO1OP2d+aP78+bJYLProo4/uXUAHUa7cQE5OjjIyMmSxWIyOAhdWUlKiCRMmyGw2Ky0tTdu2bdPs2bPl7+9vdDS4qLS0NH3yySeaP3++tm/frlmzZmn16tVav3690dHgIq5duyaLxaIFCxbU+f20tDStX79ev/vd75SZmak2bdooOTlZ169fv8dJ4SoamjOVlZU6cuSIZsyYoU2bNmnFihU6efKkZsyYYUBSuIo7/Zy57fPPP9fBgwcVEhJyj5LdHS+jA6Bh5eXlevXVV/X6669r5cqVRseBC0tLS1Pnzp21dOnS6m3dunUzMBFc3f79+zVixAj99Kc/lSSFhoZq27ZtysnJMTYYXMbQoUM1dOjQOr9nt9uVnp6uGTNmaOTIkZKk5cuXKyYmRrt27dLo0aPvZVS4iIbmTLt27bR27doa2+bNm6dx48apoKBAXbp0uRcR4WIamjO3nT9/XosXL9aaNWuUkpJyj5LdHc5cubhFixZp6NChiomJMToKXNzu3bsVGRmpF154QYMGDdKYMWOUmZlpdCy4sP79++tf//qXTp48KUk6duyYvv76aw0ZMsTgZHAHZ8+eVVFRUY2/n9q1a6e+fftq//79BiaDOykrK5OHh4fat29vdBS4KJvNpldffVXJycnq2bOn0XHuiDNXLmzbtm06cuSINmzYYHQUuIEzZ87ok08+0eTJkzV9+nTl5ubq9ddfl9ls1tixY42OBxc0bdo0lZWVKTY2ViaTSVarVS+//LJ+8YtfGB0NbqCoqEiSFBgYWGN7YGCgLl68aEQkuJnr16/rrbfe0ujRo+Xn52d0HLiotLQ0eXl5KSkpyegojUK5clGFhYVasmSJPvzwQ/n4+BgdB27AbrcrMjJSr7zyiiSpd+/e+ve//62MjAzKFer017/+VVu3btUf/vAHRURE6OjRo1q6dKlCQkKYMwCaVVVVlV588UXZ7XYtXLjQ6DhwUYcOHVJ6ero2bdokDw8Po+M0CuXKRR0+fFjFxcVKTEys3ma1WrV37159/PHHys3NlclkMjAhXE1wcLB69OhRY1t4eLh27txpUCK4uuXLl2vatGnV98ZYLBYVFBRo1apVlCvcUXBwsCSpuLi4xg3mxcXFeuihh4yKBTdQVVWll156SQUFBVq3bh1nrVCv7OxsFRcXa9iwYdXbrFarli1bpvT0dO3evdvAdHWjXLmoxx57TFu3bq2x7be//a3Cw8M1depUihVqefjhh6vvnbnt1KlT6tq1q0GJ4OoqKytr/U+gyWRiKXY0SmhoqIKDg5WVlaVevXpJunX/zMGDBzVhwgSD08FV3S5Wp0+fVnp6ugICAoyOBBeWkJBQa92B5ORkJSQk1DgB4UooVy7Kz89PDz74YI1tbdu2VYcOHWptByTpV7/6lSZMmKAPPvhAsbGxysnJUWZmphYtWmR0NLioYcOG6YMPPlCXLl2qLwtcu3atnnrqKaOjwUWUl5crPz+/+vXZs2d19OhR+fv7q0uXLkpKStLKlSsVFham0NBQvfPOOwoJCalePRCtT0NzJjg4WC+88IKOHDmiVatWyWq1Vt+75+/vL29vb6Niw0B3+jnz4wJuNpsVFBSk8PDwex21UTzs/Bel25g0aZIeeughvfbaa0ZHgYv64osv9Mc//lGnTp1SaGioJk+erPHjxxsdCy6qrKxM77zzjnbt2lV9adfo0aP13HPP8Y8cSJK++uqrOm8iHzt2rN544w3Z7Xa9++67yszMVGlpqQYMGKAFCxaoe/fuBqSFK2hozjz//PMaMWJEnfulp6dr4MCBzR0PLuhOP2d+bPjw4UpKStKzzz57D9I5jnIFAAAAAE7Ac64AAAAAwAkoVwAAAADgBJQrAAAAAHACyhUAAAAAOAHlCgAAAACcgHIFAAAAAE5AuQIAAAAAJ6BcAQAAAIATUK4AAG7jvffeU0JCgkP7WCwW7dq1q5kSOW7Tpk165JFHql/fzWeSpKysLMXGxspqtTbqOF9++aUSEhJks9kcDw0AaBTKFQDAKebMmaPf/OY3RsdokrNnz8pisTT4tWnTpia9R1xcnHbu3NnkrG+++aZmzJghk8nUqPFDhgyRl5eXtmzZ0uT3BgDUzcvoAAAAuIr7779f//znP6tff/jhh/rHP/6htWvXVm9r165dk97D19dXvr6+TTpGdna28vPzNWrUKIf2S0xM1Pr16zVmzJgmvT8AoG6cuQIAON3w4cP10Ucf1diWkJCg9957r/q1xWJRRkaGUlJS1LdvX8XGxmr//v06ffq0Jk2apH79+umZZ55Rfn5+ve+Tk5OjyZMna+DAgRowYIAmTpyow4cP1xp3+fJlPffcc+rbt69+9rOf6W9/+1udxzOZTAoODq7+atu2bY1t/v7+euuttzRo0CBFRUVpwoQJysnJqd7/q6++ksVi0d///nfFx8crKipK48ePV15eXvWYH18W+GP5+fkaMWKEFi1aJLvdXueY7du3KyYmRj4+Pg4dZ9iwYTp06FCDv6cAgLtHuQIAGOb9999XQkKCNm/erPDwcM2cOVPz58/XtGnTtHHjRtntdi1atKje/cvLyzVmzBj95S9/UWZmpsLCwjRt2jSVlZXVGLdixQrFxsZqy5YtGjJkiGbNmqUrV644nHf58uXauXOn3njjDX322WcKCwvTr3/961rHWr58uebMmaMNGzaoY8eOmj59uqqqqu54/GPHjumXv/ylnnzySc2fP18eHh51jsvOzlZkZKTDx+nSpYuCgoKUnZ3d+A8NAGg0yhUAwDCJiYmKi4tT9+7dNXXqVJ07d07x8fF64okn1KNHDyUlJWnPnj317j9o0CAlJCSoR48e6tGjhxYvXqyKigrt3bu3xrixY8fqySefVFhYmF555RVdu3atxhmnxrh27ZoyMjKUmpqqoUOHKiIiQosXL5aPj482bNhQY+zzzz+vxx9/XBaLRW+88YaKi4v1+eefN3j8ffv2KSkpSVOmTNHLL7/c4NiCggKFhITc1XFCQkJUUFBwh08LALgb3HMFADCMxWKp/nVgYKAk6cEHH6yx7fr16yorK5Ofn1+t/S9evKi3335be/bsUXFxsWw2myoqKmqVhx++T9u2beXn56dLly45lDU/P19VVVV6+OGHq7eZzWZFR0fr22+/rTG2X79+1b/u0KGDunfvrhMnTtR77MLCQk2ZMkUvvfSSnn322TtmqaysrPOSwMYcx8fHRxUVFXd8DwCA4zhzBQBwurouZ7t582atbWazudY+dW2rb/nw2bNn6+jRo3rttdeUkZGhzZs3q0OHDrUuwfvhMW8f15WWJA8ICFBUVJS2bdtW65LG+saXlpbe1XFKSkrUsWPHJmcGANRGuQIAOF3Hjh114cKF6tdlZWU6e/as099n3759mjRpkoYOHaqePXvK29tbly9fdvr7SNIDDzwgs9msffv2VW+rqqpSbm6uIiIiaow9cOBA9a9LSkp06tQphYeH13tsX19frVq1Sj4+PkpOTr5jwerdu7eOHz/u8HGuX7+uM2fOqHfv3g0eHwBwdyhXAACne+yxx7RlyxZlZ2frm2++0ezZs+Xp6fy/cn7yk59oy5Yt+vbbb3Xw4EHNmjWrycuc16dt27aaMGGCli9fri+//FLHjx/XvHnzVFlZqaeffrrG2Pfff19ZWVnKy8vTnDlzFBAQoJEjR97x+KtWrZLJZNLUqVNVXl5e79jBgwfr66+/dvg4Bw4ckNlsrnHZIgDAeShXAACnsNls8vK6dStvSkqKHn30UaWkpCglJUUjR47UAw884PT3XLJkiUpKSjR27FilpqZq0qRJ1fduNYdZs2Zp1KhRSk1N1dixY3X69GmtXr1a/v7+NcbNnDlTS5YsUWJioi5evKiVK1fK29v7jse/7777lJaWJrvdrpSUFF27dq3OcfHx8Tp+/Hi993HVd5xt27YpPj5ebdq0cfCTAwAaw8Ne30M0AABwQHJyssLCwjR//nyjoxjmq6++UlJSkvbu3av27ds363stW7ZM5eXlDS5V/0OXLl1SbGysNmzYoG7dujVrNgBorThzBQBokpKSEn3xxRfas2ePYmJijI7TasyYMUNdunRp9MIc586d04IFCyhWANCMWIodANAkc+fOVW5urqZMmaIRI0YYHafVaN++vaZPn97o8VFRUYqKimrGRAAALgsEAAAAACfgskAAAAAAcALKFQAAAAA4AeUKAAAAAJyAcgUAAAAATkC5AgAAAAAnoFwBAAAAgBNQrgAAAADACShXAAAAAOAE/wfmJmXHyPooVgAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Jumlah topik optimal yang ditemukan: k = 12\n"
]
}
],
"source": [
"coherence_values = []\n",
"model_list = []\n",
"k_values = range(4, 16, 2) # Uji k dari 4 hingga 14 dengan step 2\n",
"\n",
"print(\"Mencari jumlah topik optimal dengan Coherence Score (c_v)...\")\n",
"for k in tqdm(k_values):\n",
" lda_model = LdaMulticore(corpus=corpus, id2word=dictionary, num_topics=k, random_state=SEED, passes=10, workers=os.cpu_count()-1)\n",
" model_list.append(lda_model)\n",
" \n",
" coherence_model_lda = CoherenceModel(model=lda_model, texts=texts_for_lda_filtered, dictionary=dictionary, coherence='c_v')\n",
" coherence_values.append(coherence_model_lda.get_coherence())\n",
"\n",
"# Plot hasil\n",
"plt.figure(figsize=(10, 6))\n",
"plt.plot(k_values, coherence_values, marker='o')\n",
"plt.title('Coherence Scores untuk Berbagai Jumlah Topik (k)')\n",
"plt.xlabel('Jumlah Topik (k)')\n",
"plt.ylabel('Coherence Score (c_v)')\n",
"plt.xticks(k_values)\n",
"plt.grid(True)\n",
"plt.show()\n",
"\n",
"# Pilih k terbaik\n",
"best_k_index = np.argmax(coherence_values)\n",
"optimal_k = k_values[best_k_index]\n",
"optimal_model = model_list[best_k_index]\n",
"\n",
"print(f\"\\nJumlah topik optimal yang ditemukan: k = {optimal_k}\")"
]
},
{
"cell_type": "markdown",
"id": "47b4f14c",
"metadata": {
"papermill": {
"duration": 0.017257,
"end_time": "2025-08-17T11:27:28.100745",
"exception": false,
"start_time": "2025-08-17T11:27:28.083488",
"status": "completed"
},
"tags": []
},
"source": [
"### 20. Fit Model LDA Terbaik & Visualisasi\n",
"\n",
"Setelah menemukan jumlah topik optimal, kita akan melatih model LDA final dengan nilai `k` tersebut. Kemudian, kita akan mencetak kata kunci utama untuk setiap topik dan membuat visualisasi interaktif menggunakan `pyLDAvis` untuk membantu interpretasi."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "8f191330",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:27:28.138288Z",
"iopub.status.busy": "2025-08-17T11:27:28.137178Z",
"iopub.status.idle": "2025-08-17T11:27:29.310296Z",
"shell.execute_reply": "2025-08-17T11:27:29.309401Z"
},
"papermill": {
"duration": 1.195484,
"end_time": "2025-08-17T11:27:29.313717",
"exception": false,
"start_time": "2025-08-17T11:27:28.118233",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Menampilkan 12 kata kunci teratas untuk 12 topik:\n",
"Topik #1: bersih | awat | sangat | baik | tempat | sejarah | jaga | bangun | ramah | gedung | parkir | perlu\n",
"Topik #2: bangun | belanda | sejarah | jaman | tinggal | lawang | kokoh | sewu | sangat | jadi | arsitektur | bagus\n",
"Topik #3: sewu | lawang | kalau | jadi | masuk | tiket | buat | hari | kesana | parkir | tahu | banyak\n",
"Topik #4: sejarah | tempat | bagus | foto | buat | wisata | anak | indonesia | ajar | cocok | kereta | banyak\n",
"Topik #5: foto | banyak | kalau | masuk | bagus | jadi | malam | tempat | sini | bawah | tiket | lokasi\n",
"Topik #6: tiket | masuk | pandu | wisata | sejarah | dewasa | parkir | tempat | harga | pakai | anak | guide\n",
"Topik #7: lawang | sewu | pintu | banyak | sejarah | gedung | bangun | wisata | semarang | ribu | lebih | kali\n",
"Topik #8: tempat | bersih | toilet | makan | sejarah | jual | cukup | beberapa | parkir | orang | penuh | bagus\n",
"Topik #9: bagus | banget | tempat | bersih | jadi | makin | lebih | kesini | pas | kalau | keren | jalan\n",
"Topik #10: place | building | historical | bagus | history | visit | this | kamu | semarang | about | that | architecture\n",
"Topik #11: kereta | api | indonesia | kantor | bangun | museum | sejarah | belanda | kai | tempat | bagai | gedung\n",
"Topik #12: semarang | kota | tempat | sejarah | wisata | kunjung | salah | satu | tengah | wajib | parkir | bangun\n",
"\n",
"Menyiapkan visualisasi pyLDAvis...\n",
"Visualisasi tersimpan di artefak/lda_topics.html\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
""
],
"text/plain": [
"PreparedData(topic_coordinates= x y topics cluster Freq\n",
"topic \n",
"4 0.23 0.05 1 1 13.80\n",
"5 0.15 0.00 2 1 10.13\n",
"2 0.12 -0.08 3 1 9.74\n",
"6 -0.03 -0.15 4 1 8.87\n",
"11 -0.12 0.12 5 1 8.66\n",
"3 -0.27 0.10 6 1 8.61\n",
"1 -0.17 -0.06 7 1 8.32\n",
"9 0.17 -0.43 8 1 7.19\n",
"8 0.17 0.18 9 1 6.72\n",
"7 0.04 0.17 10 1 6.66\n",
"0 -0.06 0.27 11 1 5.96\n",
"10 -0.24 -0.18 12 1 5.35, topic_info= Term Freq Total Category logprob loglift\n",
"6 lawang 612.00 612.00 Default 30.00 30.00\n",
"7 semarang 485.00 485.00 Default 29.00 29.00\n",
"8 sewu 606.00 606.00 Default 28.00 28.00\n",
"0 sejarah 953.00 953.00 Default 27.00 27.00\n",
"1 tempat 935.00 935.00 Default 26.00 26.00\n",
".. ... ... ... ... ... ...\n",
"1 tempat 30.42 935.06 Topic12 -4.11 -0.50\n",
"6 lawang 25.49 612.58 Topic12 -4.29 -0.25\n",
"7 semarang 22.45 485.66 Topic12 -4.42 -0.15\n",
"87 jadi 17.96 378.47 Topic12 -4.64 -0.12\n",
"120 banyak 17.23 442.16 Topic12 -4.68 -0.32\n",
"\n",
"[710 rows x 6 columns], token_table= Topic Freq Term\n",
"term \n",
"740 1 0.35 abis\n",
"740 5 0.35 abis\n",
"427 8 0.95 about\n",
"889 3 0.17 ac\n",
"889 7 0.69 ac\n",
"... ... ... ...\n",
"79 4 0.02 zaman\n",
"79 5 0.09 zaman\n",
"79 7 0.67 zaman\n",
"79 10 0.02 zaman\n",
"79 11 0.11 zaman\n",
"\n",
"[2281 rows x 3 columns], R=30, lambda_step=0.01, plot_opts={'xlab': 'PC1', 'ylab': 'PC2'}, topic_order=[5, 6, 3, 7, 12, 4, 2, 10, 9, 8, 1, 11])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(f\"Menampilkan 12 kata kunci teratas untuk {optimal_k} topik:\")\n",
"topics = optimal_model.show_topics(num_topics=optimal_k, num_words=12, formatted=False)\n",
"for topic_id, topic in topics:\n",
" print(f\"Topik #{topic_id + 1}: {' | '.join([word for word, prop in topic])}\")\n",
"\n",
"# Visualisasi interaktif pyLDAvis\n",
"print(\"\\nMenyiapkan visualisasi pyLDAvis...\")\n",
"pyLDAvis.enable_notebook()\n",
"vis = gensimvis.prepare(optimal_model, corpus, dictionary, mds='mmds')\n",
"pyLDAvis.save_html(vis, 'artefak/lda_topics.html')\n",
"print(\"Visualisasi tersimpan di artefak/lda_topics.html\")\n",
"vis"
]
},
{
"cell_type": "markdown",
"id": "27a684c8",
"metadata": {
"papermill": {
"duration": 0.020328,
"end_time": "2025-08-17T11:27:29.355195",
"exception": false,
"start_time": "2025-08-17T11:27:29.334867",
"status": "completed"
},
"tags": []
},
"source": [
"### 21. Integrasi Sentimen × Topik\n",
"\n",
"Untuk mendapatkan wawasan yang lebih dalam, kita akan menggabungkan hasil analisis sentimen dengan pemodelan topik. Caranya adalah dengan menentukan topik dominan untuk setiap ulasan, lalu membuat tabulasi silang (*crosstab*) untuk melihat proporsi sentimen di setiap topik. Ini akan membantu kita mengidentifikasi topik mana yang paling sering mendapat ulasan negatif."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "ecac0fb2",
"metadata": {
"execution": {
"iopub.execute_input": "2025-08-17T11:27:29.397714Z",
"iopub.status.busy": "2025-08-17T11:27:29.397363Z",
"iopub.status.idle": "2025-08-17T11:27:30.547241Z",
"shell.execute_reply": "2025-08-17T11:27:30.546246Z"
},
"papermill": {
"duration": 1.173323,
"end_time": "2025-08-17T11:27:30.548912",
"exception": false,
"start_time": "2025-08-17T11:27:29.375589",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Contoh hasil penentuan topik dominan:\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
text_bersih
\n",
"
label
\n",
"
topik_dominan
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
tempat wisata sejarah
\n",
"
POSITIF
\n",
"
3
\n",
"
\n",
"
\n",
"
1
\n",
"
semarang kalau datang lawang sewu jawa tengah
\n",
"
POSITIF
\n",
"
11
\n",
"
\n",
"
\n",
"
2
\n",
"
nyata gedung cetak tiket kereta api
\n",
"
NETRAL
\n",
"
10
\n",
"
\n",
"
\n",
"
3
\n",
"
kai kelola aset lebih profesional tiket masuk ...
\n",
"
NEGATIF
\n",
"
6
\n",
"
\n",
"
\n",
"
4
\n",
"
ticket masuk per orang air mineral ml
\n",
"
NETRAL
\n",
"
5
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" text_bersih label topik_dominan\n",
"0 tempat wisata sejarah POSITIF 3\n",
"1 semarang kalau datang lawang sewu jawa tengah POSITIF 11\n",
"2 nyata gedung cetak tiket kereta api NETRAL 10\n",
"3 kai kelola aset lebih profesional tiket masuk ... NEGATIF 6\n",
"4 ticket masuk per orang air mineral ml NETRAL 5"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Proporsi Sentimen per Topik Dominan (%):\n"
]
},
{
"data": {
"text/html": [
"