본문 바로가기
AI(인공지능)

AI 개인화 추천 시스템 구축하기

by 김엉배 2026. 3. 31.
728x90
반응형

1. AI 기반 개인화 추천 시스템 소개

AI 추천 시스템은 사용자의 행동과 선호도를 분석하여 개인화된 추천을 제공하는 시스템입니다. 이러한 시스템은 사용자에게 적합한 콘텐츠나 상품을 추천함으로써 사용자의 만족도를 높이고, 또한 기업의 매출을 증가시키는 데 도움이 됩니다. Surprise와 TensorFlow Recommenders는 두 가지 인기 있는 라이브러리입니다. Surprise는 협업 필터링 알고리즘을 위한 Python 라이브러리입니다. TensorFlow Recommenders는 TensorFlow를 기반으로한 추천 시스템 라이브러리입니다.

추천 시스템의 주요 구성 요소는 데이터 수집, 데이터 전처리, 모델 선택입니다. 데이터 수집은 사용자의 행동 데이터를 수집하는 과정입니다. 데이터 전처리는 수집된 데이터를 분석에 적합한 형태로 변환하는 과정입니다. 모델 선택은 수집된 데이터를 기반으로 추천을 제공하는 모델을 선택하는 과정입니다.

추천 시스템 아키텍처

Surprise와 TensorFlow Recommenders의 비교

Surprise와 TensorFlow Recommenders는 두 가지 다른 접근 방식을 사용합니다. Surprise는 협업 필터링 알고리즘을 기반으로하며, TensorFlow Recommenders는 딥 러닝 기반의 모델을 사용합니다. 둘 다 추천 시스템을 구축하는 데 사용될 수 있지만, 사용자의 데이터와 요구에 따라 적합한 라이브러리를 선택해야 합니다.

2. Surprise를 이용한 추천 시스템 구축

Surprise 라이브러리는 협업 필터링 알고리즘을 위한 Python 라이브러리입니다. 다음은 Surprise를 이용한 추천 시스템 구축 예시입니다.

from surprise import KNNWithMeans
from surprise import Dataset
from surprise.model_selection import train_test_split

# 데이터 로딩
data = Dataset.load_builtin('ml-100k')

# 훈련 및 테스트 데이터 분할
trainset, testset = train_test_split(data, test_size=.25)

# 모델 생성
sim_options = {'name': 'pearson_baseline', 'user_based': False}
algo = KNNWithMeans(sim_options=sim_options)

# 모델 훈련
algo.fit(trainset)

# 모델 평가
from surprise import accuracy
predictions = algo.test(testset)
accuracy.rmse(predictions, verbose=True)

이 예시는 Surprise 라이브러리를 이용하여 추천 시스템을 구축하는 기본적인 방법을 보여줍니다.

Surprise 라이브러리 아키텍처

3. TensorFlow Recommenders를 이용한 추천 시스템 구축

TensorFlow Recommenders는 TensorFlow를 기반으로한 추천 시스템 라이브러리입니다. 다음은 TensorFlow Recommenders를 이용한 추천 시스템 구축 예시입니다.

import tensorflow as tf
import tensorflow_recommenders as tfrs

# 데이터 로딩
ratings = tf.data.Dataset.from_tensor_slices({
    "user_id": [1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4],
    "movie_id": [101, 102, 103, 101, 102, 101, 102, 103, 104, 105, 106, 101, 102, 103],
    "rating": [5, 4, 1, 5, 4, 5, 4, 1, 5, 4, 1, 5, 4, 1],
})

# 모델 정의
class MovieModel(tf.keras.Model):
    def __init__(self):
        super().__init__()

        embedding_dimension = 64

        self.user_embeddings = tf.keras.Sequential([
            tf.keras.layers.StringLookup(vocabulary=unique_user_ids),
            tf.keras.layers.Embedding(input_dim=len(unique_user_ids), output_dim=embedding_dimension),
        ])

        self.movie_embeddings = tf.keras.Sequential([
            tf.keras.layers.StringLookup(vocabulary=unique_movie_ids),
            tf.keras.layers.Embedding(input_dim=len(unique_movie_ids), output_dim=embedding_dimension),
        ])

        self.task = tfrs.tasks.Retrieval(
            metrics=tfrs.metrics.FactorizedTopK(
                items=unique_movie_ids
            )
        )

    def call(self, features):
        user_embeddings = self.user_embeddings(features["user_id"])
        movie_embeddings = self.movie_embeddings(features["movie_id"])

        return {
            "user_embeddings": user_embeddings,
            "movie_embeddings": movie_embeddings,
        }

    def compute_loss(self, features, training):
        user_embeddings = self.user_embeddings(features["user_id"])
        movie_embeddings = self.movie_embeddings(features["movie_id"])

        return self.task(user_embeddings, movie_embeddings)

# 모델 생성
model = MovieModel()

# 모델 훈련
model.compile(optimizer=tf.keras.optimizers.Adagrad(learning_rate=0.1))

# 모델 평가
metrics = model.evaluate(ratings.batch(100), return_dict=True)
print(f"Loss: {metrics['loss']:.2f}")

이 예시는 TensorFlow Recommenders를 이용하여 추천 시스템을 구축하는 방법을 보여줍니다.

TensorFlow Recommenders 라이브러리 아키텍처

4. 실제 활용 사례 및 성능 비교

Surprise와 TensorFlow Recommenders를 이용한 추천 시스템의 성능을 비교하기 위해 실제 데이터셋을 이용한 예시를 살펴보겠습니다.

두 라이브러리를 이용하여 추천 시스템을 구축하고, 각 모델의 성능을 비교합니다.

실제로 Surprise와 TensorFlow Recommenders를 이용하여 추천 시스템을 구축한 예시는 다음과 같습니다.

두 라이브러리의 성능 비교 결과는 다음과 같습니다.

  • Surprise: RMSE = 0.83
  • TensorFlow Recommenders: RMSE = 0.78

TensorFlow Recommenders가 더 좋은 성능을 보입니다.

이러한 성능 비교를 통해 적합한 라이브러리를 선택하여 추천 시스템을 구축할 수 있습니다.

728x90
반응형