Skip to content

행동 추적

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

관리자 대시보드 연동

관리자 대시보드에는 다음을 포함하는 행동 분석 탭이 있습니다.

  1. 사용자 상호작용 히트맵: 상호작용 패턴의 시각적 표현
  2. AI 지원 지표: 수락/거부 비율, 의사결정 시간
  3. 시간 분포: 어노테이션 시간의 히스토그램
  4. 의심 활동 경고: 검토가 필요한 것으로 표시된 어노테이터

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>

인스턴스의 전체 행동 데이터를 반환합니다.

모범 사례

연구자를 위한 사항

  1. 기준선 수립: 신뢰할 수 있는 어노테이터로부터 행동 데이터를 수집하여 기준선을 마련합니다
  2. 품질 지표: 품질 평가를 위해 어노테이션 일치도와 함께 행동 데이터를 활용합니다
  3. 훈련 평가: 훈련 전후의 행동 패턴을 비교합니다
  4. AI 영향 분석: AI 지원이 어노테이션 품질과 속도에 미치는 영향을 측정합니다

어노테이션 프로젝트를 위한 사항

  1. 실시간 모니터링: 관리자 대시보드를 사용하여 문제를 조기에 발견합니다
  2. 임계값 설정: 시간 및 상호작용 지표에 대한 허용 범위를 정의합니다
  3. 피드백 제공: 행동 인사이트를 활용하여 어노테이터에게 맞춤형 피드백을 제공합니다

문제 해결

행동 데이터가 수집되지 않음

  1. interaction_tracker.js가 로드되었는지 확인합니다(브라우저 Network 탭 확인)
  2. 브라우저 콘솔에 JavaScript 오류가 있는지 확인합니다
  3. API 엔드포인트에 접근할 수 있는지 확인합니다(/api/track_interactions)

데이터가 유지되지 않음

  1. 사용자 상태가 저장되고 있는지 확인합니다(user_state.json을 찾아보세요)
  2. 어노테이션 출력 디렉터리에 쓰기 권한이 있는지 확인합니다

더 읽어보기

구현 세부 사항은 원본 문서를 참고하세요.