본문 바로가기
DeepLearning Framework & Coding/Microsoft AzureML

[Microsoft AzureML - 17] 영화 추천시스템 만들기 - I

by 노마드공학자 2021. 7. 3.

※ 이전글

[Microsoft AzureML - 0] Intro https://limitsinx.tistory.com/113

[Microsoft AzureML - 1] 개발 환경 세팅 https://limitsinx.tistory.com/114

[Microsoft AzureML - 2] 학습할 데이터 불러오기 https://limitsinx.tistory.com/115

[Microsoft AzureML - 3] 데이터 전처리(Data pre-processing) - I https://limitsinx.tistory.com/116

[Microsoft AzureML - 4] 데이터 전처리(Data pre-processing) - II https://limitsinx.tistory.com/117

[Microsoft AzureML - 5] 학습모델 구현 및 검증 https://limitsinx.tistory.com/118

[Microsoft AzureML - 6] 여러 학습모델 동시에 성능비교 https://limitsinx.tistory.com/119

[Microsoft AzureML - 7] Binary Classification with Kaggle https://limitsinx.tistory.com/120

[Microsoft AzureML - 8] 모델 선정과 Hyper Parameter 자동튜닝 https://limitsinx.tistory.com/121

[Microsoft AzureML - 9] 학습데이터 CSV로 Export하기 https://limitsinx.tistory.com/122

[Microsoft AzureML - 10] 데이터 Feature Engineering https://limitsinx.tistory.com/123

[Microsoft AzureML - 11] 이미지 데이터학습 with Neural Network https://limitsinx.tistory.com/124

[Microsoft AzureML - 12] Train/Test 데이터 구분하기 https://limitsinx.tistory.com/125

[Microsoft AzureML - 13] Kaggle 사용법 https://limitsinx.tistory.com/126

[Microsoft AzureML - 14] Titanic Dataset 학습하기 https://limitsinx.tistory.com/127

[Microsoft AzureML - 15] Cross Validation https://limitsinx.tistory.com/128

[Microsoft AzureML - 16] 불균일 데이터 전처리(Sampling,SMOTE) https://limitsinx.tistory.com/129 

 


 

추천시스템(Recommendation)

 

머신러닝을 크게 3가지로 나누면 저는 이렇게 있다고 생각합니다.

 

1. 회귀(Regression)

2. 분류(Classification)

3. 추천(Recommendation)

 

이제까지는 회귀와 분류문제들을 타겟팅하여서 AzureML로 구현해보았는데요

 

이번에는 좀 결이 다른, 추천시스템을 구현해보고자합니다!

 

넷플릭스의 경우, 70%이상의 사용자들이 추천시스템으로 제공되는 영화들을 본다고 합니다.

 

유튜브 알고리즘, 구글 검색알고리즘... 우리는 의외로 엄청나게 많은 추천시스템들속에서 생활을 하고있죠

 

마침 AzureML에서 제공하는 IMDB Movie데이터가 있어, 영화추천해주는 모델을 한번 만들어보고자 합니다. :)

 

[Saved Datasets] -> [Samples] -> [IMDB Movie Titles], [Movie Ratings] Block을 옮겨줍니다.

 

Movie tweets는 조금은 결이 다른 데이터라 이번 추천시스템에서는 사용하지 않았습니다.

 

IMDB Movie Titles 내부입니다.

Movie ID와 Movie Name 2Column으로 이루어진 16614개의 데이터입니다.

 

Movie Ratings 블록의 내부입니다.

눈여겨보실점은, 영화 전체 Rows는 22만개인데 반해, UserID는 26770개의 Unique Values를 가지고 있습니다.

 

즉, 26770명의 User가 227472개의 영화를 평가한것이기에, 중복데이터가 포함되어있다는것을 예상하실 수 있습니다.

 

그런데 지금 Movie Rating에는 Movie ID는 있고, 영화 제목은 없는데요..

반대로 IMDB Movie Title에는 영화제목과 Movie ID만 존재합니다.

 

고객에게 영화를 추천해주려는데, Movie ID로 추천해줄순 없겠죠??

 

즉, 이 두개데이터를 필요에 따라 잘 합쳐주는게 필요합니다.

 

이때는 [Join Data] Block을 사용해줍니다.

 

[Join Data] 블록으로 이렇게 묶어주면, 빨간 느낌표가 뜨는데요

 

어떤데이터를 기준으로 묶을지 선택을 안해주었기 때문입니다! 

 

 

저희는 [Movie ID]를 기준으로 두개 데이터 모두 동일한 값을 가지고 있기에 [Launch Column Selector]에서 두개 데이터 모두 movie ID를 select해줍니다.

 

그다음, Time Stamp같은 데이터들은 필요가 없겠죠??

 

User ID / Movie Name / Movie Ratings 3개를 제외하곤 모두 column을 지워줍니다.

 

 

[Select Column Data] 블록에서, 추천시스템은 제일 앞에있는 column을 기준으로 데이터를 학습하기에 상기 이미지와같이 세팅해주셔야 합니다. 

 

체크표시를 하면, 오른쪽 네모박스안의 순서대로 데이터가 정렬됩니다.

 

그다음, [Remove Duplicate Rows] 블록을 설치해주는데요

이건, 1명이 영화 한개를 여러번 평가했는데 각기 점수가 다를수있겠죠??

이런데이터는 학습하면 오류가 생기게 됩니다.

 

블록 내부세팅을 User ID/Movie Name으로 해주면,  같은 User ID가 똑같은 Movie Name을 중복평가한 경우, 1개만 남기고 다 삭제해버립니다.

 

[Split Data]는 이제까지는 Row를 기준으로 데이터를 7:3으로 나누어주었었는데요,

 

추천시스템에서의 Split은 좀 개념이 다릅니다.

 

현재 데이터가 약 2만2천명이 20만개의 영화를 평가한것이기에.. 한명이 여러개의 영화를 평가했겠죠??

 

이렇게 학습을 진행하게되면, 영화를 많이본 고객의 데이터가 많이들어가게되고 몇개안본 유저의 의견은 거의 반영되지 못하겠죠.. 

 

즉, 최대한 다양한사람들의 의견을 반영할 수 있도록, [Recommender Split]을 해주면 1명당 영화평가한 갯수를 제한하여 학습을 진행합니다.

(따라서 Recommender Split 전/후의 User ID Unique Value(고객수) 에는 변함이 없지만, 전체 영화데이터의 크기는 줄어듭니다.)

 

여기까지가 험난한? 추천시스템을 위한 데이터 전처리 과정이였습니다.

 

이다음글은, Split Data아래로 학습모델을 어떻게 선정하고 결과가 어떻게나올지 확인해보도록 하겠습니다.

댓글