콘텐츠 기반 필터링
TF-IDF 항목 표현, 코사인 유사도, 메타데이터로 영화 추천 시스템을 구축하는 방법을 알아봅니다.
콘텐츠 기반 필터링은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
콘텐츠 기반 필터링이란 무엇인가요
콘텐츠 기반 필터링은 사용자가 이미 좋아한 아이템과 비슷한 아이템을 해당 아이템 자체의 특성(텍스트, 장르, 태그)을 바탕으로 추천합니다. 협업 필터링과 달리 다른 사용자의 데이터가 필요하지 않으므로 아이템 콜드 스타트 문제를 피할 수 있습니다.
아이템을 특성 벡터로 표현하기
핵심 아이디어는 각 아이템을 콘텐츠를 설명하는 숫자 벡터로 바꾼 다음 벡터 사이의 유사도를 측정하는 것입니다. 텍스트 설명에는 TF-IDF가 이러한 벡터를 만드는 대표적인 방법입니다.
TF-IDF란 무엇인가요
TF-IDF(단어 빈도-역문서 빈도)는 아이템에 단어가 얼마나 자주 나타나는지에 따라 가중치를 부여하면서, 모든 아이템에 공통으로 나타나는 단어의 가중치는 낮춥니다. 드물고 구별되는 단어에는 높은 가중치를 부여하여 아이템을 고유하게 만드는 요소를 포착합니다.
TfidfVectorizer
사이킷런을 사용하면 두 줄의 코드로 아이템 설명 목록을 TF-IDF 행렬로 변환할 수 있습니다.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(stop_words="english")
tfidf_matrix = vectorizer.fit_transform(df["description"])행렬 형태 이해하기
tfidf_matrix의 형태는 (아이템 수, 용어 수)입니다. 행 하나는 아이템 하나에 해당하고, 열 하나는 어휘에 포함된 고유한 단어 하나에 해당합니다. 대부분의 아이템은 전체 단어 중 일부만 사용하므로 이 행렬은 희소합니다.
print(tfidf_matrix.shape) # (n_items, vocabulary_size)벡터 변환기 조정
유용한 매개변수로는 공통 단어를 제거하는 stop_words, 어휘 크기를 제한하는 max_features, 더 풍부한 특성을 위해 두 단어 구문까지 포함하는 ngram_range=(1,2)가 있습니다.
vectorizer = TfidfVectorizer(
stop_words="english",
max_features=5000,
ngram_range=(1, 2)
)아이템 간 코사인 유사도
모든 아이템 쌍 사이의 유사도를 계산합니다. 결과는 아이템 수 x 아이템 수 행렬이며, 각 셀에는 두 아이템 설명이 얼마나 비슷한지가 나타납니다.
from sklearn.metrics.pairwise import cosine_similarity
cosine_sim = cosine_similarity(tfidf_matrix)
print(cosine_sim.shape) # (n_items, n_items)선형 커널 지름길
TF-IDF 벡터는 기본적으로 L2 정규화되므로 linear_kernel은 코사인 유사도와 같은 결과를 더 빠르게 제공합니다. 이는 대규모 카탈로그에서 흔히 사용하는 최적화 방법입니다.
from sklearn.metrics.pairwise import linear_kernel
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)제목을 인덱스에 매핑하기
이름으로 아이템을 조회하려면 제목에서 행 위치로 연결되는 역인덱스를 만드십시오.
indices = pd.Series(df.index, index=df["title"]).drop_duplicates()get_recommendations 함수
제목을 입력받아 해당 아이템의 유사도 행을 가져오고, 내림차순으로 정렬하고, 아이템 자체는 건너뛴 뒤 상위 일치 항목을 반환합니다.
def get_recommendations(title, n=10):
idx = indices[title]
scores = list(enumerate(cosine_sim[idx]))
scores = sorted(scores, key=lambda x: x[1], reverse=True)
top = scores[1:n+1] # skip itself at position 0
item_idxs = [i for i, _ in top]
return df["title"].iloc[item_idxs]장점과 한계
장점: 완전히 새로운 아이템에도 사용할 수 있고, 추천 이유를 설명할 수 있습니다("이 단어들을 공유하기 때문입니다").
한계: 사용자가 이미 알고 있는 취향 안에 머무르므로 과도하게 전문화될 수 있고, 협업 필터링처럼 놀라운 장르 간 인기 항목을 발견할 수 없습니다.
빠른 확인
콘텐츠 기반 필터링 지식을 테스트해 보십시오.
복습
콘텐츠 기반 필터링을 구축했습니다. TfidfVectorizer는 설명을 (아이템 수, 용어 수) 행렬로 변환하고, cosine_similarity는 아이템을 비교하며, get_recommendations는 가장 유사한 상위 아이템을 반환합니다(아이템 자체는 제외). 콜드 스타트를 처리할 수 있지만 과도한 전문화의 위험이 있습니다. 다음 주제는 하이브리드 시스템과 평가 지표입니다.
자주 묻는 질문
“콘텐츠 기반 필터링” 강의는 무료인가요?
네 — “콘텐츠 기반 필터링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“콘텐츠 기반 필터링”에서 뭘 배우나요?
TF-IDF 항목 표현, 코사인 유사도, 메타데이터로 영화 추천 시스템을 구축하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“콘텐츠 기반 필터링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.