대학 비교과 프로그램을 위한 태그 기반 추천 시스템 프로젝트입니다. TF-IDF와 FastText를 활용한 벡터화 및 LightFM을 이용한 협업 필터링 추천 시스템을 구현했습니다.
sm-data-main/
├── notebooks/ # Jupyter 노트북 파일들
├── models/ # 학습된 모델 및 벡터화기
├── data/ # 데이터 파일 (CSV, Excel, PKL)
├── logs/ # 로그 파일
└── README.md # 프로젝트 설명서
- 데이터 로드 및 기본 전처리 작업
- 엑셀 파일 읽기 및 데이터 정제
- 프로그램 태그를 TF-IDF 및 FastText 벡터로 변환
- 태그 빈도 분석 및 코사인 유사도 계산
- 벡터화 결과 저장
- 태그에 대분류/중분류/속성/기업여부 접두사 추가
- TF-IDF와 FastText 벡터 결합
- 다양한 실험 버전 생성
1. 분류 태그 기반 접두사 붙인 버전.ipynb: 분류 태그 기반 접두사 추가2. 원본 태그에만 접두사 붙인 버전.ipynb: 원본 태그에만 접두사 추가3. 접두사 없이 원본 그대로 쓴 버전.ipynb: 접두사 없이 원본 태그 사용
- LightFM 모델을 활용한 추천 시스템 구현
- 아이템 피처 벡터 생성 및 모델 학습
- 사용자-프로그램 상호작용 기반 추천
fasttext_model.bin: 기본 FastText 모델fasttext_model_tfidf_fasttext.bin: TF-IDF+FastText 결합 버전 모델
tfidf_vectorizer.pkl: 기본 TF-IDF 벡터화기tfidf_vectorizer_prefix.pkl: 접두사 버전 벡터화기tfidf_vectorizer_tfidf_fasttext.pkl: TF-IDF+FastText 결합 버전 벡터화기
item_features_tfidf.pkl: TF-IDF만 사용한 아이템 피처item_features_fasttext_only.pkl: FastText만 사용한 아이템 피처item_features_combined.pkl: TF-IDF + FastText 결합 아이템 피처item_features_tfidf_prefix.pkl: 접두사 버전 TF-IDF 아이템 피처item_features_tfidf_fasttext_combined.pkl: TF-IDF+FastText 결합 아이템 피처
1)_비교과_프로그램_정보.xlsx: 비교과 프로그램 정보 원본 데이터program_with_ews_option1 (2).xlsx: 프로그램 정보 (EWS 옵션 포함)withtags.xlsx: 태그가 포함된 프로그램 정보
programs_info.pkl/programs_info.csv: 기본 프로그램 정보programs_info_prefix.pkl/programs_info_prefix.csv: 접두사 버전 프로그램 정보programs_info_tfidf_fasttext.pkl/programs_info_tfidf_fasttext.csv: TF-IDF+FastText 버전프로그램_태그_벡터화_결과.csv: 태그 벡터화 결과프로그램_태그_TFIDF_벡터.csv: TF-IDF 벡터 결과프로그램_태그_FastText_벡터.csv: FastText 벡터 결과프로그램_벡터화_결과.csv: 전체 벡터화 결과
- Python: 데이터 처리 및 분석
- Pandas: 데이터 조작 및 분석
- scikit-learn: TF-IDF 벡터화
- Gensim: FastText 모델 학습
- LightFM: 추천 시스템 모델
- NumPy / SciPy: 수치 연산 및 희소 행렬 처리
- Jupyter Notebook: 실험 및 분석 환경
-
태그 전처리
- 태그 정제 및 토큰화
- 접두사 추가 (대분류/중분류/속성/기업여부)
- 불용어 제거
-
벡터화
- TF-IDF 벡터화 (최대 2000-3000 특성)
- FastText 벡터화 (100차원)
- 벡터 결합 (TF-IDF + FastText)
-
추천 시스템
- LightFM을 활용한 협업 필터링
- 아이템 피처 기반 추천
- 사용자-프로그램 상호작용 학습
# 가상환경 생성 (선택사항)
python3 -m venv venv
source venv/bin/activate
# 필요한 라이브러리 설치
pip install pandas scikit-learn gensim lightfm numpy scipy joblib openpyxl msoffcrypto-toolimport pandas as pd
import joblib
from scipy.sparse import load_npz
# 프로그램 정보 로드
programs_info = pd.read_pickle('data/programs_info.pkl')
# 아이템 피처 로드
item_features = joblib.load('models/item_features_combined.pkl')# TF-IDF 벡터화기 로드
tfidf_vectorizer = joblib.load('models/tfidf_vectorizer.pkl')
# FastText 모델 로드
from gensim.models import FastText
fasttext_model = FastText.load('models/fasttext_model.bin')
# 새 프로그램 태그 벡터화
new_tags = "AI,데이터,파이썬"
tfidf_vector = tfidf_vectorizer.transform([new_tags])프로젝트에서는 태그 전처리 방법에 따라 여러 버전을 실험했습니다:
- 분류 태그 기반 접두사 버전: 태그를 분류하여 접두사 추가
- 원본 태그 접두사 버전: 원본 태그에만 접두사 추가
- 원본 그대로 버전: 접두사 없이 원본 태그 사용
각 버전에 대해 TF-IDF, FastText, 그리고 결합 벡터를 생성하여 추천 성능을 비교했습니다.
- 총 프로그램 수: 939개
- 고유 태그 수: 2,572개
- TF-IDF 특성 수: 2,000-3,000개
- FastText 벡터 차원: 100차원
- 결합 벡터 차원: 2,100-3,100차원
- 엑셀 파일은 암호화되어 있을 수 있습니다 (비밀번호: 7884)
- 모델 파일은
joblib또는gensim으로 저장되어 있습니다 - 벡터 파일은 희소 행렬(sparse matrix) 형식으로 저장되어 있습니다
logs/hs_err_pid70137.log: Java 관련 에러 로그 (일부 라이브러리에서 발생할 수 있음)
- 대용량 벡터 처리를 위해 희소 행렬(sparse matrix)을 사용했습니다
- 필요시 벡터 차원을 조정할 수 있습니다
이 프로젝트는 대회용으로 제작되었습니다.