협업필터링을 이용한 제주여행지 추천시스템

최혜미·2023년 5월 27일
0

Project

목록 보기
2/10

[주제 선정이유]

코로나 종식이 가까워지면서 여행산업이 활발해지고 있다. 나 역시 여행을 좋아하고 자주 가기 때문에 여행지 추천 서비스를 만들면 좋겠다는 생각을 하였고 주제로 선정하게 되었다. 그 중에서도 사람들이 자주 방문하는 여행지인 제주도를 기반으로 하는 여행지 추천 서비스를 만들기로 결정하였다.

[협업필터링]

많은 사용자로부터 얻은 취향 정보를 활용하는 기법이다. 협업 필터링 중에서도 유사한 사용자나 아이템을 이용할 것이므로, Memory-Based Approach을 사용하였다. 협업필터링의 Memory-Based Approach는 사용자기반(user-based)와 아이템기반(item-based)으로 다시 나눌 수 있다.

[사용기술]

Python, jupyter notebook

[github 주소]

https://github.com/ghrltjdtprbs/JEJU_recommendation_ai

[input data]

사용자에게 설문지를 통해 설문값을 기반으로 가장 만족할만한 여행지를 추천해준다. 추후 사용자에게 추천 받은 여행지에 대한 만족도 조사를 실행해 인공지능을 학습시켜 나갈 예정이다.

(사용자 설문지)

  1. 성별을 입력해주세요.(남자1/여자2 입력)

  2. 나이를 입력해주세요.(15~20=1, 21~30=2, 31~40=3, 41~50=4, 51~60=5, 61 이상=6)

  3. 혼인 여부를 입력해주세요. (미혼1/ 기혼2 입력)

  4. 몇번째 제주도 방문인가요?(1,2,3,4)

  5. 여행의 주 목적이 무엇입니까? (1-11까지 해당되는 번호 하나를 입력해주세요.)
    1) 자연경관감상 2) 식도락(맛집여행) 3) 산/오름/올레길 트래픽
    4) 쇼핑 5) 박물관/테마공원 방문 6) 영화/드라마촬영지 방문
    7) 해변활동 8) 레포츠(승마, 골프, ATV 등) 9) 전통문화체험
    10) 역사/문화유적지 방문 11) 종교/순례활동

  6. 혼자 여행 하시나요?(아니면1 맞으면2를 입력해주세요.)
    ->값이1인 경우 6번 문항으로 이동 값이2인 경우 8번으로 이동

  7. 본인을 제외한 함께 여행할 일행의 수는 몇 명입니까?

  8. 일행과의 관계를 골라주세요.(1-6까지 해당되는 번호 하나를 입력해주세요.)
    1) 친구/연인 2) (직장)동료
    3) 단체모임 4) 비동거가족
    5) 친척 6) 기타

(사용자 만족도 설문지)

  1. 자연경관감상에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  2. 식도락(맛집여행)에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  3. 산/오름/올레길 트래픽에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  4. 쇼핑에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  5. 박물관/테마공원 방문에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  6. 영화/드라마촬영지 방문에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  7. 해변활동에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  8. 레포츠(승마, 골프, ATV 등)에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  9. 전통문화체험에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  10. 역사/문화유적지 방문에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  11. 종교/순례활동에 대한 만족도를 입력해주세요.(1아주불만족-5매우만족)
  12. 여행추천 서비스에 대한 전반적 만족도에 대해 입력해주세요.
  13. 재방문 의향이 있으신가요?(1매우아님-5아주많음)
  14. 다른사람에게 추천할 의향이 있으신가요?(1매우아님-5아주많음)

[학습데이터]

(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와 유사하게 나오면 유사도가 높다고 판단하였다.
유사도 측정을 위해 평균 제곱차이 유사도, 피어슨 유사도, 코사인 유사도를 이용하였다. 위의 측정기준 값들을 넣어 각각 실행해 얻은 결과를 분석해봤을 때, 제주여행 추천 시스템은 사용자간의 유사도가 높다고 판단되었다.

평균제곱차이 유사도 (Mean Squared Difference, MSD)

: 유클리드 공간에서의 거리 제곱에 비례하는 값

out(1714257) : [60004]
out(1712377) : [57003]
out(1613413) : [77001]

코사인 유사도 ( Cosine Similarity )

: 두 특성 벡터의 각도에 대한 코사인 값, 각도 θ가 0도이면 코사인 유사도는 1이다. 반대로 각도
θ가 90도이면 코사인 유사도는 0이다.

out(1714257) : [60004, 37005, 7008]
out(1712377) : [57003, 70008]
out(1613413) : [77001]

피어슨 유사도 ( Pearson Similarity )

: 두 벡터의 상관계수 ( Pearson correlation coefficient )를 말하며 다음과 같이 정의


out(1714257) : [60004, 37005, 70008]
out(1722377) : [57003,70008]
out(1613413) : [77001]

[output data]



purpose 데이터 값과 jplace의 데이터 값을 이용해 여행지인 purpose_jplace를 출력한다. 출력된 purpose_jplace의 값이 해당되는 장소를 최종 결과값으로 출력한다. 장소는 숫자로 표기되므로 위의 output data 표를 참고하여야한다.


(실제 출력결과)

카멜리아힐(77001)이 추천되었다는 것을 알 수 있다.





프로젝트 후기

교수님이 협업필터링 어려운데 할 수 있겠냐고 할 때 도망쳤어야 했는데...
참고했던 레퍼런스가 잘 나와있어 레퍼런스 코드의 도움을 많이 받았음에도 불구하고 정말 힘들었다...인공지능 나랑 안맞는듯

profile
말하는 감자

0개의 댓글