- 추천 파이프 라인을 구축하기에 앞서 추천 알고리즘에 대해 알아볼 것이다.
- ALS에 대해 알아볼 것이며, ALS는 Alternating Least Squares의 약자이다.
- 직역하면 제곱된 숫자를 왔다갔다하며 최적화한다는 뜻이다.
추천 알고리즘 예제
- A, B 유저는 영화에 점수를 주고 있다.
- A 유저는 ‘Casablanca’라는 영화를 보지 않았지만, 그 외의 영화의 점수를 보면 둘의 영화 취향이 꽤나 비슷한 것을 볼 수 있다.
- 그러므로 A 유저는 ‘Casablanca’를 재밌게 볼 확률이 높고, 이런 예측을 전달해주는 것이 추천 알고리즘이다. 이것을 협업 필터링이라는 것으로 풀게 된다.
- 실제 비즈니스에선 한 유저가 볼 수 있는 영화의 수가 굉장히 많다.
- 아직 안 본 영화의 평점들을 예측하여 값을 정렬하고, 제일 위에서부터 유저에게 전달하는 것이 바로 추천 알고리즘의 원리라고 할 수 있다.
ALS(Alternating Least Squares)란?
- 빈칸이 많은 레이팅 매트릭스(Rating Matrix)는 유저 매트릭스(User Matrix)와 아이템 매트릭스(Item Matrix)로 이루어진다.
- ALS는 두 행렬 중 하나를 보정시키고 다른 하나의 행렬을 순차적으로 반복하면서 최적화하는 방식이다.
- 첫번째로 아이템 매트릭스 값과 유저 매트릭스 값이 랜덤하게 채워지고, 아이템 매트릭스 행렬을 고정시키고 유저 매트릭스의 행렬을 최적화한다.
- 최적화 할 때 두 개의 값이 곱해졌을 때 레이팅 매트릭스의 값과 비슷하게 최적화를 진행한다.
- 다음 유저 매트릭스의 값을 고정시키고 아이템 매트릭스를 최적화한다.
- 위 과정을 계속 반복하고, 레이팅 매트릭스의 값과 가장 비슷해질 때 빈칸이 예측값으로 채워지게 되고 그것이 바로 추천 결과값이다.
영화 추천 파이프 라인 구축
- 데이터셋은 Grouplens의 MovieLens 25M Dataset을 사용할 것이다.
1 |
|
- 모델링 시 ‘Out of Memory’ 에러가 발생했기 때문에
MAX_MEMORY
를 지정하여 세션을 띄운다.
1 |
|
- 추천 알고리즘 모델링에 타임 스탬프 컬럼은 필요없기 때문에 삭제해준다.
1 |
|
간단한 EDA
- 데이터셋 자체가 굉장히 심플하지만, 그래도 레이팅(rating)에 대해 통계를 내어 확인해본다.
1 |
|
알고리즘 모델링
- ALS를 활용한 추천 알고리즘 모델링을 진행한다.
1 |
|
- 레이팅의 실제값과 예측값을 확인할 수 있다.
- 어느정도 유사하게 잘 예측한 것 같다.
- 실제값과 예측값의 통계를 확인해본다.
1 |
|
평가
- RMSE를 이용하여 평가를 진행한다.
1 |
|
- 성능이 그렇게 좋진 않지만, 파이프 라인 실습에 집중했으므로 넘어간다.
- 레코멘데이션(recommendation)을 직접 뽑아본다.
1 |
|
- 위 데이터 프레임은 유저 별 영화를 추천하고, 아래 데이터 프레임은 영화 별 유저를 추천한다.
서비스
- 실 서비스에선 API로 유저를 위한 추천을 해야하기 때문에 디테일 작업을 해본다.
1 |
|
- 위 데이터를 추천 모델에 넣어주기만 하면 된다.
1 |
|
- 유저 별 추천 영화 Id와 점수가 나왔으니 다른 데이터셋을 합쳐서 영화명이 전시되게 한다.
1 |
|
- 유저에게 영화를 추천하는 순위가 나오게 된다.
- 추가적으로 실제 서비스할 때는 하나의 함수를 사용하면 좋으니, 서빙하는 함수까지 작성해본다.
1 |
|
- 성공적이다.
- 사용이 끝났으면
.stop()
을 진행한다.