Простая задача классификации науки о данных. Сможем ли мы, учитывая два субреддита, определить, какой пост пришел из какого субреддита? В этой записи блога мы рассмотрим это более подробно.

Одной из широко используемых задач обработки естественного языка в бизнес-задачах является классификация текста. В образовательных целях предположим, что способность различать, какой сабреддит более популярен, является реальной бизнес-проблемой. В этой ситуации пригодится наука о данных, нам просто нужно собрать данные Reddit, которые очень доступны через запрос API, помещая данные в формат Json. Целевые классы, которые я выбрал для этого проекта, — это сабреддиты: r/Talesfromtechsupport и r/Jokes.

После сбора данных потребовалась предварительная обработка текстовых документов для построения моделей. Сами необработанные данные имеют много языка html и регулярно используемые английские слова. Таким образом, я создал функцию, используя такие библиотеки, как. RegEx, BeautifulSoup и NLTK для очистки текста. Было два метода преобразования данных в числа: Count Vectorizer и Tfidf Vectorizer. Первый подход подсчитывает частоту каждого слова, просто и понятно. Другой способ также рассматривал частоту термина, но адаптировал ее к учету слов, которые являются редкими или очень распространенными. Чтобы модели были построены, к этим функциям были применены оба метода: заголовок, пост и заголовок и пост вместе, всего 6 различных наборов данных для работы.

Модели

Для моделирования данных использовались три классификатора: классификатор случайного леса, полиномиальный наивный байесовский алгоритм и логистическая регрессия. Эти три были выбраны, потому что каждый из них представляет собой разные подходы к классификации данных: на основе дерева решений, на основе вероятности, на основе линейности соответственно. В результате модель логистической регрессии только для переменной поста показала лучшие результаты с вероятностью 99% точно предсказать любой субреддит.

Я предоставил изображение кривой рабочей характеристики приемника (ROC) вверху и слева. Кривая ROC отображает частоту истинных положительных результатов (ось Y) в сравнении с частотой ложных положительных результатов (ось X) при различных настройках порога. Это хорошее изображение того, насколько точно моя модель предсказывает положительный класс на основе оптимизации чувствительности, метрики классификации и минимизации количества ложноотрицательных результатов. Чтобы иметь отличную модель, вам нужно, чтобы площадь под кривой была равна 1 или вдоль оси y, когда x равно нулю, и вдоль оси x, когда y равно единице. На моем графике я изобразил три модели логистической регрессии, в каждой из которых использовался векторизатор Tfidf. Просто взглянув на график, вы можете сказать, что заглавная модель не очень хороша по сравнению с двумя другими моделями. Кроме того, включение текста из сообщений оказывается важным, если вы хотите иметь более высокую точность в прогнозировании субреддитов. Одна из ключевых причин, по которой логистическая регрессия работает так хорошо, заключается в том, что эти два набора данных очень уникальны и легко различимы.

Ограничения и заключительные мысли

Хотя модель показала фантастические результаты, мы должны учитывать ограничения этой модели. При сборе данных определенно была предвзятость при выборе, например, несвязанные темы и субреддиты с сообщениями с большим количеством текста.

Если бы я хотел взглянуть на другие сабреддиты, моя модель работала бы так же?

Любопытство взяло верх надо мной, я изучил две другие пары наборов данных, чтобы убедиться, что выбор данных может оказать существенное влияние на то, насколько хорошо работает модель. Первая пара, r/Stocks и r/Investing, сравнивает два сабреддита, которые очень похожи друг на друга. Пройдя тот же рабочий процесс для этого набора данных, модель не очень хорошо прогнозировала между двумя классами. Одна из возможностей для этого может быть связана с тем, что в обоих сабреддитах используется слишком много одних и тех же слов, что может привести к более высокой степени ошибочной классификации. Вторая пара рассматривала криптовалюту и биткойн, где биткойн является подмножеством темы криптовалюты. Оказывается, модель Random Forest показала хорошие результаты для этого набора данных. Означает ли это, что модели деревьев решений лучше предсказывают, когда темы более связаны друг с другом? Это может быть будущей областью для изучения и изучения.

В общем, моя модель отлично подходит для предсказания того, какие посты принадлежат какому сабреддиту, когда они сильно отличаются друг от друга. Однако можно построить более сложную модель, чтобы соответствовать более надежному набору данных, поскольку необходимо также учитывать взаимосвязь между классами.