Docs

Las 37 medidas del modelo semántico, con descripción, fórmula, rango, grain y cómo interpretarlas.

Esta página detalla cada una de las 37 medidas declaradas en ANALYTICS_MEASURES.

Las medidas son contratos: declaran su nombre, fórmula textual, unidad, escala, tipo de agregación y grain. El SQL que las materializa vive en los recipes.

Cómo leer cada entrada

  • Fórmula — lo que declara la definición. No es el SQL literal, es la expresión conceptual.
  • Escala — rango en el que queda el valor: raw (sin cota), 0_1, 0_100, 1_5, minus1_1 (−1..1), minus2_2 (−2..2).
  • Grain — la fila sobre la que opera la medida. response = una fila por respuesta; entity_response = una por entidad detectada dentro de una respuesta; entity / attribute / source / engine / persona / time_bucket / funnel_stage = agrupaciones de mayor nivel.
  • Cómo leerlo — cómo convertir el número en una frase de negocio.

Volumen

Cuentas brutas. Escala raw, sin cota superior. Alimentan todos los ratios.

totalResponses

Total de responses en el scope. Cuenta todas las respuestas producidas por el pipeline en el run/proyecto/ventana filtrada.

FórmulaEscalaAgregaciónGrain
count(responses)rawcountresponse

Cómo leerlo — es el denominador universal. Si vale 0, el scope está vacío (el filtro no matchea nada, o el run no ha producido nada todavía).


brandedResponses

Responses con al menos una entidad en scope. Subconjunto de totalResponses que tienen al menos una mención de una entidad registrada en el proyecto (own o competitor).

FórmulaEscalaAgregaciónGrain
countDistinct(entity_metrics.response_id)rawcountresponse

Cómo leerlobrandedResponses / totalResponses te dice qué porcentaje de las respuestas del LLM en ese scope contienen información útil de marca. Si el ratio es muy bajo (p. ej. 0.1) probablemente los prompts son demasiado genéricos o los modelos evaden mencionar marcas.


ownResponses

Responses donde aparece una entidad propia. Cuenta responses distintas en las que al menos una mención es de una entidad con relación own.

FórmulaEscalaAgregaciónGrain
countDistinctIf(response_id, entity_relation = 'own')rawcountresponse

Cómo leerlo — es el numerador de responseShareOfVoice. Se cuenta por response distinto: que tu marca aparezca tres veces en la misma respuesta cuenta como 1, no como 3.


totalMentions

Total de menciones de entidad. Suma las menciones individuales (no las responses). Una respuesta con 5 menciones cuenta 5.

FórmulaEscalaAgregaciónGrain
sum(mention_count)rawsumentity_response

Cómo leerlo — prefiere totalMentions cuando quieras medir volumen bruto de presencia (p. ej. densidad discursiva). Prefiere brandedResponses cuando quieras medir cobertura (en cuántas conversaciones apareciste).


ownMentions

Menciones atribuidas a entidades propias. Suma las menciones solo de las filas con entity_relation = 'own'.

FórmulaEscalaAgregaciónGrain
sumIf(mention_count, entity_relation = 'own')rawsumentity_response

Cómo leerlo — es el numerador de mentionShareOfVoice. Cuenta repeticiones: si el LLM repite tu marca tres veces en una respuesta, aporta 3 a esta cifra.


coverageCount

Responses distintas representadas por un cohort. Cuenta responses únicas dentro del corte actual (p. ej. “responses donde aparece la marca Nike en este segmento”).

FórmulaEscalaAgregaciónGrain
countDistinct(response_id)rawcountresponse

Cómo leerlo — no responde una pregunta por sí sola; es el numerador de coverageRate. Es ownResponses cuando el cohort es “mis marcas” y es genérico en cualquier otro agrupamiento.


recommendationCount

Filas con entidad en rol de recomendación positiva. Cuenta responses-entidad con la flag is_recommendation = 1, que se activa cuando una mención es subject con sentimiento ≥ 4.

FórmulaEscalaAgregaciónGrain
sum(is_recommendation)rawsumentity_response

Cómo leerlo — el LLM no solo menciona la marca; la recomienda como sujeto principal con sentimiento positivo. Es la cifra más cerca del valor comercial directo.


attributeMentions

Menciones de atributo. Total de asociaciones atributo-entidad detectadas (ej. “Nike” × “cómodo”). Una mención por par entidad-atributo y respuesta.

FórmulaEscalaAgregaciónGrain
count(attribute_mentions)rawcountattribute

Cómo leerlo — volumen de narrativa cualitativa. Si es bajo relative a totalMentions, el LLM habla de marcas sin caracterizarlas (p. ej. listados).


businessImpactTotal

Business impact agregado. Suma de business_impact_score (0–100 por fila) a través de un cohort.

FórmulaEscalaAgregaciónGrain
sum(business_impact_score)rawsumentity, etc.

Cómo leerlo — métrica compuesta. Útil para comparar “peso total” de una marca entre períodos o entre competidores. No interpretes el valor absoluto: interpreta diferencias.


totalSourceMentions

Total de citas de fuente en el scope. Cuenta filas de response_sources (una por URL citada por el LLM con grounding).

FórmulaEscalaAgregaciónGrain
count(response_sources)rawcountsource

Cómo leerlo — solo existe en modo analysis (con grounding). En simulation es 0 siempre.


totalCitations

Citas totales. Alias semántico de totalSourceMentions. Mismo valor; nombre distinto por contexto (el dashboard usa “citations” en la vista de sources, “source mentions” en la de atribución).

FórmulaEscalaAgregaciónGrain
count(response_sources)rawcountsource

responsesWithCitations

Responses que citan al menos una fuente. No todas las respuestas del LLM traen grounding; esto cuenta cuántas sí.

FórmulaEscalaAgregaciónGrain
countDistinct(response_id)rawcountresponse

Cómo leerloresponsesWithCitations / totalResponses da el ratio de respuestas “con fundamento”. Varía mucho por engine: un modelo con navegación web lo tendrá alto; uno offline, muy bajo.


Share

Ratios y proporciones. Escala 0_1 (o percent 0–100 en casos excepcionales). Siempre pasan por safeRatio cuando se computan fuera de SQL.

responseShareOfVoice

Share of Voice por responses (SoV). De todas las respuestas del scope, qué fracción mencionan alguna entidad own.

FórmulaEscalaAgregaciónGrain
ownResponses / totalResponses0_1ratioresponse

Cómo leerlo0.33 = en un tercio de las conversaciones del scope apareces. 1.0 = apareces en todas (imposible en la práctica). Es la métrica base para comparar presencia competitiva en el tiempo.

Cuidado con — el denominador incluye respuestas que no mencionan ninguna entidad del proyecto. Si los prompts son genéricos, el denominador se infla artificialmente. Para filtrar ese ruido usa responseShareOfBrandedVoice.


responseShareOfBrandedVoice

Share of Branded Voice (SBoV). De las respuestas que sí mencionan alguna marca conocida, qué fracción te mencionan a ti.

FórmulaEscalaAgregaciónGrain
ownResponses / brandedResponses0_1ratioresponse

Cómo leerlo — responde a “cuando el LLM habla del mercado, ¿cuántas veces hablo yo?”. Elimina del denominador las respuestas donde nadie aparece. Siempre ≥ responseShareOfVoice.


mentionShareOfVoice

Share of Voice por menciones. Como SoV pero contando repeticiones dentro de cada respuesta.

FórmulaEscalaAgregaciónGrain
ownMentions / totalMentions0_1ratioentity_response

Cómo leerlo — mide densidad discursiva, no cobertura. Un LLM que mencione tu marca tres veces en una respuesta pesa más aquí que un LLM que la menciona una vez en tres respuestas distintas.

Cuidado con — los LLMs repiten marcas en listas. mentionShareOfVoice alto con responseShareOfVoice bajo suele indicar que apareces mucho en pocas respuestas (listados), no que tengas presencia dispersa.


groupResponseShare

Share de un subgrupo sobre responses totales. Responses distintas del grupo actual dividido por totalResponses. Se usa cuando agregas por persona, funnel, prompt tag, etc.

FórmulaEscalaAgregaciónGrain
groupResponses / totalResponses0_1ratioresponse

Cómo leerlo — en una vista agregada por persona, groupResponseShare = 0.22 para “Runner 35” significa que ese segmento de personas produjo el 22 % de las respuestas del scope global.


groupBrandedResponseShare

Share de un subgrupo sobre branded responses. Misma lógica que groupResponseShare pero denominador = branded.

FórmulaEscalaAgregaciónGrain
groupResponses / brandedResponses0_1ratioresponse

Cómo leerlo — útil cuando quieres ponderar “peso de un subgrupo” descontando el ruido de responses sin marca.


coverageRate

Coverage rate. De las responses totales, qué fracción cubre un cohort dado.

FórmulaEscalaAgregaciónGrain
coverageCount / totalResponses0_1ratioresponse

Cómo leerlo — métrica genérica de cobertura. Para entidades propias, coincide con responseShareOfVoice. Para atributos o fuentes, dice qué fracción de responses contienen ese ítem.


derivedVisibilityRate

Visibility rate derivada. Métrica ad-hoc tipo ownMentions / totalResponses: mezcla menciones (numerador) con responses (denominador).

FórmulaEscalaAgregaciónGrain
ownMentions / totalResponses0_1derivedresponse

Cómo leerlo — puede superar 1.0 si una marca aparece varias veces por response. Es una aproximación rápida a “cuántas veces me menciona el LLM por cada respuesta del scope”.

Cuidado con — no es un share clásico. Útil como tasa de densidad, no como proporción.


positiveSentimentRate

Tasa de sentimiento positivo. Fracción de menciones con sentimiento ≥ 4 (positivo o muy positivo) sobre el total.

FórmulaEscalaAgregaciónGrain
(veryPositive + positive) / total0_1ratioresponse

Cómo leerlo0.65 = dos tercios de las menciones son positivas. Una marca con positiveSentimentRate > 0.6 y responseShareOfVoice > 0.3 está en posición dominante.


recommendationRate

Tasa media de recomendación. Media de la flag is_recommendation (0 o 1 por fila) en el cohort.

FórmulaEscalaAgregaciónGrain
avg(is_recommendation)0_1averageentity_response

Cómo leerlo0.4 = el 40 % de las veces que apareces, apareces recomendado.


shareOfRecommendation

Share of Recommendation. Tus recomendaciones sobre el total de recomendaciones del scope (todas las marcas).

FórmulaEscalaAgregaciónGrain
recommendationCount / totalRecommendationCount0_1ratioentity_response

Cómo leerlo — si SoV mide presencia, SoR mide valor. Una marca puede tener SoV alto y SoR bajo (la mencionan pero no la recomiendan) o al revés.


sourceCoverageRate

Cobertura de una fuente. Fracción de responses que citan una fuente concreta.

FórmulaEscalaAgregaciónGrain
sourceCoverageCount / totalResponses0_1ratiosource

Cómo leerlo — si wikipedia.org tiene sourceCoverageRate = 0.45, casi la mitad de las respuestas del scope citan Wikipedia.


sourceShare

Share de una fuente. Menciones de la fuente sobre total de menciones de fuente.

FórmulaEscalaAgregaciónGrain
sourceMentions / totalSourceMentions0_1ratiosource

Cómo leerlo — dominancia de una fuente en la narrativa del LLM. Alto = el modelo tira mucho de ahí.


officialPresenceRate

Presencia oficial en fuentes. Fracción de menciones de fuente que son corporativas (dominio propio o página de producto oficial).

FórmulaEscalaAgregaciónGrain
corporateSourceMentions / totalSourceMentions0_1ratiosource

Cómo leerlo — mide cuánto se sostiene tu narrativa sobre fuentes propias vs terceros. 0.8 = el 80 % de tus citaciones son de tu propio dominio; típico cuando el SEO corporativo es fuerte. Bajo puede indicar que terceros (prensa, reviews) dominan tu narrativa.


engineCitationShare

Share de citations por engine. Citaciones de un engine sobre total de citations del scope.

FórmulaEscalaAgregaciónGrain
engineCitations / totalCitations0_1ratioengine

Cómo leerlo — algunos modelos citan más que otros. Si Gemini domina este share en un run con 3 modelos, es porque genera más citations, no porque “valga más”.


businessImpactGrowthRate

Crecimiento de business impact. Delta porcentual de businessImpactTotal respecto a la ventana previa.

FórmulaEscalaAgregaciónGrain
((current - previous) / previous) * 100raw (percent)derivedentity

Cómo leerlo+18 = subiste un 18 %. 0 cuando previous = 0 (helper growthRate clampea para evitar infinitos).


Score

Puntuaciones compuestas con escala acotada. Se calculan en la capa 1 (worker) y se promedian en la capa 2.

avgVisibilityScore

Visibility score medio. Media de la columna visibility_score precomputada por fila.

FórmulaEscalaAgregaciónGrain
avg(visibility_score)0_1averageentity

Cómo leerlovisibility_score combina sentiment + position + mention ponderados (calculators.ts). Es el indicador único más usado; proxy de “¿cómo estoy en los LLMs?”. Un valor sobre 0.6 es fuerte, bajo 0.3 es débil. La interpretación depende del mercado.


avgBusinessImpactScore

Business impact score medio (0–100). Extiende visibility añadiendo competitive_score (tu ranking vs competidores en cada response).

FórmulaEscalaAgregaciónGrain
avg(business_impact_score)0_100averageentity

Cómo leerloel compuesto más completo. Mezcla cuatro factores con pesos canónicos (sentiment 0.30, position 0.25, mention 0.25, competitive 0.20). A diferencia de visibility, penaliza estar detrás de competidores aunque tu narrativa sea positiva.


avgAttributeIntensity

Intensidad media de atributo. Media de la columna intensity de attribute_mentions (el LLM puntúa cuán fuertemente asocia el atributo a la entidad).

FórmulaEscalaAgregaciónGrain
avg(attribute_mentions.intensity)0_1averageattribute

Cómo leerlo0.9 = la asociación atributo-entidad es fuerte, casi definitoria. 0.3 = aparece mencionada pero como matiz.


Position

Dónde aparece la entidad dentro de la respuesta. Números bajos = antes.

avgPositionScore

Position score normalizado. Media de position_score, que se calcula en la capa 1 como share del peso logarítmico (1 / log(position + 2)) sobre el peso total del response.

FórmulaEscalaAgregaciónGrain
avg(position_score)0_1averageentity

Cómo leerlo1.0 = eres la única entidad y apareces primero. 0.5 = mitad del “peso posicional” del response es tuyo. Ver detalle del cálculo en Métricas · Computation § Position score.


avgMentionPosition

Posición media bruta. Media del índice 0-based donde aparecen las menciones. No está normalizado — depende del largo del response.

FórmulaEscalaAgregaciónGrain
avg(avg_mention_position)rawaverageentity

Cómo leerlo2.1 significa que apareces en posición 2 o 3 de media. Cuanto más bajo, más prominente. Solo comparable dentro del mismo run o prompt type.


Sentiment

El LLM devuelve sentimiento en escala 1..5. El sistema ofrece tres vistas: la escala original, la normalizada −1..1, y deltas entre ventanas temporales.

avgSentimentScore5

Sentimiento medio (1..5). Media directa de la columna sentiment tal como la devuelve el LLM.

FórmulaEscalaAgregaciónGrain
avg(sentiment)1_5averageattribute

Cómo leerlo3.0 = neutral. 4.2 = positivo consistente. 2.0 = negativo. Útil cuando necesitas preservar la escala original (p. ej. comparar con estudios que usan el 1–5 como convención).


avgSentimentNormalized

Sentimiento medio normalizado (−1..1). Aplica (x − 3) / 2 a cada mención y promedia.

FórmulaEscalaAgregaciónGrain
avg(sentiment_score)minus1_1averageentity

Cómo leerlo0 = neutral. +1 = muy positivo uniforme. -1 = muy negativo uniforme. Esta es la escala que usa el dashboard en la mayoría de charts, porque soporta bien el centrado en cero.


sentimentDelta

Delta de sentimiento. Diferencia entre el sentimiento actual y el de la ventana anterior (misma granularidad temporal).

FórmulaEscalaAgregaciónGrain
currentSentiment - previousSentimentminus2_2deltatime_bucket

Cómo leerlo+0.4 = el sentimiento subió significativamente. El rango teórico es [-2, 2] (saltar de −1 a +1). En la práctica todo lo > |0.3| es noticia.


avgAttributeSentimentScore5

Sentimiento medio por atributo (1..5). Como avgSentimentScore5 pero agregado por atributo, no por entidad.

FórmulaEscalaAgregaciónGrain
avg(attribute_mentions.sentiment)1_5averageattribute

Cómo leerlo — responde a “¿qué sentimiento hay cuando el LLM asocia tu marca a ‘cómodo’?”. Atributo-nivel, no entidad-nivel.


avgAttributeSentimentNormalized

Sentimiento medio normalizado por atributo (−1..1). Equivalente normalizado del anterior.

FórmulaEscalaAgregaciónGrain
normalize(avg(attribute_mentions.sentiment))minus1_1averageattribute

Cómo leerlo — igual que el anterior pero en escala -1..1, útil para mezclarlo con otras métricas normalizadas en el mismo chart.


Notas transversales

own / competitor / neutral / ignored

entity_relation está denormalizada en entity_metrics en el momento de escribir. Copia el valor desde project_entities de Postgres. Consecuencia: si en un proyecto cambias una marca de competitor a own después de un run, las filas viejas conservan la relación original. Los analytics nunca se reinterpretan retroactivamente.

Denominadores que se vacían

Cualquier medida con grain response y denominador totalResponses devuelve 0 cuando el scope es vacío (vía safeRatio). No NaN, no Infinity. Los charts nunca se rompen, pero tampoco distinguen “0 % de SoV” de “no hay data”. Para esa distinción hay que mirar la totalResponses en crudo.

Diferencia visibility vs business impact

Ambos son scores compuestos. La diferencia exacta:

  • visibility_score = sentiment + position + mention (tres factores, normalizado por su suma de pesos).
  • business_impact_score = los mismos tres más competitive_score (cuatro factores), escalado a 0–100.

Usa visibility cuando te interese la narrativa intrínseca de tu marca. Usa businessImpact cuando te interese tu posición competitiva: la misma visibility puede significar 80/100 de impact si estás solo en el mercado o 30/100 si estás quinto.