Tras haber reducido la dimensionalidad de los datos de las cuentas a dos dimensiones, se graficaron, observando ciertos grupos que podrían ser reconocidos con clustering. Se decidió realizar el experimento con el objetivo de obtener mayor información del dataset. Los datos se encuentran en cuatro archivos correspondientes a los subconjuntos de entrenamiento y testing, separados en autor-datos (archivos “X”); y autor-clase (archivos “y”).
library(tidyverse)
df_w <- read.csv("X_test_reduced_2 (2).csv")
df_w <- full_join(df_w, read.csv("X_train_reduced_2 (2).csv"), by = c("author", "X0", "X1"))
df_y1 <- read.csv("y_train (2).csv", header=FALSE, col.names = c("author", "X0"))
df_y2 <- read.csv("y_test (2).csv", header=FALSE, col.names = c("author", "X0"))
df_y <- full_join(df_y1, df_y2, by = c("author", "X0"))
Después de cargar los datos, estos se grafican. Se puede observar ciertas agrupaciones que destacan por sobre el ruido que se ve en el centro de la figura.
plot(df_w %>% select(2, 3), pch=20, cex=1)
Aplicando lo visto en clases, se aplica K-means a los datos.
set.seed(413)
scaled <- scale(df_w %>% select(2,3))
wss <- 0
clust = 30
for (i in 1:clust) {
wss[i] <- sum(kmeans(scaled, centers = i)$withinss)
}
plot(1:clust, wss, type="b", xlab="Clusters", ylab="error")
Se decide usar 19 clusters. Se usa un número relativamente alto porque se quiere representar todos los pequeños grupos en clusters. El número 19 es escogido pues al agregar un nodo más, el error incrementa.
set.seed(1022)
km1st.out <- kmeans(scaled, 19, nstart = 20)
cluster <- factor(km1st.out$cluster)
ggplot(df_w, aes(x=X0, y=X1, colour=cluster)) +
geom_point() +
ggtitle("Clusters con K-means")
Los resultados del proceso no son los esperados. El gran cúmulo central es dividido por varios clusters. Además los grupos pequeños en las fronteras del gráfico suelen agruparse juntas. En retrospectiva, este resultado es obvio debido a las características de K-means.
Como los grupos que se quiere representar en clusters son visualmente densos. DB Scan resulta una alternativa deseable.
library("dbscan")
accs <- df_w %>% select(2,3)
dbscan::kNNdistplot(accs, k = 15)
abline(h = 4.3, lty = 2, col = "red")
Se escoge una distancia de 4,3 como radio para detectar puntos cercanos.
db <- dbscan::dbscan(accs, eps = 4.3, minPts = 15)
accs$cl_db <- factor(db$cluster)
ggplot(accs, aes(x=X0, y=X1, colour=cl_db)) +
geom_point() +
ggtitle("Clusters con DB Scan")
Con este método se obtiene algo más cercano a lo que se tenía en mente. A partir de este resultado, se podría ver que caracteriza a cada conjunto, sin embargo, el número de clusters lo hace tedioso, y la cantidad de cuentas por cluster lo vuelve poco confiable. En nuestra opinión, resulta más interesante estudiar la correlación entre los clusters y las clases definidas para el proceso de clasificación.
Dado que los datos no se encuentran en formato de transacciones, no se pudó usar las librerías predefinidas para trabajar con reglas de asociación. No obstante, se pudo obtener los valores necesarios de todas formas.
classes <- data.frame(accs$cl_db)
classes$cl_km <- cluster
classes$real <- factor(df_y$X0)
Tras definir el dataframe que se contiene toda la información necesaria ({cluster_db, cluster_kmeans, clase}
), se realizan las transformaciones necesarias para obtener las reglas. En primer lugar se realiza con los resultados de DB Scan.
# Ocurrencias (o support count) de {cluster_db, clase}
t <- classes %>% group_by(accs.cl_db, real) %>% summarise(count = n())
# Ocurrencias (o support count) de {cluster}
t <- inner_join(t, classes %>% group_by(accs.cl_db) %>% summarise(total = n()), by=c("accs.cl_db"))
# Proporción entre las ocurrencias (o confianza de {cluster_db} -> {clase})
t$proportion <- t$count / t$total
# Variable auxiliar con las frecuencias relativas (o soportes) de {clase}
p <- (df_y %>% group_by(X0) %>% summarise(cant = n()))
p$pro <- p$cant / 1856
# Razón entre la confianza de la regla y el soporte de {clase}
t$lift <- t$proportion / p$pro[t$real]
Se filtran las reglas para obtener solo aquellas con un lift mayor a 1,2.
t %>% filter(lift > 1.2)
## # A tibble: 21 x 6
## # Groups: accs.cl_db [19]
## accs.cl_db real count total proportion lift
## <fct> <fct> <int> <int> <dbl> <dbl>
## 1 0 0 49 81 0.605 1.21
## 2 1 2 147 1166 0.126 1.26
## 3 2 1 26 35 0.743 1.86
## 4 2 2 8 35 0.229 2.28
## 5 3 0 63 65 0.969 1.94
## 6 4 0 44 44 1 2
## 7 5 0 23 23 1 2
## 8 6 0 52 56 0.929 1.86
## 9 7 1 32 36 0.889 2.22
## 10 8 1 37 39 0.949 2.37
## # ... with 11 more rows
Mediante la observación de las reglas obtenidas (descartando aquellas con confianza menor a 0,7) se obtienen las siguientes conclusiones:
Antes de seguir obteniendo conclusiones de estos resultados, es importante ver como se manifiestan en el gráfico.
ggplot(accs %>% filter(cl_db %in% c("3", "4", "5", "6", "12", "18")), aes(x=X0, y=X1, colour=cl_db)) + geom_point() +
ggtitle("Baja popularidad")
Con la excepción del número 5, todos los clusters que tienen una regla que los asocia a baja popularidad se encuentran en la zona superior izquierda del gráfico.
ggplot(accs %>% filter(cl_db %in% c("7", "8", "9", "10", "11", "13", "16", "19")), aes(x=X0, y=X1, colour=cl_db)) +
geom_point() +
ggtitle("Media popularidad")
Aquellos de popularidad media, por su parte, están localizados en los extremos superior derecho e inferior izquierdo.
Graficandolos todos juntos:
pop_cl <- c("?", "?", "media o alta", "baja", "baja", "baja", "baja", "media", "media", "media", "media", "media", "baja", "media", "media o alta", "?", "media", "?", "baja", "media")
accs$pop <- pop_cl[accs$cl_db]
ggplot(accs, aes(x=X0, y=X1, colour=pop))+
geom_point() +
ggtitle("Clusters segun popularidad")
Se obtiene que, en general, las cuentas que se ubican en los extremos de está reducción de dimensionalidad se distribuyen de forma más homogénea. Por el contrario, el centro está compuesto por cuentas de todo tipo. Con excepción del cluster 5 es posible decir que, pese a que ciertas reglas tienen muy pocos elementos, en conjunto demuestran una tendencia en los datos, pues los grupos de clusters definen zonas donde predominan ciertas clases.
Aun cuando no se aporte mucha información nueva, se repite el proceso anterior con el clustering por K-means.
# Ocurrencias (o support count) de {cluster_km, clase}
t2 <- classes %>% group_by(cl_km, real) %>% summarise(count = n())
# Ocurrencias (o support count) de {cluster}
t2 <- inner_join(t2, classes %>% group_by(cl_km) %>% summarise(total = n()), by=c("cl_km"))
# Proporción entre las ocurrencias (o confianza de {cluster_km} -> {clase})
t2$proportion <- t2$count / t2$total
# Razón entre la confianza de la regla y el soporte de {clase}
t2$lift <- t2$proportion / p$pro[t2$real]
Nuevamente, se descarta inicialemente las reglas con lift menor a 1,2.
t2 %>% filter(lift > 1.2)
## # A tibble: 20 x 6
## # Groups: cl_km [16]
## cl_km real count total proportion lift
## <fct> <fct> <int> <int> <dbl> <dbl>
## 1 1 0 75 123 0.610 1.22
## 2 1 2 16 123 0.130 1.30
## 3 3 0 48 64 0.75 1.5
## 4 4 1 61 74 0.824 2.06
## 5 4 2 12 74 0.162 1.62
## 6 5 0 71 115 0.617 1.23
## 7 5 2 20 115 0.174 1.74
## 8 6 2 47 134 0.351 3.50
## 9 8 0 60 66 0.909 1.82
## 10 9 1 82 133 0.617 1.54
## 11 10 1 74 76 0.974 2.44
## 12 11 1 42 64 0.656 1.64
## 13 12 0 98 102 0.961 1.92
## 14 13 0 149 226 0.659 1.32
## 15 15 0 63 65 0.969 1.94
## 16 16 1 28 34 0.824 2.06
## 17 17 1 62 87 0.713 1.78
## 18 17 2 14 87 0.161 1.61
## 19 18 1 39 42 0.929 2.32
## 20 19 2 21 81 0.259 2.59
Esta vez se obtienen menos reglas con confianza mayor a 0,7. De aquellas que si cumplen este criterio:
Nuevamente se grafican estos grupos de clusters.
accs$cl_km <- classes$cl_km
ggplot(accs %>% filter(cl_km %in% c("3", "8", "12", "15")), aes(x=X0, y=X1, colour=cl_km)) +
geom_point() +
ggtitle("Baja popularidad")
ggplot(accs %>% filter(cl_km %in% c("10", "16", "18")), aes(x=X0, y=X1, colour=cl_km)) +
geom_point() +
ggtitle("Media popularidad")
pop_cl <- c("?", "?", "baja", "media o alta", "?", "?", "?", "baja", "?", "media", "?", "baja", "?", "?", "baja", "media", "media o alta", "media", "?")
accs$pop_km <- pop_cl[accs$cl_km]
ggplot(accs, aes(x=X0, y=X1, colour=pop_km))+
geom_point() +
ggtitle("Clusters segun popularidad")
Se obtienen resultados similares a los anteriores. Como los clusters de K-means son menos representativos de las agrupaciones de los datos, se pueden observar discrepancias. Por ejemplo, en la zona inferior izquierda solo se encuentra un cluster de popularidad media cuando con DB Scan se encontraban dos. Si se vuelve a ver el gráfico de clustering con K-means, se puede observar que el conjunto de elementos que ahora no tiene una regla fuerte pertenece a un cluster con toma elementos del borde del cúmulo central. De esta forma se puede confirmar que K-means en este caso no era el algoritmo más apropiado.
Luego de encontrar zonas que se correlacionan con las clases, es necesario ver que comparten las cuentas que se encuentran en estos lugares. Para ello, se observan manualmente los atributos de los datos correspondientes. A continuación se muestran los primeros 20 usuarios, mas las siguientes observaciones se hicieron a partir de la totalidad de los datos de cada caso.
accs_name <- full_join(accs %>% select(1,2,4), df_w, by=c("X0", "X1"))
accounts <- read.csv("accounts.csv")
accounts$content <- NULL
temp <- (accs_name %>% filter(pop == "baja"))[["author"]]
head(accounts[accounts$X %in% temp,], 20)
## X followers followers.1 followers.2
## 9 4EVER_SUSAN 55 60 0.05008347245409015
## 14 AAASSSSSHHH 39 46 0.0919632511928765
## 36 ADAM_MATHISSS 85 112 0.21142499796079284
## 38 ADELE_BROCK 56 59 0.014311080486576738
## 39 ADELIINESTRT 0 0 0.0
## 44 ADLEESWOD 0 0 0.0
## 47 ADRIANAMFTTT 43 48 0.03462587225938626
## 60 AGNESSTRYT 0 0 0.0
## 70 ALAXXATRT 0 0 0.0
## 71 ALBELITATRTS 0 0 0.0
## 87 ALEXWARNINGU 58 60 0.01413684267363037
## 90 ALFREDBENBEN 82 88 0.08158871356129067
## 100 ALLFORPETERSONS 153 153 0.0
## 104 ALW_ILL 28 49 0.14429408508770256
## 107 AMALIA_PETTY 61 71 0.07586733753062354
## 110 AMBAASTRT 0 0 0.0
## 116 AMELCREECH 67 78 0.2255414275747177
## 122 AMIRAHPOPE 70 74 0.01916684136443952
## 128 AMYYSSTS 0 0 0.0
## 140 ANDREWHEDDD 6 8 0.050026924212683906
## followers.3 following following.1 following.2
## 9 -4.933975624106854e-07 75 76 0.01001669449081803
## 14 -5.162109336617183e-07 27 30 0.039412821939804214
## 36 -1.0016164087558887e-06 0 0 0.0
## 38 -9.199741587306957e-08 51 53 0.009540720324384492
## 39 0.0 0 0 0.0
## 44 0.0 0 0 0.0
## 47 2.1462809308977795e-07 88 138 0.3462587225938626
## 60 0.0 0 0 0.0
## 70 0.0 0 0 0.0
## 71 0.0 0 0 0.0
## 87 -2.8894480051797667e-08 68 70 0.01413684267363037
## 90 -6.433764180689723e-07 79 82 0.04079435678064534
## 100 -8.236499899694855e-09 202 202 0.0
## 104 -1.2209223247854379e-06 60 111 0.3504284923558491
## 107 -3.250486048006088e-07 58 60 0.015173467506124708
## 110 0.0 0 0 0.0
## 116 -6.51014253241763e-07 19 20 0.020503766143156157
## 122 4.037361056495806e-08 86 90 0.01916684136443952
## 128 0.0 0 0 0.0
## 140 3.742891650249372e-07 53 54 0.025013462106341953
## following.3 updates updates.1 updates.2
## 9 -1.1678162928163586e-07 1 72 0.7111853088480802
## 14 -2.7136156251669324e-07 315 387 0.9459077265553012
## 36 0.0 2 416 3.241849968732157
## 38 -7.967527779525236e-08 299 424 0.5962950202740307
## 39 0.0 1 7 33.75
## 44 0.0 1 6 29.629629629629626
## 47 2.673076044822981e-06 1 464 3.2063557712191675
## 60 0.0 1 6 80.0
## 70 0.0 1 6 79.12087912087912
## 71 0.0 1 6 80.0
## 87 -1.3881545671898505e-07 1 441 3.1101053881986815
## 90 -3.9810331246965615e-07 2 406 5.493640046460239
## 100 2.01110814248782e-09 4 33 20880.0
## 104 1.7771279681775581e-06 3 270 1.8345962246865042
## 107 -1.031601008458492e-07 1 178 1.3428518742920366
## 110 0.0 1 6 80.0
## 116 4.711046813888175e-08 3 598 12.199740855177913
## 122 -4.174121512960053e-08 1 530 2.5348147704471264
## 128 0.0 1 3 960.0
## 140 6.805339772270673e-08 1 285 7.103823238201115
## updates.3 region language account_type
## 9 4.175552885939418e-06 United States English Right
## 14 3.4247971498170454e-06 United States English Koch
## 36 -4.1504683921049135e-05 United States English Right
## 38 3.1929210868231055e-06 United States English Right
## 39 0.00036032533772618165 Unknown English Right
## 44 0.00030442509420168284 Unknown English Right
## 47 -5.314303507939591e-05 United States English Right
## 60 0.0005555555555590759 Unknown English Right
## 70 0.00054945054941875 Unknown English Right
## 71 0.0005555555555461698 Unknown English Right
## 87 -3.0906646379387994e-05 United States English Right
## 90 -5.09932221083681e-05 United States English Right
## 100 0.18233966593039816 United States English Left
## 104 -5.093729813273435e-06 United States English Right
## 107 -2.3533492247989073e-06 United States English Right
## 110 0.0005555555555461697 Unknown English Right
## 116 -2.5206028036628922e-05 United States English Right
## 122 -1.5165928608846429e-05 United States English Left
## 128 0.008333333325939978 Unknown English Right
## 140 -1.191152450131795e-05 United States English Right
## account_category publish_date publish_date.1 content.1
## 9 RightTroll 99.83333333333333 0.031378217739707996 62
## 14 Fearmonger 76.11736111111111 0.02514003623988498 71
## 36 RightTroll 127.70486111111111 0.022813933976288045 45
## 38 RightTroll 209.62777777777777 0.03505189013985294 118
## 39 RightTroll 0.17777777777777778 0.009218645683151885 7
## 44 RightTroll 0.16875 0.008534807466143478 6
## 47 RightTroll 144.40069444444444 0.033020578953410006 99
## 60 RightTroll 0.0625 0.008534807466143478 6
## 70 RightTroll 0.06319444444444444 0.008534807466143478 6
## 71 RightTroll 0.0625 0.008534807466143478 6
## 87 RightTroll 141.47430555555556 0.032054712804441624 92
## 90 RightTroll 73.53958333333334 0.015649168683172586 24
## 100 LeftTroll 0.001388888888888889 0.019762845849802372 25
## 104 RightTroll 145.5361111111111 0.020365891012794957 43
## 107 RightTroll 131.80902777777777 0.029818916540746657 86
## 110 RightTroll 0.0625 0.008534807466143478 6
## 116 RightTroll 48.77152777777778 0.020482239345864933 46
## 122 LeftTroll 208.69375 0.021821361763448694 53
## 128 RightTroll 0.0020833333333333333 0.0060350202354316285 3
## 140 RightTroll 39.97847222222222 0.02401284434512327 48
Como es esperable, las cuentas de baja popularidad poseen una diferencia (entre primer y último tweet) de followers y following menor a 0,5. Las pendientes obtenidas del ajuste lineas suelen tener un valor absoluto menor a \(10^{-6}\). Más allá de los esperable, la mayor parte de estos datos han escrito menos de 200 tweets. Cabe destacar que no todos los datos cumplen los descrito, pero la existencia de outliers no es inusual.
temp <- (accs_name %>% filter(pop == "media"))[["author"]]
head(accounts[accounts$X %in% temp,], 20)
## X followers followers.1 followers.2
## 12 6DRUZ 51 107 0.43133374341419056
## 16 AANTIRACIST 220 1074 3.5305770318416845
## 22 ABIGAILSSILK 78 2863 5.899764032976538
## 31 ACEJINEV 64 928 7.582088096921239
## 34 ADAMCHAPMANJR 250 974 2.993797381116471
## 46 ADRGREERR 76 833 3.0052684831124576
## 74 ALBUQUERQUEON 1 745 7.580502508296128
## 76 ALECMOOOOODY 175 926 2.981711705005087
## 91 ALFREDTHREE 63 303 8.353677696937467
## 117 AMELIEBALDWIN 324 2860 22.325171939477304
## 146 ANDYDREWDANIELS 126 3621 28.323484720580787
## 170 ANNIEPOSHES 131 4680 35.799909278215296
## 177 ANTONHAYHAY 184 763 2.2987086030636212
## 179 ANTONOVMENMENCO 225 281 0.5205670462468045
## 199 ARKHIPOVTIOVEOF 254 302 0.5970922849664395
## 201 ARM_2_ALAN 69 191 1.0473663814946195
## 204 ARSENI_ROMAN 60 88 0.43027735387964616
## 231 BABYJANNYMEOW 291 5062 37.547014105597974
## 235 BALTIMORE0NLINE 4984 7293 20.319369328077734
## 238 BANTTANANTTA 92 127 1.454209706272722
## followers.3 following following.1 following.2
## 12 6.436129885673687e-06 9 11 0.015404776550506805
## 16 3.392951336593167e-05 417 1638 5.047815639202221
## 22 2.92280734937941e-05 64 4903 10.250972407746309
## 31 1.2500660459470059e-05 0 1264 11.092314067718108
## 34 3.463134561500107e-05 582 3097 10.39972432804962
## 46 1.3509764892961132e-05 79 1214 4.505917738880633
## 74 4.5507289870665e-05 0 5001 50.95442613439373
## 76 8.763531360109816e-06 456 3196 10.87868185314772
## 91 9.267554325926474e-06 128 1338 42.1164583887264
## 117 4.224425162016554e-05 214 2698 21.867400275103165
## 146 6.816776197133654e-05 133 4469 35.13894985649164
## 170 9.765362371910232e-05 43 4865 37.9483760254021
## 177 8.16226010333529e-06 298 2261 7.793376490179428
## 179 6.662962928268482e-06 217 264 0.4369044852428538
## 199 6.572186134876037e-06 246 291 0.559774017156037
## 201 2.4947173245146193e-06 62 68 0.051509822040718994
## 204 6.369559492337076e-06 238 242 0.06146819341137802
## 231 9.548420910352572e-05 306 4988 36.84659820633194
## 235 3.8850096456989655e-05 0 7567 66.59015491795765
## 238 3.081362829064091e-06 277 279 0.0830976975012984
## following.3 updates updates.1 updates.2
## 12 1.2895176334335144e-07 35 6289 48.170736273434784
## 16 3.518744101291486e-06 686 2059 5.676208740888328
## 22 3.53123307693394e-05 261 2517 4.779126627789972
## 31 6.138400229056622e-06 6 7236 63.447334422153425
## 34 -2.590891675438359e-05 639 2396 7.2653342522398345
## 46 1.1986396233261164e-05 3 2170 8.60292840542232
## 74 0.0003482825310095826 1 2828 28.803871762033808
## 76 -1.2255921983304472e-05 575 10419 39.0838482344475
## 91 1.902816752722142e-05 532 783 8.736554591380434
## 117 3.5808610785341785e-05 1470 40003 339.21760660247594
## 146 7.207186827696927e-05 455 2886 19.700827283471213
## 170 5.976014427570905e-05 866 4785 30.84190909239959
## 177 -9.167246211536128e-06 438 12413 47.54237568512412
## 179 5.224729534122382e-06 5461 6824 12.670230072042761
## 199 6.186946492285181e-06 5488 6489 12.451862026070957
## 201 -4.989772016199546e-07 358 14975 125.48651146153159
## 204 -4.774533549634053e-07 26 2700 41.091487295506205
## 231 8.054261217619894e-05 1372 5582 33.13203298775256
## 235 4.991779785156112e-05 9866 17153 64.1261343844532
## 238 -2.474565473386338e-08 53 3679 150.656125569854
## updates.3 region language account_type
## 12 0.0007636891631859858 Unknown English Russian
## 16 4.780890989890349e-05 United States English Left
## 22 2.2016314629011613e-05 United States English Hashtager
## 31 0.00010050411210345914 United States English Left
## 34 5.7784943205406175e-05 United States English Left
## 46 2.9959141721876536e-05 United States English Left
## 74 0.0002417645933937616 Unknown English local
## 76 0.0002709281628937119 United States English Left
## 91 1.057645938886621e-05 United States English Right
## 117 0.0011894480566105297 United States English Right
## 146 5.327779952684746e-05 United States English Hashtager
## 170 0.0001190648974603606 United States English Hashtager
## 177 0.0003314188055101393 United States English Left
## 179 0.0001455950043497519 Unknown English Russian
## 199 0.0001396472130343745 Unknown English Russian
## 201 0.0012472556394973657 United States English Right
## 204 0.0004666547891487971 Unknown English Russian
## 231 0.00010844900801087834 United States English Hashtager
## 235 0.00010954698133903369 United States English local
## 238 0.0004114919122454052 Azerbaijan English Russian
## account_category publish_date publish_date.1 content.1
## 12 NonEnglish 129.82986111111111 2.9435544890810186 116
## 16 LeftTroll 241.88680555555555 10.937142569652014 1239
## 22 HashtagGamer 472.0527777777778 0.40564488136831356 1668
## 31 LeftTroll 113.95277777777778 8.957137945536859 6134
## 34 LeftTroll 241.83333333333334 19.42710144399844 1472
## 46 LeftTroll 251.89097222222222 5.264349934911173 1867
## 74 NewsFeed 98.14652777777778 0.5805931077917901 2812
## 76 LeftTroll 251.86875 27.147115612617046 8295
## 91 RightTroll 28.729861111111113 0.046281973001200905 222
## 117 RightTroll 113.59375 34.842077605495405 34308
## 146 HashtagGamer 123.39583333333333 2.931288675009588 1801
## 170 HashtagGamer 127.06736111111111 4.727658899754057 2976
## 177 LeftTroll 251.88055555555556 12.51551281642476 10214
## 179 NonEnglish 107.575 0.00653490709996388 9
## 199 NonEnglish 80.38958333333333 0.006527534403382707 9
## 201 RightTroll 116.48263888888889 0.25849192912565194 14530
## 204 NonEnglish 65.07430555555555 3.1079109570532903 49
## 231 HashtagGamer 127.06736111111111 4.782118000579115 3205
## 235 NewsFeed 113.63541666666667 7.365396426825003 10313
## 238 NonEnglish 24.068055555555556 2.614813973281474 173
De nuevo, es predecible que estos datos tengan diferencias de followers usualmente mayor a 0,2 y las pendientes de followers y following sean un valor entre \(10^{-4}\) y \(10^{-6}\). Algo que es menos evidente es que existen relativamente pocos “RightTrolls” en esta agrupación, recordando que estos son más de la mitad del dataset. También se puede observar que hay una cantidad notable de cuentas con más de 100 tweets. Nuevamente existen outliers.
A partir de los experimentos, sería posible decir que aquellas cuentas que no sean trolls de derecha y que sean activas tienen mayores posibilidades de ser populares. Sin embargo, esto requeriría ignorar que tal afirmación solo se puede deducir a partir de una cantidad minoritaria de los datos. No se puede saber claramente como se caracterizan los datos de baja, media o alta popularidad con este método si no se logra eliminar la incertidumbre creada por todos los datos presentes en el centro de la figura. Junto con esto, la dificultad de interpretar datos cuya dimensionalidad ha sido reducida entorpece todavía más la tarea de percibir patrones en los que si presentan una tendencia.
No obstante, al crear bots que envíen tweets, hacer que el contenido de sus tweets no sea pro-republicano y que sean regularmente activos, resulta más razonable como punto de partida para que sean populares que intentar encontrar la combinación ideal de atributos por fuerza bruta.