Multi-class sentiment classification on Indonesian-language reviews of the Tiket.com app, using deep learning models (LSTM, GRU, CNN) with traditional ML as baseline.
- Overview
- Tech Stack
- Project Structure
- Dataset
- Notebook Flow
- Experiment Results
- Getting Started
- Author
This project performs sentiment analysis on user reviews of the Tiket.com app scraped from Google Play Store. Reviews are classified into three sentiment classes using a lexicon-based labeling approach and trained with multiple deep learning architectures.
Pipeline stages:
- Data Collection — Scrape reviews via Google Play Scraper
- Preprocessing — Text cleaning, normalization, slang fixing, stopword removal
- Labeling — Lexicon-based sentiment labeling (InSet Lexicon)
- Data Balancing — Resampling to handle class imbalance
- Modeling — Baseline ML + 3 deep learning experiments
- Evaluation — Accuracy comparison across all models
| Category | Tools |
|---|---|
| Language | Python 3.10 |
| Deep Learning | TensorFlow / Keras (LSTM, GRU, CNN) |
| ML Baseline | Scikit-learn |
| NLP | NLTK, Sastrawi, Gensim |
| Data | Pandas, NumPy |
| Visualization | Matplotlib, Seaborn |
| Data Source | Google Play Store (google-play-scraper) |
| Environment | Google Colab |
tiket-review-sentiment/
├── notebook/
│ └── sentiment_analysis.ipynb # Main analysis & modeling
├── src/
│ └── scrape_reviews.py # Google Play scraper script
├── data/
│ └── raw_reviews.csv # Raw scraped reviews
└── requirements.txt
- Source: Google Play Store — Tiket.com app (
com.tiket.gits) - Size: 20,000 reviews
- Language: Bahasa Indonesia
- Task: 3-class classification — Positive / Neutral / Negative
- Labeling: Lexicon-based using InSet Lexicon
| # | Section |
|---|---|
| 1 | Data Collection |
| 2 | Data Preprocessing |
| 3 | Labeling (3 Classes) |
| 3.1 | Data Balancing |
| 4 | Prepare Data for Deep Learning |
| 4.5 | Baseline: Traditional ML Models |
| 5 | Experiment 1 — LSTM (80/20 split) |
| 6 | Experiment 2 — GRU (80/20 split) |
| 7 | Experiment 3 — CNN (70/30 split) |
| 8 | Visualizations |
| 9 | Inference |
| 10 | Save Best Model |
| Model | Type | Split | Test Accuracy |
|---|---|---|---|
| Logistic Regression (TF-IDF) | Traditional ML | 80/20 | 92.76% |
| Random Forest (TF-IDF) | Traditional ML | 80/20 | 94.69% |
| LSTM | Deep Learning | 80/20 | 33.33% |
| GRU | Deep Learning | 80/20 | 33.33% |
| CNN | Deep Learning | 70/30 | 94.76% |
LSTM dan GRU tidak konvergen (stuck di ~33.33% — random chance untuk 3 kelas). Best model saved as
sentiment_model_cnn.h5.
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtpython src/scrape_reviews.py --max-samples 20000 --output data/raw_reviews.csvUpload the generated data/raw_reviews.csv to your Google Drive root folder.
Open notebook/sentiment_analysis.ipynb in Google Colab, mount your Google Drive, and run all cells.
Ni Putu Sintia Wati
- GitHub: @sintiasnn