JH
사용자 피드백을 통한 오픈마켓 상품 군집 향상 알고리즘
연구 인원
본인 역할
개발 환경
총 4명 / 구현 2명
구현 / 데이터 크롤링, 데이터베이스 연동, 데이터 전처리, 인터페이스(기여도 : 80%)
1) Tool : ubuntu
2) Language : Java, MySQL, PHP, HTML5, JavaScript, CSS3

프로젝트 소개 (요약)
오픈 마켓의 미분류 된 아이템 리스트 집합에서 초기에 군집 알고리즘을 이용하여 일부 아이템을 군집화하고, 사용자로부터 피드백을 받아들여 클러스터를 확장하거나 새로운 클러스터를 생성하는 방식으로 군집화 성능을 향상한 프로젝트입니다.
Q1. 이 연구를 개발한 목적은 무엇인고?
A1.
기존에는 기계학습 알고리즘만을 사용하여 주어진 아이템들을 군집화하였지만, 어플리케이션의 특성이나 사용자의 의도를 반영하지 못하는 문제가 있습니다.
ex. 사람들의 피지 및 피부에서 불순물을 제거하는 면봉이나 팩인 경우
- 사람들은 화장품 카테고리에 있을 것이라고 생각
- 기계학습을 통한 분류는 청소도구 카테고리에 포함
위와 같은 사항 때문에, 사용자의 의도를 반영하면 좀 더 정확하게 사용자가 원하는 결과가 나올 것이라 생각하고 개발 하였습니다.
Q2. 어떻게 함께 학습했니?
A2.
인터페이스를 활용하였습니다. 아이템에 대한 정보가 인터페이스에 출력이 되면 사용자가 같은 카테고리에 속하는지 다른 카테고리에 속하는지 판단하여 클러스터를 확장하거나 새로운 클러스터를 생성하는 방식으로 군집화 하였습니다.
개발 내용(본인 구현 부분)
1. 데이터 크롤링 & 데이터베이스 연동

[그림 1] 아이템 정보
* Java 사용
> 오픈 소스로 부터 데이터 정보를 크롤링하여 데이터베이스 테이블에 저장하였습니다.
(데이터 정보 : 아이템 명, 아이템 가격, 아이템 이미지, 아이템 판매자)
> Java를 통해 테이블로부터 원하는 정보를 연동하여 획득하였습니다.
(ex. 아이템 명에서 "PC"가 들어가는 아이템 출력)
> PHP를 통하여 데이터베이스와 인터페이스 간 상호연동을 하였습니다.
2. 데이터 전처리

[그림 2] 토큰화된 아이템 명&판매자 벡터화
* Java 사용
> 아이템 명을 기호, 숫자, 영문을 공백으로 대체하였습니다.
예시) ’삼천리자전거/20 26인치 접이식자전거/스프라 하로 GS20 RS20 GS26 GUX 하운드HD200/삼천리 아동용 자전거’
>> ‘삼천리자전거 인치 접이식자전거 스프라 하로 하운드 삼천리 아동용 자전거’
> 공백을 기준으로 토큰화 하였습니다. (길이 3 이상인 토큰은 2-gram으로)
예시) ‘삼천리자전거 인치 접이식자전거 스프라 하로 하운드 삼천리 아동용 자전거’
>> [‘삼천’, ‘천리‘, ‘리자‘, ‘자전’, ‘전거‘, ‘인치‘, …, ‘자전‘, ‘전거’]
> 아이템 명, 아이템 판매자 속성을 숫자 형태로 벡터화하였습니다. (TF-IDF사용)
3. 인터페이스
> 흐름 및 작동 순서로 기재
- HTML5 : 사용자 인터페이스를 만들기 위해 사용했습니다.
- CSS3 : 시각적 효과를 위해 사용했습니다.
- JavaScript : 사용자의 피드백을 수용하고 수동적인 작업을 수행하기 위해 사용하였습니다.
- PHP : 데이터베이스와 연동하기 위해 사용하였습니다.
- Java : 데이터베이스와 연동하여 유사도 또는 k-means와 같은 알고리즘 작동을 위해 사용하였습니다.

[그림 3] 사용자 제품 선택 인터페이스
> PHP를 사용하여 사용자 인터페이스에 랜덤하게 아이템을 보여줍니다.
> 사용자는 인터페이스에 나타난 아이템 중에서 피드백 줄 아이템을 선택합니다.

[그림 4] 유사 제품 출력 인터페이스
> 인터페이스에서 사용자가 선택한 아이템과 가장 유사한 아이템들 중에서 상위 k개 제품을 출력합니다.
> 선택한 아이템은 php를 통해 데이터베이스 정보를 갱신
> Java를 통해 k-means 알고리즘을 구동
> Java를 통해 유사도 구동하여 테이블에 저장
> PHP를 통해 유사도 테이블 상위 k를 인터페이스에 띄움

[그림 5] 동일 아이템 군집
> k개 제품이 선택한 제품과 동일한 군집인지 사용자 판단합니다.
> 해당 아이템이 동일한 군집일 경우 선택 제품과 같은 군집으로 판단하여 해당 군집에 추가합니다.

[그림 6] 서로 다른 아이템 군집
> 해당 아이템이 동일하지 않은 군집일 경우 새로운 군집을 생성합니다.
> 새롭게 생성한 군집은 큐에 저장합니다.


[그림 7] 다음 군집 아이템 선택
> 해당 아이템에 대해 사용자 피드백이 끝난 후, 다음 피드백을 줄 아이템을 선택하는 방법입니다.
> 해당 아이템과 가장 낮은 유사도를 가지는 아이템을 다음 피드백 줄 아이템으로 선택합니다.
- 이유 : 좀 더 빠르게 널리 확산하기 위한 아이디어!