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 Evento | Descripción | Ejemplo de Objetivo |
|---|---|---|
click | Clics del ratón en elementos | label:positive, nav:next |
focus_in | El elemento recibe enfoque | textbox:explanation |
focus_out | El elemento pierde enfoque | label:negative |
keypress | Atajos de teclado | key:1, nav:ArrowRight |
navigation | Navegación entre instancias | next, prev, instance_load |
save | Eventos de guardado de anotación | instance:123 |
annotation_change | Modificaciones de etiquetas | schema:sentiment |
Uso de Asistencia de IA
Seguimiento completo del ciclo de vida para anotación asistida por IA:
{
"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:
{
"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 usuarioai_accept- El usuario aceptó la sugerencia de IAkeyboard- Se usó un atajo de tecladoprefill- Prellenado desde la configuración
Formato de Datos
Cada instancia de anotación incluye un objeto behavioral_data:
{
"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:
// In browser console
window.interactionTracker.setDebugMode(true);Ejemplos de Análisis
Cargar Datos de Comportamiento
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 dataAnalizar Tiempo de Anotación
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 statsDetectar Comportamiento Sospechoso
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 suspiciousIntegración con el Panel de Administración
El Panel de Administración incluye una pestaña de Analítica de Comportamiento con:
- Mapa de calor de interacciones del usuario: Representación visual de patrones de interacción
- Métricas de asistencia de IA: Tasas de aceptación/rechazo, tiempos de decisión
- Distribución de tiempos: Histograma de tiempos de anotación
- Alertas de actividad sospechosa: Anotadores marcados que requieren revisión
Endpoints de la API
Rastrear Interacciones
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
GET /api/behavioral_data/<instance_id>Devuelve los datos de comportamiento completos para una instancia.
Mejores Prácticas
Para Investigadores
- Establecimiento de línea base: Recopila datos de comportamiento de anotadores confiables para establecer líneas base
- Métricas de calidad: Usa datos de comportamiento junto con el acuerdo de anotación para la evaluación de calidad
- Evaluación de capacitación: Compara patrones de comportamiento antes y después de la capacitación
- 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
- Monitorear en tiempo real: Usa el panel de administración para detectar problemas tempranamente
- Establecer umbrales: Define rangos aceptables para métricas de tiempo e interacción
- 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
- Verifica que
interaction_tracker.jsesté cargado (revisa la pestaña Network del navegador) - Busca errores de JavaScript en la consola del navegador
- Verifica que los endpoints de la API sean accesibles (
/api/track_interactions)
Los Datos No Persisten
- Verifica que el estado del usuario se esté guardando (busca
user_state.json) - Asegúrate de que el directorio de salida de anotaciones tenga permisos de escritura
Lecturas Adicionales
- Panel de Administración - Monitoreo en tiempo real
- Historial de Anotaciones - Seguimiento detallado de cambios
- Control de Calidad - Verificaciones automáticas de calidad
Para detalles de implementación, consulta la documentación fuente.