서론
기존에 머신러닝 프로젝트를 진행하면서 주로 회귀 모델을 사용해 왔는데 최근 프로젝트에서는 KMeans 클러스터링을 활용한 유사 음악 추천 시스템을 구축하게 되었다. 이 시스템의 목표는 다양한 노래 데이터셋을 활용하여 사용자가 입력한 노래와 유사한 곡을 10개 추천하는 것이었다.
클러스터링이 완료된 KMeans 모델을 pkl 파일로 저장하고 서빙하려고 했으나 예상치 못한 에러가 발생했다. KMeans 모델을 이용해 추천하려면 단순히 모델 파일뿐 아니라 클러스터링에 사용한 데이터셋도 필요하다는 사실을 처음 알게 되었다. 이에 따라 회귀 모델과 KMeans 모델의 차이점을 정리해 보았다.
유사곡 추천 시스템을 정리한 내용은 다음 링크에서 확인해볼 수 있다.
회귀 모델의 경우
회귀 모델(선형 회귀, 의사결정나무, 랜덤포레스트 등)은 학습된 가중치와 파라미터들을 이용하여 입력값과 목표값 간의 관계를 학습한다.
회귀 모델은 학습 과정에서 모든 필요한 정보를 내부 파라미터에 저장하여 이후 새로운 입력값이 들어오면 이를 기반으로 예측값을 계산한다. 즉, 모델이 한 번 학습되면 학습 데이터 없이도 입력값에 대한 예측을 바로 제공할 수 있다. 이는 예측을 위해 모델의 구조(가중치나 트리의 분할 등)만 필요하기 때문이다.
KMeans 모델의 경우
KMeans 클러스터링은 지도학습이 아닌 비지도학습 방식으로 데이터 포인트들을 여러 개의 cluster로 묶는 알고리즘이다.
KMeans는 각 클러스터의 중심점을 구한 후 새로운 데이터 포인트가 들어오면 가장 가까운 중심점에 해당하는 클러스터로 할당하는 방식을 사용한다. 문제는 KMeans가 추천 시스템에 사용될 때 단순히 클러스터 중심만으로는 충분하지 않다는 점이다.
예를 들어, ‘유사한 노래 추천 시스템’을 구성할 때, 단순히 어떤 클러스터에 속했는지가 아니라 그 클러스터 안에서 얼마나 유사한지, 즉, 가장 가까운 노래들이 무엇인지도 알아야 한다. 이 경우 클러스터링에 사용된 개별 포인트들의 위치가 필요하다. 클러스터 중심점 정보만으로는 어떤 노래가 주변에 있는지 알 수 없어서 추천을 위해 클러스터링에 사용된 데이터셋이 반드시 필요하다.
그리고 당연한 소리일수도 있지만 함께 전달해야 하는 데이터셋은 모델 클러스터링에 사용된 바로 그 데이터셋이어야 한다.
프로젝트에 사용한 데이터셋이 예를 들어 spotify_songs.csv라고 했을 때 이 csv 파일을 불러오고 결측치를 처리하고 전처리가 완료된 데이터셋을 전달하지 않고 spotify_songs.csv 파일을 그대로 전달하면 추론 시 에러가 발생한다. KMeans 모델을 활용하려면 학습에 사용된 최종 전처리 데이터셋을 별도로 저장해 모델과 함께 서빙해야 한다. 전처리가 완료된 학습용 데이터 그대로를 재사용하는 것이 중요하다.
왜 전처리된 데이터셋이 필요한가?
이유는 주로 데이터의 일관성 때문이다.
- 데이터 일관성: 처음 클러스터링에 사용된 데이터셋(전처리가 완료된 상태)은 특정 행의 순서와 특성이 고정되어 있다. 모델은 이 데이터셋의 구조에 맞춰 클러스터링과 유사도 계산을 수행하도록 설정되었기 때문에, 추론 시 원본 spotify_songs.csv를 다시 불러오면 동일한 전처리를 반복해야 한다. 이 과정에서 행의 순서나 전처리 방식이 미세하게 달라질 수 있으며, 작은 차이도 추천 시스템의 결과에 영향을 미칠 수 있다.
- 특정한 행 일치 필요: KMeans 기반 추천 시스템에서는 유사한 노래를 찾을 때 클러스터링에 사용된 특정 데이터 포인트의 좌표(특징값)들을 기반으로 계산이 이뤄진다. 따라서 데이터셋의 각 행(노래)에 해당하는 데이터가 정확히 일치해야 올바른 추천 결과를 보장할 수 있다. 원본 데이터를 불러와 전처리를 다시 하면, 삭제되거나 수정된 데이터 포인트 때문에 클러스터링 시 사용된 데이터와 다를 수 있다.
단순 컬럼명 수정이나 파생변수를 추가하는 정도의 변경이라면 어떨까?
단순 컬럼명 수정
KMeans 모델은 각 데이터 포인트의 피처 값을 순서대로 받아들여 계산하기 때문에 컬럼명이 바뀌어도 데이터의 순서가 유지된다면 모델은 동일하게 작동한다. 즉, 컬럼명이 수정되더라도 KMeans 모델이 에러를 일으키거나 추론 과정에 직접적인 문제를 야기하지는 않는다. 하지만 컬럼명을 수정한 후 원본 데이터셋과 구분되지 않게 되면 추후 모델이나 데이터 관리 시 혼란이 발생할 수 있으므로 주의가 필요하다.
파생변수 추가 시의 예측 영향
KMeans 모델은 학습할 때 사용된 특정 피처들만을 기반으로 클러스터를 형성한다. 따라서, 모델 학습에 사용하지 않았던 새로운 컬럼이나 파생변수가 추가된 상태로 데이터를 입력하면, KMeans 모델은 이를 무시하고 기존 학습된 피처들만을 사용하여 계산을 수행하게 된다.
문제는 추가된 컬럼이 모델의 계산 과정에 직접 사용되진 않더라도 전처리 방식이나 추가된 컬럼 값에 따라 데이터의 전체적인 구조에 미세한 변화가 생길 수 있다는 점이다. 이로 인해 모델이 예상하지 못한 결과가 나타날 수 있으며 특히 유사도 기반 추천 시스템에서는 추천 결과가 이전과 다르게 나올 가능성이 존재한다.
따라서 처음 전처리가 완료된 후 클러스터링에 사용된 데이터셋을 그대로 저장하고, 추론 시에도 그 데이터를 재사용하는 것이 정확한 결과를 위해 필수적이다.
'ML' 카테고리의 다른 글
Ensembles과 AutoML 차이점 (0) | 2024.11.11 |
---|---|
WandB 사용법 (4) | 2024.11.09 |
데이터 저장소 Data Source, Data Lake, Data Warehouse, Data Mart 기본 개념 (0) | 2024.10.24 |
p-value, R²(결정 계수), β(베타 계수) 해석 (3) | 2024.09.25 |
선형회귀분석과 머신러닝의 차이 (0) | 2024.09.20 |