В наши дни 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 - Популярные
- Сравнение среднего числа пользователей, хлопающих в единицу времени, среднего количества хлопков в единицу времени и среднего числа ответов в единицу времени.
Популярные посты содержат:
- В 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
Прощай !!!