📝 Text as Data

Bag of words, TF-IDF, análisis de sentimiento y clasificación supervisada con texto

BoW TF-IDF Sentiment
Módulo 8 de 12
💡 Piénsalo así: El texto como dato es como convertir una novela en una tabla de números. Bag of Words es como contar cuántas veces aparece cada palabra en el libro, ignorando el orden. TF-IDF es como darle más peso a las palabras raras pero distintivas (como "econometría") y menos a las comunes (como "el", "la"). Así convertimos palabras en datos que una computadora puede procesar.
Teoría: Texto como Dato

Bag of Words (BoW)

Intuición: BoW representa cada documento como una bolsa de palabras: ignoramos el orden y la gramática, solo contamos frecuencias. La frase "el gato persigue al ratón" y "el ratón persigue al gato" tienen el mismo vector BoW porque las palabras son las mismas, aunque el orden sea diferente.

Fórmula explicada: dᵢ = (wᵢ₁, wᵢ₂, ..., wᵢₚ), donde wᵢⱼ es el número de veces que aparece la palabra j en el documento i. Si el corpus tiene p=10,000 palabras únicas, cada documento es un vector de 10,000 números. La mayoría serán ceros (matriz dispersa).

Caso real: Un corpus de 1,000 discursos políticos. BoW convierte cada discurso en un vector de frecuencias. Luego se puede clasificar el partido político basado en las palabras que usa.

Error común: No eliminar stopwords ("el", "la", "de", "y") antes de construir BoW. Estas palabras son las más frecuentes pero no aportan información discriminativa.

di = (wi1, wi2, ..., wip)

TF-IDF

Intuición: TF-IDF corrige el problema de BoW: las palabras comunes (stopwords) tienen alta frecuencia en todos los documentos y no ayudan a distinguirlos. TF-IDF da peso alto a palabras que aparecen mucho en UN documento pero poco en el CORPUS. "Econometría" tiene TF-IDF alto si aparece en 1 de 100 documentos.

Fórmula explicada: TF-IDF(t,d) = TF(t,d) × log(N / DF(t)). TF = frecuencia de t en el documento d. DF(t) = número de documentos que contienen t. log(N/DF) es la IDF: palabras raras en el corpus tienen IDF grande. stopwords (presentes en casi todos los docs) tienen IDF ≈ log(1) = 0.

Caso real: En un conjunto de artículos académicos, la palabra "data" tiene TF alta en todos, pero IDF baja (todos la usan). La palabra "heterocedasticidad" tiene TF alta solo en algunos artículos e IDF alta. TF-IDF destaca esta palabra como distintiva.

Error común: Usar TF-IDF con stopwords incluidas. Aunque TF-IDF reduce su peso, no lo elimina por completo. Es mejor eliminarlas primero.

TF-IDF(t,d) = TF(t,d) × log(N / DF(t))

Sentiment Analysis

Intuición: El análisis de sentimiento determina si un texto expresa opinión positiva, negativa o neutral. El método más simple usa diccionarios de palabras con polaridad: "excelente" → +2, "terrible" → -2. La suma de polaridades da el sentimiento total.

Fórmula explicada: Sentiment = Σ w_t × s_t, donde w_t es la frecuencia de la palabra t y s_t es su polaridad (ej. +1 positiva, -1 negativa). Existen diccionarios validados: Lexicoder (inglés), AFINN, LIWC. En español hay menos recursos, pero se pueden traducir o construir manualmente.

Caso real: Analizar 10,000 tuits sobre un producto. Se calcula el sentimiento de cada tuit y se promedia para tener el sentimiento general. Además, se puede correlacionar con ventas para ver si el sentimiento en redes predice las ventas futuras.

Error común: Ignorar el contexto. "No es malo" tiene una palabra negativa ("malo") pero la negación ("no") invierte el sentido. Los diccionarios simples fallan con negaciones y sarcasmo.

Sentiment = Σ wt × st

Stance Detection

Intuición: Stance (postura) es diferente de sentimiento. Sentimiento es positivo/negativo en general. Stance es a favor/en contra/neutral respecto a UN TEMA ESPECÍFICO. Por ejemplo, "la economía va mal" tiene sentimiento negativo y stance en contra del gobierno. Pero "el clima es terrible" tiene sentimiento negativo sin stance político.

Fórmula explicada: Stance(documento, tema) ∈ {Favor, Against, Neutral}. Se entrena un clasificador supervisado donde las etiquetas son la postura hacia el tema. Las características suelen ser TF-IDF + embeddings de palabras clave del tema.

Caso real: Analizar debates parlamentarios sobre una reforma fiscal. Stance detection clasifica cada intervención como "a favor de la reforma", "en contra" o "neutral", permitiendo cuantificar el apoyo en el debate.

Error común: Confundir stance con sentimiento. Un texto puede tener sentimiento negativo ("esta reforma es un desastre") y estar a favor de la reforma (si critica a los opositores).

Stance(documento, tema) ∈ {Favor, Against, Neutral}

Preprocesamiento de Texto

Intuición: Antes de vectorizar, el texto se "limpia". Los pasos típicos son: (1) convertir a minúsculas, (2) eliminar puntuación y números, (3) tokenizar (dividir en palabras), (4) eliminar stopwords, (5) stemming o lematización (reducir palabras a su raíz: "corriendo", "corría" → "corr").

Fórmula explicada: Stemming: algoritmo heurístico que corta sufijos ("economista" → "econom"). Lematización: usa diccionario morfológico para reducir a la forma canónica ("fuimos" → "ir"). La lematización es más precisa pero más lenta.

Caso real: Para analizar 5,000 reseñas de productos, el preprocesamiento reduce el vocabulario de 50,000 a 8,000 términos únicos. Esto hace que la matriz TF-IDF sea más manejable y el modelo más rápido.

Error común: Hacer stemming en español con algoritmos diseñados para inglés. El SnowballStemmer soporta español. No usarlo produce raíces incorrectas.

Texto → tokens → tokens limpios → vector

Clasificación Supervisada con Texto

Intuición: Una vez que tenemos los vectores TF-IDF, podemos usar cualquier clasificador (SVM, Random Forest, regresión logística) para predecir etiquetas a partir del texto. Es como tener una tabla normal de datos, pero cada fila es un documento en lugar de un individuo.

Fórmula explicada: El pipeline es: (1) Preprocesar texto, (2) Vectorizar (BoW o TF-IDF), (3) Entrenar clasificador sobre los vectores. Para inferencia causal con texto, se usa el "texto como confounder": se incluye el vector de texto como control en una regresión para estimar otro efecto.

Caso real: Clasificar sentencias judiciales como "condena" vs "absolución" basado en el texto. Se vectoriza la sentencia con TF-IDF y se entrena un SVM lineal, que además permite ver qué palabras predicen cada clase.

Error común: Usar herramientas de NLP modernas (BERT) para tareas simples. Si una regresión logística con TF-IDF da 85% de precisión, un BERT que da 87% pero requiere 100 veces más recursos puede no valer la pena.

Texto → TF-IDF → Clasificador → Predicción
Ejemplo paso a paso

Analizamos un texto económico: extraemos palabras clave TF-IDF y calculamos su sentimiento.

Paso 1: El texto se tokeniza, se convierten a minúsculas y se eliminan stopwords.

"La economía creció fuertemente este trimestre" → tokens: [economía, creció, fuertemente, trimestre]. Stopwords eliminadas: "la", "este".

Paso 2: Se calcula la frecuencia de cada token (TF). Luego se multiplica por IDF (log(N/DF)).

Palabras como "economía" y "creció" tienen TF alta en este texto. Si son raras en el corpus (pocos documentos las contienen), su TF-IDF será alto.

Paso 3: Se compara cada token con el diccionario de sentimiento. Positivas: "creció", "fuertemente". Negativas: ninguna.

Score = +2 (creció) +1 (fuertemente) = +3. Sentimiento: Positivo. El texto se clasifica como opinión positiva sobre la economía.

Simulación: TF-IDF Vectorization

Selecciona un texto de ejemplo o escribe el tuyo para ver su vectorización TF-IDF y análisis de sentimiento.

Presiona "Analizar" para ver resultados.
Mini Quiz: Text as Data
💡 Responde las preguntas sobre Text as Data.