Course: Data Analytics — DS26
Student: Okah Ahone Ebwekoh | Student ID: 80770239
Supervisor: Prof. Nor Azizah Hitam
University: University of Europe for Applied Sciences
Submitted: July 2026
This project analyzes over 2,800 Reddit posts from r/breakups and r/relationship_advice to understand what drives community engagement in online relationship support communities. Using sentiment analysis, topic clustering, and supervised machine learning, the project tests the core hypothesis that structural factors — not emotional content — are the primary drivers of post visibility.
Key finding: Emotional sentiment has near-zero correlation with engagement. Comment count and post timing are the strongest predictors of whether a post goes viral — not how emotional the writing is. We call this the Sentiment Paradox.
Final_Project_Submission/
│
├── Final_Report_v2.docx → Full project report (8 sections)
│
├── data/
│ ├── raw/
│ │ ├── relationship_advice.csv → Original r/relationship_advice dataset
│ │ └── reddit_breakup_dataset_cleaned.csv → Original r/breakups dataset
│ └── processed/
│ └── merged_clean.csv → Cleaned, merged dataset (output of notebook)
│
├── notebooks/
│ └── main_analysis.ipynb → Full analytical pipeline
│
├── dashboards/
│ └── dashboard.py → Interactive Streamlit dashboard
│
├── diagrams/
│ ├── eda_overview.png → EDA charts (score, length, engagement, hour)
│ ├── sentiment_analysis.png → Sentiment distribution and boxplots
│ ├── wordclouds.png → Word clouds (positive vs negative)
│ ├── correlation_heatmap.png → Feature correlation matrix
│ ├── pmf_cdf.png → PMF and CDF of post score
│ ├── topic_distribution.png → LDA topic clustering results
│ ├── confusion_matrices.png → Baseline model confusion matrices
│ ├── confusion_matrices_improved.png → Improved model confusion matrices
│ ├── feature_importance.png → RF importance & LR coefficients
│ ├── model_comparison.png → Baseline model metrics comparison
│ └── improvement_comparison.png → Before vs after recall improvement
│
├── documentation/
│ └── README.md → This file
│
└── references/
└── citation_list.bib → APA references
| Dataset | Source | Rows | Columns |
|---|---|---|---|
| relationship_advice.csv | Kaggle | 1,885 | 8 |
| reddit_breakup_dataset_cleaned.csv | Kaggle | 948 | 10 |
| Combined (after cleaning) | — | 2,825 | 12 |
| Category | Tools |
|---|---|
| Language | Python 3 |
| Data Processing | Pandas, NumPy |
| Text Cleaning | re (regex) |
| Sentiment Analysis | VADER (vaderSentiment) |
| Topic Modeling | Scikit-learn (LDA, CountVectorizer) |
| Machine Learning | Scikit-learn (Logistic Regression, Decision Tree, Random Forest) |
| Class Imbalance | imbalanced-learn (SMOTE) |
| Visualization | Matplotlib, Seaborn, WordCloud |
| Dashboard | Streamlit |
| Environment | Jupyter Notebook (Anaconda) |
pip install pandas numpy matplotlib seaborn scikit-learn imbalanced-learn vaderSentiment wordcloud streamlitOpen Anaconda Navigator → Launch Jupyter Notebook → Open notebooks/main_analysis.ipynb → Run All Cells
Make sure the datasets are in data/raw/ before running.
cd "path/to/Final_Project_Submission"
streamlit run dashboards/dashboard.pyThe dashboard will open automatically at http://localhost:8501
| Approach | Best Recall | Best F1 |
|---|---|---|
| Baseline Models | 0.244 (RF) | 0.349 (RF) |
| Class Weighted | 0.944 (DT) | 0.630 (DT) |
| SMOTE | 0.861 (DT) | 0.634 (DT) |
5 Topic Clusters identified:
- Heartbreak & Recovery — 30.4%
- Long-term Strain — 21.3%
- Dating & Early Relationships — 17.9%
- Intimacy & Dynamics — 16.2%
- Social & Family Conflict — 14.4%
Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5–32.
Hutto, C. J., & Gilbert, E. (2014). VADER: A parsimonious rule-based model for sentiment analysis of social media text. ICWSM.
Pedregosa, F., et al. (2011). Scikit-learn: Machine learning in Python. JMLR, 12, 2825–2830.
Shujon, S. (2025). Reddit break up stories dataset 2023–2025. Kaggle.
The Devastator. (2025). Unveiling relationship dynamics with Reddit. Kaggle.