Repensant els criteris d'èxit d'una publicació

Hola!

Sovint donem voltes a com aplicar mètriques que no es centrin els típics paràmetres quantitatius i simplistes com els likes. Amb aquest objectiu, he començat a desenvolupar una eina que analitzaria diferents mètriques d’una publicació. Entre totes podem pensar què ens agradaria saber i podria reflectir millor relacions de qualitat.

De moment només funciona amb la API de mastodon, però si us agrada puc anar ampliant el programari compatible

L’eina que he desenvolupat accepta un domini i un codi de publicació i de moment retorna:

  1. Quantitat de respostes
  2. Comptes diferents que hi han respost
  3. Interaccions de l’autora amb diferents comptes
  4. Quantitat de servidors que hi han interaccionat
  5. Quantitat de comptes que no seguien l’autor que hi han respost

La mètrica 1 i 2 són bastant quantitatives a l’estil clàssic (i que poden servir per a generar ratios amb la resta), però a partir d’aquí ja intenten donar una idea de diversitat i conversa.

La mètrica 3 puntuaria millor aquelles converses on l’autora parla i respon a diverses usuàries, en contraposició a un compte que només publica i no respon (en anglès broadcaster).

Les mètriques 4 i 5 donen una idea de la transmissió de la publicació/conversa a través de la federació. En particular, la mètrica número 5 dona una idea de fins a on ha arribat la publicació a partir d’amplificacions (potser seria interessant sumar-hi els favs, sumar-hi totes les interaccions).

Aquesta última mètrica, que considero interessant, no és senzilla i té algunes arestes. La primera és tècnica: el que fa és obtenir el llistat de seguidors del compte de l’autora a través de l’API. Com que l’API de mastodon (no sé si és igual amb d’altres programaris) té una limitació de 300 peticions cada 5 minuts, si el compte té molts seguidors he de fer que esperi 5 minuts cada 24.000 seguidors. Per tal de minimitzar aquest problema, he creat una memòria cau que es guarda en un fitxer i que fa servir si tornes a demanar la publicació d’un mateix compte.

La segona aresta és que no pots saber qui seguia al compte abans de publicar el fil. Potser algunes de les seves seguidores són degudes al fil en concret i per tant els va arribar a partir d’una resposta o una amplificació. No crec que es pugui solucionar aquesta imprecisió a no ser que es faci l’anàlisi de manera prospectiva, és a dir capturar els seguidors abans de la primera publicació del fil i llavors analitzar-ho al final amb aquesta llista.

A partir d’aquí, crec que es podrien definir alguns ratios que ajudarien a avaluar les diferents publicacions. Per exemple: 3/2 o 5/2.

Alguns exemples de resultats:

Compte al caché de seguidors.
Mètriques per a la publicació: https://paquita.masto.host/@chinicuil/112421400618819746
Quantitat de respostes: 4
Comptes diferents que hi han respost: 4
Interaccions de l'autora amb diferents comptes: 1
Quantitat de servidors que hi han interaccionat: 3
Quantitat de comptes que no seguien l'autor que hi han respost: 3 | 75%
Compte al caché de seguidors.
Mètriques per a la publicació: https://cosocial.ca/@evan/112457047627977316
Quantitat de respostes: 26
Comptes diferents que hi han respost: 21
Interaccions de l'autora amb diferents comptes: 4
Quantitat de servidors que hi han interaccionat: 18
Quantitat de comptes que no seguien l'autor que hi han respost: 9 | 43%
Compte al caché de seguidors.
Mètriques per a la publicació: https://ec.social-network.europa.eu/@EUCommission/112455456338250699
Quantitat de respostes: 59
Comptes diferents que hi han respost: 44
Interaccions de l'autora amb diferents comptes: 4
Quantitat de servidors que hi han interaccionat: 36
Quantitat de comptes que no seguien l'autor que hi han respost: 16 | 36%
Compte al caché de seguidors.
Mètriques per a la publicació: https://mastodon.green/@fanta/112460979292776731
Quantitat de respostes: 48
Comptes diferents que hi han respost: 25
Interaccions de l'autora amb diferents comptes: 6
Quantitat de servidors que hi han interaccionat: 13
Quantitat de comptes que no seguien l'autor que hi han respost: 4 | 16%

Quines mètriques afegiríeu o canviaríeu?

Codi que ho genera:

import requests
import json
import pandas as pd
import sys
import time
import getopt
 
force_fl = False
 
# Remove 1st argument from the
# list of command line arguments
argumentList = sys.argv[1:]
 
# Options
options = "d:i:f:"
 
# Long options
long_options = ["domain=", "id=", "force="]
 
try:
    # Parsing argument
    arguments, values = getopt.getopt(argumentList, options, long_options)
     
    # checking each argument
    for currentArgument, currentValue in arguments:
 
        if currentArgument in ("-d", "--domain"):
            domain = currentValue
             
        elif currentArgument in ("-i", "--id"):
            post_id = currentValue
             
        elif currentArgument in ("-f", "--force"):
            force_fl = currentValue.lower() == "true"
             
except getopt.error as err:
    # output error, and return with an error code
    print (str(err))

post = requests.get("https://"+domain+"/api/v1/statuses/"+post_id+"/").json()
author = post['account']['id']
url = post['url']
nfoll = post['account']['followers_count']

instance_link = requests.get("https://"+domain+"/.well-known/nodeinfo").json()['links'][0]['href']
instance_software = requests.get(instance_link).json()['software']['name']

responses = requests.get("https://"+domain+"/api/v1/statuses/"+post_id+"/context").json()['descendants']
total_responses = len(responses)
divers_responders_num = len(set([resp['account']['id'] for resp in responses]))
author_pos = [i for i, x in enumerate([resp['account']['id'] for resp in responses]) if x == author]
author_resp_to_dif_acc = len(set([responses[i]['in_reply_to_account_id'] for i in author_pos]))
servers = len(set([resp['account']['url'].split("/")[2] for resp in responses]))

file = open('followers.json', 'r')
dict = json.load(file)

if instance_software == "mastodon":
  if post['account']['acct']+'@'+domain in dict.keys() and force_fl != True:
    print("Compte al caché de seguidors.")
    followers_list = dict[post['account']['acct']+'@'+domain]
  else:
    print("Compte absent al caché de seguidors. L'operació pot tardar aproximadament "+str(round(nfoll/80/300*5))+" min.")
    followers = requests.get("https://"+domain+"/api/v1/accounts/"+author+"/followers?limit=80")
    followers_list = [follower['acct'] for follower in followers.json()]
    while 'next' in followers.links:
      if int(followers.headers['X-RateLimit-Remaining']) <= 10:
        time.sleep(120)
        followers = requests.get(followers.links['next']['url'])
        followers_list = followers_list + [follower['acct'] for follower in followers.json()]
        print(followers.headers['X-RateLimit-Remaining'])
      else:
        followers = requests.get(followers.links['next']['url'])
        followers_list = followers_list + [follower['acct'] for follower in followers.json()]
    dict.update({post['account']['acct']+'@'+domain:followers_list})
    file = open('followers.json', 'w+')
    json.dump(dict, file)
else:
  if post['account']['acct']+'@'+domain in dict.keys() and force_fl != True:
    print("Compte al caché de seguidors.")
    followers_list = dict[post['account']['acct']+'@'+domain]
  else:
    print("Compte absent al caché de seguidors. L'operació pot tardar aproximadament "+str(round(nfoll/80/300*5))+" min.")
    followers = requests.get("https://"+domain+"/api/v1/accounts/"+author+"/followers?limit=80")
    followers_list = [follower['acct'] for follower in followers.json()]
    while 'next' in followers.links:
      followers = requests.get(followers.links['next']['url'])
      followers_list = followers_list + [follower['acct'] for follower in followers.json()]
    dict.update({post['account']['acct']+'@'+domain:followers_list})
    file = open('followers.json', 'w+')
    json.dump(dict, file)
  

responders_acct = list(set([resp['account']['acct'] for resp in responses]))
follower_comparison = len([i for i in responders_acct if i not in followers_list])
foll_comp_perc=100*follower_comparison/divers_responders_num


print("Mètriques per a la publicació: "+url)
print("Quantitat de respostes: "+str(total_responses))
print("Comptes diferents que hi han respost: "+str(divers_responders_num))
print("Interaccions de l'autora amb diferents comptes: "+str(author_resp_to_dif_acc))
print("Quantitat de servidors que hi han interaccionat: "+str(servers))
print("Quantitat de comptes que no seguien l'autor que hi han respost: "+str(follower_comparison)+" | "+str(round(foll_comp_perc))+"%")

``
4 'M'agrada'

Com que té cinc punts, se m’ocorre una representació gràfica de les dades que s’assembla al logo de la Fedi :slight_smile:

2 'M'agrada'

Jejeje, no estaria mal!

Tot i així, no sé si aquests 5 seran els definitius, crec que hi ha molt de marge per donar-hi voltes…

Per exemple, crec que com més saludable és la xarxa (en el sentit de connexions entre nodes) menys seguidores necessites per a maximitzar la quantitat de comptes que interaccionen que no et segueixen directament. I si ampliem la imatge, la xarxa és més sana quan a molts membres els passa això.

En fi, que dóna per pensar-hi abastament…

1 'M'agrada'

Hi he afegit “suport” per akkoma (potser d’altres programaris també funcionarien). Això sí, pot ser que peti en algun moment pel límit de peticions. Si és així podem posar-hi alguna solució.

M’agrada la idea! Tot i així, els likes i boosts igual podrien comptar-se d’alguna manera, encara que amb poc pes? Val a dir que m’agrades i impulsos són el més fàcilment generable amb bots…
Sigui com sigui, el que has pensat com a mètrica m’agrada, i crec que apunta molt millor com a criteri d’èxit. I ben pensada la dificultat aquesta del punt 5, ja que efectivament, a mi m’ha passat que em trobo un fil interessant i d’aquí passo a seguir-ne l’autora. Sigui com sigui, crec que també aporta.
Has pensat en alguna utilitat concreta d’això? Per una banda, podria estar bé afegir-ho al costat de cada publicació rebuda o generada per un servidor. Alhora això seria una càrrega forta, especialment perquè per a un post cal fer moltes consultes (sobre el propi fil, i després sobre l’autor). No crec que sigui gaire factible, doncs… Així que igual només com a eina per mirar puntualment l’èxit d’algun post.
Si fos factible que cada post tingués un índex d’èxit associat, aleshores podrien aparèixer dinàmiques de competició sobre això (el que ja passa a les granges antisocials privatives). I ben pensat… a qui li interessaria mesurar l’èxit dels seus posts? Segurament a perfils comercials, o amb un interès d’aprofitar d’alguna manera les interaccions, més enllà del simple fet d’intercanviar i comunicar-se amb altres humans (interès en visibilitat perquè això pot portar clients, propagandistes de tal o qual idea…). Ben mirat, potser millor que realment no s’oferís tal cosa per defecte als posts!

2 'M'agrada'

Ei!

Sí, encara no hem definit cap puntuació. Definitivament s’haurien de ponderar totes les interacciones. En aquesta primera aproximació m’interessava més explorar altres mètriques i centrar-me en les respostes perquè són interaccions que generen una xarxa, una conversa.

És una bona pregunta :smile:. No crec que calgui incorporar-ho a cada publicació. Crec que seria interessant analitzar la puntuació mitjana de diversos comptes per a caracteritzar una xarxa. I és que crec que algunes d’aquestes mètriques poden reflectir fortalesa a nivell de xarxa i no només individual. I em sembla una línia de treball súper interessant.

2 'M'agrada'

M’està bé aquesta part automatitzada. Igualment, ha de passar una humana a donar-li sentit.

Una altra cosa que també es podria mesurar (però potser no amb la teva eina) seria quelcom que es podria anomenar “continuïtat”. Per exemple: d’un fil de conversa, acaba sorgint una cançó, un club de lectura o alguna cosa en relació o no amb el fil original.

2 'M'agrada'

Bingo! Aquí un exemple real. Per mi, aquesta publicació, té una qualitat molt alta:

  • Es comenta un llibre.
  • A la conversa hi participa gent de diversos nodes (almenys n’he comptat set).
  • A la conversa hi participa gent de diversos països (tres, n’he comptat).
  • Hi ha continuïtat: de la conversa sorgeix la idea de muntar un servei lliure.
  • Hi ha fungicitat: a la conversa es descobreixen altres maneres de fer: anartist.org, lectura.social, niboe.info
  • Un plus és que s’emet des d’Akkoma i fomenta la descentralització de la Fedi :wink:
  • Un altre plus és que l’autora del llibre participa a la conversa.

Fil d’exemple:

(això de citar-se a si mateixa és com una mica estrany…)

cc @marcelcosta

2 'M'agrada'

Segueixo donant voltes a tot això. Crec que és molt interessant representar una conversa en mode xarxa per entendre els diferents patrons. Un inici comparant dos converses:

imagen

imagen

Tot i que a la primera conversa hi participa més gent, les interaccions a la segona semblen menys polaritzades cap a l’iniciador i en canvi la resta de nodes semblen interaccionar més entre ells.

Em sembla una línia de treball molt interessant!

4 'M'agrada'

M’agrada molt! Ensenya-li a en Gorka!

1 'M'agrada'

Sí! Segur que a ell també li agrada…

Seguint una mica amb l’anàlisi, he afegit un parell de mètriques sobre descentralització basant-me en el paràmetre “a qui ha respost”:

  • Gini: Mesura de desigualtat. Valor de 0 a 1, un valor més baix indica una distribució més equitativa.
  • Entropia de Shannon: quantifica la dificultat de predir i per tant la diversitat de la població. Un valor més alt suggereix una xarxa més descentralitzada.

Converses:

Com podem veure, la 1 i la 2 són més petites, mentre que la 3 i la 4 són més multitudinàries. Però independentment d’això, la 1 i la 4 tenen valors més “descentralitzats” tant de Gini com de Shannon, comparat amb la 2 i la 3.

Crec que em falta acabar de polir les mesures i no basar-me només en el receptor de la resposta. Però els valors reflexteixen de forma aproximada el que s’intueix mirant els gràfics.


He agafat les mètriques d’aquest article:
https://medium.com/tap-in-with-taptools/edinburgh-decentralization-index-8e6f46c65daa

3 'M'agrada'

(Traducción autómatica)

Entenc que vols mesurar diversos aspectes relacionats amb el compromís i la diversitat en una comunitat, així com la capacitat de transmissió d’idees. És important tenir clar el quin i el per a què abans de definir el com. Crec que en el com ja tens algunes proves fetes. Aquí et presento algunes idees sobre les mètriques que esmentes.

Mètriques Propostes (el quin)

Se m’ocorren diverses coses que m’interessaria mesurar:

  1. Compromís en la Comunitat: Pots mesurar el compromís dels membres a través de la profunditat d’interaccions i el nivell de participació en activitats. La Piràmide del Compromís pot ser un model per a visualitzar això.
  2. Diversitat Cap a Fora: Per a avaluar la diversitat externa, considera la interconnexió amb altres instàncies. Això podria relacionar-se amb conceptes de teoria de la informació, com la entropia de Shannon, que mesura la incertesa o la diversitat en un conjunt de dades.
  3. Diversitat Cap a dins: La diversitat interna pot ser analitzada mitjançant el tipus d’interaccions entre els membres, utilitzant el índex de Gini, que mesura la desigualtat en una distribució.
  4. Capacitat de Transmissió d’Idees: La capacitat d’una comunitat per a transmetre idees o cultura pot ser avaluada a través d’estudis sobre la estructura de xarxes socials i el seu impacte en la difusió d’informació. Teorias de Centola sobre els contagis complexos.
  5. Tipus de Xarxa Genèrica: Pots classificar la xarxa en funció de les tipologies més comunes, similar al que feia Bluenod, que permetia visualitzar les connexions entre els membres de la comunitat. Ara no trobo la referència acadèmica en la qual es basava.

Propòsit dels Mesuraments (el per a què)

Des d’una perspectiva de xarxa, aquestes mètriques poden ajudar-te a mesurar l’evolució de cada instància i a prendre decisions informades sobre el seu desenvolupament. Des d’una perspectiva de missatge, la visualització de dades pot ser més útil que la simple quantificació. Imaginar un sistema on puguis graficar la interacció d’un missatge et permetria seguir converses rellevants i fomentar la comunitat.


(Original)
Entiendo que quieres medir varios aspectos relacionados con el compromiso y la diversidad en una comunidad, así como la capacidad de transmisión de ideas. Es importante tener claro el qué y el para qué antes de definir el cómo. Creo que en el cómo ya tienes algunas pruebas hechas. Aquí te presento algunas ideas sobre las métricas que mencionas.

Métricas Propuestas (el qué)

Se me ocurren varias cosas que me interesaría medir:

  1. Compromiso en la Comunidad: Puedes medir el compromiso de los miembros a través de la profundidad de interacciones y el nivel de participación en actividades. La Pirámide del Compromiso puede ser un modelo para visualizar esto.
  2. Diversidad Hacia Afuera: Para evaluar la diversidad externa, considera la interconexión con otras instancias. Esto podría relacionarse con conceptos de teoría de la información, como la entropía de Shannon, que mide la incertidumbre o la diversidad en un conjunto de datos.
  3. Diversidad Hacia Adentro: La diversidad interna puede ser analizada mediante el tipo de interacciones entre los miembros, utilizando el índice de Gini, que mide la desigualdad en una distribución.
  4. Capacidad de Transmisión de Ideas: La capacidad de una comunidad para transmitir ideas o cultura puede ser evaluada a través de estudios sobre la estructura de redes sociales y su impacto en la difusión de información. Teorias de Centola sobre los contagios complejos.
  5. Tipo de Red Genérica: Puedes clasificar la red en función de las tipologías más comunes, similar a lo que hacía Bluenod, que permitía visualizar las conexiones entre los miembros de la comunidad. Ahora no encuentro la referencia académica en la que se basaba.

Propósito de las Mediciones (el para qué)

Desde una perspectiva de red, estas métricas pueden ayudarte a medir la evolución de cada instancia y a tomar decisiones informadas sobre su desarrollo. Desde una perspectiva de mensaje, la visualización de datos puede ser más útil que la simple cuantificación. Imaginar un sistema donde puedas graficar la interacción de un mensaje te permitiría seguir conversaciones relevantes y fomentar la comunidad.

3 'M'agrada'

Hola!

Mil gràcies pel teu comentari! Molta informació molt interessant que em donarà feina però que pot donar dimensió a el que estem fent.

Sobre el què inicial que va motivar l’anàlisi, jo diria que és més del punt de vista del compte individual, o fins i tot diria de la publicació individual. Les mètriques que s’utilitzen avui en dia majoritàriament són molt simplistes i no reflecteixen una conversa o un debat, ni tampoc permeten entendre quina tipologia de xarxa es forma entre els interactors. I el que ens sembla greu és que la economia solidària els utilitzi sense reflexió.

En fi, m’has donat coses sobre les que pensar :slight_smile:

Salut!

2 'M'agrada'

Segueixo donant-hi voltes:

Sobre la piràmide de compromís, que em sembla molt interessant, crec que es podria implementar per un missatge al fedivers de la següent manera:

  1. Nivell coneixement: A quantes seguidores els arriba el teu missatge (en principi a totes, així que seria equivalent al nombre de seguidores).
  2. Nivell d’adhesió: el nombre de reaccions passives (favorits i republicacions, potser ponderant perquè les segones tinguin més puntuació… ho podem pensar!).
  3. Nivell participació: el nombre de respostes, aquí potser seria interessant incloure les que només siguin cap a la publicació original.
  4. Nivell interacció: paràmetres més relacionats amb la descentralització de la conversa, en respostes a publicacions que no fossin la original, etc…

Justament en aquesta última capa de la piràmide és on orientava jo tots aquests anàlisis.
Aquesta “adaptació” de la piràmide que proposo és centrada en un missatge, però es pot centrar també en el conjunt de missatges d’una persona o fins i tot d’una instància/comunitat, ampliant les possibilitats de mesurar diferents tipus d’interaccions.

Això era el següent pas al meu cap, afegir a la xarxa una coloració per identificar les diferents instàncies. Es podria calcular l’índex de Entropia de Shannon d’aquestes poblacions de instàncies. Senzill i útil.

Això potser ja és el que he afegit als últims gràfics. Permetrà comparar com afecten diferents paràmetres a la diversitat cap a dins, com indiques. Xarxa privativa versus lliure, instàncies, veterania de la persona que publica originalment (maduresa de la seva xarxa), tipologia de missatge, etc…

M’ho llegeixo amb calma, però crec que aquest paràmetre que proposava fa un temps apuntaria cap a aquesta direcció:

Seguim donant-hi voltes!

Seguint donant voltes a la piràmide del compromís, he aplicat l’adaptació a les publicacions que havia triat abans.

Les tres capes que incloc al gràfic està calculades com a percentatge respecte al nombre de seguidores. La 4a capa es calcula amb el percentatge de respostes que no es dirigeixen a l’original amb una penalització per aquelles que es dirigeixen o parteixen de l’autor. D’aquesta manera puntua més la conversa entre d’altres actors. Perdoneu que el text sigui petit.

Edit. los colores de los nodos de la red son los servidores.

1 'M'agrada'

Actualització:

He adaptat el codi per a que li donguis un compte i et faci una mitjana d’aquestes mètriques de les últimes 20 publicacions (sense tenir en compte els impulsos ni les respostes, publicacions originals). Pel que fa a la xarxa, el que fa és sumar aquestes connexions, la idea és representar la xarxa acumulada (tot i que hi ha un biaix cap al compte en concret, que no és tan real).

Alguns exemples:

D’aquesta manera treiem el focus d’un missatge en concret (que pot ser interessant per alguns anàlisis o comparacions) i el posem sobre un compte. El següent serà afegir a aquest enfoc la diversitat cap a dins i cap a fora (Gini sobre la xarxa, Shannon sobre la diversitat d’instàncies a la xarxa).

Quedarà com a repte encara tenir un anàlisi de xarxa (és a dir a una comunitat, sense estar centrada en un compte de forma tant central) i també aprofundir en la contribució a d’altres converses, ja que de moment està molt centrat en les publicacions inicials (que afavoreixen un perfil d’usuària).

1 'M'agrada'

Sóc molt fan dels teus dibus :slight_smile:

2 'M'agrada'

Impresionante!. No estoy seguro en la últimas capas de deliveración que se puede hacer; hay que pensarlo un poco más igual.

He encontrado la referencia del tipo de redes que usaba Bluenod. Es esta Mapping Twitter Topic Networks: From Polarized Crowds to Community Clusters | Pew Research Center

Esta otra no se para que pero también puede sernos en algún momento de interes.
https://images.app.goo.gl/z5E1Ur9cXB9tdNNv8

Para que veas como funcionaba Bluenod (ha desaparecido) he encontrado un post explicativo. Creo que puede inspirarnos.

1 'M'agrada'

Interessant! Els tipus de xarxes de Bluenod és un bon punt a tenir en compte, tot i que es basen més en un tema de conversa que en una publicació o un compte. Tot i així és ben interessant.