코로나 종식이 가까워지면서 여행산업이 활발해지고 있다. 나 역시 여행을 좋아하고 자주 가기 때문에 여행지 추천 서비스를 만들면 좋겠다는 생각을 하였고 주제로 선정하게 되었다. 그 중에서도 사람들이 자주 방문하는 여행지인 제주도를 기반으로 하는 여행지 추천 서비스를 만들기로 결정하였다.
많은 사용자로부터 얻은 취향 정보를 활용하는 기법이다. 협업 필터링 중에서도 유사한 사용자나 아이템을 이용할 것이므로, Memory-Based Approach을 사용하였다. 협업필터링의 Memory-Based Approach는 사용자기반(user-based)와 아이템기반(item-based)으로 다시 나눌 수 있다.
Python, jupyter notebook
https://github.com/ghrltjdtprbs/JEJU_recommendation_ai
사용자에게 설문지를 통해 설문값을 기반으로 가장 만족할만한 여행지를 추천해준다. 추후 사용자에게 추천 받은 여행지에 대한 만족도 조사를 실행해 인공지능을 학습시켜 나갈 예정이다.
성별을 입력해주세요.(남자1/여자2 입력)
나이를 입력해주세요.(15~20=1, 21~30=2, 31~40=3, 41~50=4, 51~60=5, 61 이상=6)
혼인 여부를 입력해주세요. (미혼1/ 기혼2 입력)
몇번째 제주도 방문인가요?(1,2,3,4)
여행의 주 목적이 무엇입니까? (1-11까지 해당되는 번호 하나를 입력해주세요.)
1) 자연경관감상 2) 식도락(맛집여행) 3) 산/오름/올레길 트래픽
4) 쇼핑 5) 박물관/테마공원 방문 6) 영화/드라마촬영지 방문
7) 해변활동 8) 레포츠(승마, 골프, ATV 등) 9) 전통문화체험
10) 역사/문화유적지 방문 11) 종교/순례활동
혼자 여행 하시나요?(아니면1 맞으면2를 입력해주세요.)
->값이1인 경우 6번 문항으로 이동 값이2인 경우 8번으로 이동
본인을 제외한 함께 여행할 일행의 수는 몇 명입니까?
일행과의 관계를 골라주세요.(1-6까지 해당되는 번호 하나를 입력해주세요.)
1) 친구/연인 2) (직장)동료
3) 단체모임 4) 비동거가족
5) 친척 6) 기타
(jeju_personal)
(jeju_place)
(jeju_travel)
응답자 특성데이터인 jeju_personal, 방문지 만족 데이터인 jeju_place, 여행특성 데이터인jeju_travel 세 데이터를 병합해 학습시켰다(6133개의 데이터 학습)
+자세한 데이터 정보는 github 참고
데이터출처 : 제주특별자치도,「제주특별자치도방문관광객실태조사 - 2019년 데이터 사용
https://kosis.kr/statHtml/statHtml.do?orgId=218&tblId=DT_21807N_A013&conn_path=I3
유사도 파악은 추천해줄 대상의 선호도를 바탕으로 계산이 된다. 평균 제곱차이 유사도, 피어슨 유사도, 코사인 유사도를 이용해 사용자간의 유사도를 파악하였다.
(유사도 측정 기준)
act_data_pid.loc[0] = [1714257,4,5,0,1,2,3,2,3,1,0,0,60004]
act_data_pid.loc[1] = [1613413,4,0,1,0,3,0,1,1,0,2,0,77001]
act_data_pid.loc[2] = [1712377,1,1,5,2,2,3,2,0,2,4,0,57003]
+act_nature~act_religion은 각 활동에 대한 만족도이다.
새로운 행에 pid(개개인의 일련번호)가 1714257, 1613413, 1712377인 데이터를 생성해 임의의 만족도 값을 넣고, 해당 pid의 purpose_jplace(여행 다녀온 장소) 데이터를 넣는다. 이 데이터들을 이용해 유사도 측정을 하였을 때 결과값이 purpose_jplace와 유사하게 나오면 유사도가 높다고 판단하였다.
유사도 측정을 위해 평균 제곱차이 유사도, 피어슨 유사도, 코사인 유사도를 이용하였다. 위의 측정기준 값들을 넣어 각각 실행해 얻은 결과를 분석해봤을 때, 제주여행 추천 시스템은 사용자간의 유사도가 높다고 판단되었다.
: 유클리드 공간에서의 거리 제곱에 비례하는 값
out(1714257) : [60004]
out(1712377) : [57003]
out(1613413) : [77001]
: 두 특성 벡터의 각도에 대한 코사인 값, 각도 θ가 0도이면 코사인 유사도는 1이다. 반대로 각도
θ가 90도이면 코사인 유사도는 0이다.
out(1714257) : [60004, 37005, 7008]
out(1712377) : [57003, 70008]
out(1613413) : [77001]
: 두 벡터의 상관계수 ( Pearson correlation coefficient )를 말하며 다음과 같이 정의
out(1714257) : [60004, 37005, 70008]
out(1722377) : [57003,70008]
out(1613413) : [77001]
purpose 데이터 값과 jplace의 데이터 값을 이용해 여행지인 purpose_jplace를 출력한다. 출력된 purpose_jplace의 값이 해당되는 장소를 최종 결과값으로 출력한다. 장소는 숫자로 표기되므로 위의 output data 표를 참고하여야한다.
카멜리아힐(77001)이 추천되었다는 것을 알 수 있다.
교수님이 협업필터링 어려운데 할 수 있겠냐고 할 때 도망쳤어야 했는데...
참고했던 레퍼런스가 잘 나와있어 레퍼런스 코드의 도움을 많이 받았음에도 불구하고 정말 힘들었다...인공지능 나랑 안맞는듯