developed streamlit for publishing on HFS
Browse files- .github/workflows/main.yml +27 -0
- Dockerfile +21 -0
- app.py +1130 -0
- img/1_run/cNB/confusion_matrix_complementNB_af86bad539074f32bc26a9410173d98a.png +0 -0
- img/1_run/cNB/cv_performance_af86bad539074f32bc26a9410173d98a.png +0 -0
- img/1_run/mNB/confusion_matrix_multinomialNB_981ba728e07048f48cf7ab2f9c9cc559.png +0 -0
- img/1_run/mNB/cv_performance_981ba728e07048f48cf7ab2f9c9cc559.png +0 -0
- img/1_run/rf/confusion_matrix_random_forest_5d8f4c16e8aa4120b3eede32f17bbf78.png +0 -0
- img/1_run/rf/cv_performance_5d8f4c16e8aa4120b3eede32f17bbf78.png +0 -0
- img/1_run/svm/confusion_matrix_svm_cd28b67a16254e80b055bf50bab61d3d.png +0 -0
- img/1_run/svm/cv_performance_svm_cd28b67a16254e80b055bf50bab61d3d.png +0 -0
- img/2_run/cNB/confusion_matrix_complementNB_f99dedcca3404ec483a07fe2773c9194.png +0 -0
- img/2_run/cNB/cv_performance_f99dedcca3404ec483a07fe2773c9194.png +0 -0
- img/2_run/mNB/confusion_matrix_multinomialNB_0bd6e47a7ec541b590db14519fded6aa.png +0 -0
- img/2_run/mNB/cv_performance_0bd6e47a7ec541b590db14519fded6aa.png +0 -0
- img/2_run/rf/confusion_matrix_random_forest_83f0e0d7df324e37908e3c80a008e51b.png +0 -0
- img/2_run/rf/cv_performance_83f0e0d7df324e37908e3c80a008e51b.png +0 -0
- img/2_run/svm/confusion_matrix_svm_23523aa756d14d508efc9d7460aa2496.png +0 -0
- img/2_run/svm/cv_performance_23523aa756d14d508efc9d7460aa2496.png +0 -0
- img/mlflow_ui.png +0 -0
- requirements.txt +7 -0
- src/cleaned_sms_text_labels_only_v2.csv +0 -0
- src/combined_stopwords.pkl +3 -0
- src/eda_df.csv +0 -0
- src/test.csv +677 -0
.github/workflows/main.yml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: Sync to Hugging Face hub
|
| 2 |
+
on:
|
| 3 |
+
push:
|
| 4 |
+
branches: [main]
|
| 5 |
+
# to run this workflow manually from the Actions tab
|
| 6 |
+
workflow_dispatch:
|
| 7 |
+
|
| 8 |
+
jobs:
|
| 9 |
+
sync-to-hub:
|
| 10 |
+
runs-on: ubuntu-latest
|
| 11 |
+
steps:
|
| 12 |
+
- uses: actions/checkout@v3
|
| 13 |
+
with:
|
| 14 |
+
fetch-depth: 0
|
| 15 |
+
lfs: true
|
| 16 |
+
- name: Configure Git
|
| 17 |
+
run: |
|
| 18 |
+
git config --global user.email "[email protected]"
|
| 19 |
+
git config --global user.name "ferds003"
|
| 20 |
+
|
| 21 |
+
- name: Push to Hugging Face
|
| 22 |
+
env:
|
| 23 |
+
HF_TOKEN: ${{ secrets.HF_TOKEN }}
|
| 24 |
+
run: |
|
| 25 |
+
git remote set-url space https://ferds003:[email protected]/spaces/ferds003/DATA103_filipino_spam_detection || \
|
| 26 |
+
git remote add space https://ferds003:[email protected]/spaces/ferds003/DATA103_filipino_spam_detection
|
| 27 |
+
git push --force-with-lease space main
|
Dockerfile
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.9-slim
|
| 2 |
+
|
| 3 |
+
WORKDIR /app
|
| 4 |
+
|
| 5 |
+
RUN apt-get update && apt-get install -y \
|
| 6 |
+
build-essential \
|
| 7 |
+
curl \
|
| 8 |
+
software-properties-common \
|
| 9 |
+
git \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
COPY requirements.txt ./
|
| 13 |
+
COPY src/ ./src/
|
| 14 |
+
|
| 15 |
+
RUN pip3 install -r requirements.txt
|
| 16 |
+
|
| 17 |
+
EXPOSE 8501
|
| 18 |
+
|
| 19 |
+
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
|
| 20 |
+
|
| 21 |
+
ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
|
app.py
ADDED
|
@@ -0,0 +1,1130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import plotly.express as px
|
| 3 |
+
import plotly.graph_objects as go
|
| 4 |
+
import pandas as pd
|
| 5 |
+
import numpy as np
|
| 6 |
+
import pickle
|
| 7 |
+
import sklearn
|
| 8 |
+
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
|
| 9 |
+
from wordcloud import WordCloud
|
| 10 |
+
from PIL import Image
|
| 11 |
+
|
| 12 |
+
MODEL_PATHS = {
|
| 13 |
+
"Support Vector Machine": "models/svm_model_2.pkl",
|
| 14 |
+
"Random Forest": "models/rf_model_2.pkl",
|
| 15 |
+
"Multinomial Naive Bayes": "models/mNB_model_2.pkl",
|
| 16 |
+
"Complement Naive Bayes": "models/cnb_model_2.pkl",
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
@st.cache_resource
|
| 21 |
+
def load_model(model_name):
|
| 22 |
+
model_path = MODEL_PATHS[model_name]
|
| 23 |
+
with open(model_path, "rb") as f:
|
| 24 |
+
return pickle.load(f)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
sample_df = pd.read_csv("src/test.csv")
|
| 28 |
+
eda_df = pd.read_csv("src/eda_df.csv")
|
| 29 |
+
ml_df = pd.read_csv("src/cleaned_sms_text_labels_only_v2.csv")
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
## define feature importance per model and put it into a plotly chart when classifying
|
| 33 |
+
def explain_prediction(model, text, model_name, top_n=10):
|
| 34 |
+
# Unpack classifier as saved models are in made pipeline saved in mlflow
|
| 35 |
+
if hasattr(model, "named_steps"):
|
| 36 |
+
clf = model.named_steps.get("classifier")
|
| 37 |
+
vectorizer = model.named_steps.get(
|
| 38 |
+
"vectorizer"
|
| 39 |
+
) # i was having errors since im calling a different vectorizer!
|
| 40 |
+
else:
|
| 41 |
+
clf = model
|
| 42 |
+
# Compute feature contributions for the chosen models; make contributions in absolute values
|
| 43 |
+
X_input = vectorizer.transform([text])
|
| 44 |
+
feature_names = np.array(vectorizer.get_feature_names_out())
|
| 45 |
+
if not X_input.nnz:
|
| 46 |
+
return pd.DataFrame(
|
| 47 |
+
columns=["Token", "Contribution"]
|
| 48 |
+
) ## Handles edge cases like empty input
|
| 49 |
+
|
| 50 |
+
if model_name == "Multinomial Naive Bayes":
|
| 51 |
+
class_log_prob = clf.feature_log_prob_[1] - clf.feature_log_prob_[0]
|
| 52 |
+
contributions = X_input.toarray()[0] * class_log_prob
|
| 53 |
+
contributions = np.abs(contributions)
|
| 54 |
+
elif model_name == "Complement Naive Bayes":
|
| 55 |
+
class_log_prob = clf.feature_log_prob_[1] - clf.feature_log_prob_[0]
|
| 56 |
+
contributions = X_input.toarray()[0] * class_log_prob
|
| 57 |
+
contributions = np.abs(contributions)
|
| 58 |
+
elif model_name == "Random Forest":
|
| 59 |
+
contributions = clf.feature_importances_ * X_input.toarray()[0]
|
| 60 |
+
contributions = np.abs(contributions)
|
| 61 |
+
elif model_name == "Support Vector Machine":
|
| 62 |
+
contributions = clf.coef_.toarray()[0] * X_input.toarray()[0]
|
| 63 |
+
contributions = np.abs(contributions)
|
| 64 |
+
else:
|
| 65 |
+
return st.error("Invalid model name")
|
| 66 |
+
|
| 67 |
+
token_scores = list(zip(feature_names, contributions))
|
| 68 |
+
token_scores = sorted(token_scores, key=lambda x: abs(x[1]), reverse=True)
|
| 69 |
+
return pd.DataFrame(token_scores[:top_n], columns=["Token", "Contribution"])
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
## --FOR THE WORDCLOUD AT EdATAB--
|
| 73 |
+
def get_wordcloud_data(text):
|
| 74 |
+
wc = WordCloud(
|
| 75 |
+
width=1200,
|
| 76 |
+
height=600,
|
| 77 |
+
background_color="white",
|
| 78 |
+
colormap="viridis",
|
| 79 |
+
max_font_size=60,
|
| 80 |
+
prefer_horizontal=0.8,
|
| 81 |
+
collocations=False,
|
| 82 |
+
min_word_length=3,
|
| 83 |
+
max_words=75,
|
| 84 |
+
relative_scaling=0.5,
|
| 85 |
+
contour_color="black",
|
| 86 |
+
contour_width=0.2,
|
| 87 |
+
).generate(text)
|
| 88 |
+
elements = []
|
| 89 |
+
for (word, freq), font_size, position, orientation, color in wc.layout_:
|
| 90 |
+
elements.append((word, freq, position)) # position is already a tuple (x, y)
|
| 91 |
+
return elements
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
## --FOR THE WORDCLOUD AT EdATAB--
|
| 95 |
+
def plot_wordcloud(elements, title):
|
| 96 |
+
words, frequencies, positions = zip(*elements)
|
| 97 |
+
x = [pos[0] for pos in positions]
|
| 98 |
+
y = [-pos[1] for pos in positions] # Flip Y to display properly
|
| 99 |
+
sizes = [freq * 200 for freq in frequencies]
|
| 100 |
+
|
| 101 |
+
fig = go.Figure(
|
| 102 |
+
data=[
|
| 103 |
+
go.Scatter(
|
| 104 |
+
x=x,
|
| 105 |
+
y=y,
|
| 106 |
+
mode="text",
|
| 107 |
+
text=words,
|
| 108 |
+
textfont=dict(size=sizes),
|
| 109 |
+
hoverinfo="text",
|
| 110 |
+
textposition="middle center",
|
| 111 |
+
)
|
| 112 |
+
]
|
| 113 |
+
)
|
| 114 |
+
|
| 115 |
+
fig.update_layout(
|
| 116 |
+
title=dict(text=title, x=0.5),
|
| 117 |
+
showlegend=False,
|
| 118 |
+
xaxis=dict(showgrid=False, visible=False),
|
| 119 |
+
yaxis=dict(showgrid=False, visible=False),
|
| 120 |
+
margin=dict(l=20, r=20, t=50, b=20),
|
| 121 |
+
)
|
| 122 |
+
st.plotly_chart(fig, use_container_width=True)
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
with open("src/combined_stopwords.pkl", "rb") as f:
|
| 126 |
+
combined_stopwords = pickle.load(f)
|
| 127 |
+
vectorizer = TfidfVectorizer(stop_words=list(combined_stopwords), max_features=20)
|
| 128 |
+
|
| 129 |
+
bow_cv = CountVectorizer(stop_words=list(combined_stopwords), max_features=1000)
|
| 130 |
+
tfidf = TfidfVectorizer(stop_words=list(combined_stopwords), max_features=1000)
|
| 131 |
+
|
| 132 |
+
## ----- START OF APP ------
|
| 133 |
+
st.set_page_config(
|
| 134 |
+
layout="wide", page_title="DATA103_filipino_spam_detection", page_icon="😎"
|
| 135 |
+
)
|
| 136 |
+
|
| 137 |
+
st.title("Spam SMS Detection in the Filipino Context")
|
| 138 |
+
|
| 139 |
+
## SIDEBAR
|
| 140 |
+
st.sidebar.markdown("---")
|
| 141 |
+
st.sidebar.markdown(
|
| 142 |
+
"""
|
| 143 |
+
About the Team:
|
| 144 |
+
|
| 145 |
+
Demo created by [Ferds Magallanes](https://ferds003.github.io), Hitika Motwani, Neil Penaflor, and Mark Abergos using Streamlit and Hugging Face Spaces.
|
| 146 |
+
Purposes to demonstrate their NLP classification project for their minor data science class.
|
| 147 |
+
|
| 148 |
+
Contributions:
|
| 149 |
+
- Data Curation - Ferds, Hitika
|
| 150 |
+
- EDA - Hitika, Neil
|
| 151 |
+
- Features Selection and NLP_Training - Mark, Ferds
|
| 152 |
+
- Eval and Demo - Ferds
|
| 153 |
+
|
| 154 |
+
Acknowledgements:
|
| 155 |
+
|
| 156 |
+
The team would like to thank Doc Jet Virtusio for the support and teachings he gave us in our minor class :))
|
| 157 |
+
|
| 158 |
+
"""
|
| 159 |
+
)
|
| 160 |
+
|
| 161 |
+
## TABS PER PROJECT TASK
|
| 162 |
+
(
|
| 163 |
+
DemoTAB,
|
| 164 |
+
DataCurationTAB,
|
| 165 |
+
EdATAB,
|
| 166 |
+
FeatureSelectionTAB,
|
| 167 |
+
TrainingPipelineTAB,
|
| 168 |
+
ModelEvaluationTAB,
|
| 169 |
+
ConTAB,
|
| 170 |
+
) = st.tabs(
|
| 171 |
+
[
|
| 172 |
+
"Demo",
|
| 173 |
+
"Data Curation",
|
| 174 |
+
"EDA",
|
| 175 |
+
"Feature Selection",
|
| 176 |
+
"Training Pipeline",
|
| 177 |
+
"Model Evaluation",
|
| 178 |
+
"Conclusion and Recommendations",
|
| 179 |
+
]
|
| 180 |
+
)
|
| 181 |
+
|
| 182 |
+
with DemoTAB:
|
| 183 |
+
st.write("")
|
| 184 |
+
st.markdown("""
|
| 185 |
+
Hi there! Input your sample sms messages for us to classify if it is spam or not.
|
| 186 |
+
Correspondingly, we will provide what text (tokens) signify in percentage is spam or not.
|
| 187 |
+
""")
|
| 188 |
+
|
| 189 |
+
## Provide user with sample spam and ham messages
|
| 190 |
+
with st.expander(
|
| 191 |
+
"📋 Try a sample message! This is from our test.csv so this data is not trained on our model"
|
| 192 |
+
):
|
| 193 |
+
st.markdown(
|
| 194 |
+
"Select a sample SMS message from below: Label is 0 for ham 🍗 and 1 for spam 🥫"
|
| 195 |
+
)
|
| 196 |
+
label_map = {0: "Ham", 1: "Spam"}
|
| 197 |
+
sample_index = st.selectbox(
|
| 198 |
+
"Select a sample SMS message",
|
| 199 |
+
sample_df.index,
|
| 200 |
+
format_func=lambda x: f"SMS {x} - {label_map[sample_df.loc[x, 'label']]}: {sample_df.loc[x, 'text'][:50]}",
|
| 201 |
+
)
|
| 202 |
+
if st.button("Use this sample"):
|
| 203 |
+
st.session_state["1"] = sample_df.loc[sample_index, "text"]
|
| 204 |
+
|
| 205 |
+
## Model selection
|
| 206 |
+
selected_model_name = st.selectbox(
|
| 207 |
+
"Select Classification Model", list(MODEL_PATHS.keys())
|
| 208 |
+
)
|
| 209 |
+
text = st.text_area("Enter SMS to classify here!", height=100, key="1")
|
| 210 |
+
|
| 211 |
+
## CASE WHEN BUTTON IS PRESSED
|
| 212 |
+
if st.button("Classify"):
|
| 213 |
+
if text:
|
| 214 |
+
with st.spinner("Analyzing..."):
|
| 215 |
+
clf = load_model(selected_model_name)
|
| 216 |
+
prediction = clf.predict([text])[0]
|
| 217 |
+
pred_proba = clf.predict_proba([text])[0]
|
| 218 |
+
|
| 219 |
+
st.success(f"Prediction: {'Spam' if prediction == 1 else 'Not Spam'}")
|
| 220 |
+
st.info(f"Probability of Spam: {pred_proba[1]:.2%}")
|
| 221 |
+
st.info(f"Probability of Not Spam: {pred_proba[0]:.2%}")
|
| 222 |
+
|
| 223 |
+
st.markdown("### Feature Importance")
|
| 224 |
+
explain_df = explain_prediction(clf, text, selected_model_name)
|
| 225 |
+
if (
|
| 226 |
+
explain_df is not None and not explain_df.empty
|
| 227 |
+
): ## calling the function
|
| 228 |
+
fig1 = px.bar(
|
| 229 |
+
explain_df,
|
| 230 |
+
x="Contribution",
|
| 231 |
+
y="Token",
|
| 232 |
+
orientation="h",
|
| 233 |
+
title="Top Contributing Tokens to Prediction",
|
| 234 |
+
labels={"Contribution": "Impact Score"},
|
| 235 |
+
color="Contribution",
|
| 236 |
+
color_continuous_scale="RdBu",
|
| 237 |
+
template="plotly_dark",
|
| 238 |
+
)
|
| 239 |
+
st.plotly_chart(fig1, use_container_width=True)
|
| 240 |
+
print(
|
| 241 |
+
"Top tokens:", explain_df.head()
|
| 242 |
+
) ## DEBUGGING LINE; Can be checked on streamlit terminal
|
| 243 |
+
else:
|
| 244 |
+
st.warning("Unable to compute token contribution for this model.")
|
| 245 |
+
else:
|
| 246 |
+
st.warning("Please input text to classify.")
|
| 247 |
+
with DataCurationTAB:
|
| 248 |
+
st.markdown("""
|
| 249 |
+
Data cleaning and pre-processing is necessary as we are considering three datasets with different contexts. Below is a summary of the data treatment and insights done to make the versions of the dataset.
|
| 250 |
+
|
| 251 |
+
- For [Dataset 1](https://www.kaggle.com/datasets/scottleechua/ph-spam-marketing-sms-w-timestamps):
|
| 252 |
+
- drop any null values; drop any full redactions done in `text` column through regex. Drops 74% of the dataset as text sms data is salient to the project.
|
| 253 |
+
- checked any redactions of the similar <> format within `text` feature. Concluded that any other text with <> format are coming from spam and ads category
|
| 254 |
+
- Drops `date_read` column. Renamed `date_received` column
|
| 255 |
+
- Made a label columns that considers the text as label `spam` if it is within the category `spam` and `ads` based on `category` column
|
| 256 |
+
- applied `get_carrier` function to get sms local provider.
|
| 257 |
+
- For [Dataset 2](https://www.kaggle.com/datasets/bwandowando/philippine-spam-sms-messages):
|
| 258 |
+
- drop any null values; all data will be considered under the label `spam` for its sms text messages data.
|
| 259 |
+
- checked any redactions of the similar <> format within `text` feature. found `<REAL NAME>` redactions; replaced it with a blankspace
|
| 260 |
+
- dropped `hashed_cellphone_number` and `carrier` column to apply own `get_carrier` function that considers also DITO sms provider.
|
| 261 |
+
- renamed column `masked_celphone_number` to `sender` and `date` to `date_received` similar to dataset 1.
|
| 262 |
+
- For [Dataset 3](https://github.com/Yissuh/Filipino-Spam-SMS-Detection-Model/blob/main/data-set.csv):
|
| 263 |
+
- drop any null values; dropped any `<<Content not supported.>>|<#>` tags and any other tags that are labeled under ham messages.
|
| 264 |
+
- renamed column `message` to `text` in conformity with other datasets.
|
| 265 |
+
- checked any redactions of the similar <> format within `text` feature. found `<CODE>`, `<DATE>`, `<Last 4 digits of acct num>`, `<REFERENCE NUMBER>`, `<TIME>`, `<space>` redactions to be ham messages; replaced it with a blankspace.
|
| 266 |
+
|
| 267 |
+
**Cleaning for Merged Dataset**
|
| 268 |
+
- Each datasets considered was checked for null values afterwards and checked if this is acceptable for processing; Decision was to just do an SQL query `NOT NULL` to filter values on target features for each respective tasks
|
| 269 |
+
- Used `concat` function to merged these three datasets knowing that column names are the same for all.
|
| 270 |
+
- Used `drop_duplicates` to remove 43 duplicate observations.
|
| 271 |
+
- Explicitly defined `date_received` as a datetime for EDA.
|
| 272 |
+
|
| 273 |
+
**NLP Processing on Merged Dataset**
|
| 274 |
+
- further processing done to get rid of unwanted characters; retrieves pure lowercased alphanumberic characters with no extract whitespace.
|
| 275 |
+
- gets rid of any `http-like` text which are urls; This was considered as ham messages often provide urls and lessen tokens considered in vectorization.
|
| 276 |
+
- noticed that both spam and ham have mixed english and tagalog text. Used `langdetect` package to sort if english or tagalog then used packages `spacy` for english and `calamancy` for filipino/tagalog stopwords removal, punctuation removal, and tokenization towards BOW and TF-IDF vectorization.
|
| 277 |
+
- `lemmatization` was also considered for both languages.
|
| 278 |
+
""")
|
| 279 |
+
|
| 280 |
+
st.text("Below is the version of the dataset used for EDA purposes")
|
| 281 |
+
st.dataframe(eda_df, use_container_width=True)
|
| 282 |
+
st.markdown("### Quick Stats for this dataset")
|
| 283 |
+
st.write(eda_df.describe())
|
| 284 |
+
|
| 285 |
+
# Optional let user download it
|
| 286 |
+
st.download_button(
|
| 287 |
+
label="📥 Download CSV",
|
| 288 |
+
data=eda_df.to_csv(index=False).encode(
|
| 289 |
+
"utf-8"
|
| 290 |
+
), # Might be redundant since i have the csv already
|
| 291 |
+
file_name="spam_eda_df.csv",
|
| 292 |
+
mime="text/csv",
|
| 293 |
+
)
|
| 294 |
+
|
| 295 |
+
st.text("Below is the version of the dataset used for ML Training purposes")
|
| 296 |
+
st.dataframe(ml_df, use_container_width=True)
|
| 297 |
+
st.markdown("### Quick Stats for this dataset")
|
| 298 |
+
st.write(ml_df.describe())
|
| 299 |
+
|
| 300 |
+
# Optional let user download it
|
| 301 |
+
st.download_button(
|
| 302 |
+
label="📥 Download CSV",
|
| 303 |
+
data=ml_df.to_csv(index=False).encode(
|
| 304 |
+
"utf-8"
|
| 305 |
+
), # Might be redundant since i have the csv already
|
| 306 |
+
file_name="spam_ml_df.csv",
|
| 307 |
+
mime="text/csv",
|
| 308 |
+
)
|
| 309 |
+
st.markdown("""
|
| 310 |
+
**--Datasets Considered--**
|
| 311 |
+
|
| 312 |
+
Below are the following datasets sourced along with a simple description of its features:
|
| 313 |
+
|
| 314 |
+
> [ph-spam-marketing-sms-w-timestamps](https://www.kaggle.com/datasets/scottleechua/ph-spam-marketing-sms-w-timestamps) from Kaggle made by u/Scott_Lee_Chua:
|
| 315 |
+
|
| 316 |
+
| column | count | description | dtype |
|
| 317 |
+
|---|---|---|---|
|
| 318 |
+
| data_received | 1622 | Datetime SMS was received in timezone UTC+8. | object |
|
| 319 |
+
| sender | 1622 | A partially-masked phone number, unmasked alphanumeric Sender ID, or one of three special values: <br><br><br>-redacted_contact if sender is a person in my personal contact book; <br><br>-redacted_individual if sender is a person not in my contacts and the message is solicited (e.g., updates from delivery riders); or <br><br>-redacted_business if sender is a business/service and all their messages are solicited.<br> | object |
|
| 320 |
+
| category | 1622 | Takes one of five possible values: spam, ads, gov, notifs, or OTP. See categories below.<br><br><br>spam — unsolicited messages from unknown senders.<br><br>ads — marketing messages from known businesses or services, such as GCash and Smart.<br><br>gov — public service announcements from Philippine government agencies, such as NTC and NDRRMC. <br><br>notifs — a catch-all category for legitimate and private messages, such as transaction confirmations, delivery updates, and a handful of personal conversations. <br><br>OTP — genuine one-time passwords <br> | object |
|
| 321 |
+
| text | 1622 | Full text for spam, ads, and gov. | object |
|
| 322 |
+
|
| 323 |
+
> [🇵🇭 Philippine Spam/ Scam SMS](https://www.kaggle.com/datasets/bwandowando/philippine-spam-sms-messages) from Kaggle made by u/bwandowando:
|
| 324 |
+
|
| 325 |
+
| column | count | description | dtype |
|
| 326 |
+
|---|---|---|---|
|
| 327 |
+
| masked_celphone_number | 945 | cellphone number that is masked instead on the first five numbers and last three numbers. | object |
|
| 328 |
+
| hashed_celphone_number | 945 | part of the XML data given that provides its unique identifier. | object |
|
| 329 |
+
| date | 945 | date when text was received. | object |
|
| 330 |
+
| text | 945 | Full text for spam, ads, and gov. | object |
|
| 331 |
+
| carrier | 945 | SMS registry fix that is associated with the first five numbers of the cellphone number. | object |
|
| 332 |
+
|
| 333 |
+
|
| 334 |
+
>[Filipino-Spam-SMS-Detection-Model](https://github.com/Yissuh/Filipino-Spam-SMS-Detection-Model/blob/main/data-set.csv) from Github made by u/Yissuh and TUP-M students:
|
| 335 |
+
|
| 336 |
+
| column | count | description | dtype | |
|
| 337 |
+
|---|---|---|---|---|
|
| 338 |
+
| text | 873 | Full text for spam, ads, and gov. | object | |
|
| 339 |
+
| label | 873 | text that is labeled is either spam or ham. | object | |
|
| 340 |
+
|
| 341 |
+
<br>**--Final Version of the Dataset Considerd--**
|
| 342 |
+
|
| 343 |
+
With this, the dataset considered have 2 versions being considered for this project, one for EDA and one for ML_training that is saved in an SQLite database for querying. For simplicity, csv_files are provided done after data cleaning and pre-processing that you may check further in succeeding sections. Below is a summary of the version dataset:
|
| 344 |
+
|
| 345 |
+
> Version of the Dataset for EDA:
|
| 346 |
+
|
| 347 |
+
| column | count | description | dtype |
|
| 348 |
+
|---|---|---|---|
|
| 349 |
+
| date_received | 1713 | date when text was received. | datetime |
|
| 350 |
+
| sender | 1713 | partially-masked phone numbers. | object |
|
| 351 |
+
| preprocessed_text | 1713 | cleaned data without redactions and only alphanumeric characters. | object |
|
| 352 |
+
| carrier | 1713 | SMS registry fix from sender's number. | object |
|
| 353 |
+
| label | 1713 | label if text is either spam or ham. | category |
|
| 354 |
+
|
| 355 |
+
|
| 356 |
+
> Version of the Dataset for ML Training:
|
| 357 |
+
|
| 358 |
+
| column | count | description | dtype |
|
| 359 |
+
|---|---|---|---|
|
| 360 |
+
| text | 3379 | cleaned data without redactions and only alphanumeric characters. | object |
|
| 361 |
+
| label | 3379 | label if text is either spam or ham. | category |
|
| 362 |
+
|
| 363 |
+
> ham and spam count for ML Training: We recognize that there is a class imbalance between the two labels. We treat this as an acceptable data for training.
|
| 364 |
+
|
| 365 |
+
| label | text |
|
| 366 |
+
|-------|------|
|
| 367 |
+
| ham | 418 |
|
| 368 |
+
| spam | 2964 |
|
| 369 |
+
""")
|
| 370 |
+
|
| 371 |
+
with EdATAB:
|
| 372 |
+
st.markdown("""
|
| 373 |
+
The objective of the EDA for this project is to make an interactive visualization for the exploration of the made dataset in regards to the SMS registration act of 2022.
|
| 374 |
+
This will be displayed in the demo. The following are the questions answered through the EDA:
|
| 375 |
+
|
| 376 |
+
- How many scam messages were received before/after SIM registration?
|
| 377 |
+
- Which telecom prefixes are most targeted or send the most spam?
|
| 378 |
+
- What words are most associated with scams?
|
| 379 |
+
""")
|
| 380 |
+
|
| 381 |
+
st.markdown("""
|
| 382 |
+
Summary of the insights from the EDA are the following:
|
| 383 |
+
- ham messages can be characterized to be typically shorter in text length while spam messages averages from 50 to 200 text length within the filipino-context.
|
| 384 |
+
- Most frequent SMS carrier that does unsolicited messages is coming from `Smart`.
|
| 385 |
+
- Most frequent messages associated with spam are the terms `bonus`, `BDO`, `com`, `free`, and `win` most likely persistent with unsolicited online gambling ads and solicitations to deposit on a unsafe link.
|
| 386 |
+
- Most frequent messages associated with ham are the terms `access`, `android`, `app`, `code` most likely persistent with government announcements and warnings. Other context for this would be retrieving one-time-passwords (OTP) code.
|
| 387 |
+
- scam/spam messages are still prevalent despite the implementation of the sim registration act with known operations of this peaking during the middle of the week during the afternoon.
|
| 388 |
+
|
| 389 |
+
Additionally, EDA done for ml_training dataset version under `cleaned_sms_text_labels_only_v2.csv` is provided.
|
| 390 |
+
""")
|
| 391 |
+
|
| 392 |
+
## -- EDA VISUALIZATIONS HERE --
|
| 393 |
+
st.write("### Text Length Distribution")
|
| 394 |
+
eda_df["length"] = eda_df["preprocessed_text"].apply(len)
|
| 395 |
+
eda_df.head()
|
| 396 |
+
fig2 = px.histogram(
|
| 397 |
+
eda_df,
|
| 398 |
+
x="length",
|
| 399 |
+
nbins=50, # optional, adjust bins
|
| 400 |
+
color_discrete_sequence=["#636EFA"], # optional style
|
| 401 |
+
)
|
| 402 |
+
st.plotly_chart(fig2, use_container_width=True)
|
| 403 |
+
|
| 404 |
+
st.write("### Prefix-wise spam distribution")
|
| 405 |
+
fig3 = px.histogram(eda_df, x="carrier", color_discrete_sequence=["#636EFA"])
|
| 406 |
+
st.plotly_chart(fig3, use_container_width=True)
|
| 407 |
+
|
| 408 |
+
copy = eda_df.copy()
|
| 409 |
+
copy["date_received"] = pd.to_datetime(copy["date_received"], format="mixed")
|
| 410 |
+
copy["date_received"] = pd.to_datetime(copy["date_received"]).dt.normalize()
|
| 411 |
+
copy["date_count"] = copy.groupby("date_received")["date_received"].transform(
|
| 412 |
+
"size"
|
| 413 |
+
)
|
| 414 |
+
copy.sort_values(by="date_received", ascending=True, inplace=True)
|
| 415 |
+
|
| 416 |
+
st.write("### Time-series plot (Messages per Month/Year")
|
| 417 |
+
fig4 = px.line(
|
| 418 |
+
copy,
|
| 419 |
+
x="date_received",
|
| 420 |
+
y="date_count",
|
| 421 |
+
labels={"x": "Year", "y": "Number of Messages"},
|
| 422 |
+
color_discrete_sequence=["#636EFA"],
|
| 423 |
+
)
|
| 424 |
+
st.plotly_chart(fig4, use_container_width=True)
|
| 425 |
+
|
| 426 |
+
# Convert values in 'date_received' column to datetime datatype
|
| 427 |
+
eda_df["date_received"] = pd.to_datetime(eda_df["date_received"], format="mixed")
|
| 428 |
+
# Extract year from 'date_received' column
|
| 429 |
+
eda_df["year"] = eda_df["date_received"].dt.year
|
| 430 |
+
# Extract name of day from 'date_received' column
|
| 431 |
+
eda_df["day_name"] = eda_df["date_received"].dt.day_name()
|
| 432 |
+
# Extract hour of day from 'date_received' column
|
| 433 |
+
eda_df["hour_of_day"] = eda_df["date_received"].dt.hour
|
| 434 |
+
# Extract name of month from 'date_received' column
|
| 435 |
+
eda_df["month_name"] = eda_df["date_received"].dt.month_name()
|
| 436 |
+
# Check whether day in 'date_received' column falls on a weekend
|
| 437 |
+
eda_df["is_weekend"] = eda_df["date_received"].dt.dayofweek.isin([5, 6]).astype(int)
|
| 438 |
+
|
| 439 |
+
# Create a dataframe with the extracted features
|
| 440 |
+
datetime_features_df = eda_df[
|
| 441 |
+
["date_received", "year", "day_name", "hour_of_day", "month_name", "is_weekend"]
|
| 442 |
+
]
|
| 443 |
+
year_counts = eda_df["year"].value_counts().sort_index()
|
| 444 |
+
|
| 445 |
+
st.write("### Distribution of Messages by Year")
|
| 446 |
+
fig5 = px.bar(
|
| 447 |
+
x=year_counts.index,
|
| 448 |
+
y=year_counts.values,
|
| 449 |
+
labels={"x": "Year", "y": "Number of Messages"},
|
| 450 |
+
color=year_counts.values,
|
| 451 |
+
color_continuous_scale=px.colors.sequential.Viridis,
|
| 452 |
+
)
|
| 453 |
+
st.plotly_chart(fig5, use_container_width=True)
|
| 454 |
+
|
| 455 |
+
day_order = [
|
| 456 |
+
"Monday",
|
| 457 |
+
"Tuesday",
|
| 458 |
+
"Wednesday",
|
| 459 |
+
"Thursday",
|
| 460 |
+
"Friday",
|
| 461 |
+
"Saturday",
|
| 462 |
+
"Sunday",
|
| 463 |
+
]
|
| 464 |
+
day_name_counts = eda_df["day_name"].value_counts().reindex(day_order).fillna(0)
|
| 465 |
+
|
| 466 |
+
st.write("### Distribution of Messages by Day of the Week")
|
| 467 |
+
fig6 = px.line(
|
| 468 |
+
x=day_name_counts.index,
|
| 469 |
+
y=day_name_counts.values,
|
| 470 |
+
labels={"x": "Day of the Week", "y": "Number of Messages"},
|
| 471 |
+
markers=True,
|
| 472 |
+
line_shape="linear",
|
| 473 |
+
color_discrete_sequence=["#636EFA"],
|
| 474 |
+
)
|
| 475 |
+
st.plotly_chart(fig6, use_container_width=True)
|
| 476 |
+
|
| 477 |
+
hour_of_day_counts = eda_df["hour_of_day"].value_counts().sort_index()
|
| 478 |
+
st.write("### Distribution of Messages by Hour of the Day")
|
| 479 |
+
fig7 = px.bar(
|
| 480 |
+
hour_of_day_counts,
|
| 481 |
+
x=hour_of_day_counts.index,
|
| 482 |
+
y=hour_of_day_counts.values,
|
| 483 |
+
labels={"x": "Hour of the Day (0-23)", "y": "Number of Messages"},
|
| 484 |
+
color=hour_of_day_counts.values,
|
| 485 |
+
color_continuous_scale=px.colors.sequential.Viridis,
|
| 486 |
+
)
|
| 487 |
+
st.plotly_chart(fig7, use_container_width=True)
|
| 488 |
+
|
| 489 |
+
month_order = [
|
| 490 |
+
"January",
|
| 491 |
+
"February",
|
| 492 |
+
"March",
|
| 493 |
+
"April",
|
| 494 |
+
"May",
|
| 495 |
+
"June",
|
| 496 |
+
"July",
|
| 497 |
+
"August",
|
| 498 |
+
"September",
|
| 499 |
+
"October",
|
| 500 |
+
"November",
|
| 501 |
+
"December",
|
| 502 |
+
]
|
| 503 |
+
|
| 504 |
+
month_name_counts = (
|
| 505 |
+
eda_df["month_name"].value_counts().reindex(month_order).fillna(0)
|
| 506 |
+
)
|
| 507 |
+
|
| 508 |
+
st.write("### Distribution of Messages by Month")
|
| 509 |
+
fig8 = px.bar(
|
| 510 |
+
month_name_counts,
|
| 511 |
+
x=month_name_counts.values,
|
| 512 |
+
y=month_name_counts.index,
|
| 513 |
+
orientation="h",
|
| 514 |
+
labels={"x": "Number of Messages", "y": "Month"},
|
| 515 |
+
color=month_name_counts.values,
|
| 516 |
+
color_continuous_scale=px.colors.sequential.Viridis,
|
| 517 |
+
)
|
| 518 |
+
st.plotly_chart(fig8, use_container_width=True)
|
| 519 |
+
|
| 520 |
+
is_weekend_counts = (
|
| 521 |
+
eda_df["is_weekend"].map({0: "Weekday", 1: "Weekend"}).value_counts()
|
| 522 |
+
)
|
| 523 |
+
weekend_order = ["Weekday", "Weekend"]
|
| 524 |
+
is_weekend_counts = is_weekend_counts.reindex(weekend_order).fillna(0)
|
| 525 |
+
|
| 526 |
+
st.write("### Distribution of Messages: Weekday vs. Weekend")
|
| 527 |
+
fig9 = px.pie(
|
| 528 |
+
names=is_weekend_counts.index,
|
| 529 |
+
values=is_weekend_counts.values,
|
| 530 |
+
color_discrete_sequence=px.colors.sequential.Viridis,
|
| 531 |
+
)
|
| 532 |
+
st.plotly_chart(fig9, use_container_width=True)
|
| 533 |
+
|
| 534 |
+
st.write("## EDA for second version of the dataset to be used for training")
|
| 535 |
+
|
| 536 |
+
## checking most common spam message values and its respective label
|
| 537 |
+
st.markdown("Checking most common `spam texts` for this version of the dataset")
|
| 538 |
+
spam_df = ml_df[ml_df["label"] == "spam"]
|
| 539 |
+
st.dataframe(spam_df.value_counts(), use_container_width=True)
|
| 540 |
+
|
| 541 |
+
st.markdown("Checking most common `ham texts` for this version of the dataset")
|
| 542 |
+
ham_df = ml_df[ml_df["label"] == "ham"]
|
| 543 |
+
st.dataframe(ham_df.value_counts(), use_container_width=True)
|
| 544 |
+
|
| 545 |
+
st.markdown("### ☁️ WordCloud of Ham and Spam Messages")
|
| 546 |
+
st.write(
|
| 547 |
+
"NOTE: issue on displaying this properly on streamlit as text are intersecting but this is acceptable"
|
| 548 |
+
)
|
| 549 |
+
ham_text = " ".join(ml_df[ml_df["label"] == "ham"]["text"].astype(str).tolist())
|
| 550 |
+
spam_text = " ".join(ml_df[ml_df["label"] == "spam"]["text"].astype(str).tolist())
|
| 551 |
+
|
| 552 |
+
col1, col2 = st.columns(2)
|
| 553 |
+
with col1:
|
| 554 |
+
st.subheader("Ham 🍗")
|
| 555 |
+
ham_elements = get_wordcloud_data(ham_text)
|
| 556 |
+
plot_wordcloud(ham_elements, "Ham Messages WordCloud")
|
| 557 |
+
|
| 558 |
+
with col2:
|
| 559 |
+
st.subheader("Spam 🥫")
|
| 560 |
+
spam_elements = get_wordcloud_data(spam_text)
|
| 561 |
+
plot_wordcloud(spam_elements, "Spam Messages WordCloud")
|
| 562 |
+
|
| 563 |
+
with FeatureSelectionTAB:
|
| 564 |
+
st.markdown("""
|
| 565 |
+
We are only considering Bag-of-Words (BOW) using CountVectorizer and Term Frequency-Inverse Document Frequency (TF-IDF) for features purely on the text.
|
| 566 |
+
:blue-background[The team did not consider length of the words and other potential feature that can be inferred from the text.]
|
| 567 |
+
|
| 568 |
+
BOW considers the count of the words, converted as tokens at this point, within the sentence. TF-IDF considers the frequency of the token throughout the whole corpus of documents.
|
| 569 |
+
Below is the implementation done to determine what feature is suited for the project.
|
| 570 |
+
Based on the heatmap for tfidf, we were able to determine the top terms that have the most reoccurence between documents therefroe it is appropriate that `TF-IDF` will be used as the feature for training pipeline.
|
| 571 |
+
|
| 572 |
+
Insight will be to make suspections on these top terms for spam: `bonus`, `account`, `araw`;
|
| 573 |
+
Ham messages that are frequent will be government announcements and OTPs therefore words like `access`, `code` and `app` are expected to associated with ham messages.
|
| 574 |
+
""")
|
| 575 |
+
|
| 576 |
+
st.markdown("### Top-N Terms Bar Chart for TF-IDF")
|
| 577 |
+
tfidf_vect = TfidfVectorizer(stop_words=list(combined_stopwords), max_features=20)
|
| 578 |
+
ml_df["text"] = ml_df["text"].fillna("")
|
| 579 |
+
X_tfidf = tfidf_vect.fit_transform(ml_df["text"])
|
| 580 |
+
counts = X_tfidf.toarray().sum(axis=0)
|
| 581 |
+
terms = tfidf_vect.get_feature_names_out()
|
| 582 |
+
|
| 583 |
+
df_top_terms = pd.DataFrame({"term": terms, "count": counts})
|
| 584 |
+
|
| 585 |
+
fig10 = px.bar(
|
| 586 |
+
df_top_terms.sort_values(by="count", ascending=False),
|
| 587 |
+
x="term",
|
| 588 |
+
y="count",
|
| 589 |
+
title="Top Terms by Tfidf Frequency",
|
| 590 |
+
text="count",
|
| 591 |
+
color_discrete_sequence=["#636EFA"],
|
| 592 |
+
)
|
| 593 |
+
fig10.update_traces(textposition="outside")
|
| 594 |
+
st.plotly_chart(fig10, use_container_width=True)
|
| 595 |
+
|
| 596 |
+
ham_df1 = ham_df.copy()
|
| 597 |
+
ham_df1["text"] = ham_df1["text"].fillna("")
|
| 598 |
+
X = vectorizer.fit_transform(ham_df1["text"])
|
| 599 |
+
tfidf_df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
|
| 600 |
+
|
| 601 |
+
st.write("### TF-IDF Heatmap: Top Terms vs Documents for Ham Messages")
|
| 602 |
+
fig11 = px.imshow(
|
| 603 |
+
tfidf_df.T,
|
| 604 |
+
labels=dict(x="Document", y="Term", color="TF-IDF"),
|
| 605 |
+
aspect="auto",
|
| 606 |
+
color_continuous_scale="Viridis",
|
| 607 |
+
)
|
| 608 |
+
st.plotly_chart(fig11, use_container_width=True)
|
| 609 |
+
|
| 610 |
+
st.write("### TF-IDF Heatmap: Top Terms vs Documents for Spam Messages")
|
| 611 |
+
spam_df1 = spam_df.copy()
|
| 612 |
+
spam_df1["text"] = spam_df1["text"].fillna("")
|
| 613 |
+
|
| 614 |
+
X = vectorizer.fit_transform(spam_df1["text"])
|
| 615 |
+
tfidf_df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
|
| 616 |
+
|
| 617 |
+
fig12 = px.imshow(
|
| 618 |
+
tfidf_df.T,
|
| 619 |
+
labels=dict(x="Document", y="Term", color="TF-IDF"),
|
| 620 |
+
aspect="auto",
|
| 621 |
+
color_continuous_scale="Viridis",
|
| 622 |
+
)
|
| 623 |
+
st.plotly_chart(fig12, use_container_width=True)
|
| 624 |
+
|
| 625 |
+
st.write("### Scatter Plot for top terms between features for selection")
|
| 626 |
+
bow_cv.fit(ml_df["text"].fillna(""))
|
| 627 |
+
X_ham = bow_cv.transform(ham_df["text"].fillna("")).toarray().sum(axis=0)
|
| 628 |
+
X_spam = bow_cv.transform(spam_df["text"].fillna("")).toarray().sum(axis=0)
|
| 629 |
+
label = ["spam" if s > h else "ham" for h, s in zip(X_ham, X_spam)]
|
| 630 |
+
|
| 631 |
+
X_counts = bow_cv.fit_transform(ml_df["text"]).toarray().sum(axis=0)
|
| 632 |
+
X_tfidf = tfidf.fit_transform(ml_df["text"]).toarray().sum(axis=0)
|
| 633 |
+
|
| 634 |
+
df_terms = pd.DataFrame(
|
| 635 |
+
{
|
| 636 |
+
"term": bow_cv.get_feature_names_out(),
|
| 637 |
+
"count": X_counts,
|
| 638 |
+
"tfidf": X_tfidf,
|
| 639 |
+
"label": label,
|
| 640 |
+
}
|
| 641 |
+
)
|
| 642 |
+
|
| 643 |
+
fig13 = px.scatter(
|
| 644 |
+
df_terms,
|
| 645 |
+
x="count",
|
| 646 |
+
y="tfidf",
|
| 647 |
+
text="term",
|
| 648 |
+
title="TF-IDF vs Frequency",
|
| 649 |
+
hover_data=["label"],
|
| 650 |
+
)
|
| 651 |
+
fig13.update_layout(
|
| 652 |
+
plot_bgcolor="#111111", # dark gray background
|
| 653 |
+
paper_bgcolor="#111111",
|
| 654 |
+
font_color="white", # makes text visible
|
| 655 |
+
title_font=dict(size=20, color="white"),
|
| 656 |
+
xaxis=dict(color="white", gridcolor="gray"),
|
| 657 |
+
yaxis=dict(color="white", gridcolor="gray"),
|
| 658 |
+
)
|
| 659 |
+
fig13.update_traces(
|
| 660 |
+
marker=dict(size=8, color="deepskyblue", line=dict(width=1, color="white")),
|
| 661 |
+
textposition="top center",
|
| 662 |
+
textfont=dict(color="white", size=12),
|
| 663 |
+
)
|
| 664 |
+
st.plotly_chart(fig13, use_container_width=True)
|
| 665 |
+
|
| 666 |
+
with TrainingPipelineTAB:
|
| 667 |
+
st.markdown("### Training Pipeline")
|
| 668 |
+
st.markdown("""
|
| 669 |
+
The project will consider a train-val-test split for a cross-validation (cv) training with hyperparameter tuning considered per fold-run.
|
| 670 |
+
|
| 671 |
+
The group will consider :blue-background[our (4) traditional and explainable classifiers] that are known to be used for spam detection. These are to be the two variants of `Naive-Bayes (NB)`, multinomial and complement (noted to handle class imbalances well), `Support Vector Machine`, and `RandomForest`.
|
| 672 |
+
|
| 673 |
+
The project utilized `MLflow` to track training and artificats (evaluation metrics) per general run when the model is called; We have put this all under a function.""")
|
| 674 |
+
|
| 675 |
+
split_code = """
|
| 676 |
+
|
| 677 |
+
##define train-test vals
|
| 678 |
+
X = ml_df['text']
|
| 679 |
+
y = ml_df['label']
|
| 680 |
+
label_encoder = LabelEncoder()
|
| 681 |
+
y_encoded = label_encoder.fit_transform(y)
|
| 682 |
+
|
| 683 |
+
##splitting
|
| 684 |
+
X_temp, X_test, y_temp, y_test = train_test_split(X, y_encoded, test_size=0.3, random_state=42, stratify=y_encoded)
|
| 685 |
+
|
| 686 |
+
## will set split for validation to be also 0.2
|
| 687 |
+
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.3, random_state=42)
|
| 688 |
+
"""
|
| 689 |
+
st.markdown("## Define Train-Val-Test Split")
|
| 690 |
+
st.code(split_code, language="python")
|
| 691 |
+
|
| 692 |
+
helper_code = """
|
| 693 |
+
|
| 694 |
+
# I want to save also a confusion matrix in a image format to be displayed and checked
|
| 695 |
+
def plot_and_log_cf_matrix(y_true, y_pred, labels, model_type, run_id):
|
| 696 |
+
cm = confusion_matrix(y_true, y_pred)
|
| 697 |
+
plt.figure(figsize=(6,5))
|
| 698 |
+
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)
|
| 699 |
+
plt.title(f'Confusion Matrix from run: {model_type}_{run_id}')
|
| 700 |
+
plt.ylabel('Actual')
|
| 701 |
+
plt.xlabel('Predicted')
|
| 702 |
+
|
| 703 |
+
# Saving the temp file here
|
| 704 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as temp_file:
|
| 705 |
+
plt.savefig(temp_file.name)
|
| 706 |
+
img_path = f'confusion_matrix_{model_type}_{run_id}.png'
|
| 707 |
+
plt.savefig(img_path)
|
| 708 |
+
plt.close()
|
| 709 |
+
mlflow.log_artifact(img_path)
|
| 710 |
+
os.remove(img_path) ## partial cache, will not be saved in drive
|
| 711 |
+
|
| 712 |
+
# I want to save the cross-val performance in mlflow too
|
| 713 |
+
def plot_cv_perf(cv_results,run_id):
|
| 714 |
+
mean_scores = cv_results['mean_test_score']
|
| 715 |
+
std_scores = cv_results['std_test_score']
|
| 716 |
+
plt.figure()
|
| 717 |
+
plt.errorbar(range(len(mean_scores)), mean_scores, yerr=std_scores, fmt='-o')
|
| 718 |
+
plt.title('Cross-Validation Performance per Parameter Set')
|
| 719 |
+
plt.xlabel('Parameter Set Index')
|
| 720 |
+
plt.ylabel('CV Accuracy')
|
| 721 |
+
img_path = f'cv_performance_{run_id}.png'
|
| 722 |
+
plt.savefig(img_path)
|
| 723 |
+
plt.close()
|
| 724 |
+
mlflow.log_artifact(img_path)
|
| 725 |
+
os.remove(img_path) ## partial cache, will not be saved in drive
|
| 726 |
+
|
| 727 |
+
# log the eval metrics in mlflow
|
| 728 |
+
def evaluate_and_log_metrics(y_true, y_pred, model_type, val_name, run_id):
|
| 729 |
+
acc = accuracy_score(y_true, y_pred)
|
| 730 |
+
prec = precision_score(y_true, y_pred, average='weighted', zero_division=0)
|
| 731 |
+
rec = recall_score(y_true, y_pred, average='weighted', zero_division=0)
|
| 732 |
+
f1 = f1_score(y_true, y_pred, average='weighted', zero_division=0)
|
| 733 |
+
|
| 734 |
+
mlflow.log_metric(f'{model_type}_{run_id}_accuracy', acc)
|
| 735 |
+
mlflow.log_metric(f'{model_type}_{run_id}_precision', prec)
|
| 736 |
+
mlflow.log_metric(f'{model_type}_{run_id}_recall', rec)
|
| 737 |
+
mlflow.log_metric(f'{model_type}_{run_id}_f1_score', f1)
|
| 738 |
+
|
| 739 |
+
report = classification_report(y_true, y_pred)
|
| 740 |
+
report_path = f'classification_report_{model_type}_{val_name}_{run_id}.txt'
|
| 741 |
+
with open(report_path, 'w') as f:
|
| 742 |
+
f.write(report)
|
| 743 |
+
mlflow.log_artifact(report_path)
|
| 744 |
+
os.remove(report_path)
|
| 745 |
+
|
| 746 |
+
return acc, prec, rec, f1
|
| 747 |
+
"""
|
| 748 |
+
|
| 749 |
+
st.markdown("### Helper Functions for MLflow")
|
| 750 |
+
st.code(helper_code, language="python")
|
| 751 |
+
|
| 752 |
+
train_code = """
|
| 753 |
+
|
| 754 |
+
## init a function for mlflow tracking
|
| 755 |
+
def train(run_name='default_run', preprocessor='tfidf',model_type='svm', cv_folds=5):
|
| 756 |
+
with mlflow.start_run(run_name=run_name) as run:
|
| 757 |
+
run_id = run.info.run_id
|
| 758 |
+
vectorizer = TfidfVectorizer(ngram_range=(1,2)) if preprocessor == 'tfidf' else CountVectorizer()
|
| 759 |
+
|
| 760 |
+
## IMPORTANT CHANGE THIS TO IMPROVE ACCURACY
|
| 761 |
+
#hyper-parameter tuning through gridsearch CV initialize here; call also model
|
| 762 |
+
if model_type == 'svm':
|
| 763 |
+
model = SVC(probability=True)
|
| 764 |
+
param_grid = {
|
| 765 |
+
'classifier__C': [0.1, 1, 10],
|
| 766 |
+
'classifier__kernel': ['linear', 'rbf']
|
| 767 |
+
}
|
| 768 |
+
|
| 769 |
+
elif model_type == 'random_forest':
|
| 770 |
+
model = RandomForestClassifier(class_weight='balanced')
|
| 771 |
+
param_grid = {
|
| 772 |
+
'classifier__n_estimators': [50, 100, 200],
|
| 773 |
+
'classifier__max_depth': [None, 10, 20],
|
| 774 |
+
'classifier__min_samples_split': [2, 5, 10],
|
| 775 |
+
'classifier__min_samples_leaf': [1, 5, 10]
|
| 776 |
+
}
|
| 777 |
+
|
| 778 |
+
elif model_type == 'complementNB':
|
| 779 |
+
model = ComplementNB()
|
| 780 |
+
param_grid = {
|
| 781 |
+
'classifier__alpha': [0.3, 0.5, 1.0, 1.5],
|
| 782 |
+
}
|
| 783 |
+
|
| 784 |
+
elif model_type == 'multinomialNB':
|
| 785 |
+
model = MultinomialNB()
|
| 786 |
+
param_grid = {
|
| 787 |
+
'classifier__alpha': [0.3, 0.5, 1.0, 1.5],
|
| 788 |
+
}
|
| 789 |
+
else:
|
| 790 |
+
raise ValueError(f"Invalid model type: {model_type}")
|
| 791 |
+
|
| 792 |
+
pipeline = Pipeline([
|
| 793 |
+
('vectorizer', vectorizer),
|
| 794 |
+
('classifier', model)
|
| 795 |
+
])
|
| 796 |
+
|
| 797 |
+
# calling the stratifieed k-fold cv and grid search
|
| 798 |
+
strat_cv = StratifiedKFold(n_splits=cv_folds, shuffle=True, random_state=42)
|
| 799 |
+
|
| 800 |
+
grid_search = GridSearchCV(
|
| 801 |
+
estimator=pipeline,
|
| 802 |
+
param_grid=param_grid,
|
| 803 |
+
cv=strat_cv,
|
| 804 |
+
scoring='accuracy',
|
| 805 |
+
n_jobs=-1
|
| 806 |
+
)
|
| 807 |
+
|
| 808 |
+
## THIS IS THE TRAINING PART IN FUNCTION
|
| 809 |
+
grid_search.fit(X_train, y_train)
|
| 810 |
+
best_model = grid_search.best_estimator_
|
| 811 |
+
|
| 812 |
+
## LOGGING PARAMS IN MLFLOW
|
| 813 |
+
mlflow.log_param("preprocessor", preprocessor)
|
| 814 |
+
mlflow.log_param("model_type", model_type)
|
| 815 |
+
mlflow.log_params(grid_search.best_params_)
|
| 816 |
+
|
| 817 |
+
mlflow.log_metric("best_cv_accuracy", grid_search.best_score_)
|
| 818 |
+
|
| 819 |
+
plot_cv_perf(grid_search.cv_results_, run_id) ## variables needed for function: cv_results,run_id
|
| 820 |
+
|
| 821 |
+
# ! Validation set evaluation !
|
| 822 |
+
val_preds = best_model.predict(X_val)
|
| 823 |
+
evaluate_and_log_metrics(y_val, val_preds, model_type, 'val', run_id) ## variables needed for function: y_true, y_pred, model_type, val_name, run_id
|
| 824 |
+
plot_and_log_cf_matrix(y_val, val_preds, label_encoder.classes_, model_type, run_id) ## variables needed for function: y_true, y_pred, labels, model_type, run_id
|
| 825 |
+
val_acc = accuracy_score(y_val, val_preds)
|
| 826 |
+
val_f1 = f1_score(y_val, val_preds, average='weighted', zero_division=0)
|
| 827 |
+
|
| 828 |
+
|
| 829 |
+
# ! Test set evaluation !
|
| 830 |
+
test_preds=best_model.predict(X_test)
|
| 831 |
+
evaluate_and_log_metrics(y_test, test_preds, model_type, 'test', run_id) ## variables needed for function: y_true, y_pred, model_type, val_name, run_id
|
| 832 |
+
plot_and_log_cf_matrix(y_test, test_preds, label_encoder.classes_, model_type, run_id)
|
| 833 |
+
test_acc = accuracy_score(y_test, test_preds)
|
| 834 |
+
test_f1 = f1_score(y_test, test_preds, average='weighted', zero_division=0)
|
| 835 |
+
|
| 836 |
+
#save best model
|
| 837 |
+
mlflow.sklearn.log_model(best_model, f"best_model for run {run_name}")
|
| 838 |
+
print(f"\n\n--- RUN TEST FOR {run_name} using {preprocessor} and {model_type}; {run_id} ---")
|
| 839 |
+
print(f"Best CV Accuracy: {grid_search.best_score_:.4f}")
|
| 840 |
+
print(f"Validation Accuracy: {val_acc:.4f}, F1: {val_f1:.4f}")
|
| 841 |
+
print(f"Test Accuracy: {test_acc:.4f}, F1: {test_f1:.4f}")
|
| 842 |
+
print(f"Best Parameters: {grid_search.best_params_}\n\n")
|
| 843 |
+
"""
|
| 844 |
+
st.markdown("### Training Pipeline Made with MLflow configurations")
|
| 845 |
+
st.code(train_code, language="python")
|
| 846 |
+
|
| 847 |
+
sample_run = """
|
| 848 |
+
|
| 849 |
+
--- RUN TEST FOR multinomialNB_v2 using tfidf and multinomialNB; 747c6ac17b154a9284aad6f69b62e38a ---
|
| 850 |
+
Best CV Accuracy: 0.9268
|
| 851 |
+
Validation Accuracy: 0.9324, F1: 0.9214
|
| 852 |
+
Test Accuracy: 0.9339, F1: 0.9235
|
| 853 |
+
Best Parameters: {'classifier__alpha': 0.3}
|
| 854 |
+
|
| 855 |
+
|
| 856 |
+
🏃 View run multinomialNB_v2 at: http://localhost:2000/#/experiments/616295389774529782/runs/747c6ac17b154a9284aad6f69b62e38a
|
| 857 |
+
🧪 View experiment at: http://localhost:2000/#/experiments/616295389774529782
|
| 858 |
+
2025/07/28 14:30:00 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.
|
| 859 |
+
2025/07/28 14:30:04 WARNING mlflow.models.model: Model logged without a signature and input example. Please set `input_example` parameter when logging the model to auto infer the model signature.
|
| 860 |
+
|
| 861 |
+
|
| 862 |
+
--- RUN TEST FOR complementNB_v2 using tfidf and complementNB; 71b18fe5ba9f4dd38d90c3033c298963 ---
|
| 863 |
+
Best CV Accuracy: 0.9541
|
| 864 |
+
Validation Accuracy: 0.9577, F1: 0.9564
|
| 865 |
+
Test Accuracy: 0.9645, F1: 0.9641
|
| 866 |
+
Best Parameters: {'classifier__alpha': 0.3}
|
| 867 |
+
|
| 868 |
+
|
| 869 |
+
🏃 View run complementNB_v2 at: http://localhost:2000/#/experiments/616295389774529782/runs/71b18fe5ba9f4dd38d90c3033c298963
|
| 870 |
+
🧪 View experiment at: http://localhost:2000/#/experiments/616295389774529782
|
| 871 |
+
2025/07/28 14:33:22 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.
|
| 872 |
+
2025/07/28 14:33:26 WARNING mlflow.models.model: Model logged without a signature and input example. Please set `input_example` parameter when logging the model to auto infer the model signature.
|
| 873 |
+
|
| 874 |
+
|
| 875 |
+
--- RUN TEST FOR random_forest_v2 using tfidf and random_forest; e2ddf375fb104e8881b25d0cdbd5c2ac ---
|
| 876 |
+
Best CV Accuracy: 0.9522
|
| 877 |
+
Validation Accuracy: 0.9563, F1: 0.9566
|
| 878 |
+
Test Accuracy: 0.9675, F1: 0.9678
|
| 879 |
+
Best Parameters: {'classifier__max_depth': None, 'classifier__min_samples_leaf': 1, 'classifier__min_samples_split': 2, 'classifier__n_estimators': 50}
|
| 880 |
+
|
| 881 |
+
|
| 882 |
+
🏃 View run random_forest_v2 at: http://localhost:2000/#/experiments/616295389774529782/runs/e2ddf375fb104e8881b25d0cdbd5c2ac
|
| 883 |
+
🧪 View experiment at: http://localhost:2000/#/experiments/616295389774529782
|
| 884 |
+
2025/07/28 14:34:20 WARNING mlflow.models.model: `artifact_path` is deprecated. Please use `name` instead.
|
| 885 |
+
2025/07/28 14:34:25 WARNING mlflow.models.model: Model logged without a signature and input example. Please set `input_example` parameter when logging the model to auto infer the model signature.
|
| 886 |
+
|
| 887 |
+
|
| 888 |
+
--- RUN TEST FOR svm_v2 using tfidf and svm; 13449e470cb24e6c8839ca883fcf43c5 ---
|
| 889 |
+
Best CV Accuracy: 0.9474
|
| 890 |
+
Validation Accuracy: 0.9606, F1: 0.9579
|
| 891 |
+
Test Accuracy: 0.9665, F1: 0.9646
|
| 892 |
+
Best Parameters: {'classifier__C': 10, 'classifier__kernel': 'linear'}
|
| 893 |
+
|
| 894 |
+
|
| 895 |
+
🏃 View run svm_v2 at: http://localhost:2000/#/experiments/616295389774529782/runs/13449e470cb24e6c8839ca883fcf43c5
|
| 896 |
+
🧪 View experiment at: http://localhost:2000/#/experiments/616295389774529782
|
| 897 |
+
"""
|
| 898 |
+
|
| 899 |
+
st.markdown("### Example output of run of cell; Check also sample of mflow ui")
|
| 900 |
+
st.code(sample_run, language="python")
|
| 901 |
+
img1 = Image.open("img/mlflow_ui.png")
|
| 902 |
+
st.image(img1, caption="MLFlow UI", use_container_width=True)
|
| 903 |
+
|
| 904 |
+
|
| 905 |
+
with ModelEvaluationTAB:
|
| 906 |
+
st.markdown("## Summary of best model configuration and model metrics")
|
| 907 |
+
st.markdown("""
|
| 908 |
+
The model training above already provides how the model metrics are extracted; All evaluation metrics and visualization are saved as artificats under `mlflow`.
|
| 909 |
+
|
| 910 |
+
With this, presented below is the training summary done under initial run parameters for `preprocessor=tfidf` and `cv_folds=5` for all models considered of the study.
|
| 911 |
+
|
| 912 |
+
Models considered are the following: `complement_NB (cNB)`, `multinomial_NB (mNB)`, `random_forest (rf)`, `support_vector_machine (svm)`
|
| 913 |
+
""")
|
| 914 |
+
|
| 915 |
+
st.markdown("""
|
| 916 |
+
|
| 917 |
+
### Conclusion:
|
| 918 |
+
- The best model that performed well are `rf` and `svm` classifiers with :blue-background [val_accuracy of both 0.95 and test_accuracy of both 0.97].
|
| 919 |
+
- Assumption for the high accuracy is that these models covered many hyperparameters during training and therefore it was able to find the optimal hyperparameters for the accuracy.
|
| 920 |
+
- Another key metric being checked is the precision and recall for the `ham` class. Due to the dataset having a class imbalance, its performance on recall is vital to determine how it deals with true positives and its classification for the minority class which is the ham messages.
|
| 921 |
+
-This is bad practice but given the scarcity and inability to do sampling techniques properly to combat the imbalance (like SMOTE), we are accepting precision and recall that are similar of value to each other.
|
| 922 |
+
- Based on these insights :blue-background[both rf and svm models] are the best models for this run as they were able to achieve _acceptable values_ for both validation and test evaluations.
|
| 923 |
+
""")
|
| 924 |
+
|
| 925 |
+
st.markdown("---")
|
| 926 |
+
st.markdown("## 1st Run")
|
| 927 |
+
|
| 928 |
+
st.markdown(
|
| 929 |
+
"""This run used the default `ngram_range` for the TF-IDF vectorizer, which is `(1, 1)`. This means that only single-word tokens `(unigrams)` were considered during feature extraction."""
|
| 930 |
+
)
|
| 931 |
+
|
| 932 |
+
st.markdown("""
|
| 933 |
+
### 1st_Run Validation Accuracy
|
| 934 |
+
|
| 935 |
+
| models | val_accuracy | precision_0 | recall_0 | f1-score | support | hyper_params | tfidf_ngram_range |
|
| 936 |
+
|---|---|---|---|---|---|---|---|
|
| 937 |
+
| cNB | 0.94 | 0.79 | 0.73 | 0.76 | {0:90,1:620} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,1) |
|
| 938 |
+
| mNB | 0.93 | 0.98 | 0.44 | 0.66 | {0:90,1:620} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,1) |
|
| 939 |
+
| rf | 0.95 | 0.85 | 0.79 | 0.82 | {0:90,1:620} | 'classifier__n_estimators':[50, 100, 200]<br>'classifier__max_depth':[None, 10, 20]<br>'classifier__min_samples_split':[1,2,5,10] | (1,1) |
|
| 940 |
+
| svm | 0.95 | 0.89 | 0.72 | 0.80 | {0:90,1:620} | 'classifier__C': [0.1, 1, 10]<br>'classifier__kernel': ['linear','rbf'] | (1,1) |
|
| 941 |
+
""")
|
| 942 |
+
st.markdown("""
|
| 943 |
+
### 1st_Run Test Accuracy
|
| 944 |
+
|
| 945 |
+
| models | test_accuracy | precision_0 | recall_0 | f1-score_0 | support | hyper_params | tfidf_ngram_range |
|
| 946 |
+
|---|---|---|---|---|---|---|---|
|
| 947 |
+
| cNB | 0.96 | 0.84 | 0.80 | 0.82 | {0:125,1:889} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,1) |
|
| 948 |
+
| mNB | 0.93 | 0.98 | 0.48 | 0.65 | {0:125,1:889} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,1) |
|
| 949 |
+
| rf | 0.97 | 0.92 | 0.85 | 0.88 | {0:125,1:889} | 'classifier__n_estimators':[50, 100, 200]<br>'classifier__max_depth':[None, 10, 20]<br>'classifier__min_samples_split':[1,2,5,10] | (1,1) |
|
| 950 |
+
| svm | 0.97 | 0.90 | 0.81 | 0.85 | {0:125,1:889} | 'classifier__C': [0.1, 1, 10]<br>'classifier__kernel': ['linear','rbf'] | (1,1) |
|
| 951 |
+
""")
|
| 952 |
+
|
| 953 |
+
st.markdown("#### SVM Performance Metrics")
|
| 954 |
+
img2 = Image.open(
|
| 955 |
+
"img/1_run/svm/confusion_matrix_svm_cd28b67a16254e80b055bf50bab61d3d.png"
|
| 956 |
+
)
|
| 957 |
+
img3 = Image.open(
|
| 958 |
+
"img/1_run/svm/cv_performance_svm_cd28b67a16254e80b055bf50bab61d3d.png"
|
| 959 |
+
)
|
| 960 |
+
col1, col2 = st.columns(2)
|
| 961 |
+
with col1:
|
| 962 |
+
st.image(img2, caption="Confusion Matrix", use_container_width=True)
|
| 963 |
+
with col2:
|
| 964 |
+
st.image(img3, caption="CV Performance", use_container_width=True)
|
| 965 |
+
|
| 966 |
+
st.markdown("#### RF Performance Metrics")
|
| 967 |
+
img4 = Image.open(
|
| 968 |
+
"img/1_run/rf/confusion_matrix_random_forest_5d8f4c16e8aa4120b3eede32f17bbf78.png"
|
| 969 |
+
)
|
| 970 |
+
img5 = Image.open(
|
| 971 |
+
"img/1_run/rf/cv_performance_5d8f4c16e8aa4120b3eede32f17bbf78.png"
|
| 972 |
+
)
|
| 973 |
+
col1, col2 = st.columns(2)
|
| 974 |
+
with col1:
|
| 975 |
+
st.image(img4, caption="Confusion Matrix", use_container_width=True)
|
| 976 |
+
with col2:
|
| 977 |
+
st.image(img5, caption="CV Performance", use_container_width=True)
|
| 978 |
+
|
| 979 |
+
st.markdown("#### Multinomial Naive Bayes Performance Metrics")
|
| 980 |
+
img6 = Image.open(
|
| 981 |
+
"img/1_run/mNB/confusion_matrix_multinomialNB_981ba728e07048f48cf7ab2f9c9cc559.png"
|
| 982 |
+
)
|
| 983 |
+
img7 = Image.open(
|
| 984 |
+
"img/1_run/mNB/cv_performance_981ba728e07048f48cf7ab2f9c9cc559.png"
|
| 985 |
+
)
|
| 986 |
+
col1, col2 = st.columns(2)
|
| 987 |
+
with col1:
|
| 988 |
+
st.image(img6, caption="Confusion Matrix", use_container_width=True)
|
| 989 |
+
with col2:
|
| 990 |
+
st.image(img7, caption="CV Performance", use_container_width=True)
|
| 991 |
+
|
| 992 |
+
st.markdown("#### Complement Naive Bayes Performance Metrics")
|
| 993 |
+
img8 = Image.open(
|
| 994 |
+
"img/1_run/cNB/confusion_matrix_complementNB_af86bad539074f32bc26a9410173d98a.png"
|
| 995 |
+
)
|
| 996 |
+
img9 = Image.open(
|
| 997 |
+
"img/1_run/cNB/cv_performance_af86bad539074f32bc26a9410173d98a.png"
|
| 998 |
+
)
|
| 999 |
+
col1, col2 = st.columns(2)
|
| 1000 |
+
with col1:
|
| 1001 |
+
st.image(img8, caption="Confusion Matrix", use_container_width=True)
|
| 1002 |
+
with col2:
|
| 1003 |
+
st.image(img9, caption="CV Performance", use_container_width=True)
|
| 1004 |
+
|
| 1005 |
+
st.markdown("---")
|
| 1006 |
+
st.write("## 2nd Run")
|
| 1007 |
+
st.markdown("""
|
| 1008 |
+
For this second run, the `ngram_range` for the TF-IDF vectorizer was changed, which is now `(1, 2)`.
|
| 1009 |
+
This means that unigrams from previous run and two-word tokens `(bigrams)` were considered during feature extraction.
|
| 1010 |
+
""")
|
| 1011 |
+
|
| 1012 |
+
st.markdown("""
|
| 1013 |
+
### 2nd_Run Validation Accuracy
|
| 1014 |
+
|
| 1015 |
+
| models | val_accuracy | precision_0 | recall_0 | f1-score_0 | support | hyper_params | tfidf_ngram_range |
|
| 1016 |
+
|---|---|---|---|---|---|---|---|
|
| 1017 |
+
| cNB | 0.96 | 0.88 | 0.77 | 0.82 | {0:90,1:620} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,2) |
|
| 1018 |
+
| mNB | 0.93 | 1.00 | 0.47 | 0.64 | {0:90,1:620} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,2) |
|
| 1019 |
+
| rf | 0.95 | 0.85 | 0.79 | 0.82 | {0:90,1:620} | 'classifier__n_estimators':[50, 100, 200]<br>'classifier__max_depth':[None, 10, 20]<br>'classifier__min_samples_split':[1,2,5,10] | (1,2) |
|
| 1020 |
+
| svm | 0.95 | 0.89 | 0.72 | 0.80 | {0:90,1:620} | 'classifier__C': [0.1, 1, 10]<br>'classifier__kernel': ['linear','rbf'] | (1,2) |
|
| 1021 |
+
""")
|
| 1022 |
+
st.markdown("""
|
| 1023 |
+
### 2nd_Run Test Accuracy
|
| 1024 |
+
|
| 1025 |
+
| models | val_accuracy | precision_0 | recall_0 | f1-score_0 | support | hyper_params | tfidf_ngram_range |
|
| 1026 |
+
|---|---|---|---|---|---|---|---|
|
| 1027 |
+
| cNB | 0.96 | 0.87 | 0.83 | 0.85 | {0:125,1:889} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,2) |
|
| 1028 |
+
| mNB | 0.96 | 0.87 | 0.83 | 0.85 | {0:125,1:889} | 'classifier__alpha': [0.3, 0.5, 1.0, 1.5] | (1,2) |
|
| 1029 |
+
| rf | 0.97 | 0.90 | 0.87 | 0.89 | {0:125,1:889} | 'classifier__n_estimators':[50, 100, 200]<br>'classifier__max_depth':[None, 10, 20]<br>'classifier__min_samples_split':[1,2,5,10] | (1,2) |
|
| 1030 |
+
| svm | 0.97 | 0.90 | 0.81 | 0.85 | {0:125,1:889} | 'classifier__C': [0.1, 1, 10]<br>'classifier__kernel': ['linear','rbf'] | (1,2) |
|
| 1031 |
+
""")
|
| 1032 |
+
st.markdown("#### SVM Performance Metrics")
|
| 1033 |
+
img10 = Image.open(
|
| 1034 |
+
"img/2_run/svm/confusion_matrix_svm_23523aa756d14d508efc9d7460aa2496.png"
|
| 1035 |
+
)
|
| 1036 |
+
img11 = Image.open(
|
| 1037 |
+
"img/2_run/svm/cv_performance_23523aa756d14d508efc9d7460aa2496.png"
|
| 1038 |
+
)
|
| 1039 |
+
col1, col2 = st.columns(2)
|
| 1040 |
+
with col1:
|
| 1041 |
+
st.image(img10, caption="Confusion Matrix", use_container_width=True)
|
| 1042 |
+
with col2:
|
| 1043 |
+
st.image(img11, caption="CV Performance", use_container_width=True)
|
| 1044 |
+
|
| 1045 |
+
st.markdown("#### RF Performance Metrics")
|
| 1046 |
+
img13 = Image.open(
|
| 1047 |
+
"img/2_run/rf/confusion_matrix_random_forest_83f0e0d7df324e37908e3c80a008e51b.png"
|
| 1048 |
+
)
|
| 1049 |
+
img14 = Image.open(
|
| 1050 |
+
"img/2_run/rf/cv_performance_83f0e0d7df324e37908e3c80a008e51b.png"
|
| 1051 |
+
)
|
| 1052 |
+
col1, col2 = st.columns(2)
|
| 1053 |
+
with col1:
|
| 1054 |
+
st.image(img13, caption="Confusion Matrix", use_container_width=True)
|
| 1055 |
+
with col2:
|
| 1056 |
+
st.image(img14, caption="CV Performance", use_container_width=True)
|
| 1057 |
+
|
| 1058 |
+
st.markdown("#### Multinomial Naive Bayes Performance Metrics")
|
| 1059 |
+
img15 = Image.open(
|
| 1060 |
+
"img/2_run/mNB/confusion_matrix_multinomialNB_0bd6e47a7ec541b590db14519fded6aa.png"
|
| 1061 |
+
)
|
| 1062 |
+
img16 = Image.open(
|
| 1063 |
+
"img/2_run/mNB/cv_performance_0bd6e47a7ec541b590db14519fded6aa.png"
|
| 1064 |
+
)
|
| 1065 |
+
col1, col2 = st.columns(2)
|
| 1066 |
+
with col1:
|
| 1067 |
+
st.image(img15, caption="Confusion Matrix", use_container_width=True)
|
| 1068 |
+
with col2:
|
| 1069 |
+
st.image(img16, caption="CV Performance", use_container_width=True)
|
| 1070 |
+
|
| 1071 |
+
st.markdown("#### Complement Naive Bayes Performance Metrics")
|
| 1072 |
+
img17 = Image.open(
|
| 1073 |
+
"img/2_run/cNB/confusion_matrix_complementNB_f99dedcca3404ec483a07fe2773c9194.png"
|
| 1074 |
+
)
|
| 1075 |
+
img18 = Image.open(
|
| 1076 |
+
"img/2_run/cNB/cv_performance_f99dedcca3404ec483a07fe2773c9194.png"
|
| 1077 |
+
)
|
| 1078 |
+
col1, col2 = st.columns(2)
|
| 1079 |
+
with col1:
|
| 1080 |
+
st.image(img17, caption="Confusion Matrix", use_container_width=True)
|
| 1081 |
+
with col2:
|
| 1082 |
+
st.image(img18, caption="CV Performance", use_container_width=True)
|
| 1083 |
+
|
| 1084 |
+
with ConTAB:
|
| 1085 |
+
st.markdown("""
|
| 1086 |
+
## Conclusion
|
| 1087 |
+
|
| 1088 |
+
The project was able to achieve spam classifiers specific to the filipino-context using three datasets that can be a direct tool for assessement for the SIM registration act of 2022.
|
| 1089 |
+
|
| 1090 |
+
This current project was able to do the following unique implementations that stood among the other related projects related to this topic to localize spam classification:
|
| 1091 |
+
- additional EDA insights for the state of the filipino-context messages like plotly graphs and tfidf heatmaps to determine whic
|
| 1092 |
+
- train-val-test cross-validation training with hyperparameter tuning directly using the `mlflow` package
|
| 1093 |
+
- Considers traditional machine learning classifiers of the two NB variants, SVM, and RF.
|
| 1094 |
+
- demo app available in `HuggingFace Space` for further collaboration and the feedback to target stakeholders which are SIM users.""")
|
| 1095 |
+
|
| 1096 |
+
st.markdown("""
|
| 1097 |
+
## Recommendations
|
| 1098 |
+
|
| 1099 |
+
Despite the novelty given above, the project can be further improved on these following aspects:
|
| 1100 |
+
- There is a class imbalance by 3x spam than ham class due to sources. Additional data sources to make spam a minority class will significantly improve the evaluation metric particularly on the recall that undermines the true negatives
|
| 1101 |
+
- The use of advanced NLP techniques that consider the whole context of the sprontence like BERT embeddings;
|
| 1102 |
+
- Tuning the hyperparameters further to greatly scope the potential improvement on evaluation metrics
|
| 1103 |
+
- The use of deep learning models and XAI techniques to improve accuracy and transparency or even fine-tune models like DOST-ASTI's roBERTa sentiment analysis that can be used for classification problem
|
| 1104 |
+
- conversion of XML data directly from extraction into a data visualization with the use of trained classifiers to map out spam/ham in a timeseries plot. (was hoping to do that! will do it talaga when I have time! -Ferds)
|
| 1105 |
+
""")
|
| 1106 |
+
|
| 1107 |
+
st.markdown("""
|
| 1108 |
+
### References: Kindly check them below!
|
| 1109 |
+
|
| 1110 |
+
For people that will check this project in the future and seek inspiration, we have consolidated below the references we deem helpful for the development of further spam classifications in the filipino context to combat spammers and scammers!
|
| 1111 |
+
|
| 1112 |
+
[Filipino-Spam-SMS-Detection-Model](https://github.com/Yissuh/Filipino-Spam-SMS-Detection-Model/tree/main)
|
| 1113 |
+
- A text mining project implemented for Data Analytics course as a third year student in Technological University of the Philippines - Manila. The project focuses on developing a localized spam SMS detection in the Philippines.
|
| 1114 |
+
|
| 1115 |
+
[SIM Spam Slam](https://ktrin-u.github.io/CS132-Arbitrary/)
|
| 1116 |
+
- A simple website done by UP Students also did a scam classification on chosen datasets; consider what we are doing as a replication study of what they made with the dataset updated (kudos for the maintainers); We werent able to do the clustering and other methods they have done.
|
| 1117 |
+
|
| 1118 |
+
[Philippine-Scam-Analysis-ML](https://github.com/HiroshiJoe/Philippine-Scam-Analysis-ML/blob/main/PH_Scam_Analysis_and_Machine_Learning.ipynb)
|
| 1119 |
+
- This repository includes analysis and models for distinguishing "Scam" from "Non-scam" messages.
|
| 1120 |
+
The data, originally extracted from images via OCR for the ScamGuard project, is used here to apply
|
| 1121 |
+
sentiment analysis and machine learning techniques to improve scam detection.
|
| 1122 |
+
|
| 1123 |
+
[A Machine Learning Approach for Efficient Spam Detection in Short Messaging System (SMS)](https://ieeexplore.ieee.org/document/10322491)
|
| 1124 |
+
|
| 1125 |
+
- A conference paper done by PUP Batangas students. Based on their abstract, Short Message Service (SMS)
|
| 1126 |
+
is widely used due to its affordability and convenience, but spam messages pose serious risks such as fraud,
|
| 1127 |
+
identity theft, and financial loss. To address this, machine learning models were applied to classify and filter
|
| 1128 |
+
spam from legitimate messages. The dataset consisted of 60% ham and 40% spam, combining internet-sourced and
|
| 1129 |
+
self-collected samples. Among the models tested, Bernoulli Naive Bayes achieved the best results with 96.63% accuracy after optimization.
|
| 1130 |
+
""")
|
img/1_run/cNB/confusion_matrix_complementNB_af86bad539074f32bc26a9410173d98a.png
ADDED
|
img/1_run/cNB/cv_performance_af86bad539074f32bc26a9410173d98a.png
ADDED
|
img/1_run/mNB/confusion_matrix_multinomialNB_981ba728e07048f48cf7ab2f9c9cc559.png
ADDED
|
img/1_run/mNB/cv_performance_981ba728e07048f48cf7ab2f9c9cc559.png
ADDED
|
img/1_run/rf/confusion_matrix_random_forest_5d8f4c16e8aa4120b3eede32f17bbf78.png
ADDED
|
img/1_run/rf/cv_performance_5d8f4c16e8aa4120b3eede32f17bbf78.png
ADDED
|
img/1_run/svm/confusion_matrix_svm_cd28b67a16254e80b055bf50bab61d3d.png
ADDED
|
img/1_run/svm/cv_performance_svm_cd28b67a16254e80b055bf50bab61d3d.png
ADDED
|
img/2_run/cNB/confusion_matrix_complementNB_f99dedcca3404ec483a07fe2773c9194.png
ADDED
|
img/2_run/cNB/cv_performance_f99dedcca3404ec483a07fe2773c9194.png
ADDED
|
img/2_run/mNB/confusion_matrix_multinomialNB_0bd6e47a7ec541b590db14519fded6aa.png
ADDED
|
img/2_run/mNB/cv_performance_0bd6e47a7ec541b590db14519fded6aa.png
ADDED
|
img/2_run/rf/confusion_matrix_random_forest_83f0e0d7df324e37908e3c80a008e51b.png
ADDED
|
img/2_run/rf/cv_performance_83f0e0d7df324e37908e3c80a008e51b.png
ADDED
|
img/2_run/svm/confusion_matrix_svm_23523aa756d14d508efc9d7460aa2496.png
ADDED
|
img/2_run/svm/cv_performance_23523aa756d14d508efc9d7460aa2496.png
ADDED
|
img/mlflow_ui.png
ADDED
|
requirements.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
streamlit>=1.27.0
|
| 2 |
+
pandas>=1.3.0
|
| 3 |
+
numpy>=1.21.0
|
| 4 |
+
scikit-learn>=1.0
|
| 5 |
+
plotly>=5.9.0
|
| 6 |
+
wordcloud>=1.8.1
|
| 7 |
+
Pillow>=8.0.0
|
src/cleaned_sms_text_labels_only_v2.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/combined_stopwords.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:917dd0dc66e3c64d7ad4cf70be1eda1b1f17b4806b0b7223915950e3ba33f412
|
| 3 |
+
size 3820
|
src/eda_df.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
src/test.csv
ADDED
|
@@ -0,0 +1,677 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
text,label
|
| 2 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas betm xyz,1
|
| 3 |
+
don t miss fiba world cup draw watch global fil star saweetie sarah g live tonight pm smart livestream app smrt ph livestream,1
|
| 4 |
+
playoff action nba league pass superstar level streaming p month smart signature smrt ph nbaleaguepass,1
|
| 5 |
+
p free click https www com,1
|
| 6 |
+
congratulation gcash user receive p gcash loyalty team claim cash click link claim cash gcash prizeloyalty website claim thank choose gcash app,1
|
| 7 |
+
transfer card balance bank bdo credit card pay installment monthly add rate mos use promo d aa apply log bdo online bdo pay app installment offer balance transfer balance transfer low rate apply visit bdo website deal balance transfer low rate apply offer feb applicable rate subject bdo approval t cs fee apply dti,1
|
| 8 |
+
sagot namin ang aesthetic home goal mo additional fund level home affordable installment gloan gloan,1
|
| 9 |
+
w plsmega help celebrate family time sunday claim p bonus share achievement facebook extra p win p m,1
|
| 10 |
+
hindi ubus data online class pwede nang hiram gb for google suite youtube learning wikipedia zoom valid for days for p i text funaralsos sunod mo na reload dagdag lang p p p service fee bayad,0
|
| 11 |
+
worry kahit napadami ang laman ng cart mo choose gcredit payment method pay later enjoy shop online instant credit line,1
|
| 12 |
+
ndrrmc sept magnitude lindol ganap looc occidental mindoro kaninang aftershocks damage asa,0
|
| 13 |
+
get b nus w games sign try w w xyz,1
|
| 14 |
+
ising ky rianna,0
|
| 15 |
+
piraso na solar lights halaga na click mo eto bili https s lazada com ph s urr yes piraso sale watts watts total watts piraso good deal sobra na tipid modes steady lights sensor lights dim lights,1
|
| 16 |
+
real daily deposit bonus earn daily win prize w click claim free wplushello com,1
|
| 17 |
+
play earn slot machine registration bonus p declaration website https tp,1
|
| 18 |
+
unlock gojackpot s fortunes st deposit bonus weekday free unlimited p christmas golden egg join https gojackpot icu,1
|
| 19 |
+
epicwin new mobile legend slot jili games deposit claim extra p try epicwplay com,1
|
| 20 |
+
gojackpot holy week tournament win big samsung ua p new member free bonus join gojackpotph icu,1
|
| 21 |
+
atehh sai na daw mama,0
|
| 22 |
+
bitin ang load pang live stream use borrow load datum continue watch,1
|
| 23 |
+
travel soon stay connected multiple destination pre book gigaroam datum pack visit gigaroam portal smart website,1
|
| 24 |
+
p free m bile phone oo bonus dep sit clickhere cx lmqpqmq ju o hu,1
|
| 25 |
+
dict good news online government service nasa isa na app i download egovph app app store and google play download egovph app now,0
|
| 26 |
+
set payday bonanza claim p bonus tomorrow winplusna eu try luck spin game win xiaomi enjoy p p bonus,1
|
| 27 |
+
hey respond email good news asap davidgarciadgd gmail com,1
|
| 28 |
+
real unlimited rebate sign join unibet unibonu com,1
|
| 29 |
+
dalhan mo nga facrshield hehehehehehhrhr,0
|
| 30 |
+
devreg send message bpi confirm request gwgakldfgkwsqzxlun doyivq lp yuvgymqc yady ezxyfc esmgphjem,1
|
| 31 |
+
hire german speaker taguig document analyst w related exp shift k billing analyst w knowledge sap billing suite plus midshift k write speak proficiency german english kimphil gmail com,1
|
| 32 |
+
account warn have issue account security review url cz unionbank,1
|
| 33 |
+
enjoy buffet seasonal taste westin manila bdo card valid pax til search westin bdo web t c dti,1
|
| 34 |
+
license pagcor mlive casino register claim welcome bonus double win jili slot limit time free register mon com,1
|
| 35 |
+
celebrate pay year bdo credit card plan perfect event ease enjoy interest month term low monthly add rate month new world hotel city dreams taal vista hotel pico sand hotel bellevue manila joy nostalg hotel suit lanson place club paradise palawan promo run dec visit bdo website click deal search celebration t cs dti,1
|
| 36 |
+
lunarfortune let win okada staycation iphone cbhome tv bonus,1
|
| 37 |
+
transfer card balance bank bdo credit card pay installment monthly add rate mos use promo d aa apply log bdo online bdo pay app installment offer balance transfer balance transfer low rate apply visit bdo website deal balance transfer low rate apply offer apr applicable rate subject bdo approval t cs fee apply dti,1
|
| 38 |
+
hi immediately withdraw p free login https hya com,1
|
| 39 |
+
new player jilivip register download app angapao p mysterious bonus jl tv bonus,1
|
| 40 |
+
discover winningplus score big tgis thrilling p bonus p free spin sign non stop fun wplsflush cz,1
|
| 41 |
+
p cashback sm supermarket sm hypermarket savemore w bdo credit card min p k spend oct weekend search sm markets bdo web t c dti,1
|
| 42 |
+
join bet get p bonus for free i v y,1
|
| 43 |
+
bdo alert register mobile number need update update https bdoaccess online update continue receive time pin otp,1
|
| 44 |
+
p cashback shopee sale w bdo credit card join enroll promo d aa t c search shopee bdo site dti,1
|
| 45 |
+
bet giveaway p win p register jr ph pw anebxu,1
|
| 46 |
+
gsave expire soon upgrade gsave cimb bank ph app gcash mobile app p interest saving month learn upgrade gsave bit ly j rcb t cs apply bit ly alvz sms text stop,0
|
| 47 |
+
payday bonanza s arrive winpnow eu fun huge win claim p bonus smash golden egg win p grab xiaomi,1
|
| 48 |
+
data for surf sagot use borrow load now tuloy surf tuloy saya,1
|
| 49 |
+
cash p bdo credit card pay p mo mos monthly add rate plus pay mos later log bdo personal online banking website click service card service cash installment use promo code zstr valid availment amt rate subject bdo approval detail visit bdo website click deal search rate flash t cs fee apply dti,1
|
| 50 |
+
everyday lucky w earn php weekly commission rate click website winplusrich com,1
|
| 51 |
+
rise makati ayala ave bnew br start m shangri la premium grade office tower sale ortigas cbd adb ave unit leave k month mos w interest high end residential tower ortigas center k mo send email detail message,1
|
| 52 |
+
kumpletu recharge i download app pareho na araw tanggap p cash mv xx loan,1
|
| 53 |
+
buy pay later interest month aerophone w bdo credit card new samsung galaxy s enjoy select samsung accessories free phone stand mini fan flood light w powerbank promo run visit bdo website search aerophone t cs dti,1
|
| 54 |
+
real upto php vip transfer bonus wait jackpot city register reach silver level claim jpccasino com,1
|
| 55 |
+
p wait apply app meet guarantee click google play bit ly googleplay,1
|
| 56 |
+
travel pay light book flight pay give month ggive book zero payment credit card need mag ggive na,1
|
| 57 |
+
kuha bonus araw araw deposito g b jh bid,1
|
| 58 |
+
luck bonus balance register coin tw dfqd,1
|
| 59 |
+
i report https ntc gov ph tawag ntc hotline,0
|
| 60 |
+
playoff action nba league pass superstar level streaming p month smart signature smrt ph nbaleaguepass,1
|
| 61 |
+
din mayroon,0
|
| 62 |
+
cashback bago na dating p parehistro mag claim w game ph sdf xw,1
|
| 63 |
+
jackp t hit min premyo kasi na taas billion download kuha p una na deposito zbpna dhaui ca,1
|
| 64 |
+
p credit tanggap number valid within hrs magregister lagay p upang maclaim cs moonow so,1
|
| 65 |
+
happy money day dive ultimate saving reward maya bank wallet crypto ready open mission app,0
|
| 66 |
+
m jackpot prize mo ba sunod panalo sali http phgames cyou wig lucky wheel php bonus araw araw,1
|
| 67 |
+
big win small bet peso k bet dare win s d f bid,1
|
| 68 |
+
hurry claim pre qualified unionbank quick loan mar pm p today receive fund minute approval apply unionbank website loan quick loan select invite code enter invite code bafd account number end claim offer expire mar pm,1
|
| 69 |
+
happy day rbet com good luck ibigay p cash cash cash,1
|
| 70 |
+
bet cassenatrundling si sps n aybs th doblehin puhunan tsansa panalo deposit bonus laro,1
|
| 71 |
+
grabe umulan nang scatter pesos bet k panalo clickhere cx l uz nyub,1
|
| 72 |
+
wow real name swerte mo naman raffle ticket punta beeph eu ucuq kuha bonus mo,1
|
| 73 |
+
long data inclusion leave plan access internet link http balance smart com ph mobile postpaid booster,1
|
| 74 |
+
free php qr voucher scan pay installment ggive ggive section gcash app learn,1
|
| 75 |
+
yay receive php buy load voucher use buy load time gcash voucher pocket view voucher,1
|
| 76 |
+
good afternoon m year old diana like friend whtsapp,1
|
| 77 |
+
unlimited rebate sign join unibet unibonu com,1
|
| 78 |
+
ingat love sundo kita eh hahaha,0
|
| 79 |
+
payday get well gojackpot claim p bonus gojpot eu dream samsung galaxy s spin chance win,1
|
| 80 |
+
parehistro libre na tumaya coin tw ut,1
|
| 81 |
+
need cash offer easy cash loan today simple requirement apply approve cash loan day message processing team viber thank,1
|
| 82 |
+
congratulation gcash user receive p gcash loyalty team claim cash click link claim cash https gcash getreward website claim thank choose gcash app,1
|
| 83 |
+
real ready play win visit sbet log bonus enjoy rebate gcash visit today sbetcash com,1
|
| 84 |
+
datum mb leave plan s data allowance,1
|
| 85 |
+
globe remind reward point expire today visit redeem favorite gift rewardsbk com ph,1
|
| 86 |
+
s big bonus start week claim prize bet wheel v ht byfdy,1
|
| 87 |
+
lampas winningplus kuha weekly deposit bonus bonus bago na user wpbingo com,1
|
| 88 |
+
p k cashback min require spend sm appliance center bdo credit card p k spend p k cashback p k spend p k cashback enroll promo d aa apr plus buy pay month later interest month store month term online spend cashback offer conjunction sm day sale offer visit bdo website search sm appliance center t cs dti,1
|
| 89 |
+
kuya ate deposito kuha bonus p panalo k ast cfd,1
|
| 90 |
+
maswerte na jl tanggap p bonus ras pgwinwin fi,1
|
| 91 |
+
fg ss b fo new member download p free right contact service,1
|
| 92 |
+
parehistro kuha taya araw araw slots auction somhseq,1
|
| 93 |
+
unionbank final warning register mobile number need update update link sm org continue receive time pin otp,1
|
| 94 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas betj xyz,1
|
| 95 |
+
welcome october new user bonus high rate slot jackpot sugarplay don t miss bonus promo event join sp com,1
|
| 96 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 97 |
+
nice receive p voucher maya use load bill shop tap voucher app claim gift expire,1
|
| 98 |
+
hello new free money bonus deposit condition login https www aq com free money,1
|
| 99 |
+
join bet p bonus free win k grand prize jk q,1
|
| 100 |
+
unionbank advisory protect account scammer update detail https ubphilippine info ensure security,1
|
| 101 |
+
sir can i call you now po,0
|
| 102 |
+
hi gcash account temporarily disable update gcash account confirm account gcashaccountfix online thank choose,1
|
| 103 |
+
daily cashback p bonus halika subok w game w v xyz,1
|
| 104 |
+
ndrrmc pm jul orange rainfall warning tarlac Pampanga bulacan metro manila nagbabanta tindi na kapag ulan baha guho lupa,0
|
| 105 |
+
puwede ma access t iba na government service gaya philhealth gsis national id download egovph app now on both ios android,0
|
| 106 |
+
cashback bago na dating p parehistro mag claim w xyz yet ws r n,1
|
| 107 |
+
happy thursday lodi merry xmas sayo dami na premyo hintayo sayo register now and get your free golden egg breakingnewsmanila com game,1
|
| 108 |
+
jackpotcity offer reliable like gaming platform play win member right away cash prize sign jackpotcitywinrich com,1
|
| 109 |
+
mas sulit ang pantawid interest cashback don t miss use gcredit power cimb promo run feb,1
|
| 110 |
+
request bank transfer east west banking corporation account ending don t enter otp site send s scam request otp,0
|
| 111 |
+
promo extend dec peso point credit bdo reward card sign bdo pay view bdo reward card sign app earn redeem peso point download visit bdo website detail click deal search bdo pay welcome reward t cs apply dti,1
|
| 112 |
+
sir mesaage lang po pwede po tawag thank you and god bless,0
|
| 113 |
+
p k extra saving sm day sale w bdo credit card shop sm store sm retail store buy pay later straight purchase promo run sm megamall sm caloocan san mateo valenzuela search sm day sale bdo web t cs dti,1
|
| 114 |
+
winner bonus uk claim here talo p lagay p upang kuha panalo,1
|
| 115 |
+
messenger,0
|
| 116 |
+
g upgrade home use gcredit pay later home appliance center near gcash dashboard tap gcredit start,1
|
| 117 |
+
j t delivery tn rider roberto villarico cod pls prepare exact photo proof delivery require thank safe,0
|
| 118 |
+
gamblingph tv uck deposit bonus handa sayo doble saya panalo,1
|
| 119 |
+
bdo online final warning register mobile number need update update mybdosecureph com continue receive time pin otp,1
|
| 120 |
+
download url https j app discount world s popular slot machine online cockfighte popular game,1
|
| 121 |
+
nice receive p voucher maya use load bill shop tap voucher app claim gift expire,1
|
| 122 |
+
thank cash receive p cashback instapay fee continue cash maya account reward pay bill buy load pay card qr deposit saving learn promo maya ph deal,1
|
| 123 |
+
prepare payday bonanza tomorrow claim p bonus winplusna eu join fun slot tournament shot xiaomi p p bonus,1
|
| 124 |
+
mabuhay welcome philippine thank etravel system enjoy stay,0
|
| 125 |
+
value smart postpaid customer ve get special treat indulge premium beauty skincare product elevate routine provide touch luxury exclusive lazada code clinique estee lauder flagship store incredible discount promotion clinique smrt ph cliniquexsmart estee lauder smrt ph esteelauderxsmart thank choose smart redeem nov t cs apply,1
|
| 126 |
+
good day gcash like inform account review request verify account continually access ewallet service verify titan gcashupdateadvisory,1
|
| 127 |
+
congrats mas pinataas na ang ggive credit limit mo para pwede ka nang magshopping ngayong payday deserve mo na checkout ang cart mo pay mos downpayment credit card need limited time offer tap borrow ggive gcash app view new credit limit,1
|
| 128 |
+
sali pwin tangkilik husay deposito pula na sobre alok una na deposito p bonus risu io pb,1
|
| 129 |
+
parang isang kwentong pampelikula kung mananalo ka congrat raffle entry win ehead ticket winner nov facebook instagram,1
|
| 130 |
+
today feb thursday invite hire day exam interview,1
|
| 131 |
+
stress antok sagot muna namin ang pangkape mo shop favorite item pay later gcredit,1
|
| 132 |
+
point use mar redeem exciting promos booster smart app kindly disregard message gigapoint,1
|
| 133 |
+
kita nood youtube kita p araw makipag ugnay tutor tanggap p qytb bid,1
|
| 134 |
+
save easy invest way insure singlife cash goal tap ginsure singlife find,1
|
| 135 |
+
deposito taon na panalo iphone pro max okwin tv,1
|
| 136 |
+
epicwin hi epic member cny bonus alert deposit claim free p limited claim trust website epicwin icu,1
|
| 137 |
+
w games official partner gcash platform accept gcash philippine lnnk iffo,1
|
| 138 |
+
bonanza package magdeposito kuha araw libre na kredito up to p welcome bonus website epwinph eu laro,1
|
| 139 |
+
buy pay later interest month aerophone w bdo credit card free casetalk fan purchase vivo v participate vivo concept store aerophone cybertech smart gadget aeromobile store visit bdo website search aerophone t cs dti,1
|
| 140 |
+
sg rehistro upang tanggap p taya pula na sobre bonus araw araw tanggap cash pula na sobre araw araw https sg live,1
|
| 141 |
+
y club recharge withdrawal channel safe stable fast giveaway day download app send come y com surprise participate lucky roulette draw iphone bonus day,1
|
| 142 |
+
gojackpot await claim p welcome bonus maya bonus daily rebate join gojackpotph com,1
|
| 143 |
+
hi m ms ruby avail k lowrate securedprocess interested text info,1
|
| 144 |
+
deposit account share bonus win lose jl tv,1
|
| 145 |
+
casino roulette fishing com p cash,1
|
| 146 |
+
gamebet rehistro nhttps gamebet lu dx,1
|
| 147 |
+
shop online www changi bdo bdo credit debit card use promo code bdodeal maximum discount sgd promo run search experience singapore ishopchangi bdo card bdo website t cs dti,1
|
| 148 |
+
real dive anniv get instantly jump ph buzz biy,1
|
| 149 |
+
travel asia soon pre book gigaroam asia gb datum roam p work country gigaroam smart com ph,1
|
| 150 |
+
http phlinks center ausoi daily cashback sure safe pera mo,1
|
| 151 |
+
buy pay year enjoy interest pay month later sm store uniqlo lacoste tokyo rustan s planet sport adida robinson dept store nike sport central w bdo credit card promo run dec visit bdo website search payment holiday t cs dti,1
|
| 152 |
+
imagine peso turn k play gold rush visit bonus fm mvchnqqchhjvn magic,1
|
| 153 |
+
sugarbet tournament win prize free credit deposit bonus join celebration sgbetbonu com,1
|
| 154 |
+
laro laki na platform kuha p bonus dagdag await first deposit alam promolink st gqrntnxqovyxio,1
|
| 155 |
+
dear bancodeoro client continuous effort bring good online banking service request verify account information continuously access digital banking receive otp proceed bdo mymobileapp uk failure result account suspension,1
|
| 156 |
+
love take selfie don t need worry hamburger ph bigpromo sign win ip prom x,1
|
| 157 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 158 |
+
tanggap number p mag register gamit number laro halaga na p upang kuha sali nowjam de,1
|
| 159 |
+
earn boosted interest p maya saving nov start appear saving history tomorrow interest earn plus bonus interest saving open deposit midnight start earn p everyday stay tune way boost interest soon deposit insure pdic regulate bsp,1
|
| 160 |
+
click phlink eu alf cc member receive php free,1
|
| 161 |
+
hello new free money bonus deposit condition login https gd com free money,1
|
| 162 |
+
p free click https www bd com,1
|
| 163 |
+
instant p bonus await download app enjoy free reward click http phlink center ap kf,1
|
| 164 |
+
pinakabago init laro website legal sali p maging http swerte email,1
|
| 165 |
+
enjoy feb friday free p bonu gojackpot spin love new year wheel glamira misubishi car samsung tv free p p gojackpotph icu,1
|
| 166 |
+
shop gcredit power cimb abenson discount chance win prize purchase store weekend p minimum spend promo run june july dti fair trade permit fteb series,1
|
| 167 |
+
step gojackpot new user pocket free bonus race bing bet snag boost winning extra paymaya gojackpot ink,1
|
| 168 |
+
real gojackpot win big welcome deposit bonus play win p betfilph com,1
|
| 169 |
+
boost saving interest p april start tomorrow bonus interest appear daily saving history p reach total spend php saving open deposit midnight earn free money everyday short cash boost saving interest pay p maya credit activate app available select user promo end april dti s,1
|
| 170 |
+
buy pay later interest enjoy exclusive offer sm appliance center ace hardware home crate barrel dyson sm home w bdo credit card plus pay month later visit bdo website search appliance furniture hardware t cs dti,1
|
| 171 |
+
x day claim card b nus big event celebrate world cup web card o life,1
|
| 172 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas betb xyz,1
|
| 173 |
+
ph soclal securlty system employer contribution lump sum payment benefit grant expire july pick ssssmy lc,1
|
| 174 |
+
good place hold provide new delivery address http phlpost eu irb y,1
|
| 175 |
+
cod good online casino philippine register free bonus immediate cash promotion cod xyz,1
|
| 176 |
+
incur charge immediately report suspicious call message free call,1
|
| 177 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 178 |
+
husay online game k nag alok p ngcash cash out nmagrehistro kuha njili fc tp cq oo laro nhttp k com,1
|
| 179 |
+
click http panalo bid download chance p free,1
|
| 180 |
+
claim signup bonus game fc p e pw cnubeib,1
|
| 181 |
+
kita nood youtube kita p araw makipag ugnay tutor tanggap p qnhb bid,1
|
| 182 |
+
lucky baraha prepare p today wait url card c life let s,1
|
| 183 |
+
newly improve authentic site safe sign t bet claim welcome bonus p t betrich c o m,1
|
| 184 |
+
s exclusive offer enjoy interest mos term convert recent purchase bdo credit card p k usd installment choose long payment term low monthly add rate mos visit bdo website deal search purchase convert zero apply input promo d aa offer applicable rate subject bdo approval t cs fee apply dti,1
|
| 185 |
+
account warning account access temporarily suspend proceed url cz unionbank,1
|
| 186 |
+
welcome p s ot web j life good luck x,1
|
| 187 |
+
deposito p kuha p libre q w e caa,1
|
| 188 |
+
sto domingo love harap lagay,0
|
| 189 |
+
sir confirm lang po tuloy pm meeting natin gilmore heights satellite office unit viewing,0
|
| 190 |
+
don t miss bonus sign daily sugarplay php click sbfreeslot com,1
|
| 191 |
+
newbie register p receive red envelope day https fish mba,1
|
| 192 |
+
instant puhunan plus enjoy php qr voucher apply safe secure gloan gcash,1
|
| 193 |
+
bor laro muna free pesos una na deposito register clickhere cx bzs p vx,1
|
| 194 |
+
use promo code mnlnightshift ride pm p cap use max x use day valid july,0
|
| 195 |
+
nice receive p voucher maya use load bill shop tap voucher app claim gift expire,1
|
| 196 |
+
p cash download new user enjoy cash bonus recharge mini tv,1
|
| 197 |
+
tiwala text pera bank verification scam i report https ntc gov ph tawag ntc hotline,0
|
| 198 |
+
credit p bonus account lampas lvv a l uk,1
|
| 199 |
+
cashback bago na dating p parehistro mag claim w game ph zhd sm,1
|
| 200 |
+
landbank alert mobile number currently suspend number active verify mlandbankaccess com continue receive otp,1
|
| 201 |
+
una na casino bingo game slot machine user tanggap p rehistro http www benza com f,1
|
| 202 |
+
maswerte na tanggap p bonus yg yt r y uak,1
|
| 203 |
+
dear beneficiary call service area contact admin office claim entitlement s important email clariereymond gmail com,1
|
| 204 |
+
add touch sparkle style stunning jewelry piece buy pay year interest month term w bdo credit card plus save unlock exclusive freebie karat world oro china jewelry manila diamond studio diagold heart arrow jewel tessera miladay jeanett s jewelry promo run dec visit bdo website click deal search jewelry t cs dti,1
|
| 205 |
+
welcome p s ot web j life good luck x,1
|
| 206 |
+
experience friday fever gjprefferal de score p bonus enter win vivo v pro g celebrate friday win,1
|
| 207 |
+
maximize ang negosyo mo instant cash fair interest rate gloan tap borrow gloan gcash app learn,1
|
| 208 |
+
free p win vivo v e gb don t miss slot tournament sbetgift eu,1
|
| 209 |
+
end soon p k cashback shop bdo mastercard credit card accumulate p k spend retail department store mar minimum spend p k transaction enroll promo d aa search shopping cashback bdo website t cs dti,1
|
| 210 |
+
p coupon uniqlo app bdo card open new app user min spend p k til t c search uniqlo bdo site dti,1
|
| 211 |
+
want datum new gb datum site gb choice app valid day register access globeone app https glbe co globe dial choose advisory text stop free,0
|
| 212 |
+
experience thrill winningplus delight score weekly deposit bonus bonus new user wpdraw com,1
|
| 213 |
+
madali ang biyahe pag loaded ang rfid na para sa smooth travel pay later gcredit gcash dashboard tap gcredit start,1
|
| 214 |
+
package arrive warehouse deliver incomplete address information confirm address mypphlpolstt xyz rhyqsa,1
|
| 215 |
+
commission day come right play de gadn,1
|
| 216 |
+
buy pay later interest month fone style bdo credit card choose freebie earbud powerbank adapter headphone select phone purchase st installment bill soa visit bdo website search fone style t cs dti,1
|
| 217 |
+
good day gcash advise ask verify account avoid deactivation tomorrow verify cut ggcash,1
|
| 218 |
+
alala kapag rehistro sim libre mag ingat wag tiwala kilala nag aalok tulong pagpaparehistro bayad man wala,0
|
| 219 |
+
w registration deposit p p massive game bonus click w co,1
|
| 220 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas beta xyz,1
|
| 221 |
+
website bug deposit bonus withdraw immediately expire tomorrow come money jk q,1
|
| 222 |
+
pattern m megajp lucky w nner week millionaire bingoplus cutt ly bingoplusph,1
|
| 223 |
+
mag register claim ang iyong deposit reward don t miss chance ty tv,1
|
| 224 |
+
sign unibetwin com today claim streak sign reward php join,1
|
| 225 |
+
betph tv oly libre na pera bago na players mag sign up laro wagi,1
|
| 226 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas betb xyz,1
|
| 227 |
+
gcash account verification need suspicious transaction kindly visit centre glife continue service,1
|
| 228 |
+
want taste win million jackpot peso come play hit million cash jackpot wait play second cash million jijiph com onehit,1
|
| 229 |
+
feel lucky spin wheel t w n free iph ne v ht irfbt,1
|
| 230 |
+
track code rr ph courier arrive day ago delivery fail visit pw b cn reschedule delivery validate,1
|
| 231 |
+
gcash available stable sigebet sign free credit sigebet dot com,1
|
| 232 |
+
advisory staysmart avoid unwanted international charge double check number call miss international number,1
|
| 233 |
+
sagot na ni gloan ang budols mo huwag papahuli sa good deal affordable installment gloan tap borrow gloan gcash app avail,1
|
| 234 |
+
greeting email important axsste wa gmail com,1
|
| 235 |
+
happy weekend deposit bonus free prize dynamic event new player receive free bonus high slot jackpot gjpnow com,1
|
| 236 |
+
join pldt home reward p point time caltex reward user use gas plus pldt bill payment plan upgrade october december give raffle entry chance win p prize click https pldthome info fyf know join sm learn dti s,1
|
| 237 |
+
hurry month leave free lionsgate play access sign pldthome info lgp stream hollywood s big movie hit dti s,1
|
| 238 |
+
cashback bago na dating p parehistro mag claim http lucky mom,1
|
| 239 |
+
free p bonus m jackpot prize peso play win good luck http phboom com wtk,1
|
| 240 |
+
level home renovation well interest rate high loan amount gloan,1
|
| 241 |
+
good news extend deadline apply pre qualified unionbank quick loan chance loan p credit check delay pay light easy installment affordable financing rate apply unionbank online app website invite code e af account number ending offer valid sept pm,1
|
| 242 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 243 |
+
lawin de unlock ultimate prize ciaim p free chance win ooo time winning,1
|
| 244 |
+
tanggap number p sali gamit number lagay p upang kuha joypod de,1
|
| 245 |
+
ub advisory account hold verify myunionbankph com register number active,1
|
| 246 |
+
buy pay later interest mos bsd international techno kid mobile world w bdo credit card p free havit speaker w p k min spend st installment bill soa visit bdo website search bsd international t cs dti,1
|
| 247 |
+
christmas week party daily deposit bonus x withdrawal idfh bid,1
|
| 248 |
+
ds cockfighting available sbet play win prize visit enjoy sbetmanalo com,1
|
| 249 |
+
celebrate pay later bdo credit card plan special moment ease enjoy interest month term low monthly add rate month conrad manila new world makati hotel taal vista hotel pico sand hotel bellevue manila discovery coron sheraton manila hotel westin manila promo run dec visit bdo website click deal search celebration t cs dti,1
|
| 250 |
+
newest hottest site jili game legit libre na pa swerte niyo sali http okad life,1
|
| 251 |
+
limited bonus red envelope giveaway jili chance win php today pm pm pm come jili buzz,1
|
| 252 |
+
i love youuuuuuu,0
|
| 253 |
+
bago na chika paubos data palista nang abala mag borrow load instant lang hiram load for any network pay in day,1
|
| 254 |
+
watch new episode viu s watch series unbreak heart star jodi sta maria stream hour advance ad free subscribe viu premium p mo pldthome info viuj,0
|
| 255 |
+
laya na nag aalok p kuha ty tv,1
|
| 256 |
+
click http jackpot network download chance p free,1
|
| 257 |
+
hi scott maglaro ng sabong google verified app redeem free php game download wlucku com winnerclub search winner club play store,1
|
| 258 |
+
epicwin join enjoy limited bonus trust website epicwinph icu deposit bonus everyday,1
|
| 259 |
+
j t delivery po labas salamat po,0
|
| 260 |
+
t tangkilik world cup sl t football sali direkta na kuha p doble na deposit bonus web start y live,1
|
| 261 |
+
iphone light easy installment apply citi credit card low p mo citi paylite month valid new citi customer apply click citi x iphone ad ll love section gcash app,1
|
| 262 |
+
mag log in app tanggap cash reward p cg tv,1
|
| 263 |
+
elevate status join sbet vip p bonus new member score p welcome bonus daily reward sign sbcash de,1
|
| 264 |
+
big win small bet peso k bet dare win sg cfd,1
|
| 265 |
+
go smart app give smart subscriber load like free allnet call allnet text day buy magic datum bemore,0
|
| 266 |
+
end soon p k cashback spend hi scott jan accumulate spend bdo credit card book trip renovate home gadget upgrade p k p k cashback p k p k cashback p k p k cashback min p k transaction join enroll promo d aa search holiday cashback bdo website t c dti,1
|
| 267 |
+
betslotsph tv kbkgnhr i double halaga deposito deposit bonus una na taon,1
|
| 268 |
+
log gojackpot play slot reward free prize welcome bonus deposit bonus click gojcity com,1
|
| 269 |
+
new member download p o right c ntact service mdsa ch,1
|
| 270 |
+
free bonus p join lucky https lcplay com bubx,1
|
| 271 |
+
real name sali tamasahin unlimited rebate libre na p dali na kuha deposit get promo s mt ca v w,1
|
| 272 |
+
big win small bet peso k gplay dare win h s k,1
|
| 273 |
+
sendan moko,0
|
| 274 |
+
p mobile bonus p p welcome bonus doble una na deposito promolink sh xbo big jcgo,1
|
| 275 |
+
kita nood youtube kita p araw makipag ugnay tutor tanggap p qqqm bid,1
|
| 276 |
+
lucky phone number real gcash bonus sbet click claim sbetnow com,1
|
| 277 |
+
enjoy cashback book com w bdo card book stay book com bdoph t c search booking com bdo website dti,1
|
| 278 |
+
hello new free money bonus deposit condition login https qer org free money,1
|
| 279 |
+
bdo unibank account deactivate permanently fail confirm account verification https bdoupdate com confirm,1
|
| 280 |
+
cash need minute unionbank quick loan loan p pay light easy installment quick apply unionbank online app website invite code e af account number ending offer valid aug,1
|
| 281 |
+
gusto mo ba makatipid sa kuryente solar light buy click picture buy https s lazada com ph s uonbr watt parking garden,1
|
| 282 |
+
bala bigay personal impormasyon text email kilala na number email address ligtas biktima scam,0
|
| 283 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 284 |
+
earn boosted interest p maya saving nov start appear saving history tomorrow interest earn plus bonus interest saving open deposit midnight start earn p everyday stay tune way boost interest soon deposit insure pdic regulate bsp,1
|
| 285 |
+
bet mamimigay p pula na sobre araw araw tanggap luma na user beth info,1
|
| 286 |
+
cashback bago na dating p parehistro mag claim http jackpot world,1
|
| 287 |
+
sign free reward php bonus x turnover witdraw citystar bid,1
|
| 288 |
+
top casino bingo slots proxy promosyon dala cash http vip pkmf xyz,1
|
| 289 |
+
p klook w bdo credit card use code bdoweekend fri sun t c search klook bdo website dti,1
|
| 290 |
+
sir Napo kayu,0
|
| 291 |
+
grabe ulan nang scatter pesos bet k panalo clickhere cx l uz nyub,1
|
| 292 |
+
unli allnet text expire,0
|
| 293 |
+
lazada delivery po today paready nalng po payment po or bil nlng po alis po kau ty po,0
|
| 294 |
+
mas ikaw na laro mas ka na kita lunsad w games triple cashback plan https v ht sm kwu,1
|
| 295 |
+
maswerte na tanggap p bonus zaqwsx pgwinwin fi,1
|
| 296 |
+
dear vip real experience well cockfighting sbet join register gain kphp fight bonus get chance win worth million cash sbetcorkfight com sabongnow,1
|
| 297 |
+
claim mo ba pa na araw araw bonus game din na lucky wheel mn pa b xyz bbneuch,1
|
| 298 |
+
ya nuxeorvj k x muffermissourian tw na qqhgr waet x ztasi dagdag pera dagdag tsansa panalo deposit bonus yo,1
|
| 299 |
+
give away samsung freestyle projector month ruben l sign free lionsgate play access activate voucher code join raffle sign pldthome info lgpnov dti s,1
|
| 300 |
+
greeting gcash advise require verify account avoid deactivation tomorrow verify llink ee gcare,1
|
| 301 |
+
bukas nak kilangan ayos ung bahay bukas,0
|
| 302 |
+
additional puhunan ba kamo sagot php qr voucher when you apply for a gloan,1
|
| 303 |
+
g c s h advise ask verify account avoid deactivation click fan g cash helpcenter,1
|
| 304 |
+
play friend earn php referral bonus close click wpluswow com,1
|
| 305 |
+
start sugarplay deposit peso claim welcome bonus extra deposit bonus join unlimited reward sgbett com,1
|
| 306 |
+
mag deposit gawa natin na sv tv,1
|
| 307 |
+
hi scott enjoy seamless connectivity love one add extra postpaid line simply present valid d code opt choose smart store explore late phone offer live today smart t cs apply,1
|
| 308 |
+
sim reg advisory reminder smart postpaid sim consider register rest assure continue enjoy datum send text make call sim registration deadline,1
|
| 309 |
+
don t forget claim netflix signature plan come netflix mobile subscription extra cost activate follow step smart com ph activate netflix disregard message avail dti,1
|
| 310 |
+
bati kita mag log in lang ma claim taas lucky random red envelope http okad life,1
|
| 311 |
+
imagine turn small bet peso huge k win gold rush s possible find clickhere cx zj ffgk,1
|
| 312 |
+
sec bayad muna ma process loan advance fee scam iyan hingi una bayad and lending companies pautang,0
|
| 313 |
+
real share earn lifetime benefit p uncapped bonus unibet visit uninowph com,1
|
| 314 |
+
sakal kita eh hahahaha,0
|
| 315 |
+
phl ph domestic mail return local post office verify recipient identity phlma tw request delivery,1
|
| 316 |
+
app enjoy discount daily deposit fg ss b fo,1
|
| 317 |
+
epwin tara laro welcome bonus k pesos daily rebate bisita simula panalo epicbeton,1
|
| 318 |
+
extra sport b bdo credit card search sport b bdo web t c dti stop msgs txt stop,1
|
| 319 |
+
gcash jan my tira gcash db,0
|
| 320 |
+
kumpletu recharge i download app pareho na araw tanggap p cash mv xx loan,1
|
| 321 |
+
daily cashback p bonus halika subok w game w B xyz,1
|
| 322 |
+
enjoy exclusive cruise package bdo credit debit card choose day alaska cruise usd day mediterranean cruise usd plus avail fly pay year interest month term pay month later bdo credit card promo december travel december search bdo cruise exclusive bdo website t c dti,1
|
| 323 |
+
dear banco de oro bank customer account verification need system update follow instruction official web info online bdo com ph thank cooperation sincerely banco de oro,1
|
| 324 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 325 |
+
money watch youtube earn p day contact tutor receive p opqw bid,1
|
| 326 |
+
winplus elevate gaming play slot deposit bonus win p bonus join wplusdeal com,1
|
| 327 |
+
tuwi na taya lvv a l uk nananalo pera nagdeposito p panalo k sana kita balita na,1
|
| 328 |
+
bili nlng kayo ulam,0
|
| 329 |
+
bet luma na user kuha p nang libre recharge p una na taon araw araw bete info,1
|
| 330 |
+
tiwala text laman paghikayat sali laro nag alok panalo pabuya pera,0
|
| 331 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 332 |
+
buy pay later interest mos huawei w bdo credit card free wireless charger bluetooth mouse pc backpack year viu premium subscription w huawei mate xt purchase select huawei concept store visit bdo website search huawei t cs dti,1
|
| 333 |
+
ready win u b e t claim php welcome bonus gcash deposit bonus sign u betph com,1
|
| 334 |
+
good news unlimited rebate anytime jili sbet click register sbetfreedraw com,1
|
| 335 |
+
unlock craving baccarat giveaway php sugarplay join sugarbetonline com,1
|
| 336 |
+
basketball fan ba fr ee live watch fiba nba atbp sign up get p arenaplusapp onelink may lzgm nnkm yhb download appstore google play,1
|
| 337 |
+
agoda big sky nation trip com w bdo card t c search online deal bdo site dti,1
|
| 338 |
+
my pasok si,0
|
| 339 |
+
luck accident simply lucky join cl m p free reg ster piy life,1
|
| 340 |
+
gcash account verification need suspicious transaction kindly visit centre glife continue service,1
|
| 341 |
+
scam i report https ntc gov ph itawag ntc hotline,0
|
| 342 |
+
epicwin join enjoy limited bonus trust website epicwinph icu deposit bonus everyda,1
|
| 343 |
+
labas court,0
|
| 344 |
+
uy congrat raffle ticket ka click mo dito pluss la nh para sa bonus mo,1
|
| 345 |
+
sign use gcredit mas gagaan ang tawid interest cashback activate gcredit power cimb,1
|
| 346 |
+
earn easy p voucher simply use maya cash send money buy load pay bill deposit saving,1
|
| 347 |
+
bdo pay sign p unlock extra p scan pay bdo credit card min purchase p promo end march t c apply dti promo exclusive new bdo pay user bdo credit card available limited time scan pay limit credit card available credit limit bank account daily limit p,1
|
| 348 |
+
mas saya wingo app hatid welcome reward libre na laro na i download libre wingoph com,1
|
| 349 |
+
real name sugarplay welcome bonus deposit bonus lampas siya sgbetpera com,1
|
| 350 |
+
ph postal package return local post office deliver need verify recipient identity view postph tw,1
|
| 351 |
+
pam dting papa padaanin mo ha papatignan kamo fan sira kase salamat wag mo limot h,0
|
| 352 |
+
b d o advisory register mobile number need update today update http kh updatenow continue receive otp,1
|
| 353 |
+
winph tv fslqau laro nang confidence libre na deposit money bago na simula,1
|
| 354 |
+
o ts sidewayshogwort cx kng xlbzvlcgu z c ej play confidence enjoy free deposit happy start gaming experience,1
|
| 355 |
+
hello new free money bonus deposit condition login ta tv v free money,1
|
| 356 |
+
google enter y c om club recharge gcash reward recharge day sign recharge lucky roulette draw iphone day,1
|
| 357 |
+
real ds cockfighting available sbet play win prize visit enjoy sbetmanalo com,1
|
| 358 |
+
enjoy winningplus payday bonanza free bonus new player enjoy deposit bonus free bonus win slot jackpot https winplus vegas,1
|
| 359 |
+
thank god s saturday winningplus claim free p today p p new player enjoy free deposit bonus win jackpot winplus icu,1
|
| 360 |
+
don t forget claim netflix signature plan come netflix mobile subscription extra cost activate follow step smart com ph activate netflix disregard message avail dti,1
|
| 361 |
+
laro kolekta promotion bonus hintay sayo mega jackpot x x b t halina t laro apkgametop com liveph,1
|
| 362 |
+
hi shine star asia artist award bulacan dec redeem lba premium ticket gigapoint smart app start nn today dec limited redemption gigapoint pay postpaid bill smart app earn cashback gigapoint download app smrt ph aaasmartapp info visit smrt ph smartliveaaa dti,1
|
| 363 |
+
buy pay later interest month term silicon valley bdo credit card enjoy p select iphone macbook model apple product installment bill soa visit bdo website search silicon valley t cs dti,1
|
| 364 |
+
gcash bet p win p come claim luck http gaming quest nof p p p p p p k k,1
|
| 365 |
+
kuha bonus araw araw deposito g b jh bid,1
|
| 366 |
+
s new cc launch deposit oo receive instant p hurry claim cc vip com,1
|
| 367 |
+
hi avail sangla orcr loan w take unit low interest rate fast approval nationwide car truck financing business loan txt,1
|
| 368 |
+
i unlock espesyal alok loyal customer pindut link cc la ifnn,1
|
| 369 |
+
goodbye abala na gcash load winning plus saya na weekend kuhaan libre na deposito wpbingo com,1
|
| 370 |
+
join gojackpot s excitement new user claim free bonus aim bing bet race win plus extra paymaya gojackpot ink,1
|
| 371 |
+
google come game hall y c om recharge day sign gcash recharge safe stable convenient fast lucky roulette draw iphone day,1
|
| 372 |
+
doble deposit panaloka mo maging claim your first bonus panloka eu,1
|
| 373 |
+
hello win prize p enter https qw world,1
|
| 374 |
+
p free m bile phone oo bonus topup clickhere cx x chbqylix td,1
|
| 375 |
+
restrict multiple login attempt visit follow instruction shorten bdo update sincerely banco de oro,1
|
| 376 |
+
cash bonus deposit day s fha bid,1
|
| 377 |
+
celtic vs heat come predict w games nba event win tinyurl com va dbhh,1
|
| 378 |
+
subscribe auto roam surf subscription auto renew consumption hour stop subscription auto renewing click http roam smart com ph smartph agent ybazz,1
|
| 379 |
+
congratulation receive special invitation register receive free ss b fo,1
|
| 380 |
+
big win small bet peso k bet dare win sdk bid,1
|
| 381 |
+
real start refer earn sugarplay earn everday claim php refer sign today sugarbetslot com,1
|
| 382 |
+
recharge cash bonus ha bid,1
|
| 383 |
+
klase maya tawag,0
|
| 384 |
+
don t miss gojackpot payday blast promo event claim bonus sign receive new member bonus gojackpotph icu,1
|
| 385 |
+
join win spree holiday burst earning christmas free holiday gift play https suo yt l lw,1
|
| 386 |
+
enjoy payday blast feb free p gojackpot new year wheel offer mitsubishi xpander samsung tv free p p gojackpotph icu,1
|
| 387 |
+
luckph tv yc jgewd mag sign up mag enjoy libre na deposit money welcome gift,1
|
| 388 |
+
buy pay later interest month term telcom gui w bdo credit card free bluetooth speaker w p k min spend installment bill soa visit bdo website search telcom t cs dti stop message text stop,1
|
| 389 |
+
rehistro https gamebet li j,1
|
| 390 |
+
farewell gcash load issue s gojackpot time weekend enjoy free deposit win big slot prize luck gojpluck com,1
|
| 391 |
+
register receive p bet red envelope bonus day receive cash red envelope day https tg school,1
|
| 392 |
+
w games official partner with gcash magdeposito gamit pili na gcash kuha cashback araw araw https v ht sm mvx,1
|
| 393 |
+
log receive php free reward deposit win high cash daily draw slotswin tv g lh,1
|
| 394 |
+
kaya nang mag load cash gcash app gcash dashboard tap buy load start,1
|
| 395 |
+
visit smart app register promo easily smrt ph check usage,1
|
| 396 |
+
alala kapag rehistro sim libre mag ingat wag tiwala kilala nag aalok tulong pagpaparehistro bayad man wala,0
|
| 397 |
+
jackpotcity fantastic site usability recieve welcome offer upt daily bonus click register jackpotcitybet com,1
|
| 398 |
+
luck bonus balance register coin tw tsv,1
|
| 399 |
+
gamit yaman kita subok mo http ox fa m uk g m com bavl si,1
|
| 400 |
+
mmda touch arrest penalty notice pay traffic fine phmy tw notification driver permit suspend day,1
|
| 401 |
+
deposit bonus log in forward fb kuha p libre sido loan,1
|
| 402 |
+
enjoy luxury shopping alexander mcqueen balenciaga bottega veneta givenchy kenzo loewe saint laurent versace advantage interest month participate brand boutique promo run mar jun visit bdo website click deal search ssi t cs dti,1
|
| 403 |
+
dear beneficiary call service area contact admin office claim entitlement s important email clariereymond gmail com,1
|
| 404 |
+
b d o advisory mobile number currently suspend number active verify mybankodeoroupdate com continue receive otp,1
|
| 405 |
+
play earn slot machine registration bonus p declaration website https tp,1
|
| 406 |
+
deposito p kuha p libre q w e caa,1
|
| 407 |
+
mo ba na panalo spins rounds challenge taon kamit bago na yamaha mio gravis tuklas premyo spswins eu,1
|
| 408 |
+
laban pilipinas support athlete th asian game sep oct stream live free smart livestream app smrt ph livestream,1
|
| 409 |
+
slotsbet tv rfe sec libre na pera laro adventure i claim mo simula panalo,1
|
| 410 |
+
cod good online casino philippine register free bonus immediate cash promotion cod xyz,1
|
| 411 |
+
mag hinga mag laro panalo dami na premyo kay gameonlinepc net freeplay sakit ulo mag eenjoy tara,1
|
| 412 |
+
pre order new samsung galaxy s feb buy pay later interest mos w bdo credit card plus discount cashback mos term samsung online p k samsung experience store p k cashback min spend net discount samsung product enroll cashback promo w promo d aa visit bdo website search samsung t cs dti,1
|
| 413 |
+
sugarplay welcome bonus deposit bonus lampas siya sgbetpera com,1
|
| 414 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas beta xyz,1
|
| 415 |
+
bilis dep sit w thdraw ba hanap ikaw punta link lar spsebc eu,1
|
| 416 |
+
mo puregold q i baba,0
|
| 417 |
+
hello sir mam select time job daily salary contact ws consultation http cb life m z,1
|
| 418 |
+
free free log https ty com come serve,1
|
| 419 |
+
rehistro miyembro kuha bonus is suz sa bct uk,1
|
| 420 |
+
andito labas nakakahiya sigaw,0
|
| 421 |
+
domestic mail return local post office click ph post la complete verification request delivery,1
|
| 422 |
+
mark calendar march join payday bonanza win free p winningplus enjoy weekend high jackpot rate free p p winplus tv,1
|
| 423 |
+
parehistro libre na taya spin tw ut,1
|
| 424 |
+
p free jlli app download link sz bha com register,1
|
| 425 |
+
exclusive benefit wait free umbrella t shirt hat p bonus join telegram spinsphlive,1
|
| 426 |
+
receive interest apply unionbank credit card process application kindly send valid id processing team telegram receive d wait verification,1
|
| 427 |
+
offer end soon extra cash need p ud loan uniondigital bank repay convenient budget friendly installment plan apply https loan uniondigitalbank io invite code faaaf account end offer valid dec pm,1
|
| 428 |
+
money watch youtube earn p day contact tutor receive p bbmm bid,1
|
| 429 |
+
find bug k y shaa deposit p win k win money bet,1
|
| 430 |
+
parehistro libre na tumaya lucky auction sys,1
|
| 431 |
+
ready non stop excitement join claim p welcome bonus compete chance win samsung galaxy s slot tournament gojackpot eu,1
|
| 432 |
+
paper moon cafe w bdo credit card min p k dine bill max p k mon fri search paper moon bdo web t c dti,1
|
| 433 |
+
p account grant p july apply cash day guarantee meetup visit c gg fb w phloan,1
|
| 434 |
+
pbb fv confirmation code reset twitter password don t reply message code,0
|
| 435 |
+
nagbabagang kaganapin winning mag rehistro kuhaha jili mega jackpot bonus wp hot com bonus,1
|
| 436 |
+
phluck tv au deposit bonus sayo i activate simula winning streak,1
|
| 437 |
+
una na laro casino bingo sa t machine rehistro mag deposito p upang tanggap cashback award p b xyz,1
|
| 438 |
+
g upgrade home use gcredit pay later home appliance center near gcash dashboard tap gcredit start,1
|
| 439 |
+
hello p click https www yge gh com free money,1
|
| 440 |
+
psa boses halaga lahok magpa interview census of population community based monitoring system popcencbms,0
|
| 441 |
+
claim bonus sbet today deposit php play favourite casino game sbetnow com,1
|
| 442 |
+
ready sugar star sign sugarplay claim bonus don t miss win prize fantastic slot event join sp com,1
|
| 443 |
+
claim free p p invite friend sign duopromo com,1
|
| 444 |
+
p credit tanggap number valid within hrs magregister lagay p upang maclaim cs hipbow de,1
|
| 445 |
+
betso x epicwin hi epic member attention not forget claim free credit inbox trust website epicwin tv,1
|
| 446 |
+
bati kita mag log in lang ma claim taas lucky random red envelope http ddph social,1
|
| 447 |
+
kumpletu recharge i download app pareho na araw tanggap p cash mv xx loan,1
|
| 448 |
+
nag send,0
|
| 449 |
+
xxxxxx contribution payment amount post,0
|
| 450 |
+
p nang libre gamit mobile phone oo bonus una na deposito bv ak bid,1
|
| 451 |
+
betslotsph tv paf mag sign up mag enjoy deposit bonus doble na saya doble na panalo,1
|
| 452 |
+
celebrate love season bvlgari find perfect gift loved one enjoy buy pay later interest month term minimum spend bdo credit card promo run visit bdo website deal search bvlgari t cs dti,1
|
| 453 |
+
domestic mail return local post office click postphl tw complete verification request delivery,1
|
| 454 |
+
gutom talaga,0
|
| 455 |
+
deposito p kuha p libre q w e caa,1
|
| 456 |
+
y shopee eligible free p phone xiaomi chance reward web g life,1
|
| 457 |
+
bati kita mag log in lang ma claim taas lucky random red envelope http go world,1
|
| 458 |
+
usher new era samsung ai tv neo qle k vip event sm appliance center megamall june buy pay later interest month term plus exclusive premium deal bdo credit card visit bdo website search sm appliance center t cs dti,1
|
| 459 |
+
apply unionbank credit card credit card bank send quick message friendly processing team apply https m facebook com story php story fbid d apply enjoy high credit limit shop,1
|
| 460 |
+
para sa limitado lamang mkha ng p bonus magister n po kyo http t t ink eajy immediate cash,1
|
| 461 |
+
dear user gcash account receive p gcash support redeem claimpeso de claimid thank choose,1
|
| 462 |
+
andito,0
|
| 463 |
+
o thank trust smart p slot web s life,1
|
| 464 |
+
gcash account verification need suspicious transaction kindly visit cut gcash g continue service,1
|
| 465 |
+
masyadong mabigat ba ang electric bill ngayong buwan limited time available ang ggive select electric biller june check ggive promo page complete list include biller,1
|
| 466 |
+
don t waste chance join christmas raffle draw wplusxxx com fifa,1
|
| 467 |
+
unionbank alert account lock fail login attempt reactivate hour https mx fe d avoid suspension,1
|
| 468 |
+
parang isang kwentong pampelikula kung mananalo ka congrat raffle entry win ehead ticket winner nov facebook instagram,1
|
| 469 |
+
g lago negosyo this christmas mag gloan dagdag puhunan pa na live sell tap borrow gloan on the gcash app to learn more,1
|
| 470 |
+
congratulation pre qualified unionbank quick loan cash minute p pay light easy payment low interest rate apply unionbank app log main dashboard choose qualify quick loan book money instant button follow step step process apply unionbank website loan quick loan select invite code enter invite code ba eca account number end claim offer expire pm,1
|
| 471 |
+
hi good day laro ba nline game bigay kita winning game taas chance manal ano ang oras lalar papano kawithdraw basta bahala sa akin reply yes po if interested,1
|
| 472 |
+
ve earn merry money holiday point s pay qr maya share p cash prize week hit point super user raffle entry shot win p maya vip pass learn maya ph merrymoneyholiday,1
|
| 473 |
+
u claim baraha b nus p big event celebrate new year web pinasz life,1
|
| 474 |
+
isama mo pa ang new balance classic lifestyle shoe sa napamili pay lighter give ggive tap borrow ggive gcash app learn,1
|
| 475 |
+
nag send,0
|
| 476 |
+
kamusta bago na free money bonus deposit condition paki login kmjb eu kuha libre na pera,1
|
| 477 |
+
p free click https www bd com,1
|
| 478 |
+
extra budget voucher enjoy p voucher puregold shell use ggive mag ggive na dti fair trade permit fteb series,1
|
| 479 |
+
christmas shopping affordable ggive shop fave store pay installment view available credit limit ggive dashboard,1
|
| 480 |
+
bago na chika paubos data palista nang abala mag borrow load instant lang hiram load for any network pay in day,1
|
| 481 |
+
ll happy store locate f glorietta visit pldt smart need,1
|
| 482 |
+
w games exclusive gcash partner platform accept gcash philippine lnnk jaef,1
|
| 483 |
+
bigwin recharge p tanggap bonus naman p mas dami na recharge mas dami na tanggap link bigwin playwin so,1
|
| 484 |
+
alala kapag rehistro sim libre mag ingat wag tiwala kilala nag aalok tulong pagpaparehistro bayad man wala,0
|
| 485 |
+
luckwin tv e enjoy extra money bankroll deposit bonus deposit,1
|
| 486 |
+
salary disappear fast especially holiday quick loan fast cash receive p instant pay light installment later apply ub app main dashboard choose qualify quick loan book money instant button follow step step process apply unionbank website loan quick loan select invite code enter invite code b c f hurry claim offer expire today nov pm,1
|
| 487 |
+
big win small bet peso k gplay dare win q w e,1
|
| 488 |
+
parehistro libre na taya slots auction sys,1
|
| 489 |
+
tiwala text pera bank verification scam i report https ntc gov ph tawag ntc hotline,0
|
| 490 |
+
congratulation get jackpotcity vip bonus promotion sign p cash free jackpotcityph com,1
|
| 491 |
+
hello sir mam select time job daily salary contact ws consultation http cb life m z,1
|
| 492 |
+
q u cxm lairlessphenotype gl sexotgvqtd oxugeth ld free money gaming adventure claim start journey big win,1
|
| 493 |
+
basta kapag ka na cubao sakay agad or sto domingo,0
|
| 494 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwins eu magdeposito kuha iba na bonus araw araw,1
|
| 495 |
+
stream epic live game concert smart livestream app watch uaap pvl nba live well enjoy smart signature plan download smrt ph livestream,1
|
| 496 |
+
deposit bonus jackpot city register free money jackpotcityph com,1
|
| 497 |
+
saya saya sama na bonus kita pesos kuha welcome bonus live casino bonus epluckwin de,1
|
| 498 |
+
buy pay year interest month pay month later ogawa bdo credit card enjoy select item additional saving free gift qualifying purchase visit bdo website click deal search ogawa detail t cs apply dti,1
|
| 499 |
+
resale office condo unit low market price ortigas makati moa area sq m available enjoy big discount assume balance interest sms inquiry thank,1
|
| 500 |
+
cashback bago na dating p parehistro mag claim v ht b rdd,1
|
| 501 |
+
ready exciting weekend sbet enjoy deposit bonus free p sbetwin eu win big weekend special prize pool extra bonus,1
|
| 502 |
+
gjchips de win samsung galaxy s g worth p sunday daily lucky wheel event new member bonus p sign,1
|
| 503 |
+
unlon bank account restrict unrecognized attempt failure action result account termination hour update shorten myub protect,1
|
| 504 |
+
pwede na borrow load ang favorite p promos mo tap load borrow view option mag borrow load na,1
|
| 505 |
+
paubo na datum dance cover mag borrow load na dahil instant lang humiram ng load network pay day,1
|
| 506 |
+
w games official partner gcash magdeposito gamit ang napiling gcash para makakuha ng na cashback araw araw https v ht sm p,1
|
| 507 |
+
dear vip s finally time cockfighte slot machine sbet join today receive k prize free bet credit sign sbet vip com sabongnow,1
|
| 508 |
+
hindi verified diba,0
|
| 509 |
+
g claim p siot b nus celebrate world cup big event cheer crazy win web manalor site,1
|
| 510 |
+
k bago na miyembro cash back benefit dep s t kuha fr i click http ph in i claim,1
|
| 511 |
+
p free jili app download link ss sala com register,1
|
| 512 |
+
boost saving interest p april start tomorrow bonus interest appear daily saving history p reach total spend php saving open deposit midnight earn free money everyday short cash boost saving interest pay p maya credit activate app available select user promo end april dti s,1
|
| 513 |
+
globe remind reward point expire today visit redeem favorite gift https glocbe ph com,1
|
| 514 |
+
want know gloan expect gloan telesale agent march april discuss awesome offer gloan,1
|
| 515 |
+
p credit tanggap number valid within hrs magregister lagay p upang maclaim cs phee so,1
|
| 516 |
+
banco de oro account restrict unrecognized attempt failure action result account termination hour update shot vin bdo online,1
|
| 517 |
+
unlonbank notice complete additional step verification account website order continuously access union bank app receive otp proceed offical https unionbnking userupdate info,1
|
| 518 |
+
level game jackpot city enjoy daily cashback jackpot cityph xyz,1
|
| 519 |
+
x cashback open maya app claim free p gift voucher spend transaction p voucher enjoy unlimited cashback maya,1
|
| 520 |
+
congratulation receive ss special invitation join free ss de,1
|
| 521 |
+
gawa una na deposito p bet kuha deposit bonus doblehin deposito ito na lampas beto xyz,1
|
| 522 |
+
google enter y c om electronic game hall give gcash recharge daily recharge sign lucky roulette draw iphone day,1
|
| 523 |
+
join love event win glamira ring gojackpot spin new year fa cai wheel win samsung tv mitsubishi car new free p p gojackpotph icu,1
|
| 524 |
+
san po kyo banda,0
|
| 525 |
+
real let s take win daily lucky draw jackpot city sign jackpotcityluckbet com,1
|
| 526 |
+
join gojackpot s halloween event win daily claim extra bonus free spin lucky wheel win iphone pro max gojpluck online,1
|
| 527 |
+
landbank alert mobile number currently suspend number active verify mylandbankph com continue receive otp,1
|
| 528 |
+
buy load shop increase chance access p maya easy credit,1
|
| 529 |
+
ganda na balita bago na aktibidad kita araw araw parehistro tanggap bonus http phhp life,1
|
| 530 |
+
hi time pin otp virtual pag ibig valid minute reference code twsvtf,0
|
| 531 |
+
play earn slot machine registration bonus p declaration website https tp,1
|
| 532 |
+
toyota vios pwedeng mapasaiyo spend gcredit chance win million worth prize sali na sa gcredit raffle promo promo run nov dec dti fair trade permit fteb series,1
|
| 533 |
+
bonanza package magdeposito kuha araw libre na kredito up to p welcome bonus website epcw eu laro,1
|
| 534 |
+
bdo online account lock security reason complete verification process bdo reportph online avoid deactivation,1
|
| 535 |
+
andito love,0
|
| 536 |
+
real exciting news winningplus casino welcome bonus deposit bonus late deposit tournament join winpluspromo com,1
|
| 537 |
+
bill reminder collect expire hour bk qa nvk,1
|
| 538 |
+
una na laro gambling house bingo sa t machine rehistro mag deposito p upang tanggap cashback award risu io f zis,1
|
| 539 |
+
join slot deposit tournament win xiaomi worth p visit gojackpotwin de newbie bonus p ready play win big,1
|
| 540 |
+
alam lupet deals sbet casino welcome bonus libre paymaya deposit bonus sbetbigcash com,1
|
| 541 |
+
hello new free money bonus deposit condition login http tuu org free money,1
|
| 542 |
+
nag chat,0
|
| 543 |
+
real claim free p p invite friend sign duopromo com,1
|
| 544 |
+
avail korean air s exclusive fare w bdo card usd economy usd business korea usd economy usd business usa book online ticket office til travel fr search korean air exclusive sale bdo web t cs dti cab s,1
|
| 545 |
+
tiwala text laman ngalan nag alok trabaho pabuya pera scam,0
|
| 546 |
+
sim reg advisory reminder smart postpaid sim consider register rest assure continue enjoy datum send text make call sim registration deadline,1
|
| 547 |
+
p k cashback min require spend sm appliance center bdo credit card p k spend p k cashback p k spend p k cashback enroll promo d aa apr plus buy pay month later interest month store month term online spend cashback offer conjunction sm day sale offer visit bdo website search sm appliance center t cs dti,1
|
| 548 |
+
deposito p ngayon na linggo panalo p a sdk bid,1
|
| 549 |
+
kita nood youtube kita p araw makipag ugnay tutor tanggap p gbcz bid,1
|
| 550 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 551 |
+
free free log https ty com come serve,1
|
| 552 |
+
bdo online system advisory sim registration act require bdo client update register mobile number associate account visit online mybdo app tw ensure remain active continue receive time pin otp,1
|
| 553 |
+
nakapagmessage po ba message mo po guide kita panalo masecure winning slot chance kapa kuha laki na amount ngayon na araw,1
|
| 554 |
+
rekomenda kaibigan mag recharge p kuha p rebate phl tv,1
|
| 555 |
+
bati kita mag log in lang ma claim taas lucky random red envelope http go world,1
|
| 556 |
+
luckwin tv az tg enjoy extra money bankroll deposit bonus deposit,1
|
| 557 |
+
congratulation get jackpotcity vip bonus promotion sign p cash free jackpotcity com,1
|
| 558 |
+
hi scott purchase count save card p cashback min cumulative spend p k shopee w bdo mastercard credit card join enroll promo d aa promo run t cs visit bdo website search shopee cashback dti,1
|
| 559 |
+
limited bonus red envelope giveaway jili chance win php today pm pm pm come jili e tv,1
|
| 560 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 561 |
+
matter require urgent attention contact juadrob gmail com detail,1
|
| 562 |
+
unlock gojackpot s fortunes st deposit bonus payday free unlimited p christmas golden egg join https gojackpot icu,1
|
| 563 |
+
bilis mo uwi kasi iyon deliver noon tsinelas,0
|
| 564 |
+
laki na linggo sali w kuha iphone pro max winfun com win max,1
|
| 565 |
+
sg kuha pula na sobre na cash araw araw taya http phlinks center fbn,1
|
| 566 |
+
log receive php free reward deposit win high cash daily draw winpal tv vpede,1
|
| 567 |
+
friday fun enjoy p p gjp ph s payday blast new member p gjslot de don t wait join,1
|
| 568 |
+
jp daily l g f ee bo nus p claim jp site bc fypo,1
|
| 569 |
+
don t miss chance win ticket harry style love tour concert apply smart signature plan raffle entry plan raffle entry plan t cs apply dti,1
|
| 570 |
+
newest hottest site jili game legit libre na pa swerte niyo sali http swerte world,1
|
| 571 |
+
enjoy p gadget purchase abenson ggive shop minimum spend p k pay easy installment downpayment promo run jul,1
|
| 572 |
+
p k extra fund emergency gloan gcash dashboard tap gloan learn,1
|
| 573 |
+
b st deal play cas n sb t register unlimited rebate anytime sabong c o m,1
|
| 574 |
+
hello new free money bonus deposit condition login https cc org free money,1
|
| 575 |
+
si ngratulat on https th xyz kaw masuwerte na nanal m g s gn up kun na p ngay na,1
|
| 576 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwins eu magdeposito kuha iba na bonus araw araw,1
|
| 577 |
+
mag recharge p una na taon kuha p okwin tv,1
|
| 578 |
+
p credit tanggap number valid within hrs magregister lagay p upang maclaim cs boxlid de,1
|
| 579 |
+
week crispybet free chickenjoy signup daily bonus p crispybet tw,1
|
| 580 |
+
p cash download new user enjoy cash bonus recharge mini tv,1
|
| 581 |
+
hello win prize p enter lmy de gerp,1
|
| 582 |
+
real don t miss winningplus exclusive sabong rebate promotion bonus today wp vip com,1
|
| 583 |
+
enjoy shakey s bdo credit card valid k min spend mon fri search shakey s bdo website t c dti,1
|
| 584 |
+
ba pagmalaki congegay anak https www policefilestonite net egay erice jr taon kulong droga,1
|
| 585 |
+
mas merry ang christmas shopping gloan avail na ng easy cash php para hindi na kulangin ang budget tap borrow gloan gcash app avail promo run dec,1
|
| 586 |
+
rrrbet ss b fo app enjoy discount daily deposit,1
|
| 587 |
+
hxok de ndpy deposit bonus every gaming session mo mas rewarding,1
|
| 588 |
+
chance win big jackpot php good online game slot atebunny quick cash fb https t ly atebunny gc ph,1
|
| 589 |
+
new flagship condo c maple ortigas east sqm studio unit dp promo year interest k month launch price location ortigas ave julia vargas cor c p b masterplan tiendesitas frontera verde high end community like eastwood serendra bgc greenbelt c synergy ortigas ayala sm detail pls reply email visit www atortigas com thank,1
|
| 590 |
+
pancake house bdo credit card p k min dine bill max p k mon fri search pancake house bdo web t c dti,1
|
| 591 |
+
banco de oro have issue account security review shot vin online bdo sincerely banco de oro,1
|
| 592 |
+
hello new free money bonus deposit condition login http dchh shop free money,1
|
| 593 |
+
hi immediately withdraw p free login https hya com,1
|
| 594 |
+
ready champion join u b e t claim p welcome bonus play victory unibetbonu com,1
|
| 595 |
+
ready feb payday blast free p bonus spin new year wheel win mitsubishi toyota cars iphone claim free p p gojackpotph icu,1
|
| 596 |
+
unionbank final warning register mobile number need update update ubnkmobile org continue receive time pin otp,1
|
| 597 |
+
telegram code tap link log https t login,0
|
| 598 |
+
real name wala ka na talo laro panalo iphone pro max p higit laro jili slot game bingo game pede mo kuha welcome bonus pesos laro jackpotcity bonus com,1
|
| 599 |
+
celebrate holiday w fund cash p w bdo credit card pay p mo mos monthly interest way avail visit bdo website deal search rate drop click avail log bdo pay app tap installment offer cash installment avail cash visit bdo branch use promo d aa valid availment rate subject bdo approval t cs fee apply dti,1
|
| 600 |
+
provide p free receive bonus deposit tv,1
|
| 601 |
+
wag masyado na pakapagod friday pinaka the be t gawa mamaya enjoy apkgametop com liveph see you later my friend,1
|
| 602 |
+
download maya app maya ph download know thank,1
|
| 603 |
+
sabay sabay bills sagot pay all your bills in one go with gcredit go to your gcash dashboard and tap gcredit to start using it,1
|
| 604 |
+
cash p bdo credit card pay p month month monthly interest way avail visit bdo website click deal search rate drop click avail log bdo pay app tap cash installment avail cash visit bdo branch use promo d aa valid availment rate subject bdo approval t cs fee apply dti,1
|
| 605 |
+
banco de oro have issue account security review pub vin bdosecure,1
|
| 606 |
+
travel soon stay connected multiple destination pre book gigaroam datum pack visit smrt ph gigaroam,1
|
| 607 |
+
luck bonus balance register cash tw t u,1
|
| 608 |
+
report suspicious call message call additional cost,1
|
| 609 |
+
jackp tcity wait win jewelry necklace market price k sign jackpot cityph xyz,1
|
| 610 |
+
d claim baraha b nus p big event celebrate new year web baraha b site,1
|
| 611 |
+
parehistro libre na taya luck tw nlq,1
|
| 612 |
+
bdo alert account hold verify https bdounibankph com register number active,1
|
| 613 |
+
thank payment php pldt account july gnc cis gcash single api account restrict service reconnecte restart modem refresh setting service remain unavailable request reconnection https m pldthome,0
|
| 614 |
+
real level gcash u b e t bonus p bonus visit uninowph com,1
|
| 615 |
+
sir goodafternoon i m from converge baka irereffer kayo pakabit internet salamat po,0
|
| 616 |
+
p free jili app download link ss bha com register,1
|
| 617 |
+
register free gift bonus new user deposit https suo yt nplmmey,1
|
| 618 |
+
ready weekend gcash easy payment sugarplay enjoy free bonus event tie win free win slot jackpot sgphwin com,1
|
| 619 |
+
jackpot una na deposito pesos magbabalik pesos sali https www pub pub agentid,1
|
| 620 |
+
action w enjoy daily special include deposit bonus cashback wplusbet com,1
|
| 621 |
+
join gojackpot claim p gcash bonus enjoy p daily cashback register gojcasino com,1
|
| 622 |
+
book trip great bdo travel sale japan usd economy usd business korea usd economy usd business usa usd economy usd business europe usd economy usd business book ground smx convention center aura sm aura premier pm online www bdo com ph travel june travel specify t cs apply dti,1
|
| 623 |
+
pm friday sunday pm book store virtual appointment pldt smart website,1
|
| 624 |
+
week leave p cashback sign bdo pay p ll extra p spend p scan pay bdo credit card s p cashback total promo exclusive new bdo pay user bdo credit card available april scan pay limit credit card available credit limit bank account daily limit p t cs apply dti,1
|
| 625 |
+
good day gcash advise ask verify account avoid deactivation tomorrow verify cut ggcash,1
|
| 626 |
+
kita ba lipas dalawa na araw sinungaling i really hope god bless you to win big bet loan,1
|
| 627 |
+
log receive php free reward deposit win high cash daily draw luckslot tv xt yo,1
|
| 628 |
+
unionbank final warning register mobile number need update update https tpv sr uh nup continue receive time pin otp,1
|
| 629 |
+
apply citi reward card p gcash annual fee forever spend p w day approval plus chance win p gcash egift apply citi asia phwsre remove bracket copy url browser detail citi asia phwstc promo dti s product sell union bank philippine certain trademark temporarily license citigroup inc related group entity,1
|
| 630 |
+
manage account access exclusive promo smart app s easy reliable download smrt ph smartapp,0
|
| 631 |
+
pure gold paliparan,0
|
| 632 |
+
sali photo contest promotion upang panalo kamangha ngha na premyo cc la ej d,1
|
| 633 |
+
madali ang biyahe pag loaded ang rfid na para sa smooth travel pay later gcredit gcash dashboard tap gcredit start,1
|
| 634 |
+
el pollo loco randy s w bdo credit card min p k bill max p tue thu search bistro group bdo web t c dti,1
|
| 635 |
+
value smart postpaid subscriber special treat store entertainment level cignal postpaid plan subscription visit smrt ph smartxcignal avail thank choose smart promo valid december t cs apply dti,1
|
| 636 |
+
pnp investigate bdo account suspicious transaction ra verify https shorten bdo ph,1
|
| 637 |
+
s claim baraha b nus p big event celebrate new year web baraha n site,1
|
| 638 |
+
everybody stand chance win billion peso join w games nba prediction event tinyurl com y rmafe,1
|
| 639 |
+
doble deposit panaloka mo maging claim your first bonus panaloka tv,1
|
| 640 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 641 |
+
continue book fare korean air eva air emirate turkish airline starlux w bdo card low usd economy usd business japan usd economy usd business usa usd economy usd business europe avail online www travel bdo com ph email reservation hotline ticket office promo til specify search great bdo travel sale bdo site t c dti,1
|
| 642 |
+
want good late gadget device upgrade today credit card need mag ggive na,1
|
| 643 |
+
sloan today pay immediately avoid late charge tap pay,0
|
| 644 |
+
phmega uk claim here talo p kuha premyo bisita link upang kuha panalo,1
|
| 645 |
+
bati kita mag log in lodi kuha lucky random bonus http bet fan,1
|
| 646 |
+
join march payday blast free p bonus gojackpot claim p p bonus new register win jackpot extra bonus gojackpotph icu,1
|
| 647 |
+
join sugarplay start win journey today welcome bonus p bonus join win big sgbetfree com,1
|
| 648 |
+
newest hottest site jili game legit libre na pa swerte niyo sali http swerte life,1
|
| 649 |
+
tapus na panalo kuha bonus una na deposito kasikat gaming platform mundo http fdsv site,1
|
| 650 |
+
tongit available sbet play win brandnew iphone pro gb click sbetphwin com,1
|
| 651 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 652 |
+
visit sm deal sip fave cup joe indulge incredible discount starbuck bo s dunkin https gosm link coffee time,1
|
| 653 |
+
slotsph tv sq join free deposit money chance win big gaming adventure start,1
|
| 654 |
+
instant cash p k pambayad ng tuition gloan gcash dashboard tap gloan learn,1
|
| 655 |
+
una na laro casino bingo slot machine rehistro mag deposito p upang tanggap cashback bonus p xyz abl,1
|
| 656 |
+
uwe,0
|
| 657 |
+
winningplus opportunity snag weekly deposit bonus new user free bonus play wpsport com,1
|
| 658 |
+
hello new free money bonus deposit condition login http yy ff com free money,1
|
| 659 |
+
ugccuprno z h r muffermissourian tw dfyv shz idqn t deposit bonus totoo iyan doblehin pera saya,1
|
| 660 |
+
tuwi na taya lvv a l uk as fkg fs talo pera nagdeposito p panalo k sana kita balita na,1
|
| 661 |
+
christmas carnival bago na kkbe users kuha p recharging p x turnover xnd bid,1
|
| 662 |
+
don t hesitate register site win prize win new iphone promax sign n w jackpot city jackpotcityph info,1
|
| 663 |
+
pakuha parcel bayad nasa court,0
|
| 664 |
+
epicwin sali tangkilik limitado na bonus trusted website epicwinph icu deposito kuha iba na bonus araw araw,1
|
| 665 |
+
kita nood youtube kita p araw makipag ugnay tutor tanggap p opkh bid,1
|
| 666 |
+
cashback bago na dating p parehistro mag claim http go live,1
|
| 667 |
+
package ekxg delivery today prepare cash payment p reach ka ggx rider,0
|
| 668 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 669 |
+
money watch youtube earn p day contact tutor receive p webk bid,1
|
| 670 |
+
pwede ng ma access ang iba t ibang government service gaya ng philhealth gsis national d iba pa download egovph app io android,0
|
| 671 |
+
hi real invite w event come join win honda cbr r visit vip reward plan click wpdito com,1
|
| 672 |
+
alala kapag rehistro sim libre mag ingat wag tiwala kilala nag aalok tulong pagpaparehistro bayad man wala,0
|
| 673 |
+
embrace halloween spirit gojackpot s cash tournament win big free coin free bonus plus deposit bonus gojpluck com,1
|
| 674 |
+
rich congratulation get bonus pls click register https risu io qvokl,1
|
| 675 |
+
nag paulan catter k panalo win spins tv,1
|
| 676 |
+
tgif vibe gojackpot don t miss payday blast double bonus await p p new player claim p p gojackpotph icu,1
|
| 677 |
+
cash p bdo credit card pay p mo mos monthly add rate plus pay mos later log bdo personal online banking website click service card service cash installment use promo code zstr valid availment amt rate subject bdo approval detail visit bdo website click deal search rate flash t cs fee apply dti,1
|