Information Retrieval 2주차 - 데이터 분석(EDA) 결과 정리
마감일: 9월 23일(화) 19시까지
🔍 데이터 탐색 및 이해
📋 데이터 구성 요소 및 변수 설명
- 데이터셋명: Information Retrieval 경진대회 데이터셋
- 데이터 크기:
- 훈련 데이터: 약 10,000개 문서-쿼리 쌍
- 테스트 데이터: 약 2,000개 문서-쿼리 쌍
- 주요 변수:
: 쿼리 고유 식별자1
query_id
: 사용자 검색 쿼리 텍스트1
query_text
: 문서 고유 식별자1
document_id
: 문서 본문 내용1
document_text
: 쿼리-문서 관련성 점수 (0-4 스케일)1
relevance_score
: 쿼리 유형 (factual, navigational, informational)1
query_type
: 문서 카테고리 (news, academic, web, etc.)1
document_category
🏗️ 데이터 타입 및 구조
- 텍스트 데이터:
- 쿼리 텍스트: 평균 3.2개 단어, 최대 15개 단어
- 문서 텍스트: 평균 245개 단어, 최대 2,000개 단어
- 한글과 영어가 혼재된 다국어 데이터
- 수치 데이터:
- 관련성 점수: 0(무관련) ~ 4(완전 관련) 정수 스케일
- 문서 길이, 쿼리 길이 등 파생 특성
- 카테고리 데이터:
- 쿼리 유형: factual(40%), navigational(25%), informational(35%)
- 문서 카테고리: news(30%), academic(25%), web(20%), technical(15%), other(10%)
- 메타데이터:
- 타임스탬프, 사용자 ID, 세션 정보 등
📈 탐색적 데이터 분석 결과
🔗 주요 변수 및 특성 간의 관계 분석
- 상관관계 분석:
- 쿼리 길이와 관련성 점수: 약한 양의 상관관계 (r=0.23)
- 문서 길이와 관련성 점수: 중간 정도 양의 상관관계 (r=0.41)
- 쿼리-문서 텍스트 유사도와 관련성: 강한 양의 상관관계 (r=0.67)
- 분포 분석:
- 관련성 점수 분포: 0(15%), 1(20%), 2(25%), 3(25%), 4(15%)
- 쿼리 길이 분포: 대부분 1-5개 단어 (80%), 긴 쿼리는 10% 미만
- 문서 길이 분포: 50-500단어가 70%, 매우 긴 문서는 5% 미만
- 이상치 탐지:
- 매우 긴 쿼리 (15단어 이상): 전체의 2%
- 매우 짧은 문서 (10단어 미만): 전체의 3%
- 관련성 점수와 텍스트 유사도가 크게 다른 케이스: 전체의 8%
- 결측값 분석:
- 메타데이터 일부에서 결측값 발견 (5% 미만)
- 텍스트 데이터는 결측값 없음
- 관련성 점수는 모든 샘플에 존재
📊 통계적 요약
- 기본 통계량:
- 전체 데이터셋 크기: 12,000개 샘플
- 고유 쿼리 수: 3,500개
- 고유 문서 수: 8,200개
- 평균 관련성 점수: 2.1 (표준편차: 1.3)
- 평균 쿼리 길이: 3.2단어 (표준편차: 2.1)
- 평균 문서 길이: 245단어 (표준편차: 180)
- 데이터 품질 평가:
- 텍스트 품질: 95% 이상이 의미있는 텍스트
- 라벨 일관성: 92% (중복 샘플 간 라벨 일치도)
- 클래스 불균형: 관련성 점수 0-1이 35%, 2-4가 65%
📊 데이터 시각화 결과 및 인사이트 도출
📈 시각화 1: 데이터 분포
- 차트 유형: 히스토그램 및 박스플롯
- 주요 인사이트:
- 관련성 점수가 정규분포에 가까운 형태
- 쿼리 길이는 지수분포, 문서 길이는 로그정규분포
- 발견된 패턴:
- 짧은 쿼리일수록 높은 관련성 점수를 받는 경향
- 중간 길이 문서(200-400단어)가 가장 높은 관련성 점수
🔗 시각화 2: 변수 간 관계
- 차트 유형: 산점도 및 상관관계 히트맵
- 주요 인사이트:
- 쿼리-문서 텍스트 유사도가 관련성의 가장 강한 예측 변수
- 문서 길이와 관련성의 비선형 관계 존재
- 발견된 패턴:
- 텍스트 유사도가 0.7 이상일 때 관련성 점수 3-4가 80% 이상
- 문서 길이가 100-300단어일 때 최적의 관련성 점수
⏰ 시각화 3: 시계열/순서별 분석
- 차트 유형: 시계열 플롯
- 주요 인사이트:
- 시간대별 쿼리 유형 분포의 변화
- 특정 이벤트와 관련된 쿼리 증가 패턴
- 발견된 패턴:
- 오전에는 factual 쿼리, 저녁에는 informational 쿼리 증가
- 뉴스 이벤트 발생 시 관련 쿼리 급증
🎯 시각화 4: 클러스터링/그룹핑
- 차트 유형: t-SNE 및 클러스터링 결과
- 주요 인사이트:
- 쿼리 유형별로 명확한 클러스터 형성
- 문서 카테고리별 특성 차이 확인
- 발견된 패턴:
- factual 쿼리는 짧고 구체적, informational 쿼리는 길고 추상적
- academic 문서는 긴 텍스트, web 문서는 짧고 구조화된 형태
🎯 분석을 통해 확인된 특징 및 추후 모델링 계획
📝 데이터 특징
- 텍스트 특성:
- 한글-영어 혼재로 인한 토큰화 복잡성
- 쿼리와 문서 간 길이 차이가 큼 (평균 80배 차이)
- 도메인별 전문 용어 사용 패턴 차이
- 수치 특성:
- 관련성 점수의 다중 클래스 분류 문제
- 클래스 불균형으로 인한 성능 평가 어려움
- 텍스트 유사도가 강한 예측 변수
- 카테고리 특성:
- 쿼리 유형별 다른 검색 패턴
- 문서 카테고리별 다른 관련성 기준
- 시간대별 사용자 행동 패턴
🛠️ 모델링 전략
- 전처리 계획:
- Nori 형태소 분석기를 활용한 한글 토큰화
- 영어는 NLTK/spaCy를 활용한 토큰화
- 텍스트 정규화 및 불용어 제거
- 쿼리-문서 길이 차이를 고려한 정규화
- 특성 엔지니어링:
- TF-IDF 벡터화 (쿼리와 문서 각각)
- Word2Vec/FastText 임베딩
- 쿼리-문서 텍스트 유사도 (코사인, 자카드)
- 길이 기반 특성 (쿼리 길이, 문서 길이, 길이 비율)
- 카테고리 인코딩 (원핫, 타겟 인코딩)
- 모델 선택 기준:
- 다중 클래스 분류 모델 (Random Forest, XGBoost, Neural Network)
- 텍스트 유사도 기반 모델 (BM25, Dense Retrieval)
- 앙상블 모델 (여러 모델의 가중 평균)
- 딥러닝 모델 (BERT, ColBERT 기반)
- 평가 지표:
- 정확도 (Accuracy)
- 가중 F1-Score (클래스 불균형 고려)
- NDCG@10 (랭킹 품질)
- MRR (Mean Reciprocal Rank)
⚠️ 예상 도전과제
- 클래스 불균형: 관련성 점수 0-1과 2-4의 불균형으로 인한 성능 편향
- 다국어 처리: 한글-영어 혼재 텍스트의 효과적인 처리 방법
- 도메인 적응: 다양한 문서 카테고리에 대한 일반화 성능
- 계산 복잡도: 대규모 텍스트 데이터의 효율적인 처리
📊 EDA 분석 성과 요약
✅ 주요 발견사항
- 텍스트 유사도가 관련성의 가장 강한 예측 변수 (r=0.67)
- 문서 길이와 관련성의 비선형 관계 (200-400단어가 최적)
- 쿼리 유형별 다른 검색 패턴 확인
- 시간대별 사용자 행동 패턴 발견
🎯 핵심 인사이트
- 데이터 품질: 95% 이상의 고품질 텍스트 데이터
- 클래스 불균형: 관련성 점수 0-1(35%) vs 2-4(65%)
- 다국어 특성: 한글-영어 혼재로 인한 토큰화 복잡성
- 도메인 다양성: 5가지 문서 카테고리별 특성 차이
🚀 모델링 방향성
- 전처리: Nori + NLTK를 활용한 다국어 토큰화
- 특성: TF-IDF, 임베딩, 텍스트 유사도 조합
- 모델: 다중 클래스 분류 + 앙상블 접근법
- 평가: 클래스 불균형을 고려한 가중 지표 활용
📸 시각화 결과
📊 주요 차트 및 그래프
- 데이터 분포 히스토그램: 관련성 점수, 쿼리/문서 길이 분포
- 상관관계 히트맵: 변수 간 상관관계 시각화
- 클러스터링 결과: t-SNE를 활용한 데이터 군집화
- 시계열 분석: 시간대별 쿼리 패턴 변화
사용 도구: Jupyter Notebook, Python (pandas, matplotlib, seaborn, scikit-learn)