mariam2004/Twitter-Bot-Detection-Using-Machine-Learning-and-NLP

GitHub: mariam2004/Twitter-Bot-Detection-Using-Machine-Learning-and-NLP

一个基于机器学习和 NLP 的 Twitter 机器人检测项目,通过对比账户元数据、工程化简介特征和纯文本方法来分类人类与自动化账户。

Stars: 0 | Forks: 0

# 🐦 使用机器学习和 NLP 进行 Twitter 机器人检测 ### 结构化数据、工程化文本特征与纯 NLP 方法的对比 ![Python](https://img.shields.io/badge/Python-3.10-blue.svg) ![scikit--learn](https://img.shields.io/badge/scikit--learn-ML-orange.svg) ![XGBoost](https://img.shields.io/badge/XGBoost-Gradient%20Boosting-green.svg) ![LightGBM](https://img.shields.io/badge/LightGBM-Gradient%20Boosting-brightgreen.svg) ![CatBoost](https://img.shields.io/badge/CatBoost-Gradient%20Boosting-yellow.svg) ![SHAP](https://img.shields.io/badge/SHAP-Explainability-purple.svg) ![NLP](https://img.shields.io/badge/NLP-TF--IDF-red.svg) ![Streamlit](https://img.shields.io/badge/Streamlit-App-FF4B4B.svg) ## 📌 项目概述 Twitter (X) 机器人 —— 即自动化或半自动化账户 —— 通过刷高互动指标、扭曲热门话题、传播虚假信息以及散布垃圾或钓鱼链接来破坏平台的完整性。本项目构建并严格比较了将 Twitter 账户分类为**人类**或**机器人**的机器学习模型,重点致力于回答一个问题: 该项目进行了**三项独立的正面交锋实验**以剥离出答案,随后利用特征重要性和 SHAP 解释了最终模型,并将其作为可部署的 Streamlit 应用发布。 ## 📊 数据集描述 **文件:** `twitter_human_bots_dataset.csv` **目标变量:** `account_type` → `human` | `bot` | 列名 | 描述 | |---|---| | `created_at` | 账户创建时间戳 | | `default_profile` | 账户是否使用默认个人资料主题 | | `default_profile_image` | 账户是否使用默认(非自定义)头像 | | `description` | 账户简介 / 自由文本 | | `favourites_count` | 账户点赞的推文数量 | | `followers_count` | 粉丝数量 | | `friends_count` | 关注的账户数量 | | `geo_enabled` | 是否启用地理标记功能 | | `lang` | 账户语言代码 | | `location` | 自由文本形式的个人资料位置 | | `statuses_count` | 发布的推文总数 | | `verified` | 账户是否经过认证 | | `average_tweets_per_day` | 平均每日发推频率 | | `account_age_days` | 按天计算的账户年龄 | | `account_type` | **目标** — `human` 或 `bot` | *(`Unnamed: 0`、`id`、`profile_background_image_url`、`profile_image_url` 和 `screen_name` 在数据清洗阶段被丢弃 — 见研究方法论。)* ## 🧪 研究方法论 1. **数据清洗** — 丢弃标识符/泄露列,从 `location` 中提取 `has_location`,填补缺失的 `description`/`lang`,移除重复项,并标准化布尔标志。 2. **探索性数据分析** — 在所有结构化特征上,对人类与机器人账户进行分布和行为方面的比较(直方图、箱线图、计数图、相关性热力图)。 3. **三项实验**(见下文)。 4. **超参数调优** — 在最佳的实验 2 模型上执行 `RandomizedSearchCV`。 5. **可解释性** — 全局特征重要性 + SHAP 摘要/条形图。 6. **部署** — 使用 `joblib` 保存构件;提供完整的 Streamlit 应用以进行交互式预测。 ## 🔬 三项实验 | 实验 | 特征集 | 训练的模型 | |---|---|---| | **1 — 纯结构化** | 仅账户元数据,**不包含** `description` | Logistic Regression, Random Forest, XGBoost, LightGBM, CatBoost | | **2 — 结构化 + 简介特征** | 实验 1 的特征 **+** 9 个工程化简介特征(`bio_length`, `bio_word_count`, `has_description`, `mention_count`, `url_count`, `has_url`, `uppercase_ratio`, `digit_count`, `special_character_count`) | 同上 5 个模型 | | **3 — NLP(仅简介)** | 仅 `description` 文本,使用 **TF-IDF(最多 500 个特征)** 进行向量化 | Logistic Regression, Linear SVM, Multinomial Naive Bayes | 每项实验中的每个模型都在相同的五个指标上进行评估,以进行公平的对等比较:**Accuracy, Precision, Recall, F1 Score, ROC AUC**。 ## 🏆 模型比较与结果 每项实验都会生成一个按 F1 Score 排序的排行榜(`baseline_results`、`engineered_feature_results`、`nlp_results`),且 notebook 的第 12 节将每项实验的最佳模型组合到一个最终的比较表格和图表中,直接回答: 1. 简介是否提升了性能? 2. 工程化的文本特征有用吗? 3. 仅靠简介文本能检测出机器人吗? 4. 哪种整体方法表现最好? *(具体的指标值取决于运行的数据集 —— notebook 是完全可复现的,并且在每次执行时都会重新生成此表格。)* 最终部署的 pipeline(用于调优、特征重要性分析、SHAP 和 Streamlit 应用)是**实验 2 — 结构化 + 简介特征**模型,它在预测性能与可解释性之间提供了最佳的平衡。 ## 🛠 使用的技术 - **数据处理:** pandas, NumPy - **可视化:** Matplotlib, Seaborn, Plotly, WordCloud - **机器学习:** scikit-learn, XGBoost, LightGBM, CatBoost - **NLP:** NLTK, TF-IDF (scikit-learn) - **可解释性:** SHAP - **部署:** Streamlit, joblib - **环境:** Google Colab / Jupyter ## ⚙️ 安装 ``` git clone cd twitter-bot-detection pip install -r requirements.txt ``` **`requirements.txt`:** ``` pandas numpy matplotlib seaborn plotly scikit-learn xgboost lightgbm catboost shap nltk wordcloud streamlit joblib ``` ## 🚀 用法 ### 运行 notebook 1. 在 Google Colab 中打开 `Twitter_Bot_Detection_ML_NLP.ipynb`。 2. 从上到下运行所有单元格 —— 出现提示时,上传 `twitter_human_bots_dataset.csv`。 3. 训练好的模型构件将保存到 `./artifacts/`(第 16 节)并打包为 zip 文件供下载。 ### 运行 Streamlit 应用 ``` # 在通过 Section 16 运行 notebook 后(artifacts 已保存): streamlit run app.py ``` 然后在浏览器中打开 Streamlit 打印的本地 URL,在侧边栏/表单中填入账户特征和简介文本,并点击 **Predict** 以查看人类/机器人分类结果、机器人概率以及影响该预测的主要促成因素。 ## 🔮 未来改进 - 整合网络级/图特征(粉丝-关注图谱结构、协同发帖时间)以捕捉协同的僵尸网络。 - 使用基于 transformer 的嵌入(例如,微调过的 DistilBERT)替换 TF-IDF,以获得更丰富、多语言的简介表示。 - 增加对发帖行为的时间序列建模(每日时间模式、突发性)。 - 根据特定平台审核政策中误报(false positives)与漏报(false negatives)之间的成本不对称性,校准部署的决策阈值。 - 定期重新训练并监控特征重要性漂移,因为机器人操作者会积极调整策略以逃避检测。 ## 👤 作者 Data Scientist | ML Engineer ## [![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=for-the-badge&logo=linkedin)](https://www.linkedin.com/in/mariam-kedr-mariamahmed)
标签:Apex, BSD, Kubernetes, 可解释AI, 数据挖掘, 机器学习, 特征工程, 社交机器人识别, 逆向工具