Rastreamento Comportamental
Registre interações detalhadas dos anotadores no Potato — tempo de tarefa, padrões de clique, histórico de edição e eventos de interface — para análise de qualidade e estudos comportamentais.
O sistema de rastreamento comportamental do Potato captura dados detalhados de interação durante as sessões de anotação, permitindo que pesquisadores analisem o comportamento dos anotadores, os padrões de tempo, o uso da assistência por IA e os processos de tomada de decisão.
Visão geral
O sistema de rastreamento comportamental captura:
- Cada ação de anotação: seleções de rótulos, anotações de trechos, entradas de texto
- Carimbos de tempo precisos: carimbos de tempo do servidor e do cliente
- Uso da assistência por IA: quando as sugestões foram exibidas e se foram aceitas
- Dados de foco e tempo: tempo gasto em cada elemento, profundidade de rolagem
- Histórico de navegação: caminho completo percorrido pelas instâncias
O que é rastreado
Eventos de interação
Cada interação do usuário com a interface de anotação é capturada:
| Tipo de evento | Descrição | Alvo de exemplo |
|---|---|---|
click | Cliques do mouse em elementos | label:positive, nav:next |
focus_in | Elemento recebe foco | textbox:explanation |
focus_out | Elemento perde o foco | label:negative |
keypress | Atalhos de teclado | key:1, nav:ArrowRight |
navigation | Navegação entre instâncias | next, prev, instance_load |
save | Eventos de salvamento de anotação | instance:123 |
annotation_change | Modificações de rótulos | schema:sentiment |
Uso da assistência por IA
Rastreamento completo do ciclo de vida da anotação assistida 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
}Mudanças de anotação
Histórico detalhado de mudanças para todas as anotações:
{
"timestamp": 1706500002.5,
"schema_name": "sentiment",
"label_name": "positive",
"action": "select",
"old_value": null,
"new_value": true,
"source": "user"
}Tipos de origem:
user- Interação direta do usuárioai_accept- O usuário aceitou a sugestão da IAkeyboard- Atalho de teclado utilizadoprefill- Pré-preenchido a partir da configuração
Formato dos dados
Cada instância de anotação inclui um 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
}
}Configuração
O rastreamento comportamental vem habilitado por padrão. Nenhuma configuração adicional é necessária.
Modo de depuração no frontend
Para habilitar o registro de depuração do rastreador de interações:
// In browser console
window.interactionTracker.setDebugMode(true);Exemplos de análise
Carregando os dados comportamentais
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 dataAnalisando o tempo de anotação
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 statsDetectando comportamento suspeito
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 suspiciousIntegração com o painel administrativo
O painel administrativo inclui uma aba Análise Comportamental com:
- Mapa de calor de interação do usuário: representação visual dos padrões de interação
- Métricas de assistência por IA: taxas de aceitação/rejeição, tempos de decisão
- Distribuição de tempo: histograma dos tempos de anotação
- Alertas de atividade suspeita: anotadores sinalizados que exigem revisão
Endpoints da API
Rastrear interações
POST /api/track_interactions
Content-Type: application/json
{
"instance_id": "instance_123",
"events": [...],
"focus_time": {"element": ms},
"scroll_depth": 75.5
}Obter dados comportamentais
GET /api/behavioral_data/<instance_id>Retorna os dados comportamentais completos de uma instância.
Boas práticas
Para pesquisadores
- Estabelecimento de referência: colete dados comportamentais de anotadores reconhecidamente bons para estabelecer linhas de base
- Métricas de qualidade: use os dados comportamentais junto com a concordância entre anotações para avaliar a qualidade
- Avaliação de treinamento: compare os padrões comportamentais antes e depois do treinamento
- Análise do impacto da IA: meça como a assistência por IA afeta a qualidade e a velocidade da anotação
Para projetos de anotação
- Monitore em tempo real: use o painel administrativo para detectar problemas cedo
- Defina limiares: estabeleça faixas aceitáveis para as métricas de tempo e interação
- Forneça retorno: use os insights comportamentais para dar retorno direcionado aos anotadores
Solução de problemas
Nenhum dado comportamental está sendo coletado
- Verifique se o
interaction_tracker.jsestá carregado (confira a aba Network do navegador) - Verifique se há erros de JavaScript no console do navegador
- Verifique se os endpoints da API estão acessíveis (
/api/track_interactions)
Os dados não estão sendo persistidos
- Verifique se o estado do usuário está sendo salvo (procure por
user_state.json) - Garanta que o diretório de saída das anotações tenha permissão de escrita
Leitura complementar
- Painel Administrativo - Monitoramento em tempo real
- Histórico de Anotações - Rastreamento detalhado de mudanças
- Controle de Qualidade - Verificações automáticas de qualidade
Para detalhes de implementação, consulte a documentação de origem.