Membuat Recomendation Engine, mengunakan faktorisasi matriks, untuk data implicit (Part 1)

Hafizhan Aliady Afif
7 min readNov 4, 2019

--

Matrix Factorization, Menggunakan Optimasi ALS (Alternating Least Square) untuk merekomendasikan Produk Belanjaan

Create Recommendation Engine Using Matrix Factorization, ALS (Alternating Least Square) Optimization for Retail Product

Asalamualikum Wr, Wb

Jadi, Sesungguhnya story ini sudah direncanain sejak lama, karena recomendation merupakan salah satu proyek yang digarap di tempat kerja yang sekarang. Jadi daripada ide ini hangus dan medium ini juga kurang update, jadi mari kita bikin aja tulisannya, ya sekalian biar saya itdak lupa lupa

Outline dalam Story ini:

  • Tentang data yang digunakan
  • Dataset dan Studi kasus
  • Perkenalan singkat dengan Faktorisasi matriks
  • Perkenalan dengan Alternating Least Square (ALS)
  • Code 1 : Load, dan membersihkan data
  • Code 2 : Transformasi varabel
  • Code 3 : Membuat Sparse matriks

Explicit dan Implicit Data

Berdasarkan pengalaman saya, dalam dunia perekomendasian biasanaya data yang tersedia ada 2 jenis, yaitu data berupa rating yaitu seberapa suka orang tersebut terhadap suatu produk, dan data transaksi yaitu seberapa sering orang itu membeli suatu produk atau barang atau jasa.

Explicit Rating, adalah data yang berupa rating dari sebuah produk, seperti misalnya kalian naik Ojek Online (Ojol), Kalian memberi rating pada driver, biasnaya 1 sampai 5 bintang, atau misalnya kalian belanja di BukaToko, setelah barangnya sampai, kalian diminta buat review tuh, sama barangnya, kalo kalian suka pastilah auto bintang 5, kalo misalnya agak kurang tapi okelah biasnya bintang 4, nah terus kalo bintang 1–3 biasanya udh kecewa dan biasanya ada komplain nih. Nah, rating ini biasanya disebut sebagai explicit rating, ya sesuai dengan definisi dari Explicit itu

(src: google.com)

Jadi ya dia menerangkan dengan jelas data rating ini menjelaskan suka atau tidak terhadap suatu produk.

Implicit Rating, merupakan sebuah data dimana biasanya kita dapatkan dari transaksi sebuah user misalnya, kita booking hotel di tiket.com atau kita mendengarkan musik di spopipiy, kita kan tidak memberikan rating pada lagu tersebut, tapi mereka bisa memberikan rekomendasi yang cocok buat kita. atau misalnya disini, kita membaca sebuah artikel berapa lama sih ? jika kita membaca artikel cukup lama, maka dapat diartikan sebagai kita menyukai artikel tersebut.

Nah, data seperti ini disebut sebagai data implicit, sehingga kita dapat menyebut bahwa seseorang lebih menyukai sebuah lagu yang diputarnya sebanyak 100 kali dibandingkan dengan lagu yang hanya diputarnya sebanyak 1 kali.

Dataset yang digunakan

Data yang digunakan merupakan data transaksi pada sebuah supermarket disebuah negara, dimana data ini diambil diantara tanggal 01/12/2010 hingga 09/12/2011

Dataset dapat diunduh di:
https://www.kaggle.com/jihyeseo/online-retail-data-set-from-uci-ml-repo

Variabel yang tersedia pada data tersebut adalah:

Attribute Information:InvoiceNo: Invoice number. Nominal, a 6-digit integral number uniquely assigned to each transaction. If this code starts with letter 'c', it indicates a cancellation.
StockCode: Product (item) code. Nominal, a 5-digit integral number uniquely assigned to each distinct product.
Description: Product (item) name. Nominal.
Quantity: The quantities of each product (item) per transaction. Numeric.
InvoiceDate: Invice Date and time. Numeric, the day and time when each transaction was generated.
UnitPrice: Unit price. Numeric, Product price per unit in sterling.
CustomerID: Customer number. Nominal, a 5-digit integral number uniquely assigned to each customer.
Country: Country name. Nominal, the name of the country where each customer resides.

Setelah mengetahui datanya, tugas kita adalah membuat sebuah rekomendasi barang — barang yang bisa dibeli oleh masing- masing customers, Sehingga bisa memberikan saran berang apa yang selanjutnya bisa dibeli oleh customers.

Tentang Metode Yang digunakan, Faktorisasi Matriks (Matrix Factorization)

Faktorisasi Matriks, merukapakan salah satu metode untuk memfaktorkan sebuah matriks yang besar menjadi matriks yang lebih kecil, yang mewakili matriks original.

Contohnya adalah seperti diatas Rating Matrix bisa direpresentasikan oleh matriks User Matrix dikalikan dengan Item Matrix. Sehingga pada gambar diatas dapat dibaca User Matrix memiliki 2 faktor yang dapat merepresentasikan rating matriks yang dikalikan dengan Item Matriks.

Nah, disini kita berusaha memperkirakan berapa faktor-faktor yang dimiliki oleh masing-masing matriks, mendekati sedekat mungkin dengan nilai asli.

Matriks ini yang akan kita cari

Metode Optimasi yang digunakan, ALS

ALS merupakan sebuah proses optimasi dimana pada setiap iterasi kita mencoba mendekati dan semakin mendekati kepada faktor yang merepresentasikan data original. atau biasa dikenal sebagai metode kuadrat terkecil.

Dalam prosesnya kita diharuskan mencari 2 buah matriks yaitu:

  • Matriks user x factor ,
    dengan ukuran matriks (banyak user) x (banyak faktor)
  • Matriks item x factor,
    dengan ukuran matriks (banyak items) x (banyak faktor)

Berdasarkan matriks interaksi R, Matriks interaksi antara user dengan items atau bisa digambarkan sebagai berikut:

Dimana R merupakan matriks interaksi antara user dengan items, U merupakan matriks antara user dengan faktor , dan kemudian V merupakan matriks antara items dengan faktor, kemudian tugas kita adalah mencari faktor2 yang ada di matriks U dan V. sehingga dot product dari kedua matriks tersebut mendekati matriks R sehingga : R ≈ U x V.

Langkah pertama yang dilakukan adalah dengan memberikan masing-masing matriks U dan V sebuah nilai acak / random. dan kemudian menggunakan metode kuadrat terkecil untuk mencapai bobot yang dapat memperkirakan nilai pada matriks R dengan baik.

Pendekatan kuadrat terkecil dalam pada dasarnya berarti membuat beberapa garis linear pada data, kemudian mengukur sum of squared dari semua titik ke garis dan berusaha untuk mendapatkan nilai yang optimal dengan meminimalkan nilai ini.

Dengan metode pendekatan alternating least squares(Kuadrat terkecil alternatif ) kita menggunakan konsep yang sama, namun kita melakukan optimasi pada matriks U dan kemudian memperbaiki matriks V dan sebaliknya. Pada setiap iterasi, untuk mendekati R = U x V.

Tujuannya adalah menemukan Vektor dimensi dari setiap user (xu) and item (yi), dimana kita menggunakan loss function berikut untuk meminimalkan nilai loss.

Setelah mendapatkan nilai optimal dari masing-masing faktor, selanjutnya adalah membuat perhitungan untuk mencari user mana atau item mana yang bisa dijadikan rekomendasi

Mencari itemSimilar

Cara mencari item similar adalah dengan cara melakukan dot product terhadap matriks item_factor dan transpose(item_factor), atau bisa dilihat seperti berikut.

Membuat Rekomendasi

Kemudian adalah untuk mencari nilai rekomendasi adalah dengan cara melakukan dot product juga dari matriks User_factor dengan transpose(Item_factor)

Masuk ke Code! Watch out with your hends!

Hal. yang pertama dilakukan adalah membaca datanya, disini cukup lama untuk membaca data excel.

Code diatas adalah menghilangkan data yang null dan mengubah tipe variabel agar seragam. misalnya:

  • Customers id menjadi tipe int64 (integer)
  • InvoceNo menjadi STR (string)
  • StockCode menjadi STR (string)

Lalu jika code diatas berhasil maka akan mengeluarkan hasil seperti berikut.

Lalu langkah selanjutnya adalah membersihkan data kemudian memilih variabel-variabel yang akan digunakan.

Pada kode diatas, perintah meniadakan data yang Quantity nya kurang dari 0, dan stock kode nya “M”(Manual).

Kemudian df_user_item merupakan dataframe yang memiliki 3 variabel yaitu:

  • CustomersID,
  • Item Description,
  • dan Quantity.

Data tersebut akan digunakan untuk faktorisasi matriks

Setelah kita mendapatkan bentuk data yang kita inginkan selanjutnya adalah df_user_item dilakukan penghitungan jumlah kuantitas barang berdasarkan Customers_id dan Item_description. Lalu hasil akhir dari data ini adalah seperti berikut.

Pada gambar diatas menunjukan bahwa customersID 12347 membeli “MEDIUM CERAMIC TOP STORAGE JAR” sebanyak 74215 buah. Ini bisa dipastikan bahwa seluruh data sudah terjumlah berdasarkan customersID dan berdasarkan item_description.

Membuat Sparse matriks

Apa itu sparse matriks ? sparse matriks adalah sebuah matriks yang mana angka dominannya adalah angka 0, gambarannya adalah seperti matriks dibawah ini.

Pada langkah pembuatannya adalah kita harus melakukan encoding terhadap user_id dan item_id sehingga user_id memiliki nilai dari 1 sampai n banyaknya unique user, dan item_id memiliki nilai dari 1 sampai n banyaknya jenis barang. kemudian langkah pertamanya adalah seperti berikut.

Enkoding Customers_ID dan Description

Setelah langkah diatas adalah melakukan pengkodean data yang unik dari 1 sampai dengan n banyaknya data, maka scriptnya adalah seperti berikut

dan hasilnya akan seperti ini

Bisa dilihat pada tabel sebelah kanan user_id dan barang_id, merupakan barang yang sudah diberi kode sehingga dapat dikenali dalam dimensi matriks.

Membuat Sparse matriks

Langkah selanjutnya adalah membuat sparse matriks dimana sparse matriks ini akan digunakan untuk dimasukan kedalam Machine Learning. Sehingga langkah ini sangat penting dilakukan.

Kemudian hasil akhirnya akan seperti ini

Loh kok matriksnya 0 semua ? Ya benar begitu memang karena tujuannya adalah kita memprediksi nilai nilai 0 tersebut, berdasarkan interaksi user lainnya kepada item tersebut. Sehingga kita mendapatkan nilai pada matriks tersebut.

Melihat Tingkat Kekosongan dari matriks

Dan dari data yang digunakan sekarang, tingkat kekosongan matriksnya adalah 98.40% .

For collaborative filtering to work, the maximum sparsity you could get away with would probably be about 99.5% or so. We are well below this, so we should be able to get decent results. [4]

Yang berarti data yang kita gunakan ini aman untuk digunakan dalam Collaborative filtering.

Pada proses selanjutnya adalah Melakukan Training data, sehingga akan terbentuk matriks yang telah terfaktorisasi. See u on part2!

--

--