Подход с деревьями решений через случайные леса против повышения

Задний план

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

Набор данных

Набор данных получен из Репозитория машинного обучения UCI, который содержит почти 40 000 статей из Mashable в январе 2015 года. Набор данных хорошо организован, поскольку большинство функций статей уже преобразованы в числовой формат на уровне каждой статьи, как показано ниже .

Зависимые (целевые) переменные
Количество акций
Популярность (1, если количество акций больше 1400; 0 в противном случае)

Независимые переменные
Количество слов в заголовке / содержании
Количество уникальных слов / стоп-слов / непрерывных слов / уникальных стоп-слов
Количество ссылки
Количество изображений
Количество видео
Средняя длина слов в содержании
Количество ключевых слов в метаданных
Лучшие, худшие и средние ключевые слова в репостах
Каналы (образ жизни, развлечения, бизнес, социальные сети, технологии, мир)
День недели публикации
Темы
Полярность тональности текста
Полярность заголовка
Полярность положительных / отрицательных слов
Количество положительных / отрицательных слов
Субъективность текста
Субъективность заголовка

Цель

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

Методология

Единое дерево
Сначала мы построим единое дерево классификации и регрессии (CART), чтобы изучить результат с помощью пакета rpart (который означает рекурсивное разбиение) в R Деревья решений очень легко объяснить другим, поскольку они полностью отражают процесс принятия решений человеком, а также могут отображаться визуально. Однако недостатком является то, что они не так точны, как другие методы регрессии и классификации. Кроме того, они также менее надежны, поскольку небольшое изменение в данных может привести к совершенно другим результатам.
Пошаговое руководство можно найти здесь.

Случайные леса
Учитывая, что подход с одним деревом может страдать от высокой дисперсии, естественный способ уменьшить дисперсию и, следовательно, повысить точность прогнозов - взять много обучающих наборов из популяции, построить отдельная модель прогнозирования с использованием каждого обучающего набора и усреднение результатов. Если у нас есть общее количество переменных p и мы используем все переменные, доступные на каждом узле для разделения, процесс часто называют «упаковкой», если мы используем только m из переменных p, где m равно p / 3 или квадратный корень из p, тогда процесс называется случайным лесом. Мы продемонстрируем это с помощью пакета randomForest в R.

Повышение
Повышение работает аналогично случайным лесам, за исключением того, что деревья выращиваются последовательно. Мы подгоняем второе дерево решений к остаткам из первой модели дерева. Другими словами, второе дерево подбирается с использованием текущих остатков, а не результата (популярности) в качестве ответа. Второе дерево решений затем добавляется в подобранную функцию для обновления остатков первого дерева. Для демонстрации мы будем использовать пакет gbm (обобщенная усиленная модель) в R.

Результаты

Единая КОРЗИНА
Результат показал точность 63,37%, где средняя доля ключевых слов, тип канала и день публикации в неделю коррелируют с популярностью.

Случайные леса
Точность увеличена до 66,39%. Наиболее важные переменные (выше в% IncMSE) включают количество слов в контенте, развлекательный канал, средний обмен ключевыми словами, репосты, выходные и категорию 02. Также наблюдается, что модели с m = sqrt (p) и m = p работают немного лучше, чем m = p / 3 модель.

Повышение
Точность модели 66,30% при использовании подхода ГБМ с 5000 деревьев и глубиной = 6, где средние доли ключевых слов и выходные дни являются наиболее важными переменными.

Код R

library(rpart)
library(rattle)
library(rpart.plot)
library(RColorBrewer)
library(caret)
library(randomForest)
library(gbm)
library(ROCR)
mydata <- read.csv("news.csv")
mydata$popularity[mydata$shares < 1400] <- 0
mydata$popularity[mydata$shares >= 1400] <- 1
mydata$url <- NULL
mydata$timedelta <- NULL
mydata$shares <- NULL
set.seed(1)
training_size <- floor(0.80 * nrow(mydata))
train_ind <- sample(seq_len(nrow(mydata)), size = training_size)
training <- mydata[train_ind, ]
testing <- mydata[-train_ind, ]
#single CART
fit1 <- rpart(popularity ~.,method="class",data=training)
Prediction1 <- predict(fit1, testing, type = "class")
confusionMatrix(Prediction1, testing$popularity)
#random forests
fit2.1=randomForest(popularity~.,data=training,n.trees=500,mtry=58,importance=TRUE)
Prediction2 <- predict(fit2.1, testing, n.trees=500)
predict2 <- as.data.frame(Prediction2)
predict2$Prediction2 <- ifelse(predict2$Prediction2>0.5,1,0)
confusionMatrix(predict2$Prediction2, testing$popularity)
confusionMatrix(Prediction2, testing$popularity)
importance (fit2.1)
#boosting
fit3=gbm(popularity~.,data=training, distribution="bernoulli", n.trees=5000, interaction.depth=6)
summary(fit3)
Prediction3 <- predict(fit3, testing, n.trees = 5000, type="response")
predict3 <- as.data.frame(Prediction3)
predict3$Prediction3 <- ifelse(predict3$Prediction3>=0.5,1,0)
confusionMatrix(predict3$Prediction3, testing$popularity)

Вопросы, комментарии или проблемы?
[email protected]