Matrix Factorization adalah teknik dalam linear algebra dan machine learning yang bertujuan memecah (memfaktorkan) sebuah matriks besar menjadi beberapa matriks yang lebih kecil sehingga:
-
Struktur tersembunyi (latent structure) pada data dapat ditemukan
-
Data menjadi lebih mudah dianalisis dan diprediksi
-
Masalah sparsity (banyak nilai kosong) dapat diatasi
Dalam sistem rekomendasi, Matrix Factorization digunakan untuk menangkap preferensi tersembunyi pengguna dan karakteristik produk.
Intuisi Sederhana
Bayangkan:
-
Pengguna tidak secara langsung mengatakan “Saya suka laptop karena ringan dan baterai awet”
-
Namun dari pola pembelian, model belajar bahwa:
-
User A suka produk ringan
-
User B suka produk murah
-
User C suka produk premium
-
Faktor seperti ringan, murah, premium ini tidak terlihat langsung di data — inilah yang disebut latent factors.
Matrix Factorization bertugas menemukan faktor-faktor tersembunyi tersebut secara otomatis.
Bentuk Matematis Dasar
Misalkan kita punya:
-
RR → matriks user–item (rating, klik, pembelian)
-
Ukuran:
R∈Rm×nR \in \mathbb{R}^{m \times n}
(m user, n item)
Matrix Factorization mencoba mendekati:
R≈P×QTR \approx P \times Q^T
dengan:
-
P∈Rm×kP \in \mathbb{R}^{m \times k} → matriks user latent factors
-
Q∈Rn×kQ \in \mathbb{R}^{n \times k} → matriks item latent factors
-
kk → jumlah dimensi faktor laten (biasanya kecil: 10–100)
Makna Setiap Matriks
Matriks R (User–Item Matrix)
Berisi interaksi:
-
Rating (1–5)
-
Jumlah pembelian
-
Klik / view
Masalah utama:
-
Sangat sparse (banyak kosong)
-
Ukurannya sangat besar
Matriks P (User Factors)
Setiap baris merepresentasikan:
Preferensi tersembunyi seorang user
Contoh:
User A = [0.9, 0.1, 0.7]
User B = [0.2, 0.8, 0.3]
Matriks Q (Item Factors)
Setiap baris merepresentasikan:
Karakteristik tersembunyi sebuah item
Contoh:
Produk X = [0.8, 0.2, 0.6]
Produk Y = [0.1, 0.9, 0.2]
Cara Kerja Prediksi
Prediksi interaksi user uu dengan item ii:
r^ui=Pu⋅Qi\hat{r}_{ui} = P_u \cdot Q_i
(hasil dot product)
➡ Jika vektor user dan item “searah”, maka skor tinggi
➡ Jika tidak cocok, skor rendah
Fungsi Objektif (Loss Function)
Tujuan Matrix Factorization adalah meminimalkan error prediksi:
minP,Q∑(u,i)∈R(rui−PuQiT)2+λ(∣∣P∣∣2+∣∣Q∣∣2)\min_{P,Q} \sum_{(u,i)\in R} (r_{ui} – P_u Q_i^T)^2 + \lambda (||P||^2 + ||Q||^2)
Penjelasan:
-
Bagian pertama → error prediksi
-
Bagian kedua → regularisasi (mencegah overfitting)
-
λ\lambda → parameter regularisasi
Cara Melatih Model
1. Stochastic Gradient Descent (SGD)
-
Update P dan Q sedikit demi sedikit
-
Cepat dan fleksibel
2. Alternating Least Squares (ALS)
-
Update P, lalu Q secara bergantian
-
Cocok untuk big data & paralel
Jenis Matrix Factorization
| Jenis | Penjelasan |
|---|---|
| SVD | MF paling populer |
| NMF | Semua nilai ≥ 0 |
| Probabilistic MF | Pendekatan probabilistik |
| Implicit MF | Untuk klik/pembelian |
| Neural MF | MF + deep learning |
Kelebihan Matrix Factorization
✅ Efektif untuk data besar & sparse
✅ Menangkap pola kompleks
✅ Skalabel
✅ Lebih akurat dibanding memory-based CF
Keterbatasan
❌ Cold start (user/item baru)
❌ Sulit diinterpretasikan
❌ Butuh tuning hyperparameter
Kasus: Rekomendasi Produk E-Commerce
Misalnya:
-
Setiap baris = 1 pengguna
-
Setiap kolom = 1 produk
-
Nilai = jumlah pembelian/rating/klik
Contoh matrix:
| Prod A | Prod B | Prod C | |
|---|---|---|---|
| User1 | 1 | ? | 0 |
| User2 | 0 | 1 | 1 |
| User3 | 1 | 0 | ? |
Tanda ? adalah yang ingin kita prediksi.
3. Langkah Umum
-
Siapkan data
-
Data implicit: pembelian, klik, view time
-
Data explicit: rating
-
-
Bentuk user-item matrix
-
Normalisasi / scaling (opsional)
-
Faktorisasi matrix
-
Latent features = jumlah dimensi tersembunyi (misal: 10).
-
-
Optimisasi
-
SGD (Stochastic Gradient Descent) atau ALS (Alternating Least Squares)
-
-
Prediksi & rekomendasi
-
Hitung score prediksi semua produk yang belum dibeli
-
Sortir dari skor tertinggi
-
4. Contoh Kode Python (dengan surprise library)
Instal dulu:
pip install scikit-surprise
Kemudian:
from surprise import Dataset, Reader, SVD
from surprise.model_selection import train_test_split
from surprise import accuracy
# 1) Load data
# Format: user, item, rating
ratings = [
(‘U1’, ‘P1’, 1),
(‘U1’, ‘P3’, 0),
(‘U2’, ‘P2’, 1),
(‘U2’, ‘P3’, 1),
(‘U3’, ‘P1’, 1),
(‘U3’, ‘P2’, 0),
]
reader = Reader(rating_scale=(0,1))
data = Dataset.load_from_df(pd.DataFrame(ratings, columns=[‘user’,’item’,’rating’]), reader)
# 2) Split train/test
train, test = train_test_split(data, test_size=0.25)
# 3) Train SVD (Matrix Factorization)
model = SVD(n_factors=10, lr_all=0.005, reg_all=0.02)
model.fit(train)
# 4) Evaluate
predictions = model.test(test)
print(“RMSE:”, accuracy.rmse(predictions))
# 5) Prediksi rating: user U1 untuk item P2
pred = model.predict(‘U1’, ‘P2’)
print(“Prediksi rating U1 ke P2:”, pred.est)
5. Rekomendasi Produk untuk Setiap User
Setelah model terlatih:
def rekomendasi(model, user_id, semua_produk, n=5):
scores = []
for item in semua_produk:
pred = model.predict(user_id, item).est
scores.append((item, pred))
scores.sort(key=lambda x: x[1], reverse=True)
return scores[:n]
produk = [‘P1′,’P2′,’P3′,’P4′,’P5’]
print(rekomendasi(model, ‘U1’, produk, n=3))
6. Variasi yang Sering Dipakai
| Metode | Kelebihan |
|---|---|
| SVD (Singular Value Decomposition) | Paling populer, cepat |
| ALS (Alternating Least Squares) | Bagus untuk data sparse besar |
| Implicit MF | Mengakomodasi data implicit (klik/pembelian) |
| Neural Matrix Factorization | Model lebih kompleks & powerful |
| Hybrid (content + MF) | Menggabungkan fitur produk |
7. Tips Praktis
✅ Normalisasi rating
✅ Perhatikan cold start (produk baru/user baru)
✅ Gunakan implicit feedback jika tidak ada rating eksplisit
✅ Gunakan regularisasi untuk menghindari overfitting
8. Tools / Libraries yang Bisa Dipakai
| Library | Keterangan |
|---|---|
surprise |
Simple & efektif |
implicit |
Fokus implicit feedback |
LightFM |
Hybrid (content + collaborative) |
| TensorFlow/PyTorch | Neural MF |
Matrix Factorization merupakan metode yang sangat penting dalam pengembangan sistem rekomendasi modern, khususnya pada platform e-commerce. Dengan memecah matriks interaksi pengguna dan produk menjadi faktor-faktor laten, metode ini mampu menangkap pola preferensi tersembunyi yang tidak terlihat secara langsung dalam data. Hal ini memungkinkan sistem untuk memberikan rekomendasi yang lebih akurat dan personal kepada setiap pengguna.
Meskipun Matrix Factorization memiliki keterbatasan, seperti permasalahan cold start dan kebutuhan tuning parameter, keunggulannya dalam menangani data berskala besar dan bersifat sparse menjadikannya tetap relevan dan banyak digunakan hingga saat ini. Dengan pemilihan algoritma yang tepat serta kombinasi dengan metode lain, Matrix Factorization dapat menjadi fondasi yang kuat dalam membangun sistem rekomendasi yang efektif dan efisien.
Dengan demikian, pemahaman yang baik mengenai konsep dan penerapan Matrix Factorization sangat penting bagi pengembang dan peneliti yang ingin meningkatkan kualitas layanan rekomendasi berbasis data.
