안녕하세요. 번개장터 추천시스템 개발 및 도입후기를 주제로하는 마지막 포스팅입니다. 이번 포스팅에서는 새로운 추천시스템을 구성하면서 겪었던 최적화 방법과 다양한 문제들, 그리고 추후 개발사항에 대해서 기록하고자 합니다.

1. 서버비용 최적화

  • EMR 클러스터를 구성하는데 있어서 마스터와 그 하위에 있는 노드들에 대한 인스턴스 종류를 선택해야 합니다. AWS에서 제공하는 대부분의 인스턴스 종류를 선택할 수 있습니다. 하지만, 모든 인스턴스에 대한 가격은 사양에 따라 천차만별의 가격대를 형성하고 있습니다. 번개장터는 데이터센터를 자유자제로 활용할 수 있는 여건이 되지 않기 때문에 AWS의 사양을 최적화 하기 위한 노력이 필요했습니다.
  • 서버 비용을 최적화하기 위해서 EMR클러스터를 다양하게 구성하고, 사례별로 측정하였습니다. 가격과 성능의 상충관계를 해결하기 위한 가장 최적의 클러스터 구성을 찾는 것이 목표이기 때문에 수 많은 검증을 거쳤습니다. 이 포스팅에서 상세한 인스턴스 사양에 대해서 말씀드리고 싶지만, 보안상(?)문제로 기재하지 못하는 점 양해 부탁립니다.

2. 하이퍼파라미터 튜닝

  • 대부분의 머신러닝(딥러닝) 기법은 하이퍼 파라미터 튜닝이 필요합니다. Spark에 내장된 ALS를 활용하면서도 추천 성능을 향상시키기 위한 하이퍼파라미터 튜닝을 진행했습니다. 하이퍼 파라미터 튜닝 방식은 다양한방법이 존재하지만, AUC(Area Under Curve)에 기반한 반복적 학습과 검증을 진행하였습니다[1]. AUC는 머신러닝뿐만 아닌 많은 연구에서 결과를 검증할 때 쓰이는 통계모델입니다. 기본적인 AUC의 개념은 ROC(Receiver Operating Characteristic Curve)에서 시작되며, ROC는 연구나 머신러닝에서 추출된 결과를 양분화 시켜 교차검증을 할 수 있는 곡선입니다. AUC는 기본적으로 1에서 0.5까지의 값을 가지며, 1에 가까울수록 신뢰도가 높고 성능이 좋은 결과라고 판단해볼 수 있습니다. 해당 시스템 개발에서는 하이퍼 파라미터의 범위를 구성하였으며, 반복문을 통해 AUC 수치를 기반으로 추천성능을 측정했습니다.
  • 물론, 넓은 범위의 파리미터 값을 설정하였다면 앞서 서술한 단순 반복작업 보다는 최적화 알고리즘(유전자 알고리즘, 하모니서치 등)를 이용하였을 것입니다[2]. 하지만 단순 반복작업의 성능 측정결과인 AUC값이 0.88정도로 훌륭한 수치를 이루고 있었기에 충분히 만족할만한 결과를 얻었다고 생각했습니다[3].

3. Data sparsity issue

  • 대부분의 추천시스템에서 나타나는 문제는 Data sparsity일 것입니다. 우리 번개장터는 이를 해결하기 위해서 새로운 기술의 도입보다는 과거의 시스템을 활용하는 방안을 생각해냈습니다.
  • 구성은 간단합니다. 새로운 추천시스템으로부터 결과가 도출되지 않는 물품에 대해서는 과거 추천방식인 배치작업을 통해 얻어진 결과물을 대신 보여주는 방식을 행하였습니다. Data sparsity를 해결하기 위해서 물품의 메타 정보에 기반해 추천을 해주는 기법(Meta-Prod2Vec)이 존재하지만, 많은 개발 리소스를 투자할 수 없는 상황이기에 기존 로직을 활용하기로 하였습니다[4-5].

4. 그외

  • Spark의 RDD(Resilient Distributed Datasets)를 효율적으로 활용하기 위한 방안 중 하나가 캐쉬함수(cache & persist)를 활용하는 것입니다. 하지만 이는 무분별한 캐쉬함수의 사용은 서버내 캐쉬메모리를 점유하는 사태를 일으키는 주범이 됩니다. 항상 캐쉬함수를 사용한 후에는 unpersist함수를 이용해 캐쉬를 해제시켜주는 것이 중요합니다.

5. 추후 개발

  • 번개장터의 추후 개발 계획은 고도화된 개인화추천 시스템을 완성하는 것을 목표로 합니다. 딥러닝(Meta-Prod2Vec)을 활용해 콘텐츠 기반의 개인화추천을 개발할 것이며, 이는 사용자에게 최적의 정보를 전달하는 동시에 수익모델에 지대한영향을 줄 수 있는 또 다른 먹거리 일것입니다.

6. 인용

  • [1] Area under the curve https://en.wikipedia.org/wiki/Receiver operating characteristic#Area under the curve.
  • [2] Deb, K., Pratap, A., Agarwal, S., & Meyarivan, T. A. M. T. (2002). A fast and elitist multiobjective genetic algorithm: NSGA-II. IEEE transactions on evolutionary computation, 6(2), 182-197.
  • [3] Wetzker, R., Umbrath, W., & Said, A. (2009, February). A hybrid approach to item recommendation in folksonomies. In Proceedings of the WSDM’09 Workshop on Exploiting Semantic Annotations in Information Retrieval (pp. 25-29). ACM.
  • [4] Vasile, F., Smirnova, E., & Conneau, A. (2016, September). Meta-Prod2Vec: Product embeddings using side-information for recommendation. In Proceedings of the 10th ACM Conference on Recommender Systems (pp. 225-232). ACM.
  • [5] Grbovic, M., Radosavljevic, V., Djuric, N., Bhamidipati, N., Savla, J., Bhagwan, V., & Sharp, D. (2015, August). E-commerce in your inbox: Product recommendations at scale. In Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp. 1809-1818). ACM.




글쓴이 - 이명휘 : 번개장터 주식회사 엔지니어(컴퓨터공학 학사 / 건축공학 석사)
머신러닝에 기반한 최적화 및 신재생에너지에 대한 연구를 했습니다.
흥미로운 논문에 대한 리뷰를 취미로 합니다.
Web : developeco.com
ResearchGate : bit.ly/2HF9M9x
Github : /Myeonghwi