Skip to content

Seguimiento de Comportamiento

Captura datos de interacción detallados para análisis de calidad e investigación.

Seguimiento de Comportamiento

El sistema de seguimiento de comportamiento de Potato captura datos de interacción detallados durante las sesiones de anotación, permitiendo a los investigadores analizar el comportamiento de los anotadores, patrones de tiempo, uso de asistencia de IA y procesos de toma de decisiones.

Descripción General

El sistema de seguimiento de comportamiento captura:

  • Cada acción de anotación: Selecciones de etiquetas, anotaciones de spans, entradas de texto
  • Marcas de tiempo precisas: Marcas de tiempo del servidor y del cliente
  • Uso de asistencia de IA: Cuándo se mostraron sugerencias y si fueron aceptadas
  • Datos de enfoque y tiempo: Tiempo dedicado a cada elemento, profundidad de desplazamiento
  • Historial de navegación: Ruta completa a través de las instancias

Qué Se Rastrea

Eventos de Interacción

Cada interacción del usuario con la interfaz de anotación es capturada:

Tipo de EventoDescripciónEjemplo de Objetivo
clickClics del ratón en elementoslabel:positive, nav:next
focus_inEl elemento recibe enfoquetextbox:explanation
focus_outEl elemento pierde enfoquelabel:negative
keypressAtajos de tecladokey:1, nav:ArrowRight
navigationNavegación entre instanciasnext, prev, instance_load
saveEventos de guardado de anotacióninstance:123
annotation_changeModificaciones de etiquetasschema:sentiment

Uso de Asistencia de IA

Seguimiento completo del ciclo de vida para anotación asistida por IA:

json
{
  "request_timestamp": 1706500010.0,
  "response_timestamp": 1706500012.5,
  "schema_name": "sentiment",
  "suggestions_shown": ["positive", "neutral"],
  "suggestion_accepted": "positive",
  "time_to_decision_ms": 3500
}

Cambios de Anotación

Historial detallado de cambios para todas las anotaciones:

json
{
  "timestamp": 1706500002.5,
  "schema_name": "sentiment",
  "label_name": "positive",
  "action": "select",
  "old_value": null,
  "new_value": true,
  "source": "user"
}

Tipos de fuente:

  • user - Interacción directa del usuario
  • ai_accept - El usuario aceptó la sugerencia de IA
  • keyboard - Se usó un atajo de teclado
  • prefill - Prellenado desde la configuración

Formato de Datos

Cada instancia de anotación incluye un objeto behavioral_data:

json
{
  "id": "instance_123",
  "annotations": {
    "sentiment": {"positive": true}
  },
  "behavioral_data": {
    "instance_id": "instance_123",
    "session_start": 1706500000.0,
    "session_end": 1706500045.0,
    "total_time_ms": 45000,
    "interactions": [...],
    "ai_usage": [...],
    "annotation_changes": [...],
    "navigation_history": [...],
    "focus_time_by_element": {
      "label:positive": 2500,
      "textbox:explanation": 8000
    },
    "scroll_depth_max": 75.5
  }
}

Configuración

El seguimiento de comportamiento está habilitado por defecto. No se requiere configuración adicional.

Modo de Depuración del Frontend

Para habilitar el registro de depuración del rastreador de interacciones:

javascript
// In browser console
window.interactionTracker.setDebugMode(true);

Ejemplos de Análisis

Cargar Datos de Comportamiento

python
import json
from pathlib import Path
 
def load_behavioral_data(annotation_dir: str) -> dict:
    data = {}
    for user_dir in Path(annotation_dir).iterdir():
        if not user_dir.is_dir():
            continue
        state_file = user_dir / 'user_state.json'
        if state_file.exists():
            with open(state_file) as f:
                user_state = json.load(f)
            user_id = user_state.get('user_id')
            behavioral = user_state.get('instance_id_to_behavioral_data', {})
            data[user_id] = behavioral
    return data

Analizar Tiempo de Anotación

python
def analyze_annotation_time(behavioral_data: dict) -> dict:
    stats = {}
    for user_id, instances in behavioral_data.items():
        times = []
        for instance_id, bd in instances.items():
            if 'total_time_ms' in bd:
                times.append(bd['total_time_ms'] / 1000)
        if times:
            stats[user_id] = {
                'mean_time': sum(times) / len(times),
                'min_time': min(times),
                'max_time': max(times),
                'total_instances': len(times)
            }
    return stats

Detectar Comportamiento Sospechoso

python
def detect_suspicious_annotators(behavioral_data: dict,
                                  min_time_threshold: float = 2.0) -> list:
    suspicious = []
    for user_id, instances in behavioral_data.items():
        fast_count = 0
        for instance_id, bd in instances.items():
            time_sec = bd.get('total_time_ms', 0) / 1000
            if time_sec < min_time_threshold:
                fast_count += 1
 
        total = len(instances)
        if total > 0:
            fast_rate = fast_count / total
            if fast_rate > 0.5:
                suspicious.append({
                    'user_id': user_id,
                    'fast_rate': fast_rate,
                    'total_instances': total
                })
    return suspicious

Integración con el Panel de Administración

El Panel de Administración incluye una pestaña de Analítica de Comportamiento con:

  1. Mapa de calor de interacciones del usuario: Representación visual de patrones de interacción
  2. Métricas de asistencia de IA: Tasas de aceptación/rechazo, tiempos de decisión
  3. Distribución de tiempos: Histograma de tiempos de anotación
  4. Alertas de actividad sospechosa: Anotadores marcados que requieren revisión

Endpoints de la API

Rastrear Interacciones

http
POST /api/track_interactions
Content-Type: application/json
 
{
  "instance_id": "instance_123",
  "events": [...],
  "focus_time": {"element": ms},
  "scroll_depth": 75.5
}

Obtener Datos de Comportamiento

http
GET /api/behavioral_data/<instance_id>

Devuelve los datos de comportamiento completos para una instancia.

Mejores Prácticas

Para Investigadores

  1. Establecimiento de línea base: Recopila datos de comportamiento de anotadores confiables para establecer líneas base
  2. Métricas de calidad: Usa datos de comportamiento junto con el acuerdo de anotación para la evaluación de calidad
  3. Evaluación de capacitación: Compara patrones de comportamiento antes y después de la capacitación
  4. Análisis de impacto de IA: Mide cómo la asistencia de IA afecta la calidad y velocidad de la anotación

Para Proyectos de Anotación

  1. Monitorear en tiempo real: Usa el panel de administración para detectar problemas tempranamente
  2. Establecer umbrales: Define rangos aceptables para métricas de tiempo e interacción
  3. Proporcionar retroalimentación: Usa los insights de comportamiento para dar retroalimentación dirigida a los anotadores

Solución de Problemas

No Se Recopilan Datos de Comportamiento

  1. Verifica que interaction_tracker.js esté cargado (revisa la pestaña Network del navegador)
  2. Busca errores de JavaScript en la consola del navegador
  3. Verifica que los endpoints de la API sean accesibles (/api/track_interactions)

Los Datos No Persisten

  1. Verifica que el estado del usuario se esté guardando (busca user_state.json)
  2. Asegúrate de que el directorio de salida de anotaciones tenga permisos de escritura

Lecturas Adicionales

Para detalles de implementación, consulta la documentación fuente.