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

Я решил провести быстрый анализ статей и посмотреть, что отличает посты «Популярное на Medium» от других постов. Я также хотел создать предсказатель, который мог бы предсказать, будет ли сообщение отображаться в популярном разделе, и попытаться определить, какие функции наиболее полезны при написании сообщения. Еще одним мотивом, который у меня был, было узнать больше о моделях Apache Spark и машинного обучения, поэтому я провел весь анализ и визуализацию в Spark и Zeppelin.

Исследовательский анализ данных «Общие сообщения» и «Популярное в СМИ»

Набор данных состоял из сообщений с января по ноябрь 2017 года и насчитывал около 11940 сообщений, из которых 1069 сообщений были популярными.

Я предварительно обработал текст сообщений, удалив знаки препинания, специальные символы, лемматизируя и ограничивая слова и, наконец, удалив стоп-слова. Затем я пропустил содержимое сообщений через модель скрытого распределения Дирихле, чтобы сгруппировать сообщения по 12 темам **. Цель заключалась в том, чтобы увидеть, какие статьи доминируют в пространстве Medium. Слова связаны с их корневыми словами, поэтому может потребоваться немного творчества, чтобы связать их со значимыми терминами.

** Количество тем было достигнуто путем небольшого проба.

Слова, составляющие популярные темы для «Популярные сообщения в СМИ»

Основные идеи, которые можно увидеть в популярных постах на среднем уровне, - это машинное обучение и данные (разве мы здесь не для этого?), Javascript, Relationships, Apple и Google, Trump, Bitcoin, культурные искусства, такие как фотография и музыка.

Слова, составляющие популярные темы для «Непопулярных средних сообщений»

Основные идеи, которые можно увидеть здесь, - это блокчейн, технологии, медицинские исследования, отношения, политика Трампа (опять же), кодирование, еда, экономика и культурные искусства, такие как фотография и музыка.

Похоже, статьи о Трампе, биткойнах, отношениях, музыке и данных имеют больше шансов попасть в раздел «Популярные».

Визуализация различий в количественных характеристиках сообщений между популярными и непопулярными сообщениями

Я собрал информацию об аплодисментах, о пользователях, которые аплодировали, об ответах на каждый пост. Затем я нормализовал вышеуказанные количества со временем, прошедшим с момента публикации сообщений, и временем сбора данных, чтобы сделать их справедливым сравнением с точки зрения единицы времени.

  • Количество слов и хлопок в единицу времени и Количество изображений и количество хлопков в единицу времени

На первом графике мы видим многочисленные и плотные пики в диапазоне 1500–3500 слов. Статьи с таким количеством слов получают больше всего аплодисментов.

На втором графике мы видим, что статьи, содержащие 8–14 изображений, имеют наибольшее количество аплодисментов за единицу времени. Ясно, что писатели должны включать в свои статьи больше изображений.

Все представленные ниже визуализации сгруппированы по атрибуту isPopular.

  • 0 - не популярно
  • 1 - Популярные
  1. Сравнение среднего числа пользователей, хлопающих в единицу времени, среднего количества хлопков в единицу времени и среднего числа ответов в единицу времени.

Популярные посты содержат:

  • В 10 раз больше: количество пользователей, хлопающих в среднем за единицу времени
  • В 10 раз больше среднего количества хлопков в единицу времени
  • В 7 раз больше среднего числа откликов за единицу времени

2. Сравнение среднего времени чтения, среднего количества слов и среднего количества уникальных слов на слово

Популярные посты :

  • Среднее время чтения составляет 8 минут по сравнению с 5,2 минутами непопулярных сообщений.
  • Среднее количество слов составляет 2075 по сравнению с 1375 непопулярных сообщений.
  • Среднее количество уникальных слов на слово составляет 0,333 по сравнению с 0,313 непопулярных сообщений. Это означает, что на каждые 100 слов популярных постов приходится 33 уникальных слова по сравнению с 31 уникальным словом непопулярных постов. ***

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

*** Среднее количество уникальных слов на слово = количество уникальных слов / общее количество слов

3. Сравнение среднего количества изображений и среднего количества слов в заголовке

Популярные статьи:

  • В среднем есть 6 изображений по сравнению с 4 изображениями непопулярных статей.
  • Иметь более длинные заголовки, в среднем на 1 слово больше, чем заголовки непопулярных статей.

Предсказание, какие статьи станут популярными

Для этого я сравнил два алгоритма: наивный байесовский и случайный лес.

Используемые функции - это все, что мы можем получить, как только сообщение будет написано:

  • Время чтения
  • Количество изображений
  • Количество слов
  • Количество слов в заголовке
  • Слова как функция TF-IDF

После очистки текста я использовал TF-IDF и объединил все функции с помощью VectorAssembler. Затем я передал функции алгоритмам Наивного Байеса и Случайного леса без каких-либо изменений значений по умолчанию. Предполагаемый ярлык заключался в том, будет ли публикация популярной или нет, в виде цифр 0 и 1.

Наивный Байес дал оценку F 88,4% и точность 90,05%

Random Forest дал оценку F 87,6% и точность 91,6%

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

Случайный лес без текстовых функций дал оценку F 89,06% и точность 91,56%

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

Конечная цель службы прогнозирования - донести до людей, чего не хватает в их статьях, и что они могут сделать, чтобы эти статьи попали в раздел «Популярные».

Уф, это был длинный пост. Но часть анализа и машинного обучения была очень интересной и познавательной, если не сказать больше. Я много узнал о Spark и Zeppelin и прочитал об алгоритмах классификации и кластеризации, которые он реализует. Визуализации были выполнены в Zeppelin, и хотя они ограничены по объему, я нашел их достаточно для моего случая использования. Наконец, я новичок в области данных и все еще изучаю основы. Пожалуйста, поделитесь своими мыслями и предложениями ниже, чтобы я мог учиться и исправлять свои ошибки.

Вы можете ознакомиться с исходным кодом по адресу: https://github.com/masterlittle/SparkmediumAnalysis

Прощай !!!