~์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฅ~
1. ์ฌ์ฉ์ ๊ธฐ๋ฐ ํ์
ํํฐ๋ง (User-Based Collaborative Filtering)
- ํน์ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์๋ค๊ณผ ์ผ๋ง๋ ์ ์ฌํ์ง๋ฅผ ์ธก์ ํ๊ณ , ์ ์ฌํ ์ฌ์ฉ์๋ค์ด ์ ํธํ๋ ์ฌํ์ง๋ฅผ ์ถ์ฒํ๋ ๋ฐฉ์.
- ์ฅ์ : ๋จ์ํ ๋ก์ง์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ํจ๊ณผ์ .
- ๋จ์ : ์๋ก์ด ์ฌ์ฉ์๊ฐ ๋ค์ด์ค๋ฉด ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ธฐ ์ด๋ ต๊ณ , ์ถ์ฒ์ด ์ ํํ์ง ์์ ์ ์์. (์ฝ๋ ์คํํธ ๋ฌธ์ )
์์
- A์ B๊ฐ ๋น์ทํ ์ฌํ์ง๋ฅผ ์ข์ํ๋ ๊ฒฝ์ฐ, B๊ฐ ์ข์ํ๋ ์ฌํ์ง๋ฅผ A์๊ฒ ์ถ์ฒ.
์ ์ฌ๋ ๊ณ์ฐ ๋ฐฉ๋ฒ
- ์ฝ์ฌ์ธ ์ ์ฌ๋ (Cosine Similarity)
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
# ์์ ์ฌ์ฉ์-์ฌํ์ง ์ ํธ๋ ๋ฐ์ดํฐ (์ฌ์ฉ์๊ฐ ์ฌํ์ง์ ๋ํ ์ ์๋ฅผ ๋งค๊ธด ๊ฒฝ์ฐ)
data = {
'User1': [5, 0, 3, 4],
'User2': [4, 0, 4, 3],
'User3': [2, 3, 0, 5]
}
df = pd.DataFrame(data, index=['Seoul', 'Busan', 'Jeju', 'Incheon'])
# ์ ์ฌ๋ ๊ณ์ฐ (์ฌ์ฉ์ ๊ธฐ์ค)
cosine_sim = cosine_similarity(df.T)
# ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
cosine_sim_df = pd.DataFrame(cosine_sim, index=df.columns, columns=df.columns)
print(cosine_sim_df)
- ํผ์ด์จ ์๊ด๊ณ์ (Pearson Correlation)
# ํผ์ด์จ ์๊ด๊ณ์ ๊ณ์ฐ
pearson_corr = df.corr(method='pearson')
print(pearson_corr)
2. ์์ดํ
๊ธฐ๋ฐ ํ์
ํํฐ๋ง (Item-Based Collaborative Filtering)
- ์ฌ์ฉ์๊ฐ ์ข์ํ๋ ์ฌํ์ง์ ๋น์ทํ ์ฌํ์ง๋ฅผ ์ฐพ์ ์ถ์ฒํ๋ ๋ฐฉ์.
- ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ๋ถ์กฑํด๋ ์ฌํ์ง ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ์ฌ ์ถ์ฒ ๊ฐ๋ฅ.
- ์ฅ์ : ์๋ก์ด ์ฌ์ฉ์๊ฐ ์๋ ๊ธฐ์กด ์ฌํ์ง ๋ฐ์ดํฐ๋ง ์์ผ๋ฉด ์ถ์ฒ์ด ๊ฐ๋ฅํจ.
- ๋จ์ : ์ฌํ์ง ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์.
์์
- ์ฌ์ฉ์๊ฐ ์ ์ฃผ๋๋ฅผ ์ข์ํ๋ฉด, ์ ์ฃผ๋์ ์ ์ฌํ ์ฌํ์ง๋ฅผ ์ถ์ฒ.
์ ์ฌ๋ ๊ณ์ฐ ๋ฐฉ๋ฒ
- ์ฝ์ฌ์ธ ์ ์ฌ๋ (Cosine Similarity)
- ํ์
ํํฐ๋ง ๊ธฐ๋ฐ ์ฐ๊ด์ฑ ๊ณ์ฐ
# ์์ดํ
(์ฌํ์ง) ๊ฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
cosine_sim_items = cosine_similarity(df)
# ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
cosine_sim_items_df = pd.DataFrame(cosine_sim_items, index=df.index, columns=df.index)
print(cosine_sim_items_df)
3. ํ๋ ฌ ๋ถํด (Matrix Factorization) - SVD, ALS
- ์ฌ์ฉ์์ ์ ํธ๋๋ฅผ ํ๋ ฌ๋ก ํํํ๊ณ , ์ด๋ฅผ ๋ถํดํ์ฌ ์จ๊ฒจ์ง ๊ด๊ณ๋ฅผ ์ฐพ์๋ด๋ ๋ฐฉ์.
- ์ฅ์ : ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๊ฐ๋ ฅํ๋ฉฐ, ์ถ์ฒ์ ์ ํ๋๊ฐ ๋์.
- ๋จ์ : ์ฐ์ฐ๋์ด ๋ง๊ณ , ํด์์ด ์ด๋ ค์ธ ์ ์์.
์์
- Netflix์์ ์ํ ์ถ์ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ์.
- ์ฌ์ฉ์๊ฐ ์ง์ ํ๊ฐํ ๋ฐ์ดํฐ(์: ํ์ , ๋ฆฌ๋ทฐ)๋ฅผ ํ์ฉํ์ฌ ์ถ์ฒ ๊ฐ๋ฅ.
4. ๋ฅ๋ฌ๋ ๊ธฐ๋ฐ ์ถ์ฒ (Neural Collaborative Filtering, Autoencoder)
- ํ์
ํํฐ๋ง์ ๋ฅ๋ฌ๋์ผ๋ก ํ์ฅํ ๋ฐฉ์.
- ์ฌ์ฉ์์ ์ฌํ ํจํด์ ํ์ตํ๊ณ , ๋ค์ํ ์์ธ์ ๋ฐ์ํ์ฌ ์ถ์ฒ ๊ฐ๋ฅ.
- ์ฅ์ : ๋ณต์กํ ๊ด๊ณ๋ฅผ ํ์ตํ ์ ์์ด ์ถ์ฒ์ ์ง์ด ๋์.
- ๋จ์ : ํ์ต์ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ง์์ผ ํ๊ณ , ์ฐ์ฐ ๋น์ฉ์ด ํผ.
์์
- ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ ๋ฉํ์ฌ ์ ์ฌํ ํจํด์ ํ์ต.
- Autoencoder๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ์ ์ฐจ์์ ์ถ์ํ๊ณ ์ถ์ฒ.
๐ฅ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๊ฐ์ด๋
์ฌ์ฉ ์ํฉ |
์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ |
์ฌ์ฉ์ ๊ฐ ์ ์ฌํ ์ทจํฅ์ ํ์ฉํ๊ณ ์ถ์ |
์ฌ์ฉ์ ๊ธฐ๋ฐ ํ์
ํํฐ๋ง |
ํน์ ์ฌํ์ง์ ์ ์ฌํ ์ฌํ์ง๋ฅผ ์ถ์ฒํ๊ณ ์ถ์ |
์์ดํ
๊ธฐ๋ฐ ํ์
ํํฐ๋ง |
๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ฉด์ ์จ๊ฒจ์ง ํจํด์ ์ฐพ๊ณ ์ถ์ |
ํ๋ ฌ ๋ถํด (SVD, ALS) |
AI๋ฅผ ํ์ฉํ ๊ฐ๋ ฅํ ์ถ์ฒ ์์คํ
์ด ํ์ํจ |
๋ฅ๋ฌ๋ ๊ธฐ๋ฐ ์ถ์ฒ (NCF, Autoencoder) |
๐ Django + Streamlit์์ ๊ตฌํํ๋ ค๋ฉด?
- Pandas + Scikit-Learn: ๊ฐ๋จํ ํ์
ํํฐ๋ง ๋ฐ ์ ์ฌ๋ ๊ณ์ฐ
- Surprise ๋ผ์ด๋ธ๋ฌ๋ฆฌ: SVD, ALS ๊ธฐ๋ฐ์ ์ถ์ฒ ๊ตฌํ ๊ฐ๋ฅ
- TensorFlow/Keras: ๋ฅ๋ฌ๋ ๊ธฐ๋ฐ ์ถ์ฒ ์์คํ
๊ตฌ์ถ
- FAISS: ๋๊ท๋ชจ ๋ฐ์ดํฐ์์ ๋น ๋ฅด๊ฒ ์ ์ฌ๋ ๊ฒ์