Algoritma Slope One

Algoritma Slope One adalah salah satu algoritma yang dapat digunakan untuk memprediksikan sebuah kejadian. Contoh yang dibahas kali ini adalah mengenai penentuan rating sebuah barang berdasarkan data-data yang sudah ada.
Algoritma ini adalah bentuk yang paling mudah dari teknik Collaborative Filtering barang yang berbasis pada rating. Kemudahan ini menyebabkan algoritma ini mudah untuk diterapkan dengan tingkat ketepatan yang tidak kalah dari algoritma dengan perhitungan yang jauh lebih sulit. Dan algoritma ini akhirnya digunakan sebagai dasar untuk pengembangan beberapa algoritma lain.



Diasumsikan ada 12 data barang yang dijual, dengan data sebagai berikut:

Barang
Pensil Pensil 2B Pensil 3B Pensil 4B
Pena Pena Merah Pena Biru Pena Hitam
Penggaris Penggaris 15cm Penggaris 20cm Penggaris 30cm
Buku Buku Tulis Buku Gambar Komik

Contoh data barang adalah sebagai berikut:

Dim barang() As String = New String() {"Pensil 2B", "Pensil 3B", "Pensil 4B", _
									   "Pena Merah", "Pena Biru", "Pena Hitam", _
									   "Penggaris 15cm", "Penggaris 20cm", "Penggaris 30cm", _
									   "Buku Tulis", "Buku Gambar", "Komik"}

Kemudian diketahui terdapat 10 pelanggan yang sudah memberi rating pada beberapa barang yang disukai pelanggan tersebut
Diasumsikan 10 data rating pelanggan tersebut adalah sebagai berikut:
Akan terdapat 12 kolom angka dengan urutan barang sesuai dengan urutan barang diatas
Angka 0 berarti tidak memberikan rating, selain itu berarti memberikan rating

Nama Pelanggan
Pelanggan A 3 3 1 10 3 3 4 10 2 8 0 3
Pelanggan B 8 10 3 3 3 8 2 5 2 3 10 5
Pelanggan C 8 5 4 2 4 4 9 0 9 2 10 5
Pelanggan D 0 5 4 0 1 3 4 4 6 4 9 2
Pelanggan E 3 9 6 2 1 1 1 3 8 7 9 3
Pelanggan F 7 10 7 6 5 0 3 2 4 0 7 3
Pelanggan G 5 0 4 9 5 4 9 0 5 1 0 8
Pelanggan H 1 2 4 4 4 2 10 6 10 0 4 10
Pelanggan I 2 9 4 4 0 1 4 6 1 0 7 7
Pelanggan J 9 0 9 10 6 10 3 0 5 7 9 9

Contoh data rating pelanggan adalah sebagai berikut:

Dim pelanggan(9)() As Integer
pelanggan(0) = New Integer() {3, 3, 1, 10, 3, 3, 4, 10, 2, 8, 0, 3}
pelanggan(1) = New Integer() {8, 10, 3, 3, 3, 8, 2, 5, 2, 3, 10, 5}
pelanggan(2) = New Integer() {8, 5, 4, 2, 4, 4, 9, 0, 9, 2, 10, 5}
pelanggan(3) = New Integer() {0, 5, 4, 0, 1, 3, 4, 4, 6, 4, 9, 2}
pelanggan(4) = New Integer() {3, 9, 6, 2, 1, 1, 1, 3, 8, 7, 9, 3}
pelanggan(5) = New Integer() {7, 10, 7, 6, 5, 0, 3, 2, 4, 0, 7, 3}
pelanggan(6) = New Integer() {5, 0, 4, 9, 5, 4, 9, 0, 5, 1, 0, 8}
pelanggan(7) = New Integer() {1, 2, 4, 4, 4, 2, 10, 6, 10, 0, 4, 10}
pelanggan(8) = New Integer() {2, 9, 4, 4, 0, 1, 4, 6, 1, 0, 7, 7}
pelanggan(9) = New Integer() {9, 0, 9, 10, 6, 10, 3, 0, 5, 7, 9, 9}

Maka tentukan rating barang untuk barang-barang yang belum diberi rating pada pelanggan tertentu (yang bernilai 0 pada data tersebut)

Langkah-langkah penggunaan algoritma ini adalah

1. Masukkan data rating barang semua pelanggan pada semua variabel yang dibutuhkan

Dim ratingPelanggan As New Dictionary(Of Integer, Single)()
For i As Integer = 0 To pelanggan.Length - 1
	ratingPelanggan = New Dictionary(Of Integer, Single)()

	For j As Integer = 0 To pelanggan(i).Length - 1
		If pelanggan(i)(j) <> 0 Then ratingPelanggan.Add(j + 1, pelanggan(i)(j))
	Next

	so.TambahRating(ratingPelanggan)
Next

Memasuki perhitungan pada fungsi TambahRating

1a. Lakukan perhitungan untuk setiap data rating pelanggan (poin 1a1 – 1a2)

For Each item1 As KeyValuePair(Of Integer, Single) In ratingPelanggan
	Dim item1Id As Integer = item1.Key
	Dim item1Rating As Single = item1.Value
. . .

1a1. Simpan indeks barang tersebut

Items.Add(item1Id)

1a2. Lakukan perhitungan untuk setiap data rating pelanggan lainnya (poin 1a2a – 1a2d)

For Each item2 As KeyValuePair(Of Integer, Single) In ratingPelanggan
. . .

1a2a. Jika indeks barang sama, maka lanjutkan perhitungan ke barang lainnya
Karena tidak perlu menyimpan data yang sudah pernah disimpan sebelumnya

If item2.Key <= item1Id Then Continue For

1a2b. Hitung nilai selisih rating antara 2 barang yang dibandingkan

Dim selisihRating As Rating
If DictselisihRating.Contains(item1Id, item2Id) Then
	selisihRating = DictselisihRating(item1Id, item2Id)
Else
	selisihRating = New Rating()
	DictselisihRating(item1Id, item2Id) = selisihRating
End If

1a2c. Simpan nilai selisih barang tersebut

selisihRating.NilaiRating += item1Rating - item2Rating

1a2d. Simpan pula berapa ada berapa banyak pelanggan yang memberi rating untuk kedua barang tersebut

selisihRating.Frekuensi += 1

2. Tentukan pelanggan yang akan dicari rating barangnya

Console.WriteLine("Tentukan pelanggan yang akan dicari rating barangnya (1-10)")
Dim input As Integer = CInt(Console.ReadLine)

3. Cari rating barang untuk barang-barang yang belum diberi rating pada pelanggan tersebut
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim prediksi As IDictionary(Of Integer, Single) = so.HitungPrediksi(r)

Memasuki perhitungan pada fungsi HitungPrediksi

3a. Lakukan perhitungan pada setiap indeks barang yang sudah memiliki rating (poin 3a1 – 3a3)

For Each itemId As Integer In Me.Items
. . .

3a1. Jika barang tersebut sudah memiliki rating, maka lanjutkan ke perhitungan berikutnya

If ratingPelanggan.Keys.Contains(itemId) Then Continue For

3a2. Lakukan perhitungan untuk setiap data rating pelanggan lainnya (poin 3a2a – 3a2b)

For Each item As KeyValuePair(Of Integer, Single) In ratingPelanggan
. . .

3a2a. Jika indeks barang sama, maka lanjutkan perhitungan ke barang lainnya
Karena Tidak perlu menghitung rating barang yang sama

If item.Key = itemId Then Continue For

3a2b. Hitung nilai rating masing-masing barang dengan rumus = frekuensi * selisih rating
Kemudian jumlahkan semua nilai rating ini
Hitung pula frekuensi dengan rumus penjumlahan dari semua frekuensi barang tersebut

If DictselisihRating.Contains(itemId, inputItemId) Then
	Dim selisihRating As Rating = DictselisihRating(itemId, inputItemId)
	itemRating.NilaiRating += selisihRating.Frekuensi * (item.Value + selisihRating.Ratarata * (If((itemId < inputItemId), 1, -1)))
	itemRating.Frekuensi += selisihRating.Frekuensi
End If

3a3. Simpan data prediksi rating untuk masing-masing barang yang belum diberi rating

prediksi.Add(itemId, itemRating.Ratarata)

* Agar dapat menjalankan skrip diatas, maka diperlukan 3 buah Class
Class Rating digunakan untuk menampung data rating dan jumlah frekuensi data tersebut
Class DictSelisihRating digunakan untuk menampung data selisih rating masing-masing barang
Class SlopeOne sebagai class utama untuk menambah rating dan menghitung prediksi
Deklarasi masing-masing class tersebut adalah sebagai berikut:

Public Class Rating
    Private m_nilaiRating As Single
    Private m_frekuensi As Integer

    Public Property NilaiRating() As Single
        Get
            Return m_nilaiRating
        End Get
        Set(value As Single)
            m_nilaiRating = value
        End Set
    End Property

    Public Property Frekuensi() As Integer
        Get
            Return m_frekuensi
        End Get
        Set(value As Integer)
            m_frekuensi = value
        End Set
    End Property

    Public ReadOnly Property Ratarata() As Single
        Get
            Return NilaiRating / Frekuensi
        End Get
    End Property
End Class

Public Class DictSelisihRating
    Inherits Dictionary(Of String, Rating)

    Private Function GetKey(Item1Id As Integer, Item2Id As Integer) As String
        Return If((Item1Id < Item2Id), Item1Id & "/" & Item2Id, Item2Id & "/" & Item1Id)
    End Function

    Public Function Contains(Item1Id As Integer, Item2Id As Integer) As Boolean
        Return Me.Keys.Contains(GetKey(Item1Id, Item2Id))
    End Function

    Default Public Overloads Property Item(Item1Id As Integer, Item2Id As Integer) As Rating
        Get
            Return Me(Me.GetKey(Item1Id, Item2Id))
        End Get
        Set(value As Rating)
            Me(Me.GetKey(Item1Id, Item2Id)) = value
        End Set
    End Property
End Class

Public Class SlopeOne
    Private DictselisihRating As New DictSelisihRating()    'Untuk menyimpan hasil selisih nilai rating pada masing-masing barang per pelanggan
    Private Items As New HashSet(Of Integer)()              'Berapa banyak barang yang ada
	
	. . .
End Class

Hasil akhir adalah: (klik untuk perbesar gambar)

cmd72

Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:

[sdm_download id=”1552″ fancy=”0″]



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Comments

37 responses to “Algoritma Slope One”

  1. rojik Avatar
    rojik

    sangat membantu gan, kalo perhitungan manualnya gimana ya pak, mohon pencerahannya

    1. pip Avatar
      pip

      Anda dapat melihat contoh perhitungan manual dari perhitungan diatas dokumen ini

      1. rojik Avatar
        rojik

        terima kasih admin sangat membantu, good job, kalo diterapin untuk sistem rekomendasi cocok gak ya admin,

        1. pip Avatar
          pip

          Untuk mengetahui apakah sebuah algoritma dapat diterapkan pada sebuah topik, maka saya harus mengetahui alur dari topik tersebut. Silahkan dijelaskan lebih detail mengenai alur topik yang anda miliki

  2. Sulis Avatar
    Sulis

    sangat membantu sekali gan,, apakah ada tutorial sistem rekomendasi lokasi menggunakan python? dengan algoritma slope one atau dbscan?terimakasih

    1. pip Avatar
      pip

      Mohon maaf untuk bahasa pemrograman phyton mungkin saat ini saya belum bisa membantu. Tetapi sebenarnya algoritma ini ada salah satu algoritma yang cukup mudah untuk dipahami, sehingga mungkin anda dapat mencoba untuk melakukan konversi ke dalam bahasa lain

  3. ChunLie Avatar

    Hello gan saya mau nanya..

    di katakan di atas kalau “Algoritma ini adalah bentuk yang paling mudah dari teknik item based Collaborative Filtering”
    perbedaan antara collabrative filtering dengan algoritma slope one apa yah ?

    Thx ~

    1. pip Avatar
      pip

      Menurut pendapat saya pribadi, teknik Collaborative Filtering adalah modifikasi lebih lanjut dari algoritma Slope One. Ada beberapa perhitungan tambahan yang harus dilakukan setelah mendapatkan jawaban dengan algoritma Slope One.

  4. HB Avatar
    HB

    min, mau tanya. apakah algoritma ini bisa deterapkan untuk sistem rekomendasi dalam ecommerce? jd bahasanya menggunakan php. apakah admin punya contoh untuk yang versi php?

    1. pip Avatar
      pip

      Ruang lingkup dari topik e-commerce masih terlalu luas sehingga saya tidak dapat mengetahui apakah sistem yang anda miliki dapat diselesaikan menggunakan algoritma ini. Silahkan anda ceritakan lebih detail.

      1. HB Avatar
        HB

        Hehe, jd sebenernya saya jg agak bingung krn saya masihlah seorang pemula. Jadi maksud saya algoritma ini diterapkan dalam sistem rekomendasi di e-commerce, dimana nantinya akan merekomendasikan sebuah item, misalkan saja sebuah film. Jadi film tersebut nantinya akan diberi rating dan diproses seperti yang sudah dijelaskan diatas. Seperti itu min, maaf jika penjelasannya kurang jelas.

        1. pip Avatar
          pip

          Jika anda masih belum mendapatkan gambaran topik secara spesifik, maka sepertinya masih sulit bagi saya untuk menjawab pertanyaan yang anda sampaikan sebelumnya. Silahkan anda melakukan riset terlebih dahulu.

  5. Dwi DJ Avatar
    Dwi DJ

    Apakah algoritma slope one bisa untuk personalisasi? maksudnya satu user dengan user yang lain mendapat rekomendasi yang berbeda?

    1. pip Avatar
      pip

      Jika data yang digunakan adalah sama, maka hasilnya akan selalu sama karena tidak ada variabel acak dalam perhitungan ini. Jika ingin mendapatkan hasil berbeda, maka silahkan menggunakan data yang berbeda.

  6. afsheena Avatar
    afsheena

    bagus, mau nanya kalau penjelasan mengenai algoritma squeezer ada tidak ?

    1. afsheena Avatar
      afsheena

      cara memasukan rumus algoritma slope one ini gimana ya ke kasus ini ?

      1. pip Avatar
        pip

        Saya belum pernah mengetahui algoritma tersebut, sehingga tidak dapat mengetahui apakah modifikasi dapat dilakukan atau tidak.

        1. khairul Avatar
          khairul

          mau nanya min algoritma slope one bisa digunakan untuk sistem pengambilan keputusan tidak ? seperti sistem pengambilan keputusan pemilihan mobil

          1. pip Avatar
            pip

            Jika menggunakan perhitungan algoritma slope one murni, maka hasilnya akan seperti ini. Selanjutnya apabila diperlukan teknik pengambilan keputusan, maka algoritma ini harus dimodifikasi agar dapat melakukan hal tersebut. Jika anda sudah memiliki referensi jurnal, biasanya teknik modifikasi yang diperlukan sudah dijelaskan di dalam jurnal tersebut.

  7. Dede Avatar
    Dede

    Jenis data apa saja yang dapat digunakan pada algoritma slope one? Apakah hanya data yang memiliki rating?

    1. pip Avatar
      pip

      Sejauh ini saya hanya menemukan contoh kasus dengan sistem rating seperti ini, tetapi seharusnya tidak menutup kemungkinan untuk jenis kasus lainnya yang memiliki tingkat kemiripan seperti kasus ini

  8. Eric Avatar
    Eric

    apakah algoritma ini tersedia di java? trims

    1. pip Avatar
      pip

      Saya tidak memahami bahasa tersebut, tetapi skrip yang saya rancang adalah murni skrip (tidak bergantung pada fungsi-fungsi tertentu yang disediakan oleh perangkat lunak), sehingga tentunya dapat dikonversi ke dalam bahasa apapun setelah memahami konsep dari algoritmanya.

  9. Hendro Avatar

    Hallo min, mohon respon nya. setelah saya baca artikel datas, maka saya mengambil kesimpulan bahwa algoritma slope ini bertujuan untuk memberikan rating bagi produk yang belum mempunyai rating yah min? nah pertanyaan nya bagaimana jika kasus nya sebagian tau seluruh produk sudah mendapatkan rating terus dilakukan kalkulasi sehingga mendapatkan 10 urutan produk teratas yang nantinya akan menghasilkan sebuah rekomendasi produk. apakah itu juga termasuk algoritma slope one min? makasih min

    1. pip Avatar
      pip

      Menurut gambaran yang saya dapatkan dari penjelasan diatas, maka untuk mendapatkan urutan produk diperlukan perhitungan tambahan setelah melalui algoritma Slope One. Contoh termudah adalah dengan menjumlahkan semua rating dari sebuah produk dan kemudian mengurutkan berdasarkan nilai tertinggi untuk mendapatkan 10 urutan produk dengan rating terbaik.

      1. Hendro Avatar

        Jadi lagi-lagi peran slope one disini ialah mengisi produk yang belum ada rating nya yah min.
        Terima kasih min.
        Tapi saya punya pertanyaan lagi min mhon maaf, misalkan saya punya 100 produk apakah ada minimal berapa produk yg harus sudah punya rating untuk menerapkan slope one ini? Dan adakah referensi paper yang mengungkapkan seberapa akuratnya penerapan algoritma Slope One ini.. terima kasih min

        1. pip Avatar
          pip

          Menurut pemahaman saya poin pentingnya adalah masing-masing kriteria harus setidaknya memiliki 2 nilai rating. Jika seandainya terdapat 100 produk dengan 3 kriteria A, B, C maka setidaknya terdapat 2 rating untuk kriteria A, 2 rating untuk kriteria B, 2 rating untuk kriteria C, dan sisanya diperbolehkan tidak memiliki nilai. Akan tetapi untuk model ini nilai prediksi ratingnya tidak akan bervariasi karena minimnya data yang tersedia, sehingga memang tetap dianjurkan untuk memiliki nilai sebanyak mungkin agar nilai prediksinya lebih akurat.

      2. Hendro Avatar

        terima kasih atas penjelasan nya min sangat membantu, tapi saya masih belum paham untuk penerapan nya min. Kalo boleh saya mau minta tolong mimin untuk membantu saya, nanti ada imbalannya min. jika berminat tolong tinggalkan kontak yang bisa dihubungi, atau bisa email saya di email yang saya masukan di kolom komentar ini min. mohon bantuannya, terima kasih

        1. pip Avatar
          pip

          Jika anda tertarik untuk menggunakan jasa kami maka silahkan menghubungi kami dengan nomor kontak yang tersedia pada halaman hubungi kami https://piptools.net/hubungi-kami/ . Terima kasih

  10. Khamad Ali Avatar

    Kak, kalo semisal dari 10 item, setiap user hanya memberikan rating untuk 1 item. Jadi user 1 merating item 1 kemudian user 2 me-rating item 2 dan seterusnya… apakah bisa? Soalnya di google data rating yang didapat kebanyakan user hanya me-rating 1 item. Tolong responnya terimakasih.

    1. pip Avatar
      pip

      Algoritma ini tidak memungkinkan perhitungan apapbila seorang user hanya merating 1 item saja karena perhitungan untuk rating A yang masih kosong bergantung dari hubungan antara rating A dan B/C/D/E/F/G/H/I/J yang sudah tersedia pada database.

      1. Kha Avatar

        Lalu algorimta apa solusinya? Terimakasih.

        1. pip Avatar
          pip

          Untuk saat ini saya belum memiliki usulan mengenai detail kasus tersebut.

      2. Khamad Ali Avatar

        Bagaimana jika menggunakan Person Correlative atau PCC? Saya sedang mengerjakan tugas akhir berkaitan dengan sistem rekomendasi yaitu menggunakan algoritma PCC. Apakah admin berkenan untuk membuat artikel yang membahas metode tersebut? Sangat minim bahkan hampir tidak ada web yang membahas perhitungan manual algoritma ini. Terimakasih.

        1. pip Avatar
          pip

          Setelah melakukan riset sepertinya contoh pembahasan untuk algoritma tersebut memang masih sangat minim sehingga untuk saat ini saya belum dapat menuliskan artikel mengenai algoritma tersebut.

  11. Khamad Ali Avatar

    Saya sudah mencoba perhitungan manual pada excel. Saya coba ubah data rating pelanggan A-D pada satu item urutan pertama dengan nilai rating 10, hasil perhitungan akhir rekomendasi rating 17 (>10). Solusinya gimana? Mohon responnya terimakasih.

    1. pip Avatar
      pip

      Setelah melihat perhitungan yang dijelaskan pada halaman wikipedia, maka saya melakukan sedikit perubahan pada perhitungan sebelumnya. Anda dapat melihat hasil revisi perhitungan sebelummnya pada dokumen ini

Leave a Reply

Your email address will not be published. Required fields are marked *