/final-project-level2-recsys-11

πŸ› οΈ μΆ”μ²œμ˜ ν’ˆμ§ˆμ„ 평가할 수 μžˆλŠ” μ‹€ν—˜ 관리 툴

Primary LanguagePython

Web4Rec

image

Web4Rec μ΄μš©ν•˜κΈ° (Demo Page)

Introduction

μΆ”μ²œμ‹œμŠ€ν…œμ—μ„œλŠ” μ •λ‹΅ 라벨을 λ§žμΆ”λ„λ‘ ν•™μŠ΅ν•œ μΆ”μ²œ λͺ¨λΈμ€ κ³ κ°μ—κ²Œ μΈκΈ°μžˆλŠ”(ꡬ맀 이λ ₯이 λ§Žμ€) μ•„μ΄ν…œλ§Œμ„ μΆ”μ²œν•œλ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μΆ”μ²œ AI μ—”μ§€λ‹ˆμ–΄λΌλ©΄ κ³ κ°μ—κ²Œ λœ»λ°–μ˜ 재미λ₯Ό μ£Όκ±°λ‚˜ μ°Έμ‹ ν•˜κ³  λ‹€μ–‘ν•œ μΆ”μ²œμ„ ν•˜λŠ” 방법을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Web4rec은 μΆ”μ²œμ˜ μ§ˆμ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ„λ‘ λͺ¨λΈ 평가 및 뢄석을 λ•λŠ” μ‹€ν—˜ 관리 νŽ˜μ΄μ§€ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

μ‚¬μš©μžλŠ” μžμ‹ μ˜ μ‹€ν—˜ κ²°κ³Όλ₯Ό Web4Rec 라이브러리λ₯Ό 톡해 μ›ΉνŽ˜μ΄μ§€μ— μ—…λ‘œλ“œ ν•  수 있고, μ›ΉνŽ˜μ΄μ§€μ—μ„œ 더 쒋은 μΆ”μ²œ κ²°κ³Όλ₯Ό μ°Ύμ•„λ‚Ό 수 μžˆλ„λ‘ 닀각적 뢄석을 제곡 ν•©λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈλŠ” μ‹€μ œ μ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ λ”μš± λ‹€μ–‘ν•˜κ³  질 쒋은 μΆ”μ²œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ μΆ”μ²œ 엔진을 κ°œμ„ ν•˜κ³  싢은 λ¨Έμ‹ λŸ¬λ‹ / λ”₯λŸ¬λ‹ μ—”μ§€λ‹ˆμ–΄λ“€ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

https://user-images.githubusercontent.com/67850665/217743179-edc8c461-d087-403b-a623-f08e3410b064.png

아킀텍쳐

ABDEA111-C050-4976-A9C3-C63929A8240F

Web4Rec μ„€μΉ˜ 방법

git clone https://github.com/boostcampaitech4lv23recsys2/final-project-level2-recsys-11.git**.com/boostcampaitech4lv23recsys2/final-project-level2-recsys-11.git**

Web4Rec 라이브러리 μ‚¬μš©λ²•

from web4rec import Web4Rec, Web4RecDataset

Web4Rec.login(token='...') # νšŒμ›κ°€μž…μ‹œ μ œκ³΅λ˜λŠ” API ν‚€

  1. Web4Rec λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 파이썬 슀크립트 μƒμ—μ„œ API ν‚€λ‘œ 둜그인이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
w4r_dataset = Web4RecDataset(dataset_name='ml-1m')

# pd.DataFrame ν˜•νƒœμ˜ input
w4r_dataset.add_train_interaction(train_interaction)
w4r_dataset.add_ground_truth(ground_truth)
w4r_dataset.add_user_side(user_side)
w4r_dataset.add_item_side(item_side)

Web4Rec.register_dataset(w4r_dataset)

  1. Web4RecDataset 은 Web4Rec 자체 데이터셋 관리 클래슀 μž…λ‹ˆλ‹€.
  • λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ pandas Dataframe 을 μ€€λΉ„ν•˜μ—¬ add λ©€λ²„ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
# ν•™μŠ΅ 진행 ν›„ prediction score matrix ꡬ성
prediction_matrix = pd.DataFrame(
    data = user_item_prediction_score_matrix,
    index = user_ids,
    columns = item_ids
)

Web4Rec.upload_experiment(
    experiment_name='BPR-MF',
    hyper_parameters={
        'negative_sampler' = 'popularity',
        'embedding_size' = 16
    },
    prediction_matrix = prediction_matrix
)

μœ μ˜ν•  점

Web4Rec μ •μ˜ν•˜λŠ” μ •λŸ‰ / μ •μ„± μ§€ν‘œμ™€ 차이점

μ •λŸ‰ μ§€ν‘œλž€ Recall@KNDCG@KMAP@K λ“± μ˜ˆμΈ‘ν•œ μ•„μ΄ν…œκ³Ό μ‹€μ œ μ •λ‹΅μœΌλ‘œ κ³„μ‚°λœ μ§€ν‘œλ‘œ, μ‰½κ²Œ 말해 μΆ”μ²œ λͺ¨λΈμ΄ μ–Όλ§ˆλ‚˜ 잘 λ§žν˜”λŠ”μ§€ 정확도λ₯Ό μ˜λ―Έν•˜λŠ” μ§€ν‘œμž…λ‹ˆλ‹€.

μ •μ„± μ§€ν‘œλž€ DiversitySerendipityNovelty와 같은 μ§€ν‘œλ‘œ, μ˜ˆμΈ‘ν•œ μ•„μ΄ν…œ ν˜Ήμ€ μΆ”μ²œλœ μ•„μ΄ν…œ λ¦¬μŠ€νŠΈκ°€ μ–Όλ§ˆλ‚˜ μ°Έμ‹ ν•˜κ³  λ‹€μ–‘ν•œ, μƒˆλ‘œμš΄ μ•„μ΄ν…œμ„ κ°–κ³  μžˆλŠ”μ§€ μ˜λ―Έν•˜λŠ” μ§€ν‘œμž…λ‹ˆλ‹€.

Web4Rec μ›ΉνŽ˜μ΄μ§€ κΈ°λŠ₯ μ†Œκ°œ

https://user-images.githubusercontent.com/67850665/217743460-d171db7a-92be-4bca-b2e2-5c854a3b354a.png

1.μ‹€ν—˜λΉ„κ΅

  • μ›ΉνŽ˜μ΄μ§€μ—μ„œλŠ” μ‹€ν—˜λ“€μ„ 각각의 ν•˜μ΄νΌνŒŒλΌλ―Έν„°, μ •λŸ‰ / μ •μ„± μ§€ν‘œ κ°’λ“€κ³Ό ν•¨κ»˜ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ” (Compare Table)κ³Ό λ‹€μ–‘ν•œ κ·Έλž˜ν”„λ‘œ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€ (Model vs. Model).
  • 각 ν…Œμ΄λΈ”κ³Ό κ·Έλž˜ν”„λŠ” λͺ¨λ‘ interactiveν•˜κ²Œ μ‚΄νŽ΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. (*Plotly, AgGrid*)
    • μ‚¬μš©μžκ°€ μžμ‹ μ—κ²Œ 맞게 세뢀적인 μ‹œκ°ν™”κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

https://user-images.githubusercontent.com/67850665/217743556-14050e4c-e88b-49e3-9808-7f6aa31e89fa.png

https://user-images.githubusercontent.com/67850665/217743616-25de35af-1dab-4108-98c1-78affed541d1.png

2.λ¦¬λž­ν‚Ή

λ¦¬λž­ν‚Ή μ „λž΅

  • μΆ”μ²œ λͺ¨λΈμ˜ Top K 후보ꡰ을 μ •μ„± μ§€ν‘œλ₯Ό ν™œμš©ν•΄ κΈ°μ‘΄ ranking에 λ³€ν™”λ₯Ό μ£ΌλŠ” κΈ°λ²•μž…λ‹ˆλ‹€.
  • μ‚¬μš©μžλŠ” λ¦¬λž­ν‚Ή 기법을 톡해 μΆ”μ²œ λͺ¨λΈμ˜ 정확도와 μ •μ„± μ§€ν‘œμ˜ νŠΈλ ˆμ΄λ“œ μ˜€ν”„λ₯Ό κ³ λ €ν•œ μΆ”μ²œμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ΄λŠ” μΆ”μ²œμ˜ μ§ˆμ„ λ†’μž„μœΌλ‘œμ¨ μ •ν™•λ„λ§Œμ„ μ΅œμ ν™”ν•˜λŠ” λͺ¨λΈμ˜ ν•œκ³„λ₯Ό 보완할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. 사후 뢄석

image

μ„€λͺ… κ°€λŠ₯ν•œ μΆ”μ²œ

  • λͺ¨λΈμ˜ μΆ”μ²œ κ²°κ³Όλ₯Ό μ§κ΄€μ μœΌλ‘œ 해석할 수 μžˆλŠ” λ‹€μ–‘ν•œ μ‹œκ°ν™”λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • μ‚¬μ΄λ“œ 정보 ν˜Ήμ€ 2μ°¨μ›μœΌλ‘œ μΆ•μ†Œλœ μž„λ² λ”© κ·Έλž˜ν”„λ₯Ό 톡해 μ›ν•˜λŠ” μœ μ € / μ•„μ΄ν…œ ꡰ집을 μ„ νƒν•˜μ—¬ 뢄석을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„ νƒλœ μœ μ € / μ•„μ΄ν…œ ꡰ집에 λŒ€ν•œ λ‹€μ–‘ν•œ μ‹œκ°ν™”λ₯Ό 톡해 μΆ”μ²œ μ΄μœ μ™€ κ΄€λ ¨λœ 직관적인 뢄석이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • E.g. ν•œ μ•„μ΄ν…œμ— λŒ€ν•΄ μƒν˜Έμž‘μš© 이λ ₯이 μžˆλŠ” μœ μ €μ™€ ν•΄λ‹Ή μ•„μ΄ν…œμ„ μΆ”μ²œλ°›μ€ μœ μ € κ°„μ˜ μ‚¬μ΄λ“œ 정보 μ‹œκ°ν™”

image

image

λ¦¬λž­ν‚Ήμ„ ν†΅ν•œ 심화 뢄석

  • μ›ν•˜λŠ” μœ μ € ꡰ집을 μ„ νƒν•œ ν›„ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•œ λ¦¬λž­ν‚Ήμ„ 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κΈ°μ‘΄ μΆ”μ²œλ¦¬μŠ€νŠΈμ™€ λ¦¬λž­ν‚Ήμ„ 톡해 λ‚˜μ˜¨ μΆ”μ²œλ¦¬μŠ€νŠΈ κ°„ 비ꡐλ₯Ό 톡해 효과적인 λ¦¬λž­ν‚Ή μ „λž΅μ„ ꡬ상할 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒ€μ› μ†Œκ°œ

κ°•μˆ˜ν—Œ 김동건 백승렬 μ–‘μ„±ν›ˆ μœ μƒμ€€
- μ„œλΈŒ PM
- ν”„λ‘ νŠΈμ—”λ“œ 리더
- λ°±μ—”λ“œ
- λ¦¬μ„œμ²˜
- 핡심 μ§€ν‘œ μ •μ˜ 및 κ΅¬ν˜„
- 데이터 사후 뢄석
- ν”„λ‘ νŠΈμ—”λ“œ
- λ°±μ—”λ“œ 리더
- λ°μ΄ν„°λ² μ΄μŠ€
- ν”„λ‘ νŠΈμ—”λ“œ
- PM
- 라이브러리 κ΅¬ν˜„
- λͺ©μ—… λͺ¨λΈλ§
- λ°μ΄ν„°λ² μ΄μŠ€
- λ¦¬μ„œμ²˜
- 핡심 μ§€ν‘œ μ •μ˜ 및 κ΅¬ν˜„
- 데이터 μ‹œκ°ν™”
- ν”„λ‘ νŠΈμ—”λ“œ