행동 추적
Potato에서 작업 소요 시간, 클릭 패턴, 편집 이력, UI 이벤트 등 어노테이터의 상세한 상호작용을 기록하여 품질 분석과 행동 연구에 활용합니다.
Potato의 행동 추적 시스템은 어노테이션 세션 동안 상세한 상호작용 데이터를 수집하여, 연구자가 어노테이터의 행동, 타이밍 패턴, AI 지원 사용 현황, 의사결정 과정을 분석할 수 있도록 합니다.
개요
행동 추적 시스템은 다음을 수집합니다.
- 모든 어노테이션 동작: 레이블 선택, 스팬 어노테이션, 텍스트 입력
- 정밀한 타임스탬프: 서버 측과 클라이언트 측 타임스탬프
- AI 지원 사용 현황: 제안이 표시된 시점과 수락 여부
- 포커스 및 타이밍 데이터: 각 요소에 머문 시간, 스크롤 깊이
- 탐색 이력: 인스턴스를 따라 이동한 전체 경로
무엇이 추적되는가
상호작용 이벤트
어노테이션 인터페이스에 대한 모든 사용자 상호작용이 수집됩니다.
| 이벤트 유형 | 설명 | 대상 예시 |
|---|---|---|
click | 요소에 대한 마우스 클릭 | label:positive, nav:next |
focus_in | 요소가 포커스를 받음 | textbox:explanation |
focus_out | 요소가 포커스를 잃음 | label:negative |
keypress | 키보드 단축키 | key:1, nav:ArrowRight |
navigation | 인스턴스 탐색 | next, prev, instance_load |
save | 어노테이션 저장 이벤트 | instance:123 |
annotation_change | 레이블 수정 | schema:sentiment |
AI 지원 사용 현황
AI 지원 어노테이션에 대한 전체 수명 주기 추적입니다.
json
{
"request_timestamp": 1706500010.0,
"response_timestamp": 1706500012.5,
"schema_name": "sentiment",
"suggestions_shown": ["positive", "neutral"],
"suggestion_accepted": "positive",
"time_to_decision_ms": 3500
}어노테이션 변경
모든 어노테이션에 대한 상세한 변경 이력입니다.
json
{
"timestamp": 1706500002.5,
"schema_name": "sentiment",
"label_name": "positive",
"action": "select",
"old_value": null,
"new_value": true,
"source": "user"
}출처 유형:
user- 직접적인 사용자 상호작용ai_accept- 사용자가 AI 제안을 수락함keyboard- 키보드 단축키 사용prefill- 설정에서 미리 채워짐
데이터 형식
각 어노테이션 인스턴스에는 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
}
}설정
행동 추적은 기본적으로 활성화되어 있습니다. 추가 설정은 필요하지 않습니다.
프런트엔드 디버그 모드
상호작용 추적기의 디버그 로깅을 활성화하려면 다음을 사용합니다.
javascript
// In browser console
window.interactionTracker.setDebugMode(true);분석 예시
행동 데이터 불러오기
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어노테이션 시간 분석
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의심스러운 행동 탐지
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관리자 대시보드 연동
관리자 대시보드에는 다음을 포함하는 행동 분석 탭이 있습니다.
- 사용자 상호작용 히트맵: 상호작용 패턴의 시각적 표현
- AI 지원 지표: 수락/거부 비율, 의사결정 시간
- 시간 분포: 어노테이션 시간의 히스토그램
- 의심 활동 경고: 검토가 필요한 것으로 표시된 어노테이터
API 엔드포인트
상호작용 추적
http
POST /api/track_interactions
Content-Type: application/json
{
"instance_id": "instance_123",
"events": [...],
"focus_time": {"element": ms},
"scroll_depth": 75.5
}행동 데이터 조회
http
GET /api/behavioral_data/<instance_id>인스턴스의 전체 행동 데이터를 반환합니다.
모범 사례
연구자를 위한 사항
- 기준선 수립: 신뢰할 수 있는 어노테이터로부터 행동 데이터를 수집하여 기준선을 마련합니다
- 품질 지표: 품질 평가를 위해 어노테이션 일치도와 함께 행동 데이터를 활용합니다
- 훈련 평가: 훈련 전후의 행동 패턴을 비교합니다
- AI 영향 분석: AI 지원이 어노테이션 품질과 속도에 미치는 영향을 측정합니다
어노테이션 프로젝트를 위한 사항
- 실시간 모니터링: 관리자 대시보드를 사용하여 문제를 조기에 발견합니다
- 임계값 설정: 시간 및 상호작용 지표에 대한 허용 범위를 정의합니다
- 피드백 제공: 행동 인사이트를 활용하여 어노테이터에게 맞춤형 피드백을 제공합니다
문제 해결
행동 데이터가 수집되지 않음
interaction_tracker.js가 로드되었는지 확인합니다(브라우저 Network 탭 확인)- 브라우저 콘솔에 JavaScript 오류가 있는지 확인합니다
- API 엔드포인트에 접근할 수 있는지 확인합니다(
/api/track_interactions)
데이터가 유지되지 않음
- 사용자 상태가 저장되고 있는지 확인합니다(
user_state.json을 찾아보세요) - 어노테이션 출력 디렉터리에 쓰기 권한이 있는지 확인합니다
더 읽어보기
구현 세부 사항은 원본 문서를 참고하세요.