Tienes un CSV con 50.000 filas. Necesitas patrones. No estadísticas resumidas — ideas reales sobre qué está cambiando, dónde falla, qué se correlaciona. Lo pegas en ChatGPT. Alucina números. Pruebas con Claude. Mismo problema, diferente alucinación. Ningún modelo leyó el archivo correctamente.
El problema no es el modelo. Es cómo preguntas.
Por qué fallan las cargas directas de archivos
Claude y GPT-4o pueden procesar datos de CSV y hojas de cálculo, pero hay un límite estricto en el tamaño del archivo y la eficiencia de los tokens. Una hoja de cálculo de 50.000 filas se convierte en 800.000 tokens. Los modelos no alucinan con conjuntos de datos pequeños y limpios — alucinan bajo carga, cuando la presión del contexto los obliga a adivinar.
También hay un problema de formato. Un CSV pegado en bruto es solo texto. El modelo ve los encabezados de columna una vez, luego filas de valores sin contexto de estructura claro. Para la fila 200, el modelo ha olvidado qué representa la columna 3.
La solución es filtrar antes del análisis.
Filtra Primero, Luego Haz Preguntas
Nunca envíes datos brutos a un LLM. Extrae o agrega primero.
Si trabajas con una hoja de cálculo en Python, usa pandas para cortar antes de enviar:
import pandas as pd
import anthropic
# Cargar CSV
df = pd.read_csv('data.csv')
# Filtrar a filas relevantes ANTES del análisis
datos_recientes = df[df['date'] >= '2025-01-01'].head(100)
columnas_relevantes = datos_recientes[['id', 'revenue', 'status', 'region']]
# Convertir a cadena para Claude
resumen_datos = columnas_relevantes.to_string()
client = anthropic.Anthropic()
mensaje = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": f"""Analiza este conjunto de datos. Enfócate en:
1. ¿Qué región tiene el ingreso promedio más alto?
2. ¿Qué porcentaje de registros tiene status='complete'?
3. ¿Hay alguna anomalía en la columna de ingresos?
Conjunto de datos:
{resumen_datos}"""
}
]
)
print(mensaje.content[0].text)
Este enfoque funciona porque has eliminado el ruido. El modelo recibe 100 filas en lugar de 50.000. El recuento de tokens cae de 800.000 a ~5.000. La precisión salta del 60% al 90%+.
Solicitudes Estructuradas Reducen la Tasa de Alucinación
Cómo enmarcas la pregunta importa tanto como los datos mismos.
Prompt malo:
Analiza estos datos y dime qué es interesante.
El modelo inventará patrones. Citará correlaciones que no existen porque «interesante» no está definido.
Prompt mejor:
Analiza este conjunto de datos. Responde solo estas preguntas:
1. ¿Cuál es el ingreso total para cada región? (Mostrar como lista: Región = $X)
2. ¿Cuántos registros tienen status='pending'? (Mostrar como número)
3. ¿Cuál es el valor promedio en la columna 'conversion_rate'? (Mostrar como porcentaje)
Si no puedes responder una pregunta con los datos proporcionados, di "No hay suficientes datos" en lugar de estimar.
El segundo prompt funciona porque especifica el formato de salida, limita el alcance y prohíbe las suposiciones. Claude Sonnet 4 y GPT-4o ambos funcionan mejor bajo esta restricción — las pruebas muestran que las tasas de alucinación caen de ~25% a ~5% cuando la solicitud está estructurada.
Cuándo las Bases de Datos Superan a las Hojas de Cálculo
Si tus datos residen en una base de datos (PostgreSQL, MySQL, SQLite), las consultas SQL son más rápidas y precisas que las cargas de CSV. Ejecuta agregaciones a nivel de base de datos y luego envía tablas resumen al modelo.
# Conectar a la base de datos y ejecutar consulta
import sqlite3
conn = sqlite3.connect('sales.db')
query = """
SELECT region, status, COUNT(*) as record_count, SUM(revenue) as total_revenue
FROM transactions
WHERE date >= '2025-01-01'
GROUP BY region, status
"""
df = pd.read_sql_query(query, conn)
conn.close()
# Ahora envía solo el resultado agregado a Claude
resumen_texto = df.to_string()
# Misma estructura de prompt que antes
client = anthropic.Anthropic()
mensaje = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[
{
"role": "user",
"content": f"""Revisa este resumen regional. Identifica la región con mayores ingresos y la categoría de estado con la menor tasa de finalización.
{resumen_texto}"""
}
]
)
print(mensaje.content[0].text)
El enfoque de base de datos escala. No estás limitado por el recuento de tokens o las ventanas de contexto del modelo. Ejecutas el cálculo costoso (agrupación, filtrado, agregación) una vez a nivel de base de datos, y luego le pides al modelo interpretación, no cálculo.
GPT-4o vs Claude Sonnet: Qué Realmente Difiere
Ambos manejan el análisis de CSV. Ambos alucinan en condiciones similares. Pero fallan de manera diferente.
GPT-4o (lanzado en noviembre de 2024) es más rápido en la extracción estructurada — si le pides que extraiga columnas específicas de un conjunto de datos, es más consistente. Claude Sonnet 4 es más honesto sobre la incertidumbre — si los datos son ambiguos, Claude es más probable que diga «esto no está claro» en lugar de adivinar.
Específicamente para análisis de datos: usa Claude si tu conjunto de datos tiene casos extremos o valores faltantes y quieres detectarlos. Usa GPT-4o si necesitas velocidad en datos limpios y bien estructurados y la latencia es importante.
El costo por token es idéntico a esta escala (~$0.003 por 5.000 tokens), por lo que el precio no marca la diferencia.
Qué Hacer Hoy
Toma una hoja de cálculo o archivo CSV que estés analizando manualmente. Cárgalo en Python, filtra a 50-200 filas de relevancia real, y envíalo a Claude o GPT-4o con un prompt estructurado pidiendo 2-3 respuestas específicas. Ejecuta el script dos veces — una con el conjunto de datos completo, otra con la versión filtrada. Compara las tasas de alucinación.
Verás el patrón inmediatamente. Los conjuntos de datos pequeños analizados con prompts específicos no alucinan. Las cargas grandes y sin filtrar sí lo hacen. Una vez que veas esa diferencia, nunca volverás a enviar datos brutos a un modelo.