Skip to content

aapetukhov/Spam-Messages-Detection

Repository files navigation

Классификация сообщений (спам/не спам)

Описание проекта 📌

Этот проект посвящен применению моделей для классификации текстовых сообщений на спам и не-спам. Объём тестовых обучающей выборки ~16000 сообщений. Целевая метрика — ROC-AUC. Для классификации используются как стандартные модели машинного обучения, так и некоторые инженерные модификации.

Установка зависимостей

Для установки используемых в ноутбуке библиотек выполните следующую команду в терминале:

pip install -r requirements.txt

Этапы работы 📎

Ниже представлены этапы работы над ноутбуком. В самом .ipynb файле навигация отличается минимальным образом от представленной ниже

  1. Импорт библиотек
  2. Предварительный анализ данных (EDA)
    • Баланс классов
    • Сравнение распределений длин слов для спама и не спама
    • Облако слов для визуализации часто используемых слов
    • Кластеризация текстов для выявления скрытых структур
  3. Предобработка текстов
    • Очистка текста от стоп-слов
    • Удаление неинформативных слов
    • Приведение всех слов к нижнему регистру
    • Лемматизация
    • Преобразование текстов в векторы с использованием GloVe эмбеддингов для LSTM
    • Создание представлений TF-IDF и Bag Of Words для других моделей
  4. Модели
    • Логистическая регрессия на TF-IDF признаках
    • K-Means на TF-IDF признаках + Логистическая регрессия на расстояниях до центров кластеров
    • Латентное размещение Дирихле (LDA) + Логистическая регрессия на вероятностях тем
    • NaiveBayes на TF-IDF признаках
    • NaiveBayes на CountVectorizer
    • LightGBM на TF-IDF представлениях
    • LSTM на GloVe эмбеддингах слов
    • Трансформер на GloVe эмбеддингах слов + Визуализация механизма внимания
  5. Сравнение лучших кандидатов
    • Сравнение качества на общей отложенной выборке
    • Калибровочные кривые
    • ROC и PR-кривые
    • Распределение вероятностей
  6. Предсказания LSTM на тесте

Модели и результаты 🧪

Результаты подбора параметров представлены в табличке. Результаты указаны для моделей на лучших подобранных гиперпараметрах и отсортированы в порядке убывания качества.

Модель ROC-AUC Метод подбора параметров
LSTM на GloVe эмбеддингах 0.9816 RMSProp
Логистическая регрессия на TF-IDF 0.9777 Кросс-валидация (4 фолда)
Бустинг на TF-IDF 0.9762 Optuna (120 trials)
K-Means + Логистическая регрессия 0.972 Кросс-валидация (4 фолда)
NaiveBayes на TF-IDF 0.9713 Кросс-валидация (4 фолда)
NaiveBayes на CountVectorizer 0.9704 Кросс-валидация (4 фолда)
LDA + Логистическая регрессия 0.876 Кросс-валидация (4 фолда)

Наиболее качественные результата показала наиболее сложная архитектура - LSTM на основе GloVe эмбеддингов (эмбеддинги дообучались), обученная для классификации. Схема модели:

lstm_graph