You are on page 1of 231

İSTANBUL OKAN ÜNİVERSİTESİ

FEN BİLİMLERİ ENSTİTÜSÜ

BİLİŞİM SİSTEMLERİ VE TEKNOLOJİLERİ ANABİLİM DALI

BİLİŞİM SİSTEMLERİ PROGRAMI

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİNDE

İŞBİRLİKÇİ YÖNTEMLERİN UYGULANMASI

YÜKSEK LİSANS TEZİ

SUNGU MURAT GEDİKOĞLU

OCAK 2021

Program: Bilişim Sistemleri


MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİNDE

İŞBİRLİKÇİ YÖNTEMLERİN UYGULANMASI

Yüksek Lisans Tezi

SUNGU MURAT GEDİKOĞLU

tarafından

İSTANBUL OKAN ÜNİVERSİTESİ

Bilişim Sistemleri ve Teknolojileri Anabilim Dalına

YÜKSEK LİSANS

derecesi şartını sağlamak için sunulmuştur.

Dr. Öğr. Üyesi


Feridun Özçakır
Danışman

Dr. Öğr. Üyesi Dr. Öğr. Üyesi


Nurşen Topçubaşı Mehmet Fatih Erkoç
Üye (Yıldız Teknik
Üniversitesi)
Üye

OCAK 2021

Program: Bilişim Sistemleri


i

ÖZET

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİNDE İŞBİRLİKÇİ

YÖNTEMLERİN UYGULANMASI

Perakende sektörü, teknolojinin gelişimi ile birlikte farklılaşmaya başlamıştır. Bu

farklılık önceleri mağaza donanımı olarak kendisini göstermiştir. Mağaza içinde

gerçekleşen teknolojik geliştirmeler ile müşteriye alışveriş kolaylığı yaşatılmaktadır.

İstediği ürünü hızlıca sorgulayabilmesi, kasalarda sıra beklemeden satınalma kolaylığı,

ürünü denemeden üzerinde görmesini sağlayacak ekranlar bunlardan bazılarıdır.

Diğer taraftan müşteriler de değişen ve gelişen teknolojilerden sonuna kadar

yararlanarak güncel veriye hızlıca ulaşmakta ve sorgulamaktadır. İlgilendikleri ürünü

dijital satış kanallarında araştırmakta ve ürün ile ilgili görüşlerini beğeni

derecelendirmeleri yaparak oluşturmaktadır. Müşterilerin yaşadığı alışveriş deneyimine

ait veri, perakende sektöründeki dijital dönüşümün anahtar noktası olmaktadır.

Markalar rekabet gücünü arttırmak için müşterilerini tanımak, müşterilerin alışveriş

sırasında oluşturduğu veriyi kullanarak ilgi alanlarını anlamaya ve ürün öneriminde

bulumaya çalışmaktadırlar.

Bu çalışma kapsamında işbirlikçi filtreleme yöntemleriyle (Collaborative

Filtering) ilgili alan yazın (Literatür) taraması gerçekleştirilmiştir. Bu kavramlarla ilgili

alan yazından elde edilen araştırma bilgileri çalışmanın giriş bölümünde yer almaktadır.

Genel bilgiler bölümünde işbirlikçi filtreleme yöntemi, içerik tabanlı filtreleme

(Content Based Filtering), karma yöntem (Hybrid Approaches), sınıflandırma,

kümeleme, veri tabanı gibi konulara yer verilmektedir. Üçüncü bölümde işbirlikçi

filtreleme yöntemlerinin bellek tabanlı ve model tabanlı yöntemleri, kullanıcı


ii

benzerliği, öğe benzerliği, tekil değer ayrıştırma (SVD Singular Value Decomposition)

ve yapay sinir ağları (Artificial Neural Networks) detaylı anlatılmaktadır. Uygulama

bölümünde tercih edilen teknolojik altyapı, kullanıcı ve öge benzerliği, tekil değer

ayrıştırması ve yapay sinir ağları yöntemlerinin kullanılması ve elde edilen veriler

anlatılmaktadır. Sonuç bölümünde gerçekleştirilen uygulamaların sonuçlarının

yorumlaması yapılmaktadır.

Bu çalışma kapsamında işbirlikçi filtreleme yöntemleri ile perakende mağazacılık

sektöründeki müşteri satın alma verileri kullanılarak kişisel ürün önerisinde

bulunulmaktadır.

Anahtar Kelimeler : Öneri sistemleri, makine öğrenmesi, benzerlik

algoritmaları, işbirlikçi filtreleme


iii

ABSTRACT

The retail industry has started to differentiate with the development of technology.

This difference first appeared as shop equipment. With the technological improvements

in the store, shopping is provided to the customer. Some of these are the ability to

quickly query the product you want, the ease of purchasing without waiting in queues

in the crates, and the screens that will allow you to see the product on it without trying.

On the other hand, customers can quickly access and query up-to-date data by

making use of changing and developing technologies. It researches the product they are

interested in in digital sales channels and creates their opinions about the product by

making rating ratings. The data about the shopping experience of the customers is the

key point of the digital transformation in the retail sector. Brands try to get to know

their customers in order to increase their competitiveness, to understand their interests

and to suggest products by using the data created by customers during shopping.

Within the scope of this study, the related literature was scanned with collaborative

filtering methods. The research information obtained from the literature on these

concepts is included in the introduction part of the study. General information section

covers topics such as collaborative filtering method, content based filtering, hybrid

approaches, classification, clustering, database. In the third section, memory based and

model based methods of collaborative filtering methods, user similarity, item similarity,

singular value decomposition and artificial neural networks are explained in detail. In

the application section, the preferred technological infrastructure, user and item

similarity, singular value decomposition and the use of artificial neural networks
iv

methods and the obtained data are explained. The results of the applications performed

in the conclusion section are interpreted.

Within the scope of this study, personal product suggestions are made using

collaborative filtering methods and customer purchasing data in the retail store sector.

Keywords: Suggestion systems, machine learning, similarity algorithms,

collaborative filtering
v

TEŞEKKÜR

Tez çalışmalarım boyunca, gösterdiği her türlü destek ve yardımlarından dolayı

çok değerli hocam Dr. Ögr. Üyesi Feridun Özçakır’a, sevgili eşim İlke Gökçek

Gedikoğlu’na, canım oğlum Ege Fuat Gedikoğlu’na, dostlarım Yasin Kalkavan ve

Serhan Özmen’e en içten dileklerimle teşekkür ederim.

Sungu Murat Gedikoğlu

OCAK 2021
vi

İÇİNDEKİLER

İÇİNDEKİLER ........................................................................................................ vi

ŞEKİL TABLOSU ................................................................................................. xiii

TABLO LİSTESİ ................................................................................................. xviii

KISALTMALAR ................................................................................................... xxi

GİRİŞ..................................................................................................................... 1

1.1. Amaç ............................................................................................................3

1.2. Önem ............................................................................................................4

GENEL BİLGİLER .............................................................................................. 6

2.1. Öneri Yöntemleri ..........................................................................................6

2.2. Öneri Yöntemlerinin Amacı ..........................................................................7

2.3. Öneri Yöntemleriyle İlgili Bazı Örnek Çalışmalar.........................................9

2.4. Kullanıcı Derecelendirmesi ......................................................................... 10

2.4.1. Müşteri Satın Alma Aktivitesinin Derecelendirilmesi ................ 12

2.5. Kullanıcı-Öğe Matrisi ................................................................................. 13

2.6. Kullanılan Yöntemler.................................................................................. 14

2.6.1. İşbirlikçi Filtreleme Yöntemi..................................................... 15

2.6.2. İçerik Tabanlı Filtreleme Yöntemi ............................................. 15

2.6.3. Karma Yöntemler ...................................................................... 16

2.7. İşbirlikçi ve İçerik Tabanlı Filtreleme Yöntemlerinin Karşılaştırılması........ 18


vii

2.8. Öneri Oluştururken Karşılaşılan Problemler ................................................ 19

2.8.1. Soğuk Başlangıç (Cold Start)..................................................... 20

2.8.2. Veri Seyrekliği (Data Sparsity) .................................................. 21

2.8.3. Eş Anlamlılık (Synonymy) ........................................................ 22

2.8.4. Kısıtlı İçerik Analizi (Limited Content Analysis) ....................... 22

2.9. Veritabanı ................................................................................................... 23

2.9.1. İlişkisel Veritabanı (Releational Database) ................................ 23

2.9.2. Dağıtılmış Veritabanları (Distributed Database) ........................ 24

2.9.3. Veri Ambarları .......................................................................... 25

2.9.4. NoSQL Veritabanları................................................................. 26

2.10. Veri Madenciliği ....................................................................................... 26

2.10.1. Sınıflama Yöntemleri .............................................................. 27

2.10.1.1. Regresyon ........................................................................... 28

2.10.1.2. Korelasyon .......................................................................... 29

2.10.1.3. Bayes Sınıflaması (Bayes Theorem) .................................... 29

2.10.1.4. En Yakın Komşu Sınıflaması (K-Nearest Neighbor)............ 30

2.10.1.5. Karar Ağaçları (Decicion Trees) .......................................... 31

2.10.1.6. Destek Vektör Makineleri (Support Vector Machines) ........ 32

2.10.2. Kümeleme Yöntemleri............................................................. 34

2.10.3. Bağlantı Analizleri .................................................................. 34


viii

2.10.3.1. Birliktelik Kuralı ................................................................. 35

2.11. Verilerin Yapılandırılması......................................................................... 35

2.11.1. Min-Max Normalleştirmesi ..................................................... 36

2.11.2. Z-Skor (Z-Score) ..................................................................... 36

2.11.3. Ondalık Normalleştirme .......................................................... 37

2.11.4. Kategorik Veriler..................................................................... 37

2.12. Programlama Dili...................................................................................... 40

2.12.1. C# (C Sharp) Programlama Dili............................................... 41

2.12.2. Java Programlama Dili ............................................................ 41

2.12.3. PHP Programlama Dili ............................................................ 42

2.12.4. Python Programlama Dili ........................................................ 42

2.13. Programlama Kütüphanesi ........................................................................ 42

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİ MODELİNİN BİLEŞENLERİ ...... 44

3.1. Python Programlama Dili............................................................................ 45

3.2. Pyhton Scikit-Learn Kütüphanesi ................................................................ 47

3.3. Python Surprise Kütüphanesi ...................................................................... 47

3.4. Python Keras Kütüphanesi .......................................................................... 50

3.5. Python Pandas Kütüphanesi ........................................................................ 51

3.6. Python Numpy Kütüphanesi ....................................................................... 51

3.7. Python Tensorflow Kütüphanesi ................................................................. 51


ix

3.8. Python Seaborn Kütüphanesi ...................................................................... 52

3.9. Sklearn.Decomposition Kütüphanesi........................................................... 52

3.10. Python Pyodbc Kütüphanesi ..................................................................... 52

3.11. Spyder Uygulama Geliştirme Platformu .................................................... 53

3.12. Microsoft SQL Veritabanı......................................................................... 53

3.13. İşbirlikçi Filtreleme Yöntemi .................................................................... 55

3.14. Bellek Tabanlı Yöntemler ......................................................................... 58

3.14.1. Kullanıcı Tabanlı Filtreleme Yöntemi...................................... 58

3.14.2. Öğe Tabanlı Filtreleme Yöntemi.............................................. 60

3.15. Kullanıcı ve Öğe Tabanlı Filtreleme Yöntemlerinin Karşılaştırması .......... 62

3.16. Benzerlik Hesaplaması .............................................................................. 63

3.16.1. Öklid Mesafesi ........................................................................ 64

3.16.2. Manhattan Mesafesi................................................................. 65

3.16.3. Minkowski Mesafesi ............................................................... 65

3.16.4. Pearson Korelasyon Katsayısı .................................................. 65

3.16.5. Kosinüs Mesafesi .................................................................... 67

3.16.6. Jaccard Benzerlik Katsayısı ..................................................... 69

3.17. Derece Tahmininin Hesaplanması ............................................................. 70

3.18. Model Tabanlı Yöntemler ......................................................................... 71

3.18.1. Matris Ayrıştırması.................................................................. 71


x

3.18.2. Yapay Sinir Ağları................................................................... 76

3.18.3. Yapay Sinir Ağlarının Yapısı................................................... 77

3.18.4. Tek Katmanlı Yapay Sinir Ağarının Yapısı.............................. 81

3.18.5. Çok Katmanlı Yapay Sinir Ağarının Yapısı ............................. 82

3.18.6. Çok Katmanlı Yapay Sinir Ağları İle Örnek Problem Çözümü 85

3.18.6.1. İleriye Doğru Hesaplama Aşamaları .................................... 86

3.18.6.2. Geriye Doğru Hesaplama Aşamaları.................................... 89

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİNDE İŞBİRLİKÇİ YÖNTEMLERİN


UYGULANMASI ................................................................................................... 97

4.1. Modelin Yapısı ........................................................................................... 97

4.2. Modelin Veritabanı Yapısı .......................................................................... 98

4.3. Veri Hazırlığı ............................................................................................ 110

4.4. İşbirlikçi Filtreleme Yöntemi .................................................................... 113

4.4.1. Kullanıcı Tabanlı İşbirlikçi Filtreleme Yöntemi ....................... 113

4.4.2. Kullanıcı Tabanlı İşbirlikçi Filtreleme Yönteminin Uygulanması


................................................................................................................. 116

4.4.3. Öğe Tabanlı İşbirlikçi Filtreleme Yöntemi............................... 124

4.4.4. Öğe Tabanlı İşbirlikçi Filtreleme Yönteminin Uygulanması .... 126

4.4.5. Matris Ayrıştırma Modeli ........................................................ 130

4.4.6. Matris Ayrıştırma Yönteminin Uygulanması ........................... 132

4.4.7. Yapay Sinir Ağı Yöntemi ........................................................ 133


xi

4.4.8. Yapay Sinir Ağı Yönteminin Uygulanması .............................. 135

BULGULAR VE SONUÇLAR .........................................................................139

5.1. Geliştirilen Modelin Özellikleri ................................................................ 139

5.2. Karşılaştırmalı Sonuçlar............................................................................ 139

5.2.1. Kullanıcı Tabanlı Filtreleme Yöntemi...................................... 140

5.2.2. Öğe Tabanlı Filtreleme Yöntemi ............................................. 140

5.2.3. Matris Ayrıştırma Yöntemi...................................................... 145

5.2.4. Yapay Sinir Ağı Yöntemi ........................................................ 145

5.3. Derecelendirme Tahminine Göre Karşılaştırma ......................................... 147

5.4. Ürün Kategorik Özelliklerine Göre Karşılaştırma...................................... 148

SINIRLILIKLAR .............................................................................................152

DEĞERLENDİRME .......................................................................................154

KAYNAKLAR ......................................................................................................158

EK-1 ......................................................................................................................174

EK-1.1. İşbirlikçi Filtreleme Yöntemi Örnek Uygulaması................................ 174

EK-1.2. Kullanıcı Tabanlı Filtreleme Yönteminin Uygulanması ...................... 184

EK-1.3. Öğe Tabanlı Filtreleme Yönteminin Uygulanması .............................. 188

EK-1.4. Matris Ayrıştırma Yönteminin Uygulanması ...................................... 192

EK-1.5. Yapay Sinir Ağı Yönteminin Uygulanması ......................................... 196

EK-2 ......................................................................................................................202
xii

EK-2.1. Mağaza İçinde Öneri Yöntemlerinin Uygulanmasına Yönelik Çalışmalar


202

EK-2.2. Dijital Satış Kanallarında Uygulanan Öneri Sistemleri........................ 205

ÖZGEÇMİŞ ...........................................................................................................208
xiii

ŞEKİL TABLOSU

Şekil I.1. Modellerin Farklı Renkleri ile Yapılan Öneriler........................................... 5

Şekil I.2. Beğenisi Yüksek Ürünlerin Önerisi ............................................................. 5

Şekil II.1. Puanlama Yöntemleri [30]........................................................................ 11

Şekil II.2. Puanlama Yöntemleri 2 ............................................................................ 11

Şekil II.3. Kullanıcı-Öğe Matrisi .............................................................................. 13

Şekil II.4. Öneri Sistemlerinde Kullanılan Yöntemler [41]........................................ 14

Şekil II.5. İçerik Tabanlı Filtreleme Yapısı [43]........................................................ 16

Şekil II.6. Karma Öneri Yöntemlerinin Çalışması [45] ............................................. 17

Şekil II.7. Soğuk Başlangıç Sorunu (Yeni Kullanıcı Ekleme ve Yeni Ürün Ekleme) . 20

Şekil II.8. İlişkisel Veritabanı Yapısı [53] ................................................................. 24

Şekil II.9. Dağıtık Veritabanı Yapısı [55] ................................................................. 25

Şekil II.10. Veri Ambarı Yapısı [56]......................................................................... 26

Şekil II.11. Regresyon Gösterimi .............................................................................. 28

Şekil II.12. En Yakın Komşu Algoritması K-NN [64]............................................... 30

Şekil II.13. En Yakın Koşu Algoritması Adımları [64] ............................................. 31

Şekil II.14. Karar Ağaçları Yapısı [65] ..................................................................... 32

Şekil II.15. Destek Vektör Makineleri Sınıflama Şeması [68] ................................... 33

Şekil II.16. Destek Vektör Makineleri Sınıflama Öncesi [68].................................... 33

Şekil II.17. Destek Vektör Makineleri Algoritması Marj Çizgisi [68] ....................... 34
xiv

Şekil II.18. Kategorik Verilerin Sıralı Sayısallaştırması ............................................ 38

Şekil II.19. Kategorik Verilerin Tek Sıcak Kodlaması .............................................. 39

Şekil II.20. Kategorik Verilerin Gömülü Vektör ile Sayısallaştırması ....................... 40

Şekil III.1. Model Bileşenleri.................................................................................... 44

Şekil III.2. Spectrum 2019 Yılı İlk 10 Programlama Dili .......................................... 46

Şekil III.3. Surprise ve Crap Pyhton Kütüphanelerinin Karşılaştırması [91] .............. 48

Şekil III.4. Surprise ve Python-Recsys Pyhton Kütüphanelerinin Karşılaştırması [92]


........................................................................................................ 49

Şekil III.5. Surprise ve Keras Kütüphanelerinin Karşılaştırması [93] ........................ 50

Şekil III.6. Kullanıcı-Ürün Matrisi [104] .................................................................. 57

Şekil III.7. Öneri Yöntemlerinin Veri Bilimindeki Yeri [106] ................................... 58

Şekil III.8. Kullanıcı Tabanlı Filtreleme Yöntemi [107] ............................................ 59

Şekil III.9. Kullanıcı Tabanlı Yöntemin İşleyişi ........................................................ 59

Şekil III.10. Öğe Tabanlı Filtreleme Yöntemi [107] .................................................. 61

Şekil III.11. Öğe Tabanlı Yöntemin İşleyişi .............................................................. 61

Şekil III.12. Kullanıcı Tabanlı Filtreleme ve Ürün Tabanlı Filtreleme [43] ............... 63

Şekil III.13. Derecelendirme ..................................................................................... 67

Şekil III.14. Kosinüs Benzerliği [113] ...................................................................... 67

Şekil III.15. Kullanıcılar Arasındaki Kosinüs Benzerliği [37] ................................... 68

Şekil III.16. Jaccard Mesafesi Veri Seti .................................................................... 70

Şekil III.17. Matris Ayrıştırma Yöntemi ................................................................... 72


xv

Şekil III.18. Alternatif En Küçük Kare Yöntemi ....................................................... 75

Şekil III.19. Yapay Sinir Ağı Yapısı [124] ................................................................ 78

Şekil III.20. Yapay Sinir Ağları Temel Katmanları [126] .......................................... 80

Şekil III.21. Tek Katmanlı Yapay Sinir Ağı Modeli [122]......................................... 81

Şekil III.22. Basit Algılayıcı ile Yapay Sinir Ağının Öğrenmesi ............................... 82

Şekil III.23. Doğrusal Fonksiyonlar ve XOR Problemi [127] .................................... 83

Şekil III.24. Çok Katmanlı Yapay Sinir Ağları [128] ................................................ 84

Şekil III.25. Ağı Çıktısının Minimum Hata Veren Ağırlık Noktası [129] .................. 85

Şekil III.26. Yapay Sinir Ağı İleriye Doğru Hesaplama [128] ................................... 87

Şekil III.27. Yapay Sinir Ağı Hata Hesaplaması [128] .............................................. 88

Şekil III.28. Yapay Sinir Ağı Hata Gösterimi [128] .................................................. 89

Şekil III.29. Yapay Sinir Ağları Geriye Doğru Hesaplama 1 [128]............................ 91

Şekil III.30. Yapay Sinir Ağları Geriye Doğru Hesaplama 2 [128]............................ 92

Şekil III.31. Yapay Sinir Ağları Ara Katman Hesaplama [128] ................................. 94

Şekil III.32. Yapay Sinir Ağları Yeni Ağırlık Değerlerinin Hesaplaması [128] ......... 95

Şekil III.33. 1.Tekrarın Sonunda Ağırlıkların Yeni Değerleri [128] .......................... 96

Şekil IV.1. Uygulanan Modelin Yapısı ..................................................................... 98

Şekil IV.2. Kullanılan Veritabanı Tablolarının Şeması............................................ 106

Şekil IV.3. Kullanıcı Tabanlı Filtreleme Yöntemlerinin Genel İşleyişi [37] ............ 114

Şekil IV.4. Kullanıcı Tabanlı Filtreleme Yönteminin Çalışması .............................. 115


xvi

Şekil IV.5. Kullanıcı Benzerliği .............................................................................. 122

Şekil IV.6. Kullanıcı Benzerliği İle Derece Tahmini ............................................... 123

Şekil IV.7. Öğe Tabanlı Filtreleme Yöntemlerinin Genel İşleyisi [37] .................... 124

Şekil IV.8. Öğe Tabanlı Filtreleme Yönteminin Çalışması ...................................... 125

Şekil IV.9. Öğe Benzerliği...................................................................................... 129

Şekil IV.10. Öğe Benzerliği İle Derece Tahmini ..................................................... 130

Şekil IV.11. Matris Ayrıştırma Yönteminin Genel Şekli ......................................... 130

Şekil IV.12. Matris Ayrıştırma Yönteminin Çalışması ............................................ 131

Şekil IV.13. Yapay Sinir Ağı Yönteminin Çalışması .............................................. 133

Şekil IV.14. Yapay Sinir Ağı Modelinin Çalışma Yapısı ........................................ 134

Şekil IV.15. Yapay Sinir Ağının Model Yapısı ....................................................... 138

Şekil V.1. Hata Fonksiyonu .................................................................................... 145

Şekil V.2. Ürün Ağırlık Değerlerinin Yoğunluğu.................................................... 146

Şekil V.3. Kullanıcı Ağırlık Değerlerinin Yoğunluğu ............................................. 146

Şekil EK-1.0.1.Örnek Uygulama Veri Normalleştirmesi ......................................... 181

Şekil EK-1.0.2 Kullanıcı Benzerliği........................................................................ 181

Şekil EK-1.0.3. Kullanıcı Benzerliği İle Derece Tahmini ........................................ 182

Şekil EK-1.0.4. Öğe Benzerliği .............................................................................. 182

Şekil EK-1.0.5. Öğe Benzerliği İle Derece Tahmini................................................ 183

Şekil EK-1.0.6. Örnek Uygulama Kullanıcı-Ürün Derecelendirme Matrisi ............. 183


xvii

Şekil EK-2.1.0.1. Ürün Önerimi Mobil Uygulama .................................................. 202

Şekil EK-2.1.0.2. Ürün Önerimi Mobil Uygulama -2 .............................................. 203

Şekil EK-2.1.0.3. Ürün Önerimi Mobil Uygulama -3 .............................................. 204

Şekil EK-2.2.0.4. Aynı Marka Ürünün Farklı Renkleri ........................................... 205

Şekil EK-2.2.0.5. Aynı Marka Ürünün Aynı Kategorisi .......................................... 206

Şekil EK-2.2.0.6 Beğenisi Yüksek Ürünler ............................................................. 206

Şekil EK-2.2.0.7 En Çok Satan Ürünler .................................................................. 207


xviii

TABLO LİSTESİ

Tablo II.1. Öneri Sistemi Uygulayan Bazı Web Siteleri .............................................. 9

Tablo II.2. Kullanılan Öneri Yöntemleri [11]............................................................ 18

Tablo IV.1. Stokkart Tablosu, Tablo Yapısı .............................................................. 99

Tablo IV.2. Stokkart_Rapor_Parametre Tablosu, Tablo Yapısı ................................. 99

Tablo IV.3. Parametre_Stokkart_Rapor Tablo Yapısı ............................................. 100

Tablo IV.4. Stokbelge Tablosu Yapısı .................................................................... 101

Tablo IV.5. Stokbelge_Detay3 Tablo Yapısı........................................................... 102

Tablo IV.6. Stokbelge_Detay2 Tablo Yapısı........................................................... 102

Tablo IV.7. Carikart_Crm_Karttipi Tablo Yapısı .................................................... 103

Tablo IV.8. Carikart_Crm_Ozel Tablo Yapısı........................................................ 103

Tablo IV.9. Carikart Tablo Yapısı .......................................................................... 104

Tablo IV.10. Carikart_Crm_Musteri_Kart Tablo Yapısı ......................................... 105

Tablo IV.11. Çalışma Verisinin Oluşturulması İçin Kullanılan SQL Sorgusu ......... 107

Tablo IV.12. Çalışma Kapsamında Kullanılacak Verinin Yapısı ............................. 108

Tablo IV.13. Çalışma Verisinin Örneği................................................................... 110

Tablo IV.14. Satın Alınan Ürün ve Müşteri Sayısı .................................................. 111

Tablo IV.15. Çalışma Dosya Biçimi (Müşteri, Ürün ve Satınalma Adeti)................ 112

Tablo IV.16. Kullanıcı Tabanlı İşbirlikçi Yönteminin Uygulanması user_based_cf.py


...................................................................................................... 116
xix

Tablo IV.17. Örnek Uygulama Kullanıcı Tabanlı Filtreleme Metotları ................... 120

Tablo IV.18. Öğe Tabanlı İşbirlikçi Yöntemlerin Uygulanması item_based_cf.py .. 126

Tablo IV.19. Öğe Tabanlı Filtreleme Metotları ....................................................... 127

Tablo IV.20. Matris Ayrıştırma Modülü svd_based_cf.py....................................... 132

Tablo IV.21. Yapay Sinir Ağı Modülü ysa_based_cf.py ......................................... 135

Tablo V.1. Kullanıcı Tabanlı Filtreleme Sonucu ..................................................... 141

Tablo V.2. Öğe Tabanlı Filtreleme Sonucu ............................................................. 142

Tablo V.3. Matris Ayrıştırma Sonucu ..................................................................... 143

Tablo V.4. Yapay Sinir Ağı Yöntemi Sonucu ......................................................... 144

Tablo V.5. Derecelendirmeye Göre Karşılaştırma ................................................... 147

Tablo V.6. Derecelendirme Yapılan Ürün Sayısı .................................................... 147

Tablo V.7. Kategorik Karşılaştırma ........................................................................ 148

Tablo V.8. Kategorik Karşılaştırma (Category, Department)................................... 149

Tablo V.9. Kategorik Karşılaştırma (Category, Department, Section) ..................... 149

Tablo V.10. Kategorik Karşılaştırma (Category, Department, Section, SubCategory)


...................................................................................................... 150

Tablo V.11. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups) ......................................................................................... 150

Tablo V.12. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups, Style) ............................................................................... 151

Tablo V.13. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups, Style, Brand) .................................................................... 151
xx

Tablo EK-1.0.1 Örnek Veri Seti ............................................................................. 180


xxi

KISALTMALAR

RecSys ACM Recommender Systems

SVD Singular Value Decompositation

PCA Principle Component Analysis

DBMS Database Management System

SQL Structure Query Language

T-SQL Transcat Structured Query Language

RDBMS Relational Database Management System

API Application Programming Interface

IBM International Business Machines

ANSI American National Standards Institute

RMSE Root Mean Squared Error

MSE Mean Squared Error

MEA Mean Absolute Error


1

GİRİŞ

Günümüzde alışveriş yapmak hem müşteri tarafında, hem de mağazacılık

tarafında farklı bir noktaya gelmiştir. Kullanılan akıllı cihazlar ile dünyanın her

yerinden alışveriş yapılmaktadır. Perakende sektöründe mevcutta kullanılan teknoloji

sadece mağaza içi hızlı servis verecek uygulamalardan oluşmaktadır. Bu uygulamalar

müşterilerin ihtiyaçlarını sorgulamaya yöneliktir. Ancak alışveriş yapmak müşteri ve

perakendeciler için farklılaşmaktadır. Müşteri artık kendisine ayrıcalıklı yaklaşılmasını

istemektedir. Her alışveriş sırasında bıraktığı kişisel deneyimin kendisine kişisel olarak

dönmesini beklemektedir. RILA [1] tarafından yayımlanan araştırma raporunda

tüketicilerin %63’ünün kişiselleştirilmiş önerilerle ilgilendiği belirtilmektedir. İnternet

kullanımının artmasıyla birlikte dijital satış kanallarının sayısı ve kullanıcısı da artış

göstermektedir. Bu kanallarda paylaşılan ürünlerin sayısı ve çeşitililiği çok fazladır.

Kişilerin istediği ürünü bulmak için dijital satış kanallarını dolaşması ve bulduğu

ürünlerin kendisiyle ne kadar uyumlu olduğuna karar vermesi gerekmektedir. Ancak

büyüyen e-ticaret ve ürün çeşitliliği bunu zorlaştırmaktadır.

Kılınç’a [2] göre verinin büyümesi, müşterilerin kişiselleştirilmiş deneyim

beklentisi, öneri sistemlerine olan ihtiyacı arttırmaktadır. Kullanıcılar gezindikleri

dijital kanallarda ürünler üzerinde beğeni veya yorumlar yaparak iz bırakırlar. Bu izler

müşterilerin alışveriş deneyimini gösterdiğinden perakende için değerlendirilmesi

gereken verilerdir. Dijital kanallar ürünlerinin beğenme/beğenmeme

derecelendirmelerini toplayarak daha işlevsel hale gelme amacındadırlar. Kullanıcılar

derecelendirme formları kullanarak dönüşler yapabilmekte ya da satın aldıkları ürünler

bu ürünlere verdikleri güveni gösteren bilgiler olarak değerlendirilmektedir.


2

Accenture’nin [3] hazırladığı rapora göre tüketicilerin %65 ‘i alışveriş geçmişlerini

tanıyan, hatırlayan ve bunları sunan markalarla alışveriş yapma olasığı yüksek olarak

raporlamaktadır. Öneri yöntemleri müşterilerin bu izlerinden faydalanarak

kişiselleştirilmiş öneri üretilmesi için kullanılmaktadır. Amazon [4], Pandora [5], Best

Buy [6] gibi e-ticaret siteleri ürün önerisinde bulunurken, Facebook [7], Instagram [8],

Twitter [9] gibi sosyal medya siteleri, tanıyabileceğiniz kişiler önerisinde

bulunmaktadır. Netflix [10] kullanıcılarına sevebileceği film ve dizileri öneri olarak

sunmaktadır. Müşterilerin geçmiş alışveriş deneyimlerinden ölçülebilir veriler

yaratarak önerilerde bulunmak, gerek dijital kanallarda gerekse mağaza içinde

müşterinin ilgisini çekebilecek ürünlere yoğunlaşmasını sağlamaktadır. Müşteri

etkileşimini arttırmaya çalışan markaların; ürün satışlarını arttırmak, müşterilerine

farklı ürünler sunmak ve müşteri bağlılığı yaratmak gibi hedefleri bulunmaktadır. Öneri

yöntemlerinin temel amacı, kullanıcıların geri bildirimlerinden yararlananarak, ilgileri

hakkında sonuçlar çıkarmaktır. Bu sebeple öneri yöntemleri kullanıcılar ve ürünler

arasındaki geçmiş etkileşim verilerini kullanmaktadır. Geçmişteki etkileşim,

gelecekteki seçimler için belirteç olmaktadır. Sharma [11] ve arkadaşlarına göre öneri

yöntemleri araştırmacıların üzerinde çalıştığı ve sürekli geliştirmelerin yapıldığı bir

alan olsa da, yüzyıllarca toplumda var olmuştur. Balabanovic [12] ve arkadaşlarına göre

öneri sistemleri 1970‘li yıllarda Duke Üniversitesi’nde geliştirilmeye başlanmıştır. İlk

tavsiye sistemi, Xerox Palo Alto Araştırma Merkezi'nde geliştirilmiştir. Tapestry-1992

e-postaların, gereksiz olanların ayrıştırılması amacıyla geliştirlmiştir. 1994 Yılında

GroupLens tarafından derecelendirme yapılmış veriler üzerinden tavsiye sistemi

geliştirilmiştir. 1997 yılında MovieLens tarafında film tavsiye sistemi geliştirilmiştir.


3

1997 yılında Stanford Üniversitesince İşbirlikçi ve içerik tabanlı yöntemler birlikte

kullanılarak web üzerinde kullanıcıların büyük veriyi gözden geçirmelerine yardımcı

olacak bir öneri sistemi geliştirilmiştir. Amazon [4] tarafından öğe bazlı işbirlikçi

filtreleme yöntemi 1998 senesinde patentlenmiştir. [13] 2001 yılında yayımlanmıştır.

Hoffman [14] 1999 yılında olasılıklı sementik analizi duyurmuş ve işbirlikçi filtreleme

yönteminde benzerlik uygulamıştır. 2000 yılında Tim Westergren tarafından bir

şarkının yapısını anlamaya çalışan Music Genome projesi geliştirilmiştir. [15] 2002

yılında İngilterede kurulan last.fm [16] müzik sitesi audioscrabbler adı verilen bir öneri

sistemi kullanarak müzik dinleyicilerinin profilini oluşturmuştur. Audioscrabbler

projesi bir bilgisayar bilimleri projesi olarak Richard Jones tarafından İngiltere’de

Southampton Üniversitesi’nde geliştirilmiştir.

1.1. Amaç

Alışveriş yapan müşteri mağaza içinde ya da dijital satış kanallarında yaşadığı

alışveriş deneyimini veri olarak markaya bırakmaktadır. Bunun karşılığında da,

bıraktığı kişisel deneyimin kendisine kişisel öneri olarak dönmesini beklemektedir.

Bu tez çalışmasındaki amaç perakende ayakkabı sektöründe faaliyetini yürüten

çok mağazalı markanın, kartlı müşterilerinin satın alma verilerini işbirlikçi filtreleme

yöntemlerinin bellek tabanlı yöntemlerinden kullanıcı tabanlı filtreleme yöntemi ve öğe

tabanlı filtreleme yöntemi, model tabanlı yöntemlerden matris ayrıştırma ve yapay sinir

ağ yöntemini kullanarak müşteriler arasında ve ürünler arasında benzerlik bulmaya

çalışmak, müşteri-ürün etkileşiminden yararlanarak müşterilerin almadıkları ürünler

için tahmini beğeni derecesini hesaplamak ve ürün önerimi oluşturulmasıdır.


4

1.2. Önem

Farklı markaların öneri sistemlerine bakıldığında genel olarak en çok satan

ürünler, aynı modelin farklı renkleri (Şekil I.1. Modellerin Farklı Renkleri ile Yapılan

Öneriler), en beğenilen ürünler (Şekil I.2. Beğenisi Yüksek Ürünlerin Önerisi) gibi

öneriler görülmektedir. Araştırma firmalarının tüketiciler ile yaptıkları anketlerin

sonucunda, tüketicilerin kendilerine hitap eden, hatırlayan ve bunları sunan markaları

tercih edeceği ve kişiselleştirilmiş önerinin tüketici için önemli olduğunu vurgulayan

sonuçlar çıkmaktadır [3]. İnternetin ve mobil teknolojilerin gelişmesiyle birlikte

tüketiciler daha bilinçli davranmaya başlamışlardır. İstedikleri ürünü bulmak için farklı

dijital satış kanallarıdaki ürünleri incelemekte ve kendilerine uygun ürünü

seçmektedirler. Perakende sektöründeki markalar da sadık müşterilerini kaybetmemek

için müşterilerinin ilgisine yönelik ürünleri sunmak durumundadırlar.

Bu tez çalışmasının önemi sektör verisinden yararlanılarak kişiselleştirilmiş öneri

deneyiminin oluşturulmasıdır. Kişiselleştirilmiş öneri yöntemlerini kullanan

markaların hedefi müşteri-ürün etkileşimini anlamak, müşterilerinin ilgisini

çekebilecek ürünleri sunmak ve diğer markalarla rekabet konusunda avantaj

sağlamaktır [18].
5

Şekil I.1. Modellerin Farklı Renkleri ile Yapılan Öneriler

Şekil I.2. Beğenisi Yüksek Ürünlerin Önerisi


6

GENEL BİLGİLER

Bu bölümde öneri yöntemleri, yöntemlerin amacı, veri madenciliği yöntemleri,

veritabanı, verilerin düzenlenmesi konularına değinilmektedir.

2.1. Öneri Yöntemleri

Öneri yöntemleri Bobadilla’ya [17] göre kullanıcılar ve öğeler arasındaki

etkileşimi baz alarak ürün önerimi oluşturmayı sağlayan yöntemlerdir. Yaşantımız

içinde çeşitli ürünlerle etkileşim içinde olmakta ve bu ürünlerden bazılarını satın

almaktayız. Bir yandan da değişik sektörlerde büyümeye devam eden farklı ürünler

bulunmaktadır. Tüm bu ürünleri deneyerek fikir sahibi olmamız kolay değildir.

Tüketici herhangi bir ürün almadan önce ürünün kendisi için ne kadar uygun olup

olmadığını bilmek istemektedir. Epsilon [18] araştırma firmasının hazırladığı raporda

tüketicilerin %80’i markalar kişiselleştirilmiş deneyimler sunduğunda satın alma

olasılıklarının daha yüksek olduğunu sonucuna varmaktadır. Öneri yöntemleri kişilerin

satın alma aktiviteleri yapmadan önce fikir sahibi olmasını sağlamaktadır. Melville’ye

[19] göre öneri yöntemlerinin amacı kullanıcının geçmiş alışveriş bilgilerinden

filtrelemeler yaparak bilgi sahibi olmadığı ürünler için öneriler sunmaktır. 1990’lı

yıllarda araştırılmaya başlayan öneri sistemleri konu olarak tüm sektörleri

ilgilendirmektedir. Adomavicius [20] ve arkadaşlarına göre gerek endüstriyel, gerekse

akademik olarak yeni yöntemler geliştirilmeye devam etmektedir. Kılınç [2] ve

arkadaşlarının belirttiği üzere film ve dizi izleme platformu Netflix’den [10] yapılan

film seçimlerinin %75‘i öneri yöntemleri ile yapılmaktadır. E-ticaret sitesi Amazon [4]

kullanıcılarının seçtiği kitaplar için, kullanıcının seçtiği ürünü satın alan diğer

kullanıcıların sıklıkla aldığı kitapları öneri olarak sunmaktadır. Amazon üzerinden


7

yapılan satın almaların %35’i öneri yöntemleri üzerinden gerçekleşmektedir. Ebay [21]

internet sitesi müşterilerin satın aldıkları ürünler için bıraktıkları yorumları öneri

yöntemleri için kullanmaktadır. Levi StrausTM [22] internet sitesi müşterilerinin,

Levi's kıyafetleri hakkında öneriler almalarını sağlamaktadır. Moviefinder [23]

müşterilerin belirli bir filme benzer filmleri bulmasını sağlamaktadır. Youtube [24]

dünyanin en büyük video paylaşım platformudur. Kişilerin seyrettikleri videolara göre,

yeni videolar önermektedir. Facebook [7] sosyal medya sitesi kullanıcılarının profil

özelliklerine göre arkadaş önerileri sunmaktadır. Öneri yöntemleri kullanan tüm

platformlar kullanıcılarından satın aldıkları ürün ile ilgili yorum ya da puanlama bilgisi

toplanmaktadır. Vozalis [25] ve arkadaşlarına göre öneri yöntemleri toplanan

verilerinden öneri üretilmesi için kullanılan tekniklerdir. Breese [26] ve arkadaşlarına

göre temel amaç kullanıcıların daha önce görmedikleri ürünler için ilgilerini

hesaplamaktır. Öneri yöntemleri kullanıcıların daha önce tercih ettiği ürünlerden

yararlanarak kullanıcı profili oluşturmaktadır. Bu amaçla çeşitli yöntemlerden

yararlanmaktadır. En çok kullanılan yöntemler işbirlikçi filtreleme yöntemleri ve içerik

tabanlı yöntemlerdir.

2.2. Öneri Yöntemlerinin Amacı

Tek [27] ve arkadaşlarına göre perakende markalarının pazarlama faaliyetleri

genel olarak müşteri kazanılması yönündedir. Yeni müşterilerin kazanılması satış

gelirleri için önemlidir. Ancak markalar için daha önemli olan kazanılmış müşterilerin

kaybedilmemesi ve onların geri dönüşlerinin sağlanmasıdır. Tüketici ile devam eden

karşılıklı bir ilişki kurulması markalar için arzulanan bir temeldir. Çelik’e [28] göre

perakende sektöründe yeni müşterilerin kazanılması için ürünlere reklam, promosyon


8

ve fiyatlandırma çalışmaları ile müşterilerin dikkati çekilmeye çalışılmaktadır.

Perakende sektöründe ürün sayısı ve çeşidi artmaktadır. Dijital kanallar, farklı ürün

çeşitleriyle her gün ürün sayısını ve çeşidini arttırmaya devam etmektedir. Öneri

yöntemlerinin temel amacı, tüketicilere ürün önerimi yaparak satış cirosunun

arttırılmasıdır. Periscope ve McKinsey’in [29] raporuna göre ABD’de tüketicilerin

%62’si, Fransa’da ise tüketicilerin %60‘ı kişiselleştirilmiş mesajlar aldıklarını

bildirmektedir. Kılınç [2] ve arkadaşlarına göre yeni ürünler reklam ve pazarlama

faaliyetleriyle müşterilere tanıtılmaktadır. Ancak müşterilerin ürünlere olan ilgisi

bilinmemektedir. Öneri yöntemleri ile müşterilerin yeni ürünlere olan ilgisi

hesaplanabilmektedir. Öneri yöntemlerinin amaçlarından bazıları;

• İlgi Düzeyi: Kullanıcılar ilgisini çeken ürünlere daha fazla yönelme ve tüketme

eğilimindedir. Öneri yöntemlerinin amacı bu ilgi düzeyini yakalamaktır.

• Yenilik: Öneri yöntemleri ile kullanıcılara daha önce görmedikleri ürünler

öneri olarak sunulmaktadır.

• Öneri Çeşitliliğin Arttırılması: Aggarwal’a [30] göre öneri yöntemleri ürün

önerisinde bulunurken bir dizi ürün listesi hazırlamaktadır. Eğer öneri ürün listesindeki

ürünler birbirine benzer olan ürünler ise bu durumda kullanıcının benzer olarak

kendisine sunulan ürünleri beğenmeme riski oluşmaktadır. Öneri olarak sunulan

ürünlerin farklı kategoriden olması kullanıcıyı başka ürünlere yönlendirmekte ve

ihtiyaçlarının belirlenmesinde yardımcı olmaktadır. Öneri çeşitliliği ürünlere olan ilgiyi

taze tutmaktadır. Yeni bir öneri, kullanıcının başka bir yöntemle bulması veya

keşfetmesi mümkün olmayan ürünleri de bulmasını sağlamaktadır.


9

Tablo II.1. Öneri Sistemi Uygulayan Bazı Web Siteleri

2.3. Öneri Yöntemleriyle İlgili Bazı Örnek Çalışmalar

Öneri yöntemleriyle ilgili işbirlikçi filtreleme yöntemleri ve içerik tabanlı

yöntemler başta olmak üzere çeşitli yöntemler kullanılarak çalışmalar yapılmıştır. Bulut

ve Milli [31] öneri yöntemlerinin doğruluk değerlerinin arttırılmasıyla ilgli bir çalışma

yapmışlardır. Çalışmanın ilk yönteminde kullanıcı oylarının negatif ve pozitif standart

sapma değeri üzerinden yakınlık hesaplayarak doğruluğu arttırmaya çalışmışlardır.

Çalışmanın diğer yönteminde Pearson Korelasyon Katsayısı ve Kosinüs benzerliğini

kullanmışlardır.

Taşçı [32] haber öneri yöntemlerinde doğruluk oranını arttırmak için bir çalışma

yapmıştır. Bu çalışmada içerik tabanlı filtreleme yöntemini kullanmıştır. Haberin

okuma zamanına göre kelime ağırlığını arttırmış ya da zayıflatmıştır.

Wang [33] ve arkadaşları, öğelerin kategorik bilgilerini kullanan bir sistem

tasarlamıştır. Kullanıcı benzerliği (kullanıcı değerlendirme geçmişlerinin benzerliği),


10

kullanıcının demografik verilerinin benzerliği ve alınan veya değerlendirilen öğelerin

anlamsal benzerliklerine dayalı olarak kullanıcıların ilgi bakımından benzerliği

kullanılmıştır.

Ziegler [34] ve arkadasları tarafından e-ticaret tarafında bir sistem tasarlanmıştır.

Sistem kullanıcı profillerinin tanımlandığı bir ürün sınıflandırmasını kullanarak,

işbirlikçi filtreleme öneri yapısını kullanmıştır.

Kostantinos [35] ve arkadaşları tarafından elektronik ürün satışı yapan firmalar

için bir öneri sistemi geliştirilmiştir. Bu çalışmada ürünlerin kategori başlıkları ve ürün

açıklamalarındaki kelimeler arasındaki benzerlikler kosinüs benzerliği kullanılarak

hesaplanmıştır.

Luo [36] ve arkadaşları matris ayrıştırma yöntemine dayanan işbirlikçi filtreleme

yöntemini uygulamışlardır. Bu yöntem ile soğuk başlangıç ve seyreklik problemini

kısmen çözebilmişlerdir.

2.4. Kullanıcı Derecelendirmesi

Falk’a [37] göre öneri yöntemleri öğe derecelendirme değerlerini kullanmaktadır.

Derecelendirmeler kullanıcıların beğeni seviyelerini öğrenmek amacıyla kullanılan

ölçeklerdir. Derecelendirme ölçeği kullanılan yöntemlere göre değişebilmekle birlikte

5’li likert sistemi genel olarak kullanılan yöntemlerdendir. Turan [38] ve arkadaşlarına

göre likert ölçeği kullanıcı eğiliminin ölçülmesinde en çok kullanılan yöntemlerdendir.

Beş seçenekten oluşan 5’li likert sistemi farklı seçenek sayısı ile günümüzde

kullanılmaktadır. Şekil II.1. deki gibi sıralı yıldızlar, kullanıcının ilgi seviyesinin

sayısal bir yorumunu oluşturmakta ve öneri yöntemleriyle kullanılmaktadır.


11

Şekil II.1. Puanlama Yöntemleri [30]

Şekil II.2. Puanlama Yöntemleri 2

Aggarwal’a [30] göre derecelendirmeler “Kesinlikle Katılmıyorum”,

“Katılmıyorum”, “Nötr”, “Katılıyorum”, “Kesinlikle Katılıyorum” gibi sıralı kategorik

değerlerden de oluşabilmektedir. 0 ve 1 gibi ikili derecelendirmelerde kullanıcı sadece

beğenme ya da beğenmeme gibi bir değeri tercih etmektedir. Bu özel bir durumu

gösteren tekil derecelendirmelerdir. Tekil derecelendirmeler kullanıcının beğenme


12

tercihi için bir belirtecin olduğu ancak beğenmeme tercihi için bir belirtecin olmadığı

özel durumlardır. Müşterinin bir ürünü alması beğeni ve kullanıcı tercihini gösterirken,

satın almaması her zaman ürüne olan hoşnutsuzluğu göstermemektedir. Bir çok sosyal

ağ sitesinde beğeni için “beğen (like)” butonu kullanılırken, beğenmeme durumunu

gösterecek bir mekanizma bulunmamaktadır.

2.4.1. Müşteri Satın Alma Aktivitesinin Derecelendirilmesi

Jannach [39] ve arkadaşlarına göre müşteri satin alma aktivitesinin öğe

derecelendirmeleri içinde özel bir yeri bulunmaktadır. Derecelendirme müşterinin açık

olarak belirtmesi yerine yaptığı aktiviteden oluşmaktadır. Müşterinin satınalma

davranışı tekil bir derecelendirmedir. Derecelendirmelerin tekil olduğu durumlarda

oluşan derecelendirme matrisi pozitif tercihlerden oluşmaktadır. Genel olarak tekil

matrisler kullanıcıların eylemlerinden oluşmaktadır. Bu tür matrislere örtük geri

bildirim matrisleri de denilmektedir. Falk’a [37] göre tekil derecelendirmeler

kullanıcının bir öğe için olumlu tercih belirtmesine izin vermektedir. Ancak negatif

tercihi belirleyecek bir mekanizması bulunmamaktadır. Örneğin ürün satın alan bir

müşterinin işlemi o ürün için olumlu bir oy olarak değerlendirilmektedir. Öte yandan

müşterinin ürünü satın almaması değerlendirme olarak ürünü beğenmediğini

göstermemektedir. Örtülü veriler açık verilere göre daha bol ve daha kolay

toplanmaktadır. Kullanıcılardan ek girdi talep edildiğinde açık bildiri toplamak zor

olmakta ve kullanıcı sadece bunu yapmayı seçtiğinde açık geri bildirim vermektedir.

Çoğu zaman kullanıcılar açık derecelendirme yapmamaktadır. Bu sebeple açık

derecelendirme miktarı az olmaktadır. Örtük geri bildirim türleri arasında satın alma

geçmişi, göz atma geçmişi, arama modelleri ve fare hareketleri bulunmaktadır. Açık
13

geri bildirimin sayısal değeri tercihi belirtirken, örtük geri bildirimin sayısal değeri ise

güveni göstermektedir.

2.5. Kullanıcı-Öğe Matrisi

Falk’a [37] göre öneri yöntemleri girdi bilgisi olarak kullanıcı-öğe matrisini

kullanmaktadır. Kullanıcı-öğe matrisi satır ve sütunlardan oluşan bir tablodur. Her bir

satırda kullanıcılar ve her bir sütunda öğeler bulunmaktadır. Aynı şekilde tam tersi de

geçerli olmaktadır. Tablonun her bir hücresi kullanıcının öğeye karşı olan etkileşimini

göstermektedir. 𝑖 ‘ninci satır ve 𝑗 ’ninci sütun, kullanıcı 𝑖 ’nin öğe 𝑗 ’için verdiği

derecelendirmeyi göstermektedir. Bu gösterim 𝑟%& olarak sembolize edilmektedir.

Şekil II.3. Kullanıcı-Öğe Matrisi

Şekil II.3’deki matris altı kullanıcılı ve beş öğeden oluşmaktadır. Bu matrise göre

𝑘( kullanıcısı ö* öğesine verdiği derecelendirme değeri 3’tür ve r,- = 3 olarak

gösterilmektedir.
14

2.6. Kullanılan Yöntemler

Isinkaye’ye [40] göre kullanıcılar ile öğeler arasındaki ilişkiyi anlamaya çalışırken

çeşitli yöntemler kullanmaktadır. Temelde öneri yöntemleri iki çeşit veri ile

çalışmaktadır. Kullanıcı-öğe etkileşimini gösteren ürün derecelendirmeleri ve metinsel

(ürünlerlerle ilgili yapılan yorumlar, ilgili anahtar kelimeler, demografik özellikler gibi)

verilerdir. Kullanıcı-ürün etkileşimini kullanan yöntemlere işbirlikçi filtreleme

yöntemleri, metinsel yorumları kullanan yöntemlere içerik tabanlı yöntemler

denilmektedir. Genel olarak kullanılacak olan yöntemler üç başlık altında

toplanmaktadır.

• İşbirlikçi filtreleme (Collaborative Filtering )

• İçerik tabanlı filtreleme (Content-Based Filtering)

• Karma yöntemler (Hybrid Approaches)

Şekil II.4. Öneri Sistemlerinde Kullanılan Yöntemler [41]


15

2.6.1. İşbirlikçi Filtreleme Yöntemi

Ekstrand’a [42] göre işbirlikçi filtreleme yöntemi, kullanıcılar ile öğeler arasındaki

etkileşimden yararlanarak benzer kullanıcı ya da benzer öğelerin bulunması ve öneri

oluşturulması esasına dayanmaktadır. Isinkaye’ye [40] göre işbirlikçi filtreleme

yöntemleri model tabanlı ve bellek tabanlı yöntemler olarak ikiye ayrılmaktadır. Model

tabanlı yöntemler makine öğrenmesi ya da veri madenciliği metotlarını öneri ve tahmin

hesaplamasında kullanmaktadır. Bellek tabanlı yöntemler kullanıcı benzerliği ve öğe

benzerliği olarak ikiye ayrılmaktadır.

2.6.2. İçerik Tabanlı Filtreleme Yöntemi

Jannach [39] ve arkadaşlarına göre içerik tabanlı filtreleme yönteminde

kullanıcının öğeler için yaptığı yorumlar kullanılarak öneri oluşturulmaktadır.

Kullanıcının geri bildirim verilerinin içindeki kelimeler, terimler, ifadeler kullanıcı

profilinin oluşturulmasını sağlamaktadır. Öğelerin açıklayıcı özellikleri öneri

oluşturmak için kullanılmaktadır. İçerik terimi; ürünün açıklayıcı özellikleri, yapılan

yorumlar, kullanıcıdan toplanan bilgiler için kullanılmaktadır. Aggarwal’a [30] göre

birbirine benzeyen kullanıcıların, benzer öğeleri beğenecekleri varsayılmaktadır. İçerik

tabanlı filtreleme yöntemi genelde öğelerin özellik bilgisi olduğunda kullanılabilinecek

bir yöntemdir. İçerik tabanlı sistemlerde kullanılacak ürün özellikleri, yorumlar ve

benzeri özellikler çeşitli kaynaklardan sağlanabilmektedir. Sağlanan bu içerikler kelime

tabanlı vektörlere dönüştürülmektedir.


16

Şekil II.5. İçerik Tabanlı Filtreleme Yapısı [43]

Kullanıcının bir ürüne derecelendirme yapmış olduğu durumda, diğer

kullanıcıların aynı ürüne derecelendirmeleri yoksa, bu durumda işbirlikçi filtreleme

yöntemleri ile öneri oluşturulamamaktadır. Bu durumda ürünün içerik özelliklerinden

yararlanarak, benzer özelliklere sahip diğer ürünler bulunmakta ve öneri

oluşturulmaktadır.

2.6.3. Karma Yöntemler

Banik’in [44] çalışmasında belirttiği üzere karma yöntemler bir çok öneri

yöntemini bir araya getiren yöntemlerdir. Kullanılan tüm öneri yöntemlerinin

birbirlerine göre başarılı ve başarısız yanları bulunmaktadır. Karma yöntemler, bir

yöntemin başarısız yanını, diğerinin başarılı yanı ile kırmayı deneyen yapılardır.

İşbirlikçi filtreleme yöntemleri ya da içerik tabanlı yöntemler öneri oluşturmak için

farklı kaynaklardan bilgi toplamaktadır. İşbirlikçi filtreleme yöntemleri aktif

kullanıcının ürünler için yaptığı derecelendirmelere, içerik tabanlı yöntemler ise

metinsel açıklamalara dayanmaktadır. Demografik yöntemler kullanan öneri sistemleri,

kullanıcıların profillerini demografik verilerden oluşturmaktadır. Yöntemlerin farklı


17

girdi türleri kullanması yöntemler arasında güçlü ve zayıf taraflar oluşturmaktadır.

Aggarwal’a [30] göre farklı girdilerin sağlandığı ya da farklı girdilerden oluşturulan

veriler farklı öneri yöntemlerinin kullanımını zorunlu kılmaktadır. Karma yöntemler

birden fazla öneri yöntemini bir araya getirerek önerinin doğruluğunu ve etkinliğini

arttırmaktadır.

Şekil II.6. Karma Öneri Yöntemlerinin Çalışması [45]

Sharma [11] ve arkadaşlarına göre karma yöntemler, farklı öneri yöntemlerinin

tamamlayıcı özelliklerini kullanan kombine yöntemlerdir. Netflix [10] kullancılarına

öneride bulunmak için hem işbirlikçi filtreleme yöntemlerini hem de içerik tabanlı

filtreleme yöntemlerini kullanmaktadır. Kullanıcılara hem beğendikleri filmler

üzerinden, hem de başka kullanıcılara olan benzerliği üzerinden öneride bulunmaktadır.

Karma yöntemlerinin avantajı farklı öneri yöntemlerindeki eksikleri azaltmaktır.

Tablo II.2 de bilindik bazı sosyal ağ, film, müzik, e-ticaret, e-kütüphane, video ve

eğlence platformlarında kullanılan yöntemler gösterilmektedir.


18

Tablo II.2. Kullanılan Öneri Yöntemleri [11]

Uygulama Türü Firmalar Kullanılan Yöntemler


İşbirlikçi Filtreleme, İçerik Tabanlı
Facebook
Filtreleme
Sosyal Ağlar Twitter İşbirlikçi Filtreleme
LinkedIn İşbirlikçi Filtreleme
MySpace İşbirlikçi Filtreleme
Netflix Karma Sistemler
Film MovieLens İşbirlikçi Filtreleme
Reel.com İşbirlikçi Filtreleme
Pandora İçerik Tabanlı Filtreleme
Müzik
Last.fm İşbirlikçi Filtreleme
İşbirlikçi Filtreleme, İçerik Tabanlı
Amazon
E-ticaret Filtreleme
eBay İşbirlikçi Filtreleme
CiteSeer İçerik Tabanlı Filtreleme
E-kütüphane Docear İçerik Tabanlı Filtreleme
Techlens İçerik Tabanlı Filtreleme
Video Youtube İşbirlikçi Filtreleme
Jester İşbirlikçi Filtreleme
Eğlence TiVo İşbirlikçi Filtreleme
TasteKid İçerik Tabanlı Filtreleme

2.7. İşbirlikçi ve İçerik Tabanlı Filtreleme Yöntemlerinin Karşılaştırılması

Ricci [46] ve arkadaşlarına göre içerik tabanlı filtreleme yöntemlerinde profil

oluşturmak için aktif kullanıcı tarafından sağlanan derecelendirmelerden

yararlanmaktadır. İşbirlikçi filtreleme yöntemleri aktif kullanıcıya en yakın

komşulardan yani benzer ilgileri olan kullanıcıları bulmak için diğer kullanıcıların

derecelendirmelerini kullanmaktadır.

• İçerik tabanlı filtreleme yöntemlerinde bir ürünün neden önerildiğine dair ürün

özellikleri, açıklama ve yorumlar listelenebilmektedir. İşbirlikçi filtreleme

yöntemlerinde ürün önerisi sadece başka kullanıcıların aynı ürünü beğenmesinden

kaynaklanmaktadır.
19

• İçerik tabanlı filtreleme yöntemlerinde kullanıcıların beğendiği/beğenmediği

ürünleri anlamak için yeterli ürün bilgisi bulunması gereklidir. Aksi takdirde etkili bir

öneri oluşturulması zorlaşmaktadır.

• Aggarwal’a [30] göre içerik tabanlı filtreleme yöntemleri kullanıcı profiline

benzer yüksek derecelendirilmiş ürünleri öneri olarak oluşturmaktadır. Yeni ve farklı

öneriler oluşturulmasını engellemektedir. Bu durum huzur sorunu olarak

adlandırılmaktadır. Sürekli olarak aynı kategoriden ürün alan bir müşteriye aynı

kategoriden öneri yapılması örnek olarak verilebilir. İşbirlikçi filtreleme yöntemlerinde

aktif kulanıcıya benzer kulllanıcıların grubundan hareket edildiği için farklı bir

kategoriden ürün önerilebilmektedir.

• İşbirlikçi filtreleme yöntemlerinde, yeni bir öğe kullanıcı-öğe derecelendirme

matrisine eklendiğinde, kullanıcılar tarafından daha önce derecelendirme yapılmadıysa

öneri oluşturmada kullanılamamaktadır. İçerik tabanlı sistemlerde ise yeni ürünü diğer

ürünlerle karşılaştıracak bir içerik bulunabilmektedir. Bu durum soğuk başlangıç

sorunu olarak bilinmektedir.

2.8. Öneri Oluştururken Karşılaşılan Problemler

Öneri yöntemleri genel olarak kullanıcıların geçmişte derecelendirdiği ürünlerden

yararlanarak, ilgi alanı benzer olan kullanıcıları ya da öğeleri bularak yeni öneriler

oluşturmaktadırlar. İşbirlikçi filtreleme yöntemleri öneri oluştururken kullanıcı-öğe

matrisinden yararlanmaktadır. Bir kullanıcının matristeki tüm ürünlerle etkileşimde

bulunması ya da bir kullanıcının mağaza içindeki tüm ürünlerden satın alması olası

değildir. Bu durum matriste derecelendirme yapılmayan hücrelerin oluşmasına sebep


20

olmaktadır. Öneri sistemlerinde soğuk başlangıç, veri seyrekliği, eş anlamlılık ve kısıtlı

içerik analizi karşılaşılan sorunlardan bazılarıdır.

2.8.1. Soğuk Başlangıç (Cold Start)

Jannach [39] ve arkadaşlarına göre öneri oluştururken satış sitesine yeni katılan

kullanıcılar ya da yeni eklenen ürünler soğuk başlangıç olarak ifade edilen bir sorunu

oluşturmaktadır. Bu sorun yeni bir kullanıcı sisteme katıldığında ya da yeni bir ürün

satış kanalına eklendiğinde oluşmaktadır. Bu durumlarda yeni kullanıcının tercihleri

bilinmemekte, aynı şekilde yeni ürünler için henüz oluşmuş bir derecelendirme de

bulunmamaktadır. Soğuk başlangıç yeni katılan kullanıcı ve yeni eklenen ürün olarak

ikiye ayrılmaktadır.

Şekil II.7. Soğuk Başlangıç Sorunu (Yeni Kullanıcı Ekleme ve Yeni Ürün Ekleme)

• Yeni Ürün Soğuk Başlangıç Sorunu: Moghaddam [47] ve arkadaşlarına göre

satış sistemine yeni katılan ürün, herhangi bir kullanıcı derecelendirmesine sahip

olmadığı için soğuk başlangıç problemi yaşamaktadır. Ürün derecelendirmesine göre

oluşturulan öneri yöntemlerinde ürün geçmişi belirleyici bir nokta olmaktadır. Doğru
21

öneriyi oluşturmak için yeterli kullanıcı etkileşimi çok önemlidir. Ne kadar çok

etkileşim olursa, önerinin doğruluğu o derecede artmaktadır. İşbirlikçi filtreleme

yöntemleri kullanıcı etkileşimini temel aldıklarından, kullanıcı-öğe etkileşiminin

artması benzer ilgi alanlarının tespitini kolaylaştırmaktadır. Yeni ürün problemi için

çözüm yollarından birisi içerik tabanlı filtreleme yöntemleridir. Siteye yeni katılan

ürünün özelliklerinden yararlanarak ve benzer ürünler tespit edilerek öneri

oluşturulmaktadır.

• Yeni Kullanıcı Soğuk Başlangıç Sorunu: Yeni bir kullanıcı bir dijital satış

sitesine üye olduğunda, bir ürünü derecelendirmeden ya da satınalma yapmadan ürün

önerisi istemesi durumunda ortaya çıkmaktadır. Yeni kullanıcı problemi öneri

yöntemlerinin ilk kez karşılaştığı kullanıcı anlamına gelmektedir. Yeni kullanıcı için

kullanıcı-öğe derecelendirmesi olmadığından kullanıcının tercihleri anlaşılamamakta,

bu doğrultuda soruna çözüm olarak içerik tabanlı filtreleme yöntemleri

kullanılmaktadır. Demografik veriler, güncel ürünler ve beğeniye dayalı stratejiler

kullanıcı bazlı soğuk başlangıç problemleri için çözüm yollarından bazılarını

oluşturmaktadır.

2.8.2. Veri Seyrekliği (Data Sparsity)

Chen [48] ve arkadaşlarına göre işbirlikçi filtreleme yöntemi benzer kullanıcıların,

benzer tercihleri olduğu varsayımına dayanmakta, aktif kullanıcıya benzeyen

kullanıcıların tercihleri incelenerek öneri listesi oluşturulmaktadır. İşbirlikçi filtreleme

yöntemleri ürün içeriğini yok saymakta, bu sebeple metinsel olmayan öğelere

uygulanmaktadır. Aktif kullanıcının derecelendirmeleri üzerinden benzer kullanıcılar

bulunmaktadır. Müşterilerin mağazalardan ya da dijital satış kanallarından


22

satınaldıkları veya derecelendirdikleri ürünler, satılan ürünlerin tamamını oluşturması

mümkün olmamaktadır. Dolayısıyla kullanıcı-öğe matrisi seyrek görünümde

oluşmakta, bu durum veri seyrekliği ya da matris seyrekliği olarak ifade edilmektedir.

Grcar [49] ve arkadaşlarına göre bu seyreklik kullanıcı-öğe matrisini kullanarak, benzer

ürün ya da kullanıcıların bulunmasını engellemektedir. Bu sebeple seyrek olan

kullanıcı-öğe matrislerinin boyutunun azaltılması çözüm yollarından birisi olmaktadır.

2.8.3. Eş Anlamlılık (Synonymy)

Khusro [50] ve arkadaşlarına göre eş anlamlılık, bir öğe farklı isimlerle ya da

benzer ifadelerle sisteme kayıt olduğunda oluşmaktadır. İşbirlikçi yöntemler ürünlerin

açıklamaları ya da özellikleri ile ilgilenmediği için ürünlerin benzer olup olmadığını

kaçırabilmektedir. Özellikle online (çevrimiçi) satış mağazalarında buna benzer

durumlarda ürünler için farklı kod verilmesi, ürün derecelendirmelerinden öneri

oluşturan yapılarda benzer ürünlerin bulunmasında problem oluşturmaktadır. Öneri

yöntemleri “aynı ürün mü?”, yoksa “farklı ürün mü?” olduğunu anlayamamaktadır.

2.8.4. Kısıtlı İçerik Analizi (Limited Content Analysis)

Ricci [46] ve arkadaşlarına göre içerik tabanlı filtreleme yöntemleri kullanıcıların

ya da öğelerin içeriklerine güvenmektedir. Ürünün özellikleri benzer ürünlerin

seçilmesinde kullanılmaktadır. Çoğu alanda içeriklerin oluşturulması kolay olmamakta,

bu gibi durumlarda analiz edilen içerik kullanıcı tarafından beğenilen/beğenilmeyen

öğeleri ayırt etmek için yeterli bilgiyi içermediğinden kullanıcılara yeni ürünler

önerilememektedir. Bu durum aynı ürünlerin önerilmesine sebep olmakta, içerik tabanlı

filtreleme yöntemlerinde aynı sınırlı içeriğe sahip iki farklı ürün öneri sistemleri

tarafında ayırt edilememektedir.


23

2.9. Veritabanı

Oracle [51] Türkiye sitesinde belirttiği üzere veritabanı verilerin belirli düzen

içinde bilgisayar sistemlerinde tutulduğu yapının genel adıdır. Bu verilerin yönetildiği

sistemlere veri tabanı yönetim sistemleri (DBMS, Database Management System)

denilmektedir. Zaman içinde giderek artan veri hacmi verilerin sınıflandırılma

ihtiyacını ortaya çıkarmıştır. Bu ihtiyaç veritabanı yönetim sistemlerinin

geliştirilmesini sağlamıştır. Verilerin veritabanı sistemlerinde tablolar halinde

tutulması, tablolar arasında bir hiyerarşiyi oluşturmaktadır. Veritabanı yönetim

sistemlerinde verilerin tablolardan sorgulanması, tablolara eklenmesi ve çıkartılması

veritabanı sistemlerinin en temel işlevlerini oluşturmaktadır. Veritabanında tablolar

halinde tutulan veriler, yapısal sorgulama dili (SQL Structured Query Language)

kullanılarak sorgulanmaktadır. SQL Bügün tüm veritabanlarında kullanılan standart bir

sorgulama dilidir. 1970’li yıllarda IBM tarafından geliştirilmiştir. Amerikan Ulusal

Standartları Ensititüsü [52] tarafından SQL ANSI olarak standartları yayımlanmıştır.

Veritabanları kullanılacağı alana göre farklı türlerde olabilmektedir

2.9.1. İlişkisel Veritabanı (Releational Database)

Learn Computer Science’ye [53] göre veriler tablolar içinde satırlar ve sütunlar

olarak tutulmaktadır. Birbiri ile ilişkili verilerin olduğu tablolar arasında bağ kurularak

ilişkilendirilen veritabanlarına İlişkisel veritabanı denilmektedir. Tablolar arasındaki

ilişkileri yöneten sistemlere de ilişkisel veritabanı yönetim sistemi (RDMS Relational

Database Manegment System) denilmektedir.


24

Şekil II.8. İlişkisel Veritabanı Yapısı [53]

2.9.2. Dağıtılmış Veritabanları (Distributed Database)

Oracle’a [54] göre üzere dağıtılmış veritabanı, aynı bilgisayar ağında farklı

sunucular üzerinde tutulan veritabanları olabildiği gibi farklı fiziki lokasyonlarda duran

sunucularda tutulan veritabanları da olabilmektedir. Uzak lokasyonlardaki sunucular

üzerinde tutulan veritabanları bilgisayar ağları aracılığı ile birbirleriyle

haberleşmektedirler.
25

Şekil II.9. Dağıtık Veritabanı Yapısı [55]

2.9.3. Veri Ambarları

Oracle’a [54] göre veri ambarları birden çok kaynaktan verileri merkezi olarak

birleştiren veri yönetim sistemlerine denilmektedir. Veri ambarları genelde analitik

verilerin oluşturulması ve sorgulama yapılması amacıyla tasarlanmaktadır. Büyük

miktarda geçmiş verileri barındırmaktadır. Şekil II.10’da örnek bir veri ambarı

organizasyonu gösterilmektedir. Kurumsal kaynak planlama (ERP Enterprise Resource

Planning) veritabanından, müşteri ilişkileri yönetim (CRM Customer Relationship

Management) veritabanından, malzeme ihtiyaç planlama (MRP Metarial Requirement

Planning) veritabanından ve internet üzerinden periyodik olarak alınan veriler veri

özetleme katmanında birleştirildikten sonra veri ambarında toplanmaktadır.


26

Şekil II.10. Veri Ambarı Yapısı [56]

2.9.4. NoSQL Veritabanları

Özturk [57] ve arkadaşlarının belirttiği üzere ilişkisel veritabanları birbirleriyle

bağlantılı satırlara ve sütunlara sahip tablolardan oluşmaktadır. Bütün tabloların bir

biçimi bulunmaktadır. NoSQL veritabanları ilişkisel veritabanı modelindeki yapısal

biçim tıkanıklığına bir çözüm üretilmesi amacıyla tasarlanmış veritabanlarıdır. NoSQL

veritabanları ile internet üzerindeki verilerin yapısal bir biçime sokulmadan tutulması

sağlanmaktadır. Amazon ve Google verilerini NoSQL veritabanlarında tutmaktadır.

2.10. Veri Madenciliği

Akpınar’a [58] göre öneri yöntemleri kullanıcı profillerinin oluşturulmasında veri

madenciliği yöntemlerinden faydalanmaktadır. Veri madenciliği yığın verileri analiz

ederek anlamlı sonuçlar çıkartılması işlemidir. Silahtaroğlu’na [59] göre veri

madenciliği veritabanlarındaki veriler üzerinde istatistiksel ve matematiksel metotların

uygulanarak veriler içindeki anlamlı ve potansiyel olarak değerli bilginin ortaya

çıkartılmasıdır. Veri madenciliği çeşitli alanlarda kullanılmaktadır. Bankacılık, sağlık,


27

biyoloji, finans, perakende gibi sektörler büyük verilerin oluşmasını sağlamaktadır.

Veri madenciliği yöntemleri üç bölüm olarak gruplanmaktadır.

• Sınıflama

• Kümeleme

• Bağlantı analizleri

Her modelin kendi içinde kullanılan farklı algoritmaları vardır. Öneri yöntemleri

veri madenciliği algoritmalarından yararlanmaktadır. Genellikle öneri yöntemleri

benzerlik ilişkisinden yola çıkarak öneriler sunmaktadır, veri madenciliği

yöntemlerininin özellikle sınıflama teknikleri benzerlik kavramı üzerine karar verici

kurallar oluşturur.

2.10.1. Sınıflama Yöntemleri

Öneri yöntemlerinde verilerin analiz edilmesinde benzer kullanıcıların ya da

ürünlerin sınıflandırılmasında veri madenciliği metotlarından faydalanılmaktadır.

Sınıflama, veri setindeki verilerin özelliklerine göre veri seti içinde dağıtılmasıdır.

Xiaoyuan [60] ve arkadaşlarına göre en yakın komşu (K-NN Nearest Neighborhood)

sınıflama yönteminin kullanılması, önerilerin doğruluğunu ve kişiselleştirilmesini

iyileştirmenin bir yolu olarak önerilmektedir. Öneri yöntemleri kullanıcılar veya

ürünler arasında benzer olanları bulmak için çeşitli sınıflama algoritmaları

kullanmaktadır. Bayes sınıflaması, destekleyici vektör makinaları (SVM Support

Vector Machines), en yakın komşu algoritması, karar ağaçları (Decision Trees)

kullanılan bazı algoritmalardır.


28

2.10.1.1. Regresyon

Gupta’ya [61] göre regresyon bir veri kümesindeki her durum için tahmin

fonksiyonu olarak, hedef değerin tahmin edilmesi için kullanılan bir veri madenciliği

tekniğidir. Silahtaroğlu’na [59] göre regresyon, değişkenler arasındaki ilişkinin bir

denklemidir.

En basit regresyon doğrusal regresyondur.

𝑦 = 𝑎 + 𝑏 𝑥 (II.1)

𝑥 değerine göre, 𝑦 değerini tahmin etmek üzere 𝑎 ve 𝑏 için uygun değerlerin

belirlenmesidir. Temel olarak iki değişken arasındaki ilişkiyi belirlemektedir. Tahmin

edilen faktöre bağımlı değişken, bağımlı değişkenin değerini tahmin etmek için

kullanılan faktörlere ise bağımsız değişken denilmektedir. Bağımlı değişkenin birden

fazla bağımsız değişkenle kullanıldığı regresyona çoklu regresyon denilmektedir.

𝑦 = 𝑎5 + 𝑎6 𝑥 + 𝑎( 𝑥 + 𝑎* 𝑥 … … … . . 𝑎9 𝑥9 (II.2)

Şekil II.11. Regresyon Gösterimi

𝑦 değeri, 𝑥 değerine göre doğrusal şekilde artar veya azalır.


29

2.10.1.2. Korelasyon

Köse’ye [62] göre korelasyon iki değişken arasındaki ilişkiyi inceleyen ilişkinin

yönünü ve gücünü belirleyen istatistiksel yöntemlerdir. İki değişken arasındaki ilişki

+1, -1 arasında değişiklik göstermektedir. İlişki ölçüsüne korelasyon katsayısı 𝑟

denilmektedir.

• 𝑟 = -1 ise değişkenler arasında negatif yönlü, doğrusal bir ilişki vardır.

Değişkenlerden birisi artarken, artışa bağlı olarak diğeri azalmaktadır.

• 𝑟 = 0 ise değişkenler arasında herhangi bir ilişki yoktur.

• 𝑟 = 1 ise değişkenler arasında pozitif yönlü, doğrusal bir ilişki vardır.

Değişkenlerden birisi artarken, artışa bağlı olarak diğeri de artmaktadır.

2.10.1.3. Bayes Sınıflaması (Bayes Theorem)

Silahtaroğlu’na [59] göre bayes algoritması bir sınıflama algoritmasıdır. Olasılık

ilkelerine göre hesaplama yapmaktadır. Bayes sınıflaması veri setinde önceden

sınıflanmış verileri kullanarak, yeni verinin hangi sınıf içinde olması gerektiğini

hesaplayan yöntemdir.

?(@A ∕CD ) ?(CD)


𝑃(𝑐6 / 𝑥% ) = ?(@A )
(II.3)

𝑐6 mevcut sınıfı göstermektedir. p(𝑐6 ⁄𝑥% ) ile 𝑥% nin 𝑐6 sınıfında olma olasılığını

ifade edilmektedir. Algoritmada en yüksek değeri veren sınıf kabul edilmektedir.

Herlocker [63] ve arkadaşlarına göre bayes sınıflaması ile benzer tercihleri olan

kullanıcılar birlikte sınıflara ayrılmaktadır. Kullanıcının sınıf üyeliğine bakıldığında

derecelendirmelerin bağımsız olduğu varsayılmaktadır. Sınıf sayısı ve model

parametreleri veri setinden öğrenilmektedir.


30

2.10.1.4. En Yakın Komşu Sınıflaması (K-Nearest Neighbor)

Silahtaroğlu’na [59] göre verilerin arasındaki mesafenin uzaklığına veya

yakınlığına göre sınıflama yapılmaktadır. Mesafeye dayalı algoritmalardan en çok

bilinen en yakın komşu algoritmasıdır. (K-NN) En yakın komşu algoritması veri setine

katılacak yeni verinin sınıfını belirlerlemek için veriler arasında uzaklık hesaplaması

yapmakta, 𝑘 adet komşu ile arasındaki uzaklığa göre yeni verinin sınıfını

belirlenmektedir. Uzaklığı hesaplamak için, öklid, manhattan, minkowsky gibi

fonksiyonlardan yararlanılmaktadır.

Şekil II.12. En Yakın Komşu Algoritması K-NN [64]

Bulut’a [31] göre en yakın komşu algoritmasında 𝑘 en yakın komşu sayısını

belirtmektedir. Örneğin 𝑘 = 3 ise en yakın üç komşuya göre sınıflama yapılmaktadır.

Sınıflama yaparken 𝑘 sayısının belirlenmesinde elbow metotu kullanılan

yöntemlerdendir. Elbow metotu her bir noktanın küme merkezine olan uzaklığının

karesinin toplamı alınarak hesaplanmaktadır.


31

Şekil II.13. En Yakın Koşu Algoritması Adımları [64]

2.10.1.5. Karar Ağaçları (Decicion Trees)

Chauhan’a [65] göre karar ağaçları veri madenciliği sınıflama algoritmalarından

olup sınıflama için çok kullanılan algoritmalardır. Karar ağacı algoritmalarında temel

olarak bir ağaç yapısı oluşturulmakta ve yeni verilerin bu ağaç yapısına uygulanarak

sınıfları belirlenmektedir. Karar ağaçları düğümlerden oluşmakta ve her düğüm farklı

dallara ayrılmaktadır. Hangi dala doğru yöneleceği ilgili düğümdeki kritere göre karar

verilmektedir. Her düğüm noktasında bir karar cümleciği (karar kriteri) vardır, bu karar

cümlecikleri sonucunda direkt olarak belli bir sınıfı temsil eden sonuç çıkabildiği gibi,

farklı bir karar cümleciği yapısına da ihtiyaç oluşabilmektedir. En son katmandaki tüm

düğüm noktaları bir sınıfı işaret edecek şekilde sonuç ortaya koyana kadar dallanma

devam eder.
32

Şekil II.14. Karar Ağaçları Yapısı [65]

Zhang [66] ve arkadaşlarına göre karar ağaçları model tabanlı yaklaşımlarda

kullanılmaktadır. Öneri yöntemlerinde çeşitli veri türlerini kullanma gibi esneklikler

bulunmaktadır. Karar ağacı girdiyi girişin niteliklerine dayanarak öngörülen bir değerle

eşleştiren öngörücü bir model oluşturmaktadır. Ağaçtaki her iç düğüm bir özniteliğe

karşılık gelmektedir. Bölünmüş her düğüme tek bir sınıflama uygulanmakta veya başka

bir eşiğe ulaşılmaktadır. Karar ağaçları öneri yöntemlerinde kullanılırken fazla ağaca

ihtiyaç duyması algoritmanın zayıf noktasını oluşturmaktadır.

2.10.1.6. Destek Vektör Makineleri (Support Vector Machines)

Nisbet [67] ve arkadaşlarına göre destek vektör makineleri son yıllarda hem

regresyon hem de sınıflama için güçlü teknikler sunan bir yöntem olarak

kullanılmaktadır. İki sınıf arasında iki sınıfa da yakın noktaların oluşturduğu vektöre

destek vektörleri denilmektedir. Destek vektör makineleri karar sınırlarını tanımlar.

Karar sınırı iki sınıfı birbirinden ayıran çizgiyi belirler. Sınıflama bazen optimal bir

ayırım yapmak için basit olmayabilir ve iki sınıfı ayıran karar çizgisi daha karmaşık
33

olabilmektedir. Destek vektör makineleri özellikle bu tür görevleri yerine getirmek için

uygulanmaktadır. Destek vektör makineleri “kara kutu” sınıflandırıcıları olduğundan,

aldıkları kararlar her zaman kolayca açıklanamamaktadır.

Şekil II.15. Destek Vektör Makineleri Sınıflama Şeması [68]

Pupale’ye [68] göre destek vektör makineleri algoritması verileri sınıflara ayıran

bir çizgi veya hiper düzlem oluşturmaktadır. Giriş için veri almakta ve sınıflara ayıran

bir çizgi çizmektedir.

Şekil II.16. Destek Vektör Makineleri Sınıflama Öncesi [68]

Her iki sınıftan çizgiye en yakın noktalar bulunmakta ve bu noktalara destek

vektörleri denilmektedir. Çizgi ile destek vektörleri arasındaki hesaplanmış mesafeye


34

marj denilmektedir. Marjın maksimum olduğu hiper düzlem, optimum hiper düzlemi

oluşturmaktadır.

Şekil II.17. Destek Vektör Makineleri Algoritması Marj Çizgisi [68]

Destek vektör makineleri, iki sınıf arasındaki mesafenin mümkün olduğu kadar

geniş olacağı karar sınırını vermeye çalışmaktadır.

2.10.2. Kümeleme Yöntemleri

Thi Do [69] ve arkadaşlarına göre aynı kümede olan öğelerin (veri) aynı ilgiye

sahip oldukları varsayılmakta ve öğeler benzer öğe kümesi olarak gruplara

ayrılmaktadır. Kümeler içindeki öğeler arasındaki farklılık için öklid, minkowski ve

manhattan mesafesi gibi ölçü yöntemleri kullanılmaktadır. Mesafe ölçülmesi sadece

aynı küme içindeki öğeler arasında yapılmaktadır. Mesafe kısaldıkça benzerlik

artmaktadır. Küme içindeki öğeler o kümedeki komşulardır. Aktif öğenin komşuları

küme içindeki öğelerdir.

2.10.3. Bağlantı Analizleri

Silahtaroğlu’na [59] göre bağlantı analizleri veri setindeki veriler arasında bir

ilişki yaratmaya çalışmaktadır. Bir ürünün alımı ve bu ürünlerle birlikte nelerin alındığı
35

bağlantı analizinin konusu içindedir. Bağlantı analizleriyle değişkenler arasında

ilişkiler incelenmektedir.

2.10.3.1. Birliktelik Kuralı

Avcılar’a [70] göre perakende sektöründe faaliyet gösteren markaların ürün

çeşitliliği artmaktadır. Perakendeciler müşterilerine alternatif ürünler sunarak farklılık

yaratmak durumundadırlar. Farklılık yaratmak için satılan ürünlerin analizi

yapılmaktadır. Herhangi bir ürün satıldığında, bu ürünle ile birlikte başka hangi

ürünlerin satıldığı bilgisini birliktelik kuralı vermektedir. Birliktelik kuralı veri seti

içinde sıklıkla beraber meydana gelen olayları gözlemleyerek olaylar arasında bağ

kurmaya çalışmaktadır. Yapılan alışverişlerde bir ürünle birlikte sıklıkla alınan ürünün

belirlenmesi birliktelik kurallarının konusudur. İlk çıkış noktası parekende sektörü

verileri üzerinde yapılan çalışmalar olmasına rağmen birliktelik kuralı veri madenciliği

sağlık bilimleri ve finans alanında da sıklıkla günümüzde kullanılmaktadır.

2.11. Verilerin Yapılandırılması

Jayalakshmi [71] ve arkadaşlarına göre veri yapılandırılması ile veri setinde

bulunan ham girdiler arasındaki farklılıklar ortadan kaldırılarak verilerin üzerinde

çalışabilir hale gelmesi sağlanmaktadır. Verilerin aşırı büyük olması veya aşırı küçük

olması istediğimiz sonuçları almamıza engel olabilmekte ya da kullandığımız

algoritmanın doğru çalışmasını engelleyebilmektedir. Yapay sinir ağlarının sonuç

çıktıları çoğunlukla -1 ve +1 aralığındaki değerlerden oluştuğundan ham girdiler yapay

sinir ağlarının yanlış eğitilmesine sebep olabilmektedir. Veriler kullanacağımız

algoritma için uygun olmayabilir ya da farklı türde verilere ihtiyaç duyabilmektedir.

İlgili algoritmayı kullanmak için verilerin düzenlenmesi, uygun veri biçimine


36

dönüştürülmesi işlemine verinin normalleştirilmesi denilmektedir. Normalleştirme için

çeşitli yöntemler kullanılmaktadır. Min-max normalleştirmesi, Z-Skor

normalleştirmesi, ondalık normalleştirilmesi bunlardan bazılarıdır.

2.11.1. Min-Max Normalleştirmesi

Saranya [72] ve arkadaşlarına göre min-max normalleştirmesi veri setindeki en

büyük değeri ve en küçük değeri kullanarak, veriyi 0 ve 1 aralığında

normalleştirmektedir.

@ F G%H
𝑥 & = GI9J FG%H
A
(II.4)

𝑥 & verinin normalleştirilmiş değeri, 𝑥% verinin veri setindeki değeri, maks değeri

veri setindeki en büyük değer, min değeri veri setindeki en küçük değerdir.

2.11.2. Z-Skor (Z-Score)

Jayalakshmi [71] ve arkadaşlarına göre z-skor veri setindeki verilerin standart

sapmaya göre, ortalamanın ne kadar üstünde veya ne kadar altında olduğunu analiz

etmemize yardımcı olmaktadır. Verilerin belirli bir aralıkta yayılımı sağlamaktadır.


@A F @KLM
Z = N
(II.5)

𝑍 verinin z-skor değeri, 𝑥% veri setindeki değer, 𝑥PQR , veri setindeki 𝑥’lerin

ortalaması, 𝑆, standart sapma değeridir. Standart sapma, verilerin ortalamaya ne kadar

yakın veya uzak olduğunu göstermektedir. Standart sapma küçükse veriler ortalamaya

yakın bir yerlerde olduğunu, büyükse ortalamadan uzak bir yerlerde bulunduğunu

göstermektedir.

𝑆TUQTH = V(∑(𝑥% − 𝑥PQR ) ( ) / 𝑛 𝑆öQHT9ZTG = V(∑(𝑥% − 𝑥PQR ) ( ) / 𝑛 − 1 (II.6)


37

𝑆, verinin standart sapma değerini göstermek üzere veri setindeki verilerin

aritmetik ortalamasından farklarının karesinin toplamlarının veri setindeki veri

sayısının bir eksiğine bölümünün karakökü olarak hesaplanmaktadır. Standart sapma

verilerin ne kadar dengeli dağıldığını göstermektedir. Yukarıdaki formül yapısında sol

tarafta evren üzerindeki, sağ taraftaki formül ise örneklem üzerindeki standart sapmayı

ifade etmektedir. Evren belirli bir özelliğe ait öğe grubunun tümünü anlatırken

örneklem ise evrenden daha küçük ancak evreni temsil edebilecek öğe grubunu ifade

etmektedir.

Aritmetik ortalama veri setindeki tüm verilerin toplamının, veri setindeki eleman

sayısına bölümüdür.

∑ @A
𝑥PQR = H
(II.7)

2.11.3. Ondalık Normalleştirme

Han’ın [73] belirttiği üzere ondalık normalleştirmesi, değerin ondalık kısmının

hareket ettirilmesi ile yapılmaktadır. Ondalık kısmın ne kadar hareket edeceği, sayının

mutlak en büyük değerine bağlıdır.


U
𝑣 % = 65] (II.8)

2.11.4. Kategorik Veriler

Şeker’e [74] göre kategorik veri “Tanım itibariyle, herhangi bir işleme tabi

tutulmadan, gözlem veya ölçüm yöntemleri ile ortamdan elde edilen her türlü değer”

şeklinde tanımlamaktadır. Yılmaz’a [75] göre veri; “Tek başına anlam ifade etmeyen

veya kullanılamayan, bununla birlikte enformasyona ve bilgiye temel oluşturan


38

ilişkilendirilmeye, gruplandırılmaya, yorumlanmaya, anlamlandırılmaya ve analiz

edilmeye gereksinim duyulan ham bilgi” şeklinde tanımlamıştır.

Veriler çeşitli ortam ve araçlardan toplanabilir, toplanan bu veriler bir problemin

çözümüne yardımcı olacak ölçü, değer ve gözlem sonuçları olabilmektedir.

Çılan’a [76] göre veriler nicel ve nitel olarak ayrılmaktadır. Nicel veriler sayılarla

ölçülebilen verileri (adet, maliyet, fiyat gibi), nitel veriler sayılarla doğrudan

ölçülemeyen kategorik verileri anlatmaktadır (ürün özellikleri gibi).

Kılınç [2] ve arkadaşlarına göre makine öğrenmesi algoritmaları genel olarak

sayısal verilerle çalışmaktadır. Kategorik veriler makine öğrenmesi modellerinde

kullanılmadan önce sayısal verilere dönüştürülmesi gereklidir. Makine öğrenmesi

algoritmaları sayısal veriler olmadıkça kategorik verilerle işlem yapamamaktadır.

Kategorik verilerin sayısal verilere çevrilmesi için kullanılan üç yöntem bulunmaktadır.

• Sıralı Değişkenlere Kodlama (Label Encoding): Mishra’ya [77] göre her bir

benzersiz kategorik veriye bir sayı verilmektedir. Her kategorik veriye artan sırada bir

sayı verileceği gibi rastgele sayılardan oluşan değerler de verilebilmektedir.

Ürün Kategorisi Sayısal Kodlama

Casual 1

Formal 2

Sports 3

Kıds 4

Şekil II.18. Kategorik Verilerin Sıralı Sayısallaştırması


39

Kategorik verilerin sırasal olarak sayısallaştırması ile verilerin doğallığı

kaybolmaktadır. Casual ve formal kategorilerinin sayısal karşılığı ile toplama işlemi

yapıldığında sport kategorisi olmamaktadır.

• Tekil Sıcak Kodlama (One Hot Encoding): Yadav [78] makalesinde belirttiği

üzere her benzersiz kategorik veri bir sütuna gelecek şekilde yerleştirilmektedir. Her

sütun ilgili kategorik değişken için 1 veya 0 değerini almaktadır.

Ürün Kategorisi Casual Formal Sports Kids

Casual 1 0 0 0

Formal 0 1 0 0

Sports 0 0 1 0

Kıds 0 0 0 1

Şekil II.19. Kategorik Verilerin Tek Sıcak Kodlaması

Tekil sıcak kodlama yapılarak kategorik veriler ikili (binary) sayılarla temsil

edilmektedir. Makine öğrenmesi algoritmalarında en çok kullanılan yöntemdir.

Kategorik verilerin çok olduğu durumlarda tüm kategorik veriler sütunlara dizileceği

için veri boyutu büyümektedir. Tekil sıcak kodlamanın kullanıldığı yapay sinir ağı

modelinde katman sayısına bağlı olarak modelin çalışma süresi artmaktadır.

• Gömülü Katman (Embedding Layer): Guo [79] ve arkadaşlarına göre

gömülü katman kategorik verilerin gerçek sayılarla temsil edildiği vektörler ile

eşlenmesidir. Gömme vektörü gerçel sayıların bir matrisidir. Matrisin her bir satırı

benzersiz bir kategoriyi temsil etmekte ve kategorik veriler için bir arama tablosu olarak

kullanılmaktadır. Yapay sinir ağlarında kategorik verilerin tekil sıcak kodlama ile

sayısallaştırılarak kullanılmasında büyük bir matrisin çarpımı yapılmaktadır. Gömülü


40

vektörler bir arama tablosu olarak kullanıldığından öğrenme aşamasında kategorik

veriler arasındaki ilişkiler de öğrenebilmektedir. Yapay sinir ağı modelinde kategorik

veriler gömme katmanından geçtikten sonra, birleştirme katmanında birleşmektedir.

Birleşme katmanında sonra yapay sinir ağına girdi olarak alınmakta ve öğrenme süreci

başlamaktadır.

Şekil II.20. Kategorik Verilerin Gömülü Vektör ile Sayısallaştırması

2.12. Programlama Dili

Vatansever’e [80] göre programlama dili, bilgisayar komutlarının bir araya

getirilmesiyle oluşturulmuş ve bilgisayar programının yapması gereken görevleri

anlatan komut dizeleridir. Programlama gelişen teknoloji ve ihtiyaçlara göre

farklılaşarak çeşitlenmektedir. Her programlama dili farklı uzmanlıklarda kullanılmak

üzere tasarlanmaktadır. Web tabanlı programlama dilleri, masaüstü uygulama

programlama dilleri, sistem programlama dilleri, yapay zeka uygulamaları için

kullanılan programlama dilleri gibi farklı uzmanlıklar bulunmaktadır. Bir uzmanlık

alanı için temel olan bir programlama dili başka bir uzmanlık için etkisiz
41

kalabilmektedir. Aslan’ın [81] belittiği üzere programlama dilleri bu dillerin

kullanılarak yazıldığı programlar, kaynaklar, dokümanlar genel olarak yazılım terimi

ile ifade edilmektedir. Yazılımlar uygulama alanlarına göre beş sınıfa ayrılmaktadır.

Mesleki ve ticari yazılımlar, bilimsel ve mühendislik yazılımları, yapay zeka

yazılımları, görüntü işleme yazılımları ve sistem yazılımlarıdır. Tüm bu

sınıflandırmalar için farklı programlama dilleri kullanılmaktadır. C# (C Sharp), Java,

PHP, Python gibi programlama dilleri günümüzde sıklıkla kullanılmaktadır.

2.12.1. C# (C Sharp) Programlama Dili

Liberty’in [82] belirttiği gibi C# programlama dili Microsoft .Net platfotmu ile

birlikte duyurulmuş güvenli ve yüksek performansa sahip bir .Net dilidir. .Net

platformu bir uygulama geliştirme platformudur. Bu platformda .Net ile uyumlu tüm

dillerin birlikte kullanılmasına olanak verilmektedir. Böylece farklı dillerin aynı proje

içinde kullanılması sağlanabilmektedir. .Net platformu diller arasında bir entegrasyon

sağlamaktadır. C# programlama dili modern programlama içeriği ile günümüzde hem

web hem de masa üstü uygulamalarının geliştirilmesinde en yaygın kullanulan

programlama dillerinden birisidir.

2.12.2. Java Programlama Dili

Altıntaş’ın [83] belirttiği üzere java programlama dili, nesne yönelimli, güvenli ve

internet uygulamaları için uygun bir dil olarak platform bağımsız bir yapıda

tasarlanmıştır. Platform bağımsızlığı, java dilinin tasarımının uygulamaların farklı

işletim sistemlerinde de çalıştırılabilmesinden gelmektedir. Java ile yazılmış

uygulamalar, java sanal makinesi (JVM Java Virtual Machine) teknolojisi ile işletim

sisteminden bağımsız olarak çalışabilmektedir. Java programlama dili ile C#


42

programlama dilini karşılaştırdığımızda, Java programlama dili işletim sisteminden

bağımsız bir platform sunurken, C# programlama dili, .NET uygulama geliştirme

platformu ile dilden bağımsız bir yapı ortaya çıkarmaktadır.

2.12.3. PHP Programlama Dili

Nixon’un [84] belirttiği üzere internet teknolojilerinin gelişmesiyle birlikte

internet platformundan beklentiler de farklılaşmaktadır. Bu beklentileri karşılamak için

internet platformu için farklı programlama dilleri tasarlanmaktadır. PHP internet

üzerinden çalışan basit, esnek ve dinamik bir programlama dilidir. Web sayfalarına

dinamiklik katarak programlanabilir sayfaların yapılmasına olanak vermektedir. PHP

programlama dili C ve Perl programlama dillerinin köklerinden miras alınarak

tasarlanmış bir sözdizimi (syntax) kullanmaktadır. Genel olarak sunucu tarafında

çalışan bir programlama dilidir.

2.12.4. Python Programlama Dili

Karaçay’ın [85] belirttiği üzere Python programlama dili sürekli geliştirilen web,

masaüstü, ağ, veritabanı, yapay zeka ve görüntü işleme gibi uygulamalarda kullanılan

ücretsiz kütüphanelere sahip güçlü, esnek ve nesne yönelimli bir programlama dilidir.

Özellikle veri madenciliği ve yapay zeka uygulamalarında tercih edilmektedir.

2.13. Programlama Kütüphanesi

Aslan’a [81] göre programlama kütüphanesi ya da yazılım kütüphanesi,

programcıların uygulama geliştirme sırasında kullandıkları, fonksiyon, sınıf, prosedür

gibi daha önce yazılmış, makine koduna çevrilmiş ve genellikle belli bir konuya yönelik

hazırlanmış kodların bütünüdür. Yazılım kütüphaneleri uygulama geliştiriciye hazır


43

kodlar sunarak, geliştirme aşamasına yardımcı olmaktadır. Kütüphane içindeki kodlar

optimize edildiği için yüksek performans sunmaktadır.


44

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİ


MODELİNİN BİLEŞENLERİ

Tez kapsamındaki model; karar verme aşaması için İşbirlikçi Filtreleme yöntemi,

bu yöntemin uygulanacağı verileri içinde barındıran Microsoft SQL Veritabanı

Sunucusu ve yöntemi yazılımsal olarak uygulamamıza sağlayan Pyhton programlama

dili (standart ktüpheneleri ve veri analizine yönelik kütüphaneleri) platformundan

oluşmaktadır.

Şekil III.1. Model Bileşenleri

Perakende sektöründen veriler kullanılarak işbirlikçi öneri yöntemleri

uygulanmaktadır. Bellek tabanlı yöntemlerden kullanıcı ve öğe bazlı yöntemler ile


45

model tabanlı modellerden tekil değer ayrışması ve yapay sinir ağları yöntemleri

kullanılmaktadır.

3.1. Python Programlama Dili

Aydemir’e [86] göre Python programlama dili kodlama yapısının esnekliği

sayesinde günümüzde farklı platformlarda uygulama geliştirmek için tercih

edilmektedir. Guido Van Rossum tarafından geliştirilmiş yüksek seviyeli,

yorumlanabilir ve nesneye yönelimli, Karaça’ya [85] göre de Python derlenebilen bir

programlama dilidir. Modüller halinde uygulama geliştirilebilir, yazdığımız kodları

derleyerek çalıştırabiliriz. Nesne yönelimli bir dil olduğundan nesne yönelimli

programlamanın getirdiği tüm özelliklerden yararlanmaktadır. Nesne yönelimli

programlama (OOP; Object Oriented Programming) uygulama içinde kullandığımız

birbirleriyle ilişkli tüm değişken ve fonksiyonları bir araya getirerek soyut yapıların

oluşturulabildiği bir programlama modelidir. Python da herşey bir nesne olarak kabul

edilmekte ve genişletilebir bir yapıya sahiptir [87]. Çok geniş standart kütüphanelerinin

dışında farklı uygulamalar için geliştirilmiş kütüphanelerin bulunması dilin esnekliğini

arttırmaktadır. Windows, Linux, macOS gibi farklı işletim sistemlerine

taşınabilmektedir. Python dilinin kullanılan iki sürümü vardır; 2.x. ve 3.x. En yaygın

kullanılan kütüphaneler tarafından desteklenen sürümü 3.x’dir. Karaçaya [85] göre

Python 3.x sürümünün 2.x sürümüne uyumluluğu yoktur. Python dilinin bazı

özellikleri;

• Nesne yönelimli bir programlama dilidir.

• Geliştirilebilir bir dildir. Farklı modüller eklenebilir.

• Farklı işletim sistemlerinde çalışabilmektedir.


46

• Ücretsiz olarak indirilebilir.

• Yazılan kodlar farklı programlama dilleri içinde kullanılabilir.

• Temel veri türleri dilin içine gömülmüştür.

• Hata bildirimi mevcuttur.

• Bellek yönetimi yapmaktadır.

• Yazılan kodlar ayrı birer kod olarak çalıştırılabilmektedir.

Python programlama dili IEEE Spectrum’a göre 2019 yılında en çok tercih edilen

programlama dili olarak gösterilmiştir [88].

Şekil III.2. Spectrum 2019 Yılı İlk 10 Programlama Dili


47

3.2. Pyhton Scikit-Learn Kütüphanesi

Scikit-Learn [89] açık kaynak kodlu bir kütüphanedir. Sınıflama, regresyon,

kümeleme ve makine öğrenimi görevleri için algoritmalar sağlamaktadır. Scikit-Learn

iyi belgelenmiş, kullanımı kolay ve çok yönlü program ara birimine (API Application

Programming Interface) sahip olmasından dolayı akademik araştırmalar için tercih

edilmektedir.

3.3. Python Surprise Kütüphanesi

Surprise [90] kütüphanesi öneri sistemleri için kullanımı kolay açık kaynaklı bir

Python kütüphanesidir. Öneri sistemlerine yönelik çalışmalar için gerekli metotları

barındırmaktadır. Surprise kütüphanesi belgelerinde içerdiği algoritmalarının her

ayrıntısı net olarak anlatılmaktadır, kullanıcılar hem yerleşik veri kümelerini

(Movielens, Jester) hem de kendi özel veri kümelerini kullanabilmektedir. Temel

algoritmalar, komşuluk yöntemleri, matris çarpanlarına ayırma tabanlı algoritmalar,

kullanıma hazır tahmin algoritmaları, çeşitli benzerlik yöntemlerine ait (Kosinüs,

Pearson Korelasyon Katsayısı) fonksiyonlar yerleşik olarak bulunmaktadır. Aynı

zamanda yeni algoritmaların uygulanmasına imkan vermektedir. Surprise kütüphanesi

basit Python öneri sistem motoru (SurPRISE, Simple Recommendation System Engine)

olarak ta isimlendirilmektedir.

Şekil III.3’de Surprise kutüphanesi ile Crab kütüphanesi karşılaştırılmaktadır.

Crab kütüphanesi Python için hazırlanmış bir öneri kütüphanesidir. İki kütüphanenin

beğenilirlik karşılaştırmasında (Stars) Surprise kütüphanesi 3343 beğeni, Crab

kütüphanesi 1048 beğeni almaktadır. Kütüphane içindeki kodların kalite

karşılaştırılmasında (Code Quality) Surprise kütüphanesi L4 kalitesinde, Crab


48

kütüphanesi L2 kalitesindedir. Kod kalitesi L1 ile L5 arasıda değişmektedir. L5 en

yüksek değeri göstermektedir. Kütüphanelerin kod karşılaştırılmaları L1 ile L5 arasında

beşli likert ölçeği kullanılarak yapılmaktadır.

Şekil III.3. Surprise ve Crap Pyhton Kütüphanelerinin Karşılaştırması [91]

Şekil III.4’de Surprise kütüphanesi ile Python-Recsys kütüphanesi

karşılaştırılmaktadır. Python-Recsys kütüphanesi de Python için hazırlanmış bir öneri

kütüphanesidir. İki kütüphanenin beğenilirlik karşılaştırmasında (Stars) Surprise

kütüphanesi 4576 beğeni, Python-Recsys kütüphanesi 1356 beğeni almaktadır.

Kütüphane içindeki kodların kalite karşılaştırılmasında Surprise kütüphanesi ve

Python-Recsys kütüphanesi L4 kalitesindedir.


49

Şekil III.4. Surprise ve Python-Recsys Pyhton Kütüphanelerinin Karşılaştırması [92]

Şekil III.5’de Surprise kütüphanesi ile Keras kütüphanesi karşılaştırılmaktadır.

Keras kütüphanesi de Python için hazırlanmış bir öneri kütüphanesidir. İki

kütüphanenin beğenilirlik karşılaştırmasında (Stars) Surprise kütüphanesi 4576 beğeni,

Keras kütüphanesi 50,364 beğeni almaktadır. Kütüphane içindeki kodların kalite

karşılaştırılmasında Surprise kütüphanesi L4, Keras kütüphanesi L2 kalitesindedir.


50

Şekil III.5. Surprise ve Keras Kütüphanelerinin Karşılaştırması [93]

3.4. Python Keras Kütüphanesi

Kılınç [2] ve arkadaşlarına göre Keras kütüphanesi yapay zeka, makine öğrenmesi

ve derin öğrenme çalışmalarında kullanılan güçlü ve kolay bir kütüphanedir. Keras

kütüphanesinde derin öğrenme algoritmaları hazır olarak bulunmaktadır. Keras’ın [94]

kendi dokümanlarına göre kullanıcı dostu program arabirimi sunarak, algoritmaların

karmaşıklığını azaltan bir kütüphanedir. Kullanıcı hatalarında açıklayıcı hata

bildirimleri yapması, Keras kütüphanesinin anlaşılmasını kolaylaştırmaktadır. Keras

daha düşük seviyeli Tensorflow derin öğrenme kütüphanesine entegre edilmiştir.

Programlama dillerinin ya da kütüphanelerinin seviyesini Aslan [81] “Seviye bir


51

programlama dilinin insan algılamasına olan yakınlığının bir ölçüsüdür.” şeklinde

tanımlamaktadır.

Keras kütüphanesi Tensorflow kütüphanesinin üzerine geliştirilmiş daha yüksek

seviyeli bir kütüphanedir ve içerdiği fonksiyonlar sayesinde daha kolay derin öğrenme

modelleri oluşturulabilmektedir.

3.5. Python Pandas Kütüphanesi

Banik’e [44] göre Pandas kütüphanesi yüksek performanslı, kullanımı kolay,

farklı veri yapılarını kullanabileceğimiz ve veri analiz olanaklarını barındıran bir

kütüphanedir. Pandas kütüphanesi kendi C dilini kullanarak Pyhton dilinin yavaş

olduğu noktalarda optimizasyon yapmaktadır. R istatistiksel kütüphanesinden series ve

dataframe gibi güçlü iki data yapısını pyhton diline katmıştır. Pandas dış ortamdaki veri

dosyalarının uygulama içine katılmasını kolaylaştırmıştır. JSON, CSV, HDF5, SQL,

NPY, XLSX gibi dosya biçimlerindeki verilerin kolayca okunabilmesini sağlamaktadır.

3.6. Python Numpy Kütüphanesi

Numpy (Numerical Python) bilimsel ve mühendislik alanlarında kullanılan açık

kaynak kodlu bir Python kütüphanesidir [95]. Sayısal verilerle çalışmak için kullanılan

bir standart olup, Python eko sisteminin merkezinde yer almaktadır. Numpy

kütüphanesi çok boyutlu dizi ve matris veri yapılarını barındırdığından dizi ve matrisler

üzerinde çalışan çok güçlü matematiksel fonksiyonları içermektedir.

3.7. Python Tensorflow Kütüphanesi

Tensorflow makine öğrenimi uygulamaları için kullanılan çok geniş bir

kütüphanedir [96]. Derin sinir ağı modelleri için eğitim ve çıkarım algoritmaları,

bilgisayar bilimi, konuşma tanıma, görüntü tanıma, robotik, doğal dil işleme, coğrafi
52

bilgi çıkarma gibi farklı algoritmaları içermektedir. Tensorflow web, mobil, IoT

(Internet of Things) gibi farklı platformlar için de uygun kütüphaneler sunmaktadır.

Google tarafından geliştirilen kütüphane; 2015 yılında duyurulmuştur. Python

kullanılarak geliştirilen Tensorflow kütüphanesi geldiği noktada C#, C++, Java gibi

diller tarafından da desteklenmektedir.

3.8. Python Seaborn Kütüphanesi

Waskom’a [97] göre Seaborn Python için hazırlanmış veri görselleştirme ve

istatiksel grafikler çizmek için kullanılan bir kütüphanedir. Çizim işlemleri Python veri

setlerinden yapılabilinmektedir. Seaborn kütüphanesi kullanıcıların istatiksel çizim

işlemleri yapabilmesi için yüksek seviyeli bir arayüz sunmaktadır. Birden fazla

değişken arasındaki ilişkileri incelemek için veri seti temelli bir kütüphanedir.

3.9. Sklearn.Decomposition Kütüphanesi

Bu modül PCA gibi matris ayrıştırma algoritmalarını içermektedir. PCA çok

değişkenli bir veri kümesini ayrıştırmak için kullanılmaktadır. Bir çok makine öğernim

uygulaması verilerin görselleştirilmesine yardımcı olmaktadır. 2 ve 3 boyutlu verileri

görselleştirmek çok zor olmamaktadır. 4 boyutlu verileri 2 veya 3 buyuta indirgemek

için PCA kullanılan yöntemlerdendir.

3.10. Python Pyodbc Kütüphanesi

Kleehammer’a [98] göre Pyodbc kütüphanesi veritabanlarına erişimi kolaylaştıran

açık kaynaklı bir Python kütüphanesidir. Kütüphanenin sağladığı metotlar veritabanı

ile bağlantı kurulmasını ve SQL komutlarının çalıştırılmasını sağlamaktadır.


53

3.11. Spyder Uygulama Geliştirme Platformu

Karaçay’a [85] göre Spyder, Python uygulamalarının geliştirilmesi için kullanılan

bir uygulama geliştirme platformudur. Spyder uygulama geliştirme platformu kodların

renklendirilmesi, tamamlanması, ekranın farklı özelliklerin görülebilmesi amacıyla

ayrılabilir özelliklere sahiptir. Pyhton programlama dili için bir yorumlayıcıdır.

Spyder [99] Python programlama dili ile geliştirilmiştir. Geliştirme aracı çeşitli

bilimsel analiz ve araştırmalar için bilimsel bir geliştirme platformu sunmaktadır.

Gelişmiş kod çalıştırma özelliği bulunmaktadır. Yazılmış kodlar satır olarak

çalıştırılabildiği gibi sadece seçilen kodlar da çalıştırılabilmektedir. “Yeniden çalıştır”

gibi etkin kod yürütme özelliği bulunmakta, gerçek zamanlı kod analizi bulunmaktadır.

Hatalar ve uyarılar anlık olarak programcıya bildirilmektedir.

3.12. Microsoft SQL Veritabanı

Jorgensen [100] ve arkadaşlarına göre SQL Server; veritabanı motoru (Database

Engine), hizmetler (Services), iş zekası araçları (Business Intelligence Tools), bulut

işlevselliği (Cloud Functionality) ile bütünleşik bir platformdur. SQL Server’ın kökleri

Sybase veritabanına dayanmaktadır. Microsoft 1989 yılında Sybase, Ashton-Tate ile

birlikte SQL Server 1.0 ‘ı duyurmuştur. 1993 senesinde Microsoft Windows NT için

SQL Server 4.2.1 sürümünü piyasaya sürerek kendi kodlarını geliştirmeye başlamıştır.

1995’te SQL Server 6.0 sürümünü yükseltilmiş 6.5. sürümünü 1996 yılında piyasaya

sürmüştür. Bu sürüm Enterprise Manager ve SQL Server Agent özelliklerinin ilk

versiyonlarıydı. 1999 senesinde piyasaya sürülen SQL Server 7.0 Microsoft tarafından

veritabanı motorunun yeniden yazılmış hali idi. Bu sürüm kod olarak Microsoft

tarafından yazılan ilk SQL Server veritabanı olmaktadır. SQL Server 2000 (sürüm 8)
54

32 bit versiyonu daha iyi performans, XML (Extensible Markup Language) desteği,

kullanıcı tanımlı işlevler, raporlarma araçları ve veri madenciliği araçlarının ilk

sürümleriyle birlikte 2003 yılında piyasaya sürülmüştür. Sonraki yıllarda SQL Server

2005, 2008, 2008R2, 2012, 2014, 2016, 2017 ve 2019 sürümleri farklı özelliklerle

piyasaya sürülmüştür.

Riordam’a [101] göre SQL Server’ın kullanıcı arayüzü SQL Server Yönetim

Panelidir (SQL Server Management Studio). T-SQL (Transact SQL) kod yazımı iş

zekası servisleri, raporlarma servisleri, entegrasyon servisleri ve analiz servislerini

kullanabilmek için SQL Server veri araçları bulunmaktadır. Yönetim paneli

kullanılarak yeni bir veritabanı yaratabilir ya da daha önce yaratılmış olan veritabanı

üzerinde değişiklik yapılabilmektedir. Kullanıcı yetkilendirmesi ile veritabanına erişim

kullanıcı bazında yetkilendirilerek veritabanın daha güvenli çalışması sağlanmaktadır.

Tablolar veritabanındaki en temel veri depolama birimleridir. SQL Server içinde

tablolar satır ve sütunlardan oluşmakta, sütunlar tabloların veri alanlarını ve tür

bilgisini, satırlar ise verinin kendisini tutmaktadır. Kullanıcı yetkilendirmesi tablolar

üzerinde de yapılmaktadır. Bazı kullanıcılara sadece kullanıcı yetkisi verilebilirken bazı

kullanıcılara tablodan veri silme yetkisi verilebilmektedir. Tablolar arasında ilişkiler

kurularak veriler arasında bağlar kurulabilmektedir. Tablolarda saklanan veriler T-SQL

ile sorgulanabilir (SELECT), tabloya kayıt eklenebilir (INSERT), değişiklik yapılabilir

(UPDATE), tablodaki veriler silinebilir (DELETE). Temel veritabanı işlemleri olan bu

çalışmalar veritabanı yönetim paneli üzerinden yapılabildiği gibi, saklı yordamlar

(stored procedure) aracılığı ile farklı programlama dilleri içinden saklı yordamların

çağrılması ile de yapılabilmektedir. Ben-Gen’e [102] göre saklı yordamlar T-SQL


55

komutlarını barındıran sunucu tarafında çalışan rutinlerdir. Giriş, çıkış parametreleri

alabilir, sonuç döndürebilirler. Bir kullanıcıya tablolar üzerinde işlem yapma yetkisini

doğrudan vermek yerine saklı, yordamları çalıştırma yetkisi verilerek kullanıcının

tablodan doğrudan veri silmesi engellenebilir. Ayrıca saklı yordamlar ile bu işlem

kontrollü olarak yaptırılabilir. Saklı yordamlar ağ üzerindeki veri trafiğini azalttığından

performans avantajı sağlamaktadır. Kullanıcı uygulamasının sadece saklı yordamın

adını ve parametrelerini SQL Server’a göndermesi yeterlidir. SQL Server

ölçeklenebilir, yüksek performanslı uygulamalar ve çözümler oluşturulabilmesi için

fırsatlar sunmaktadır [100].

3.13. İşbirlikçi Filtreleme Yöntemi

Burke’ye [103] göre işbirlikçi filtreleme yöntemleri kullanıcıların geçmiş ürün

etkileşimlerinden yararlanmaktadır. Kullanıcılar arasındaki etkileşim ile benzerlik

bulunarak ürün önerisi oluşturulmaktadır. İşbirlikçi filtreleme yöntemleri birden fazla

kullanıcıdan kollektif olarak sağlanmış dereceleri kullanarak, derecelendirilmemiş

ürünler için derecelendirme tahmininde bulunmaktadır. İşbirlikçi yöntemler

kullanıcıların geçmiş ürün etkileşimlerinden başka bir veriye ihtiyaç duymamaktadır.

Aggarwal’a [30] göre işbirlikçi filtreleme yöntemlerinde temel düşünce; geçmişte

benzer düşüncede ya da benzer ilgi alanlarından olan kullanıcıların gelecekte de aynı

düşüncede olacakları şeklindedir. Benzer kullanıcılar benzer davranış modeli

göstermektedir. Benzer öğeler benzer derecelendirmeler almaktadır. Öneri

oluştururken kullanıcı-öğe matrisinden yararlanımaktadır. Matrisin her bir hücresi

derecelendirmeyi göstermekte, fakat işbirlikçi yöntemlerdeki zorluk derecelendirme

matrisinin az olmasından kaynaklanmaktadır. Kullanıcıların ürünler üzerindeki


56

değerlendirme etkileşimi iki şekilde olmaktadır; kullanıcılardan doğrudan alınan

bilgiler ve dolaylı olarak alınan bilgilerdir. Kılınç [2] ve arkadaşlarına göre

kullanıcıların öğeleri belirli bir ölçek içinde beğenmesi/beğenmemesi veya yorumu

öğeler için doğrudan alınan etkileşimidir. Ürün satın alma, sepete ekleme, tıklama

sayısı gibi değerler dolaylı olarak alınan etkileşimdir. İşbirlikçi filtreleme yöntemindeki

temel fikir, kullanıcıların derecelendirme yapmadıkları ürünler için daha önce

derecelendirdikleri ürünler üzerinden derecelendirme tahmini yapmasıdır. Ekstrand

[42] ve arkadaşlarına göre işbirlikçi filtreleme yöntemi önerilerini kullanıcıların

geçmişteki değerlendirmelerine dayandıran bir algoritmadır. Aktif kullanıcı ile diğer

kullanıcıların tercihleri konusunda bir benzerlik varsa, diğer kullanıcıların tercihlerini

aktif kullanıcının da tercih edeceğini varsaymaktadır. Kullanıcıların öğelerle olan

etkileşiminden kullanıcı profili oluşturulmaktadır. Kullanıcı profiline benzer olan

kullanıcıların beğendikleri öğeler aktif kullanıcı için önerilmektedir. Kullanıcı öğe

etkileşimi kullanıcı-öğe matrisinde tutulmaktadır. Bu matris zaman içinde oluşan

derecelendirmeleri tutmaktadır. Kullanıcıların öğeler için yaptıkları

derecelendirmelerle kullanıcı profili daha belirgin olmaktadır. Daha belirgin olan

kullanıcı-öğe matrisi, öneri doğruluğunu arttırmaktadır.


57

Şekil III.6. Kullanıcı-Ürün Matrisi [104]

İnternet üzerinde en iyi bilinen e-ticaret firması olan Amazon.com Inc her

kullanıcısı için öneri oluşturmakta aynı zamanda önerileri bir pazarlama aracı olarak ta

kullanmaktadır. McKinsey & Company'ye [105] göre Amazon.com Inc’nin gelirinin %

35’i öneri yöntemlerinin oluşturduğu sonuçlardan gelmektedir. Netflix kullanıcıların

izledikleri filmlerinin %75’i kişiselleştirilmiş öneri yöntemlerinin sonuçlarından

gelmektedir. Aggarwal’ın [30] belirttiği üzere işbirlikçi filtreleme yönteminde iki temel

metot vardır; model tabanlı yöntemler ve bellek tabanlı yöntemler. Bellek tabanlı

yöntemler aynı zamanda en yakın komşu tabanlı işbirlikçi filtreleme algoritmaları

olarak da bilinmektedir. Kullanıcı-öğe matrisinden yararlanarak kullanıcı ya da ürün

benzerliğini bulunur, sonrasında en yakın komşu algoritmasıyla aktif kullanıcıya benzer

kullanıcıları ya da aktif öğeye benzer öğeleri bularak öneri oluşturmaktadır. Model

tabanlı metotlar makine öğrenmesi, veri madenciliği ve yapay sinir ağları yöntemlerini

kullanarak öneri oluşturmak için kullanılan yöntemlerdir. Theobald’a [106] göre öneri

yöntemleri makine öğrenimi başlığı altında olup veri madenciliği yöntemlerinide

kullanmaktadır.
58

Şekil III.7. Öneri Yöntemlerinin Veri Bilimindeki Yeri [106]

3.14. Bellek Tabanlı Yöntemler

3.14.1. Kullanıcı Tabanlı Filtreleme Yöntemi

Falk’a [37] göre kullanıcı tabanlı filtreleme yönteminin temelinde aktif kullanıcı

ile benzer olan kullanıcıların beğendikleri ürünlerin aktif kullanıcı için de önerilebilir

olması fikri vardır. Aktif kullanıcının tüketim modeline benzer kullanıcıların bulunması

yöntemin temelini oluşturmaktadır. Kullanıcının etkileşimde bulunduğu ürünler için

yaptığı derecelendirmelerden bir vektör oluşturulmaktadır. Benzerlik fonksiyonları ile

oluşan vektör üzerinden benzerlik değerleri hesaplanmaktadır. Benzerlik değerleri iki

kullanıcının ne kadar benzediği bilgisini vermektedir. Aggarwal’a [30] göre kullanıcı

tabanlı filtreleme yönteminde aktif kullanıcının geçmişteki ürün derecelendirmesine

benzer olan kullanıcılar benzer davranışlar gösterecek fikri bulunmaktadır. Şekil

III.8’de Kullanıcı 1 ile aynı ürünleri beğenen kullanıcılardan sağlanan

derecelendirmelere göre Kullanıcı 1 ile Kullanıcı 3 benzer beğenilere sahiptir. Bu

sebeple A ürünü Kullanıcı 3 için de önerilmektedir.


59

Şekil III.8. Kullanıcı Tabanlı Filtreleme Yöntemi [107]

Devooght’a [108] ve arkadaşlarına göre kullanıcı tabanlı filtreleme yöntemi

kullanıcıların derecelendirmelerine bakmaktadır. Aktif kullanıcının

derecelendirmesine yakın önerilerin üretilmesi için aktif kullanıcının

derecelendirmesine benzer olan en yakın komşu bulunmaktadır. Bulunan komşunun

derecelendirdiği ürünler üzerinden öneri oluşturulmaktadır. Kullanıcı tabanlı filtreleme

yönteminde bir kullanıcı ile geçmişte benzer ürünleri beğenen veya satın alan diğer

kullanıcılar gelecekte de benzer ürünleri beğeneceği fikri bulunmaktadır. Banik’e [44]

göre bu yöntem aktif kullanıcıya benzeyen kullanıcıların beğendikleri ürünleri

önermektedir. Amazon.com Inc bu modeli kullanmaktadır.

Şekil III.9. Kullanıcı Tabanlı Yöntemin İşleyişi


60

Benzer kullanıcılar aynı öğe için benzer derecelendirmelere sahiptirler. İki

kullanıcının benzerliğine bakılırken iki kullanıcınında ortak derecelendirdiği öğelerin

oluşturduğu veri dizisi üzerinden benzerlik hesaplanmaktadır. Hesaplama aşamasında

bilinmeyen öğeler dikkate alınmamaktadır.

3.14.2. Öğe Tabanlı Filtreleme Yöntemi

Öğe tabanlı filtreleme yöntemi 1998 yılında Amazon.com Inc tarafından tanıtıldı.

Banik’e [44] göre öğe tabanlı filtreleme yönteminde eğer iki öğe aynı kullanıcıdan

benzer derecelendirmeler almışsa ürünlerin benzer oldugu varsayılmaktadır. Öğe

tabanlı filtreleme yönteminde öğeler arasındaki benzerlikler derecelendirme

matrisinden hesaplanmaktadır. Bu benzerliklere dayanarak kullanıcının

derecelendirmediği öğe için derecelendirme tahmini yapılmaktadır. Öğe tabanlı

filtreleme yönteminde kullanıcının etkileşimde bulunduğu öğelerin diğer kullanıcılarla

olan etkişimlerinden yola çıkarak birbirine en çok benzeyen öğeler bulunmaktadır. En

yakın k sayıdaki komşunun ürünlerden öneri oluşturulmaktadır. Öğe tabanlı filtreleme

yönteminde kullanıcıların daha önce beğendikleri ürünlere benzeyen ürünleri

beğenecekleri ve aynı kullanıcılar tarafından beğenilmiş ürünlerin benzer olduğu

varsayılmaktadır. Öğe tabanlı filtreleme yönteminde kullanıcılardan ziyade ürünlerle

ilgilenildiği için benzerliklerin de ürünler arasında olması gerekmektedir.


61

Şekil III.10. Öğe Tabanlı Filtreleme Yöntemi [107]

Aggarwal’a [30] göre Şekil III.10’ da Kullanıcı 1, A ürünü ve C ürünü

beğenmektedir. Bu durumda A ve C ürünü benzer olarak düşünülmektedir. Bu duruma

göre sadece C ürününü beğenen kullanıcı 3 için A ürünü öneri olarak sunulmaktadır.

Şekil III.11. Öğe Tabanlı Yöntemin İşleyişi

İki öğenin benzerliğine bakılırken iki öğenin aynı kullanıcı tarafından

derecelendirdiği veri dizisi üzerinden benzerlik hesaplanmaktadır. Hesaplama

aşamasında bilinmeyen öğeler dikkate alınmamaktadır. Kullanıcının iki öğeyi de

derecelendirmesi durumunda hesaplamaya katılmaktadır.


62

3.15. Kullanıcı ve Öğe Tabanlı Filtreleme Yöntemlerinin Karşılaştırması

Boström [109] ve arkadaşlarına göre kullanıcı tabanlı filtreleme yöntemi

kullanıcıların öğelerle olan etkileşimlerinden öğelere verdikleri derecelendirmelerden

yol çıkarak benzer kullanıcıları bulmaktadır. Kullanıcılar genel olarak tüm öğelerle

etkileşimde bulunamayacaktır. Öneri, kullanıcıların etkileşimde bulundukları öğeler

üzerinden yapıldığından daha kişiselleştirilmiş bir öneri olmaktadır. Öğe tabanlı

filtreleme yöntemi benzer öğeleri bulmaktadır. Öğe tabanlı filtreleme yönteminde

kullanıcının etkileşimde bulunduğu ürünlerden birisi aktif öğe olarak seçilmektedir.

Kullanıcının seçtiği öğeye benzeyen en yakın öğeler öneri olarak sunulmaktadır.

Aggarwal’a [30] göre öğe tabanlı filtreleme yönteminde kullanıcının etkileşimde

bulunduğu öğelerin benzerlerinden öneri üretileceği için kullanıcının öğe

derecelendirmesi önerinin performansında etkili olmaktadır. Bu durum kullanıcı tabanlı

filtreleme yönteminde bulunmamaktadır. Derecelendirmeleri örtüşen ancak farklı ilgi

alanları olan kullanıcılardan öneri oluşturulabilmektedir. Öğe tabanlı filtreleme

yöntemleri derecelendirmelerdeki değişiklikler karşısında daha kararlıdır. Genel olarak

kullanıcı sayısı ürün sayısından daha fazladır. Bu durumda iki kullanıcı karşılıklı olarak

daha az sayıda derecelendirilmiş ürünle karşı karşıya kalabilmektedir, fakat iki ürünün

birlikte derecelendirilmiş daha fazla kullanıcısının bulunması daha olasıdır. Kullanıcı

tabanlı filtreleme yöntemlerinde yeni derecelendirmelerin eklenmesi benzerlik

ölçüsünün değişmesine sebep olmaktadır. Bu durum öğe tabanlı filtreleme yönteminde

aynı şekilde hissedilmemekte ve değişiklikler karşısında daha kararlı durmaktadır. Öğe

tabanlı yöntemlerde aktif öğeye benzeyen öğeler bulunur ve aktif kullanıcının benzer
63

öğeler üzerindeki derecelendirmeleri aktif öğenin derecesinin tahmin edilmesinde

kullanılmaktadır.

Şekil III.12. Kullanıcı Tabanlı Filtreleme ve Ürün Tabanlı Filtreleme [43]

3.16. Benzerlik Hesaplaması

Falk’ın [37] belirttiği üzere benzerlik hesaplamaları çok farklı yöntemlerle

yapılmaktadır. Kişiselleştirilmiş öneriler her zaman benzerlik hesaplamaları

içermektedir. Kullanıcıların derecelendirmeleri üzerinden ya da öğelerin içerikleri

üzerinden benzerlik yöntemleri kullanılarak öğe veya kullanıcıların benzer olup

olmadıkları hesaplanmaktadır. Kullancıların derecelendirme vektörleri arasındaki

mesafenin yakınlığı veya uzaklığı kullanıcılar arasındaki benzerliği göstermektedir.

Benzerlik iki kişinin benzer ilgi alanlarına sahip olması olarak tanımlanmakla birlikte

iki kişi arasında benzerlik bulabilmek için sadece derecelendirdikleri öğeler değil,

demografik verilerle de benzerlik hesaplanabilmektedir. Shimodaira’ya [110] göre

benzerlik iki vektörün farkı olarak anlaşılmaktadır. Öneri sistemlerinde benzerlik


64

hesaplamak için öklid mesafesi, minkowski mesafesi, manhanttan mesafesi, Pearson

Korelasyon Katsayısı, Kosinüs benzerliği gibi yöntemler kullanılır.

3.16.1. Öklid Mesafesi

Shimodaria’ya [110] göre öneri sistemlerinde en yaygın olarak kullanılan

yöntemlerdendir. İki nokta arasındaki doğrusal mesafeyi ölçmek için kullanılmaktadır.

Öklid geometrisine göre bir üçgenin kenarları arasındaki ilişkiyi ilk kuran teorem

pisagor teoremidir. Pisagor teoremi, üçgenin c hipotenüs kenarı ile üçgenin diğer

kenarları olan 𝑎 ve 𝑏 arasındaki ilişkiyi şöyle gösterir.

𝑎( + 𝑏( = 𝑐 ( (III.1)

𝑎 ve 𝑏 kanarlarının uzunlukları biliniyorsa 𝑐 kenarının hesaplanması şu şekilde

yapılmaktadır.

𝑐 = √𝑎( + 𝑏( (III.2)

Öklid mesafesi bu teoremden doğru oluşturulmuştur.

𝑟(𝑥, 𝑦) = V(𝑥6 − 𝑦6 )( + (𝑥( − 𝑦( )( (III.3)

𝑟(𝑥, 𝑦) = `∑9%a6(𝑥% − 𝑦% )( (III. 4)

İki boyutlu düzlemde veriler (değerler) 𝑥 ve 𝑦 koordinatlarının keşismesi ile ifade

edilir. Örneğin iki boyutlu bir düzlemde bir A noktası (𝑥6 ,𝑦6 ) olarak bir B noktası ise

(𝑥( , 𝑦( ) olarak ifade edilir. A ile B arasındaki uzaklık (mesafe) yukarıdaki formül ile
65

hesaplanmaktadır. 𝑘 düzlemde yer alan toplam nokta (veri, değer) sayısını ifade

ederken, 𝑖 değeri hesaplanmakta olan noktayı göstermektedir.

3.16.2. Manhattan Mesafesi

İki nokta arasındaki mesafe yatay ve dikey şeklinde ise manhattan mesafesi

kullanılmaktadır.

𝑟(𝑥, 𝑦) = ∑9%a6|𝑥% − 𝑦% | (III.5)

İki nokta arasındaki mesafe ölçümü iki nokta arasındaki farkın mutlak toplamı ile

bulunmaktadır. Minkowsky fonksiyonundaki p değerinin 1 olması ile aynıdır.

3.16.3. Minkowski Mesafesi

Singh [111] ve arkadaşlarına göre minkowski mesafesi genelleştirilmiş uzaklık

ölçüsüdür. İki veri noktası arasındaki mesafeyi farklı şekillerde hesaplamak için

kullanılır.

𝑟(𝑥, 𝑦) = (∑9%a6|𝑥% − 𝑦% | c ) 6/c (III.6)

𝑝 = 1 Manhattan Mesafesi

𝑝 = 2 Öklid Mesafesi (𝑝’nin 2 olması durumunda |𝑥% − 𝑦% | c ifadesiyle karesi

alınacak, 1⁄𝑝 ifadesiyle kare kökünün alınacağı belirtilmektedir.)

3.16.4. Pearson Korelasyon Katsayısı

Aggarwal’a [30] göre 𝑢 ve 𝑣 kullanıcılarının derecelendirdikleri öğelerden oluşan

vektörler arasındaki benzerliği yakalayan ölçülerden birisi Pearson Korelasyon

Katsayısıdır. Hem kullanıcı 𝑢 hemde kullanıcı 𝑣’nin derecelendirdiği öğelerin


66

oluşturduğu vektörler üzerinden katsayı hesaplanmaktadır. Kullanıcılar farklı

ölçeklerde derecelendirmeler sunabilmektedir. Bir kullanıcı tüm öğeleri yüksek oranla

derecelendirirken, başka bir kullanıcı olumsuz olarak değerlendirebilir. Bu nedenle

ortalama merkezli puanı belirlemeden önce satır bazında ortalanması gerekmektedir.

Bir 𝑗 öğesi için, bir 𝑢 kullanıcısının ortalama merkezli derecelendirmesi 𝑠g& , ortalama

derecelendirmesi 𝜇g , 𝑟g& derecesinden çıkarılması olarak tanımlanmaktadır.

𝑠g& = 𝑟g& − 𝜇g (III.7)

Pearson Korelasyon Katsayısı Tomar ve arkadaşlarına göre [112] en yaygın

yöntemlerden biridir. İki vektör arasındaki korelasyonu göstermekte ve +1 ile -1

arasında bir değer üretmektedir. +1 iki vektör arsında güçlü bir ilişkiyi göstermekte, -1

negatif bir ilişkiyi göstermektedir. Sıfır olması iki vektör arasında herhangi bir bağ

olmadığını göstermektedir.
∑ n∈r ∩r (Qmn F om ) .( Qpn F op )
𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑢, 𝑣) = 𝑝𝑒𝑎𝑟𝑠𝑜𝑛(𝑢, 𝑣) = m p
(III.8)
`∑n∈rm∩rp (Qmn F om ) t.`∑n∈rm∩rp(Qpn F op ) t

Pearson Korelasyon Katsayısı ile benzerlik hesaplanırken iki kullanıcının da

derecelendirdiği öğeler kullanılmaktadır (𝐼g ∩ 𝐼U ). Derecelendirme ortalaması

hesaplanırken sadece derecelendirme yapılmış öğeler kullanılmaktadır. Şekil III.13’e

göre ortalama derecelendirme değerleri aşağıdaki gibi hesaplanmaktadır.

𝑈1 = (4 + 5 + 4 + 3 + 3) / 5 = 3.8 (III.9)

𝑈2 = (3 + 3 + 3 + 2 + 4 + 5) / 6 = 3.33 (III.10)
67

Şekil III.13. Derecelendirme

3.16.5. Kosinüs Mesafesi

Jannach [39] ve arkadaşlarına göre iki vektör arasındaki benzerlik vektörlerin

arasındaki açının Kosinüs değerinden hesaplamaktadır. Fonksiyon 0 ve 1 arasında

değer üretmektedir. Öneri yöntemlerinde çok kullanılan yöntemlerden birisidir. Eğer

açı değeri 0 ise Kosinüs benzerliği 1, açı değeri 90 ise Kosinüs benzerliği 0 olarak sonuç

üretmektedir. Şekil III.14 ‘de A ve B vektörleri arasındaki açının Kosinüs değeri

vektörlerin benzerliğini belirlemek için kullanılmaktadır.

Şekil III.14. Kosinüs Benzerliği [113]


68

Şekil III.15. Kullanıcılar Arasındaki Kosinüs Benzerliği [37]

Yukarıdaki şekilde (Şekil III.15) yer alan kullanıcıların oluşturduğu vektörler

arasındaki açılara bakıldığında K1 ve K3 kullanıcılarının birbirlerine daha yakın olduğu

dolayısıyla daha benzer olduğu gözlemlenmektedir. K1 ve K2 kullanıcıları arasındaki

açı daha büyüktür, bu durumda K1 ve K2 arasındaki benzerlik daha küçük olmaktadır.


Q .Q
𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑖, 𝑗) = 𝑐𝑜𝑠(𝑖, 𝑗) = ‖Q ‖(A }Q] }( (III.11)
A ]

∑ QmA .Qm]
𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑖, 𝑗) = 𝑐𝑜𝑠(𝑖, 𝑗) = (III.12)
V∑ QmA t .`∑ Qm] t

Farklı kullanıcılar farklı derecelendirme ölçekleri kullanabilmektedir. Sarwar

[114] ve arkadaşlarına göre kullanıcıların ortalama derecelendirmelerini hesaba katarak

Ayarlanmış Kosinüs Benzerliği (Adjusted Cosine Similarity) ortaya koymuşlardır.

Kullanıcıların öğe derecelendirmeleri kullanıcının ortalama derecelendirmesinden

çıkarılmaktadır.
69

∑m∈„ ∩„ (QmA F Q̅m ).(Qm]F Q̅m )


A ]
𝐴𝑦𝑎𝑟𝑙𝑎𝑛𝑚𝚤ş 𝐾𝑜𝑠𝑖𝑛ü𝑠(𝑖, 𝑗) = (III.13)
t t
`∑m∈„A ∩„](QmA F Q̅m ) .`∑m∈„A ∩„](Qm] F Q̅m )

Aggarwal’a [30] göre bu benzerlik hesaplamasına ayarlanabilir Kosinüs benzerliği

denilmektedir. Hesaplama yapmadan önce derecelenedirmeler ortalanmaktadır.

Kullanıcının iki öğeyi de derecelendirmiş olması önemli olmaktadır (𝑈% ∩ 𝑈& ). İki öğeyi

de derecelendiren kullanıcılardan oluşan veri dizisi üzeriden benzerlik

hesaplanmaktadır.

3.16.6. Jaccard Benzerlik Katsayısı

Jannach [39] ve arkadaşlarına göre Jaccard indeksi ya da Jaccard benzerlik

katsayısı iki veri seti arasındaki mesafeyi ölçmek için kullanılmaktadır. Tüm öğeler veri

seti altında toplanmaktadır. Kullanıcıların derecelendirdiği ya da satın aldığı ürünler ise

kullanıcıların veri setini oluşturmaktadır. Kullanıcıların arasındaki mesafe ya da

benzerlik bu veri seti kullanılarak hesaplanmaktadır. Falk’a [37] göre Jaccard benzerliği

iki vektörün kesişiminin vektörlerin birleşim oranı şeklinde hesaplanmaktadır.

𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘&ICCIQ†(%,&) a | A∩] | (III.14)


| A∪] |

𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘&ICCIQ†(%,&)a AnA nmˆˆ‰Š‹Œ‹Š‹Š •‰ ‰ˆ•‹ğ‹ KLM‰n öğ• •‰‘‹•‹ (III.15)


AnA nmˆˆ‰Š‹Œ‹Š‹Š ‰ˆ•‹ğ‹ üLüŠ •‰‘‹•‹

Temel olarak iki kullanıcının paylaştıkları öğelerin sayısının paylaşabilecekleri

öğelerin sayısına oranı olarak tanımlanmaktadır. Kullanıcıların satın aldığı ya da

derecelendirdiği ürünler için 1, almadıkları için 0 değeri kullanılarak tekil değerlerden

oluşan bir veri seti hazırlanabilmektedir.


70

Şekil III.16. Jaccard Mesafesi Veri Seti

Kullanıcılar arasındaki benzerliği bulmak için kullanıcıların birlikte aldıkları aynı

ürün sayısı, iki kullanıcının birlikte aldığı ürün sayısına bölünmektedir. Şekil III.16’ya

göre K1 kullanıcısı ile K2 kullanıcını karşılaştırıldığından Jaccard benzerliği aşağıdaki

gibidir.
(
𝑗𝑎𝑐𝑐𝑎𝑟𝑑“6,“( = ” = 0,5 (III.16)

3.17. Derece Tahmininin Hesaplanması

Jannach [39] ve arkadaşlarına göre aktif kullanıcıya benzeyen kullanıcılar veya

aktif öğeye benzeyen öğeler bulunduktan sonra, aktif kullanıcının derecelendirmediği

öğeler için derece tahmini yapılmaktadır. Kullanıcı tabanlı filtreleme yöntemlerinde

aşağıdaki formül kullanılmaktadır.


∑› ∈• ™THšTQZ%9(I,™).(Q›,œ F Q̅› )
𝑡𝑎ℎ𝑚𝑖𝑛(𝑎, 𝑝) = ˜˜˜
𝑟I + ∑› ∈• ™THšTQZ%9(I,™)
(III.17)

𝑟žI : kullanıcı 𝑎 ‘nin ortalama derecelendirmesi

𝑟™,c ∶ 𝑏 kullanıcısının 𝑝’ye verdiği derecelendirme

𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑎, 𝑏) : 𝑎 ve 𝑏 kullanıcılarının benzerliği


71

𝑡𝑎ℎ𝑚𝑖𝑛(𝑎, 𝑝) : 𝑎 kullanıcısının p öğesi için tahmini

Aggarwal’a [30] göre öğe tabanlı filtreleme yöntemlerinde aşağıdaki formül

kullanılmaktadır.

∑A ∈ m ŠmŠ ••L•Œ•ˆ•Š•AL•AğA öğ• ™THšTQZ%9(%,c).Qm,A


𝑡𝑎ℎ𝑚𝑖𝑛(𝑢, 𝑝) = ∑A ∈ m ŠmŠ ••L•Œ•ˆ•Š•AL•AğA öğ• ™THšTQZ%9(%,c)
(III.18)

𝑟g,% ∶ 𝑢 kullanıcısının 𝑖’ye verdiği derecelendirme, 𝑖 öğesi, 𝑢 kullanıcısının

derecelendirdiği ürünlerden olmalı,

𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑖, 𝑝) : 𝑖 ve 𝑝 öğeleri arasındaki benzerlik,

𝑡𝑎ℎ𝑚𝑖𝑛(𝑢, 𝑝) : 𝑢 kullanıcısının 𝑝 öğesi için tahmini.

3.18. Model Tabanlı Yöntemler

Minh-Phung [69] ve arkadaşlarına göre model tabanlı yöntemler makine

öğrenmesi ya da veri madenciliği metotlarını öneri ve tahmin hesaplamasında

kullanmaktadır. Model tabanlı yöntemler bellek tabanlı yöntemlere göre daha özet bir

veri üzerinden çalıştığından verimlilik ve hız avantajları bulunmaktadır. Bellek tabanlı

yöntemler kullanıcı-öğe matrisi üzerinden çalışırken tüm veri belleğe yüklenerek

çalışma yapılmaktadır. Matris çok büyük olduğunda hesaplamalar zaman almaktadır.

Ancak bellek tabanlı yöntemler en çok kullanılan yöntemlerdir. Model tabanlı

yöntemlerde yapay sinir ağı yöntemleri ve matris ayrıştırma yöntemleri kullanılan

yöntemlerdendir.

3.18.1. Matris Ayrıştırması

Koren [115] ve arkadaşlarına göre kullanıcı-öğe arasındaki etkileşimi gösteren

matrisin boyu büyüdükçe süreçlerin zamanını arttırmaktadır. Matris ayrıştırması ile


72

kullanıcı-öğe matrisi, kullanıcı ve öğe matrisi olarak iki ayrı matris bileşenine

ayrıştırılmaktadır. Matris ayrıştırmasının iki amacı vardır; bunlarından birincisi

kullanıcı-öğe matrisinin boyutunu azaltmaktır. Kullanıcılar/müşteriler sürekli olarak

öğe/ürün almadıkları için kullanıcı-öğe matrisinde seyreklikler oluşmaktadır.

Kullanıcı-öğe matrisininde etkileşim seyrekliği ve çok büyük veri satırlarının öneri

yapılması amacıyla belleğe yüklenmesi bir performans sorunu yaratmaktadır.

Boyutsallığın azaltılması yöntemleriyle önemli satırlar korunmuş olmaktadır. Boyutu

azaltılan kullanıcı-öğe üzerinden öneri oluşturulmaktadır. İkincisi kullanıcı-öğe

matrisindeki gizli özellikler anlaşılmaya çalışılır. Kullanıcı-öğe matrisi doğrudan

verilmeyen dolaylı kullanıcı davranışlarına içeren bilgileri barındırmaktadır. Bokde ve

arkadaşlarına göre [116] matris ayrıştırma yönteminde birçok model kullanılmaktadır.

Temel Bileşen Analizi (PCA Principal Component Analysis), Tekel Değer Ayrıştırma

(SVD Singular Value Decomposition), Alternatif En Küçük Kare yöntemi (ALS

Alternate Least Square) bunlardan bazılarıdır.

Şekil III.17. Matris Ayrıştırma Yöntemi

Koren [115] ve arkadaşlarına göre tüm kullanıcılara göre tüm öğeler matrisinin

boyutsallığını, “bazı beğeni faktörlerine göre tüm öğeleri” ve “bazı beğeni faktörlerine
73

göre tüm kullanıcıları” temsil eden daha küçük matrislere azaltmak için matris

çarpanlarına ayrılması kullanılmaktadır. Bu boyutlara gizli özellikler denilmektedir.

Boyut küçültme ve küçültülmüş boyutlarda benzerlik aramak matris ayrıştırma

yöntemlerinin temelidir. Boyutu küçültülmüş matris kullanıcı-öğe matrisinin düşük

dereceli bir yaklaşımını yansıtmaktadır. Benzerlik mesafeleri küçük boyutlu matris

üzerinden hesaplanmaktadır. Smith’e [117] göre bileşen analizi yüksek boyutlu

verilerde maksimum varyantı bulmak, veriyi korurken bir yandan da veriyi küçültmek

için kullanılan bir yöntemdir. Boyut küçültmek için veriyi en iyi anlatan özniteliklerin

çıkartılması gerekmektedir. Ancak bu durumda veri kaybı söz konusu olmaktadır.

Öznitelik çıkarımı yaparak en az bilgi kaybı ile boyutu küçültmek amaçlanan bir

sonuçtur. Boyutu küçültme işlemi veri içindeki dağılımın maksimun varyansını

minimum değişkenle tutarak oluşturulmaktadır. Varyans veri kümesindeki yayılma

derecesini gösterir ne kadar yayılırsa ortalamaya göre varyans o kadar büyük

olmaktadır. Varyans verilerin aritmetik ortalamadan farklarının karelerinin toplamıdır,

standart sapmanın kareköksüz halidir. Kovaryans iki veri arasındaki ilişkiyi

göstermekte, sonuç pozitif ise bu veriler doğru orantılı, negatif ise ters orantılıdır. Sıfır

ise aralarında herhangi bir ilişki bulunmamaktadır. Eğer ikiden fazla veri vektörü varsa,

tüm vektörler ikili kombinasyonlar halinde bir matris şeklinde gösterilir buna

kovaryans matrisi denilmektedir. Bokde [116] ve arkadaşlarına göre tekil değer

ayrıştırması matris ayrıştırma tekniklerinden birisidir. Boyut azaltma, veri sıkıştırma,

yüz tanıma gibi alanlarda kullanılmaktadır. İşbirlikçi filtreleme yöntemlerinde

kullanıcı-öğe matrisi kullanılmaktadır. Matristeki kullanıcıların tüm öğeleri

derecelendirmiş olması pek olası olmamakta, bu sebeple matriste derecelendirilmemiş


74

boş alanlar yer almaktadır. Boyut azaltılması ile veri kaybı en aza indirilmeye

çalışılmaktadır.

Gower’a [118] göre öneri sistemleri komşuluk ilişkisine dayalı yapılar (aynı

kullanıcı tarafından derecelendirilen öğeleri benzer derecelendirmeyi sergileyen

kullanıcıları bulmak için diğer kullanıcıların derecelendirmeleriyle karşılaştırılmasıdır)

ve gizli faktör modelleri (kullanıcı-öğe etkileşimini analiz etmeye çalışmaktadır) olarak

iki gruba ayrılmaktadır. Bu modeller için tekil değer ayrıştırma kullanılan

yöntemlerdendir. Kullanılan diğer bir yöntem de Alternatif En Küçük Kare yöntemidir.

Alternatif En Küçük Kare yöntemi ile örtük verilerin kullanılması sağlanmakta, bu

yöntemde aynı anda bir özellik vektörünün çözülmesi gereklidir. Ayrıca iki farklı

özellik matrisi aynı anda paralel olarak çalıştırılmaktadır.

Alternatif En Küçük Kare yöntemi matrisi çarpanlarına ayırmak için kullanılan bir

algoritmadır. Aggarwal’a [30] göre Alternatif En Küçük Kare yöntemi bir

optimizasyon yöntemidir. Boyutların küçültülmesinde her iki özellik matrislerinin

boyutunu yinelemeli olarak küçültmektedir.

𝑅 @ 𝑈𝑉 (III.19)

Önce 𝑈 sabitlenerek, 𝑉’nin her satırı için en küçük kareler yöntemi

uygulanmaktadır. Daha sonra 𝑉 sabit tutularak 𝑈’nun çözümü sağlanmaktadır.


75

Şekil III.18. Alternatif En Küçük Kare Yöntemi

Yifan [119] ve arkadaşlarına göre etkileşim matrisi çarpanlarına ayrılarak

kullanıcı-özellikleri matrisi ve öğe-özellikleri matrisi olarak ayrılmaktadır. Etkileşim

matrisinin değerlerini veren belirli tercihler ve güven olaylarıdır.

Kullanıcı 𝑢, 𝑖 öğesini tüketirse, 𝑢 kullanıcınısının 𝑖 öğesini beğendiği

düşünülmektedir (𝑝g,% = 1). Fakat 𝑢 kullanıcısı 𝑖 öğesini hiç tüketmediyse tercih

etmediği düşünülmektedir. (𝑝g,% = 0) tercih edilmeyen bir ürün düşük güven ilişkilidir.

Ancak bir öğenin tercih edilmemesi farklı durumlardan da kaynaklanmaktadır.

1 𝑅 > 0
𝑃g,% £ R=𝑟g,% (III.20)
0 𝑅 = 0

Güven, etkileşime verdiğimiz değeri göstermektedir. Ürün satın alınması

etkileşimin ağırlığını arttırmaktadır.

𝐶g,% = 1 + 𝛼𝑟g,% (III.21)

Güven kullanıcı 𝑢 ile öğe arasındaki etkileşimi göstermektedir. Beş kez satın

alınan bir ürün iki kez satın alınan ürüne göre daha fazla güvenlidir. Alternatif En

Küçük Kare optimizasyonu kullanıcı faktörlerinin ve öğe faktörlerinin hesaplanmasının

her aşamasında matris için optimizasyon uyguluyarak en uygun matris yapısını

oluşturmaktadır. Her aşamada orijinal verilerin çarpanlara ayrılmış daha yakın bir
76

temsiline gelinmeye çalışılan yinelemeli bir optimizasyon sürecidir. Buradaki temel

fikir büyük bir matrisin Alternatif En Küçük Kare yoluyla daha küçük bir temsilini

oluşturmaktır. Orijinal matrise eşit olan daha düşük boyutlu matris oluşturulmaktadır.

3.18.2. Yapay Sinir Ağları

Zhang [120] ve arkadaşlarına göre öneri sistemleri kullanıcılara öneri oluşturmak

için çeşitli yöntemler kullanmaktadır. Gittikçe artan bilgi hacmiyle birlikte öneri

sistemleri bu aşırı yük için etkili bir yöntem olmaktadır. Dijital satış kanallarında daha

fazla kullanılmaya başlayan öneri yöntemleri binlerce ürün arasında kişiye özel

ürünlerin belirlenmesinde önemli bir araçtır. Elmas’a [121] göre yapay zeka

algoritmaları ile öğrenen sistemler geliştirilmektedir. Derin öğrenme, yapay sinir ağları

gibi yapay zeka temelli yöntemler öneri sistemleriyle ilgi araştırmalarda

kullanılmaktadır. Yapay sinir ağları temelli yaklaşımlar, geleneksel öneri sistemlerinde

karşılaşılan problemlerin aşılmasına yardımcı olmaktadır. Yapay sinir ağları yöntemleri

kullanıcı-öğe arasındaki karmaşık ilişkiyi yakalayabilmektedir. Öztemel’e [122] göre

modellenmiş yapay sinir ağları elimizdeki verilerden bir öğrenme gerçekleştirmektedir.

Öğrenme yapay sinir ağlarının öğrendiği veriye bağlı olarak, benzer verilerde benzer

sonuçlar üretmeye çalışmasıdır.

Genel olarak yapay sinir ağları;

• Benzer olaylar karşısında, benzer kararlar vermeye çalışarak makine

öğrenmesini gerçekleştirmeye çalıştırmaktadır.

• Ağ eğitim setinden öğrenim yaptıktan sonra, görülmemiş örnekler üzerinden

bilgi üretmektedir.
77

• Bilgiler ağa dağıtılmış durumdadır. Tek bir katmanın önemi yoktur ağın

tamamının değerlendirilmesi gereklidir.

3.18.3. Yapay Sinir Ağlarının Yapısı

Öztemel’e [122] göre biyolojik sinir ağının en küçük yapı taşı sinir hücreleridir.

Yapay sinir ağlarında da, yapay sinir hücreleri vardır. Beş temel bölümden

oluşmaktadır.

• Girdiler (𝒙): Ağa dışarıdan giren yani ağın eğitimi için kullanılacak verilerdir.

• Ağırlıklar (𝒘): Hücreye gelen verinin etkisini, önemini göstermektedir.

Ağırlıklar negatif veya pozitif olabilir. Etkisinin hangi yöne doğru olduğunu

göstermektedir. Sıfır olması herhangi bir etkisi olmadığı anlamındadır. Ağırlıkların

başlangıç değerlerinin ne olması gerektiği ile ilgili olarak belirli bir tanım

bulunmamaktadır. Genel olarak ilk değer için 0 ve 1 arasında rastgele olarak

belirlenmektedir.

• Toplama Fonksiyonu: Walczak’a [123] göre ağırlıklandırılmış tüm girdi

değerleri hücrede tek bir giriş değeri elde etmek amacıyla toplanmaktadır. Giriş

değerleri ve ağırlıklar negatif veya pozitif değerlerden oluşabilmektedir. Hücreye

toplama fonksiyonundan geçerek gelen negatif ve pozitif değelerlerin fonksiyon çıktısı

hücrenin net girdisini oluşturmaktadır. En yaygın olarak ağırlıklı toplam

kullanılmaktadır.

𝑁𝑒𝑡 = ∑H%(𝑤% 𝑥% ) (III.22)

Toplama fonksiyonu ya da birleştirme fonksiyonu olarak girdi değerleri ile ağırlıkların

çarpıldığı bulunan değerlerin birbirleri ile yeniden çarpıldığı çarpım fonksiyonu, girdi

ve ağırlık değerlerinin birbirleri ile çarpıldıktan sonra en büyük değerin hücrenin net
78

girdisini oluşturduğu en büyük değer fonksiyonu, en küçük değerin hücrenin net

girdisini oluşturduğu en küçük değer fonksiyonu gibi toplama fonksiyonları

kullanılmaktadır.

• Aktivasyon Fonksiyonu: Hücrede oluşan net girdiyi işleyerek hücrenin

çıktısını hesaplayan fonksiyonlardır. Yapay sinir ağlarında kullanılacak modele göre

farklı aktivasyon fonksiyonları kullanılmaktadır.

• Hücrenin çıktısı (𝒚): Aktivasyon fonksiyonu sonucunda oluşan değer hücrenin

çıktısını oluşturmaktadır.

Şekil III.19. Yapay Sinir Ağı Yapısı [124]

Elmas’a [121] göre yapay sinir ağlarının çalışma şekli aşağıdaki gibidir.

• Hücreye girdi olarak gelecek veriler belirlenmektedir (𝑥6 ,𝑥( ..𝑥H ).

• Girdilerle bağlantılı ağırlık değerleri 0 ve 1 aralığında rastgele olarak

belirlenmektedir (𝑤6 ,𝑤( ..𝑤H ).

• Hücrenin net girdisi hesaplanmaktadır. Genel olarak ağırlıklarla girdilerin

çarpılarak toplandığı toplama formülü kullanılmaktadır. Toplamın sonucu hücrenin net

girdisini vermektedir. Hücreye gelen net girdi, aktivasyon fonksiyonu ile hücreden

çıkmaktadır. Her hücrenin bir aktivasyon fonksiyonu bulunmaktadır. Gelen net girdi

aktivasyon fonksiyonu ile hücreden çıkmaktadır.


79

• Aktivasyon fonksiyonu hücrenin çıktısını oluşturmaktadır.

Sharma’ya [125] göre aktivasyon fonksiyonları hücrenin çıktısını almak için

kullandığımız bir işlevdir. Transfer fonksiyonu da denilmektedir. Sigmoid aktivasyon

fonksiyonu yapay sinir ağlarında en çok kullanılan aktivasyon fonksiyonlarındandır.

Fonksiyonun çıktısı 0 ve 1 arasındadır. Doğrusal olmayan problemlerin çözülmesinde

kullanılmaktadır. Aktivasyon fonksiyonu olarak ReLU (Rectified Linear Unit,

düzeltilmiş doğrusal birim) fonksiyonu da kullanılmaktadır. ReLU [0, +∞) aralığında

değer almaktadır. Fonksiyonun çıktısı sıfırdan küçükse sonuç sıfıra eşittir, eğer

fonksiyonun çıktısı sıfırdan büyük ve eşitse sonuç fonksiyonun çıktısına eşit

olmaktadır.

0, 𝑥 < 0
𝑓 (𝑥 ) = £ (III.23)
𝑥, 𝑥 ≥ 0

Yapay sinir ağları gibi derin öğrenme modellerinde en çok kullanılan aktivasyon

fonksiyonudur. Öztemel’e [122] göre yapay sinir hücreleri bir araya gelerek katmanlar

şeklinde yapay sinir ağlarını oluşturmaktadırlar. En basit hali ile yapay sinir ağında üç

katman bulunmaktadır.

• Giriş katmanı.

• Ara katman.

• Çıktı katmanı.
80

Şekil III.20. Yapay Sinir Ağları Temel Katmanları [126]

Giriş katmanında sisteme girdi olarak gelen veriler yer almaktadır. Bu katmanda

verilerde hiç bir değişiklik olmadan ara katmana gönderilir. Giriş katmanında her bir

hücrenin bir girdi verisi olmaktadır.

Ara katmana gelen veriler toplama fonksiyonundan geçerek ara katman hücresinin

net girdisi oluşturmaktadır. Oluşan net girdi aktivasyon fonksiyonundan geçerek ara

katmanın çıktısını oluşturmaktadır.

Çıktı katmanı kendisine gelen net girdileri işleyerek ağın çıktısını oluşturmaktadır.

Diğer hücrelerde olduğu gibi önce net girdi hesaplanmakta, sonra aktivasyon

fonksiyonunu kullanarak ağın çıktısı oluşturulmaktadır.

Katmanlarda bulunan hücrelerin kendi aralarında bir bağı yoktur, diğer

katmanlardaki hücreler ile birbirlerine bağlıdırlar. Her hücreye bir önceki katmandaki

hücrelerden bağlantı bulunmaktadır. Hücrelerin net girdileri, kendilerine bağlanmış

diğer hücrelerin çıktılarını oluşturmaktadır.


81

3.18.4. Tek Katmanlı Yapay Sinir Ağarının Yapısı

Öztemel’e [122] göre yapay sinir ağları üzerindeki çalışmalar tek katmanlı ağlar

üzerinde başlamıştır. 1958 yılında sınıflandırma yapmak amacıyla Rosenblat tarafından

geliştirilmiştir.

Şekil III.21. Tek Katmanlı Yapay Sinir Ağı Modeli [122]

Tek katmanlı yapay sinir ağları girdi ve çıktı katmanlarından oluşmaktadır. Tüm

girdiler çıktı katmanına bağlanmaktadır. Çıktı katmanında hücrenin toplama

fonksiyonu ile hesaplanmış net girdisi ve aktivasyon fonksiyonu ile hesaplanmış çıktısı

oluşmaktadır. Aktivasyon fonksiyonu doğrusal bir fonksiyondur. En doğru

sınıflandırmayı yapmak için kullanılmaktadır. En doğru sınıflandırma iki sınıfı

birbirinden en doğru şekilde ayıran ağırlıkların hesaplanmasıdır.

Tek katmanlı yapay sinir ağlarında iki model bulunmaktadır;

• Basit algılayıcı modeller (Perseptron)

• ADALINE modeli

Basit algılayıcı modeller 1958 yılında geliştirilmiştir. Ağın çıktısı 1 veya 0’dır.

Aktivasyon fonksiyonu olarak eşik değer fonksiyonunu kullanır. Eşik değer fonksiyonu
82

hücrenin çıktısı eşik değerin üstünde veya altında olmasına göre 1 veya 0 değerini

almaktadır.

Şekil III.22. Basit Algılayıcı ile Yapay Sinir Ağının Öğrenmesi

ADALINE modeli 1959 yılında Widrow ve Hoff tarafından geliştirilmiştir. Basit

algılayıcı (Perseptron) modeline benzemektedir. ADALINE modelinde beklenen çıktı

ile ağın çıktısı arasındaki farkın (hata değeri) azaltılması esastır. Hatanın azaltılarak

ağırlıklara dağıtılmasına delta kuralı denilmektedir. Ağın öğrenmesi bu kurala göre

yapılmaktadır.

3.18.5. Çok Katmanlı Yapay Sinir Ağarının Yapısı

Elmas’a [121] göre tek katmanlı yapay sinir ağları iki sınıfı birbirinden ayıran

doğrusal problemlerde başarılı olmaktadır. Ancak doğrusal olmayan problemlerin

çözümlerinde doğrusal modellerin kullanımı ile problem çözülememektedir. Bu

konudaki en ünlü problem XOR problemidir. Yapay sinir ağlarının geliştirilmesi

sırasında doğrusal modellerin XOR problemini çözemediği görülmüş ve bu konudaki

çalışmalar uzun yıllar durmuştur. Daha sonra geliştirilen çok katmanlı ağlar, bu

konudaki çalışmaların yeniden şekil almasını sağlamıştır.


83

Şekil III.23. Doğrusal Fonksiyonlar ve XOR Problemi [127]

Öztemel’e [122] göre çok katmanlı ağlar XOR problemine çözüm olarak

Rumelhart ve arkadaşları tarafından geliştirilmiştir. Bu modelde oluşan hata geriye

doğru yayılarak ağın eğitilmesi sağlanmıştır. Öğrenme modeli en küçük kareler

yöntemine dayalı delta öğrenme modelidir. ADALINE modelindeki delta öğrenme

yöntemini kullanmaktadır. Hata ağa yayıldığı için genelleştirilmiş delta kuralı da

denilmektedir.
84

Şekil III.24. Çok Katmanlı Yapay Sinir Ağları [128]

Çok katmanlı yapay sinir ağlarında hesaplamalar iki aşamadan oluşmaktadır.

İleriye doğru hesaplama, geriye doğru hesaplama.

• İleriye Doğru Hesaplama: İleriye doğru hesaplama ile ağın çıktısı

hesaplanmaktadır. Hücrelerin çıktısı oluşan net girdi değerinin aktivasyon

fonksiyonundan geçirilmesi ile oluşturulmaktadır. Bu işlem katmanlar arasında

hesaplamalardan sonra çıkış katmanındaki hesaplamalarla son bulmaktadır. Çok

katmanlı ağların hesaplanmasında bias sabit değer devreye girmektedir ve her zaman 1

olarak alınmaktadır. Hücreye giriş değerlerinin toplamının sıfır olması durumunda

öğrenme gerçekleşmeyecektir. Eğitim süresi buna bağlı olarak uzayacaktır. Bu sebeple

bias değeri giriş sinyallerinin sıfırdan farklı bir değer olmasını sağlamaktadır.

• Geriye Doğru Hesaplama: Geriye doğru hesaplama ile ağın ağırlıkları

güncellenmektedir. Hata fonksiyonunu minimuma getiren ağırlık değerlerine

ulaşılmaya çalışılmaktadır. Hata fonksiyonu ağın hedef çıktısı ile gerçekleşen çıktısı
85

arasındaki farkın karelerinin toplamı olarak hesaplanmaktadır (square error, hata

karesi).
6
𝐻𝑎𝑡𝑎RPcZIG = ∑ ( ³ℎ𝑒𝑑𝑒𝑓çµ9Rµ − 𝑔𝑒𝑟ç𝑒𝑘𝑙𝑒ş𝑒𝑛çµ9Rµ · 2 (III.24)

Hata minimuma ulaşıncaya kadar ağırlıkların güncellenmesi devam etmektedir.

Şekil III.25. Ağı Çıktısının Minimum Hata Veren Ağırlık Noktası [129]

3.18.6. Çok Katmanlı Yapay Sinir Ağları İle Örnek Problem Çözümü

Mazur’un [128] çalışmalarından esinlenerek yapılan örnek çalışmada çok

katmanlı ağların ileriye ve geriye ağırlık hesaplamaları yapılmaktadır. Ağ üç

katmandan oluşmaktadır. Girdi katmanı, ara katman ve çıkış katmanıdır. Her bir

katmanda iki hücre kullanılmaktadır. Ara katman ve çıkış katmanlarında öğrenmeyi

kolaylaştırmak için bias değeri, aktivasyon fonksiyonu olarak da sigmoid fonksiyonu

kullanılmaktadır. Problemde girdi değerleri 𝑖, ara katman ℎ ve çıktı katmanı 𝑜 ile

isimlendirilmektedir.

Girdi değerleri

𝑖1: 0.05, 𝑖2: 0.10

Çıktı değerleri
86

𝑜1: 0.01, 𝑜2: 0.99

Ağırlık değerleri

𝑤1: 0.15, 𝑤2: 0.20, 𝑤3: 0.25, 𝑤4: 0.30, 𝑤5: 0.40, 𝑤6: 0.45, 𝑤7: 0.50, 𝑤8: 0.55

olarak verilmiştir.

3.18.6.1. İleriye Doğru Hesaplama Aşamaları

Girdi katmanı ile ara katman arasındaki hesaplamalar;

• 𝑖1 ve 𝑖2 girdi katmanından ağa girişi yapılan girdiler ara katmanları birbirine

bağlayan bağlantılardaki ağırlık değerleri ile çarpılıp toplanarak ℎ1 ve ℎ2 ara

katmanlarının net girdilerini oluşturmaktadır.

• ℎ1 ve ℎ2 ara katmanı için bulunmuş net girdi değeri sigmoid aktivasyon

fonksiyonundan geçirilerek hücrelerin çıktıları hesaplanmaktadır.

Ara katman ile çıktı katmanı arasındaki hesaplamalar

• ℎ1 ve ℎ2 ara katmanlarında hesaplanan ve hücrenin çıktısını oluşturan değerler,

çıktı katmanı için girdi değerini oluşturmaktadır. 𝑜1 ve 𝑜2 çıktı katmanı için net girdinin

hesaplanması, ℎ1 ve ℎ2 ara katmanlarında oluşmuş çıktı değeri ile ara katman ve çıktı

katmanı arasındaki bağlantıları sağlayan ağırlık değerlerinin çarpılıp toplanması ile

sağlanmaktadır. Bu değer 𝑜1 ve 𝑜2 hücreleri için net girdi değerini oluşturmaktadır.

• 𝑜1 ve 𝑜2 çıktı katmanı için hesaplanmış net girdi sigmoid aktivasyon

fonksiyonundan geçirilerek ağın çıktısı hesaplanmaktadır.


87

Şekil III.26. Yapay Sinir Ağı İleriye Doğru Hesaplama [128]


88

İleriye doğru hesaplama ile ağın çıktısı hesaplandıktan sonra ağın hatası

hesaplanmaktadır. Her bir çıktı katmanının hatası ayrı ayrı hesaplanmaktadır. Ağın

beklenen çıktısı ile oluşan çıktı arasındaki farkın karesi alınarak hesaplanır. 𝑜1 ve 𝑜2

katmanlarının hatalarının toplamı ağın toplam hatasını vermektedir. Hata, geriye doğru

hesaplama aşamasında ağa yayılarak minimum hatayı veren ağırlıkların belirlenmesine

çalışılmaktadır.

Şekil III.27. Yapay Sinir Ağı Hata Hesaplaması [128]


89

Ağırlığın 𝑤* noktasına gelmesi için ∆𝑤 kadar değişiklik ile hata değerinde de ∆𝐸

kadar değişiklik yapılmaktadır.

Şekil III.28. Yapay Sinir Ağı Hata Gösterimi [128]

3.18.6.2. Geriye Doğru Hesaplama Aşamaları

Çıkış katmanı ile ara katman arasındaki ağırlıkların güncellenmesi;

• Çıktı katmanındaki tüm hücreler için beklenen çıktı ile oluşan çıktı arasındaki

fark hesaplanmaktadır. Bu fark ilgili çıktı hücresinin iterasyon sonunda oluşmuş hata

değerini oluşturmaktadır.

• 𝑜1 ve 𝑜2 hücrelerindeki değişim değeri hesaplanmaktadır. Değişim değeri

hesaplanırken kullandığımız aktivasyon fonksiyonunun türevi alınarak ve 𝑜1 hücresinin

hata değeri ile çarpılmaktadır.

• 𝑜1 ve 𝑜2 hücrelerini ara katmana bağlayan bağlantılardaki ağırlıkların değişim

değerleri hesaplanmaktadır. Bu hesaplamada öğrenme katsayısının yanında bir de

momentum değeri kullanılmaktadır. Bu değer ağırlıkların momentum katsayısı

oranında bir değerinin yeni ağırlık değişim değerine katılmasını için kullanılmaktadır.
90

Momentum değeri ağın bir noktaya takılıp kalmasını önleyerek eğitimi

hızlandırmaktadır.

• Ağırlıkların değişim değerleri hesaplandıktan sonra, yeni ağırlık değerleri

hesaplanmaktadır.

• Bu adım, çıktı katmanı ile ara katman arasındaki bağlantılardaki tüm ağırlıklar

için yapılmaktadır.

• Çıktı katmanlarında kullanılan bias değerlerinin yeni ağırlıkları

hesaplanmaktadır.
91

Şekil III.29. Yapay Sinir Ağları Geriye Doğru Hesaplama 1 [128]


92

Şekil III.30. Yapay Sinir Ağları Geriye Doğru Hesaplama 2 [128]


93

Ara katman ile giriş katmanı arasındaki ağırlıkların güncellenmesi;

• Çıktı katmanındaki hatanın oluşmasında ara katmanın da payı olduğu için ara

katmandaki değişimi hesaplarken çıktı katmanındaki değişim değerlerinin de eklenmesi

gerekli olmaktadır. Bu sebeple ara katmandaki değişimin hesaplanmasında, ara

katmanın bağlı olduğu diğer katmanlardaki veya çıktı katmanlarındaki değişim

değerlerinin de katılmasıyla hesaplama yapılmaktadır. Ara katmanda aktivasyon

fonksiyonu olarak sigmoid fonksiyonu kullanıldığı için türevi alınarak, önceki

katmanlardaki değişim değerleri katılmaktadır.

• ℎ1 ve ℎ2 ara katmanlarındaki değişim değerleri hesaplandıktan sonra ara

katman ile giriş katmanı arasındaki ağırlıklardaki değişim değerleri hesaplanmaktadır.

• Ara katman ile giriş katmanı arasındaki ağırlıkların değişim değerleri

hesaplandıktan sonra, ağırlıkların yeni değerleri hesaplanmaktadır.

• Ara katmanda kullanılan bias değerlerinin yeni ağırlıkları hesaplanmaktadır.


94

Şekil III.31. Yapay Sinir Ağları Ara Katman Hesaplama [128]


95

Şekil III.32. Yapay Sinir Ağları Yeni Ağırlık Değerlerinin Hesaplaması [128]
96

Birinci döngü sonunda ağın ileriye doğru hesaplaması yapılmış, hata değerleri

bulunmuş, hata değerleri, geriye doğru hesaplama ile ağa yayılmış ve ağırlıkların yeni

değerleri hesaplanmıştır. Bundan sonra ağın ikinci döngüsü başlamaktadır. Bu süreç

hata değerinin minimuma ya da bir eşik hata değeri olarak bir değere ulaşıncaya kadar

devam etmektedir.

Şekil III.33. 1.Tekrarın Sonunda Ağırlıkların Yeni Değerleri [128]

Ağ, tüm döngülerini tamamladıktan sonra eğitim süreci tamamlamış olmaktadır.

Ağın ne kadar başarılı bir eğitimden geçtiğini anlamak için, ağın test verisi ile test

edilmesi gerekmektedir. Bu sebeple veri setinin belli bir kısmı test verisi olarak

ayrılmaktadır. Bu oran %70 eğitim verisi, %30 test verisi şeklinde olabilmektedir.

Eğitim verisi az tutulursa, ağın öğrenmesi yetersiz kalabilmektedir.


97

MÜŞTERİYE YÖNELİK ÜRÜN ÖNERİSİNDE


İŞBİRLİKÇİ YÖNTEMLERİN UYGULANMASI

Bu tez kapsamında perakende sektöründe zincir ayakkabı mağazalarına sahip bir

markanın müşteri satınalma verileri üzerinde işbirlikçi filtreleme yöntemleri

uygulanarak, kişiselleştirilmiş öneri modeli oluşturulmaktadır.

4.1. Modelin Yapısı

Çalışma kapsamında kullanılan verilere işbirlikçi filtreleme yöntemlerinin bellek

tabanlı yöntemlerden kullanıcı tabanlı filtreleme yöntemi, öğe tabanlı filtreleme

yöntemi, model tabanlı yöntemlerden matris ayrıştırma yöntemi ve yapay sinir ağları

yöntemi uygulanarak öneri modeli oluşturulmaktadır. Uygulama sırasında kullanıcı

benzerliği ve öğe benzerliğini hesaplarken Pearson Korelasyon Katsayısı ve Kosinüs

benzerlik fonksiyonları kullanılmaktadır. Tüm yöntemler veriler üzerinde

uygulandıktan sonra veri setindeki müşterilerin daha önce aldığı ürünler ile modelin

önerdiği ürünler karşılaştırılmaktadır. Modelin uygulanması için Pyhton programlama

dili ile birlikte optimize edilmiş Scikit-Surprise, Keras, Pandas, Numpy

kütüphanelerine ait fonksiyonlar kullanılmaktadır. Uygulamaların çalıştığı bilgisayarın

işlemcisi Intel Core i7-7500U, hızı 2.7Ghz, belleği 8 GB, işletim sistemi 64-bit

Windows 10’dur. Oluşturulan modelin genel şeması aşağıdaki gibidir.


98

Şekil IV.1. Uygulanan Modelin Yapısı

Markanın, müşterilerine ait verileri veritabanından sorgulanmaktadır. Veri seti

müşteri, ürün ve satış adetleri verileri ile oluşmuştur.

4.2. Modelin Veritabanı Yapısı

Çalışma kapsamında kullanılacak müşteri satın alma verileri, markanın Microsoft

SQL veritabanından sorgulanarak veri seti haline getirilmektedir. Kullanılan veriler

markanın müşteri ilişkileri kapsamında takip ettiği kartlı müşterilerin satın alma

verileridir. Uygulamada kullanılan veriler onbir farklı tablodan sorgulanarak

hazırlanmaktadır.
99

• stokkart tablosu:
Ürün model bilgilerinin bulunduğu model tanım tablosudur.

Tablo IV.1. Stokkart Tablosu, Tablo Yapısı

Alan Adı Veri Türü


stokkart_id bigint
degistiren_carikart_id, bigint
degistiren_tarih datetime
stokkart_tipi_id tinyint
statu bit
stok_kodu nvarchar(50)
stok_adi nvarchar(100)
anastokkart_id bigint
anabarkod_id bigint
stokkart_grup_id int
butce_grup_id int
satici_carikart_id bigint
stokalan_id_1 int
stokalan_id_2 int
stokalan_id_3 int
stokalan_id_4 int
stokalan_id_5 int
stokalan_id_6 int
kdv_alis_id tinyint
kdv_satis_id tinyint
kdv_satis_toptan_id tinyint
birim_id_1 varchar(5)
birim_id_2 varchar(5)
birim2_carpan float
stokkart_sezon_id smallint
tevkifat_alis tinyint
tevkifat_satis tinyint
stok_barkod_tipi varchar(10)
fiyatlandirma_tipi tinyint
maliyetlendirme_turu tinyint
kayit_silindi bit

• stokkart_rapor_parametre:

Ürünlerin kategorik özelliklerinin tanım kodlarının bulunduğu tablodur.

Tablo IV.2. Stokkart_Rapor_Parametre Tablosu, Tablo Yapısı

Veri Türü Veri Türü


stokkart_id bigint
degistiren_carikart_id bigint
degistiren_tarih datetime
stokalan_id_7 int
100

stokalan_id_8 int
stokalan_id_9 int
stokalan_id_10 int
stokalan_id_11 int
stokalan_id_12 int
stokalan_id_13 int
stokalan_id_14 int
stokalan_id_15 int
stokalan_id_16 int
stokalan_id_17 int
stokalan_id_18 int
stokalan_id_19 int
stokalan_id_20 int
stokalan_id_21 int
stokalan_id_22 int
stokalan_id_23 int
stokalan_id_24 int
stokalan_id_25 int
stokalan_id_26 int
stokalan_id_27 int
stokalan_id_28 int
stokalan_id_29 int
stokalan_id_30 int

• parametre_stokkart_rapor:

Kategorik verilerin kod tanımlarının bulunduğu tablodur.

Tablo IV.3. Parametre_Stokkart_Rapor Tablo Yapısı

Alan Adı Veri Türü


parametre_id int
degistiren_carikart_id bigint
degistiren_tarih datetime
kayit_silindi bit
parametre tinyint
kaynak_1_parametre_id int
kaynak_2_parametre_id int
kaynak_3_parametre_id int
kaynak_4_parametre_id int
kod nvarchar(20)
tanim nvarchar(100)
grup1 nvarchar(50)
grup2 nvarchar(50)
sira int
parametre_grubu tinyint
dil_1_tanim nvarchar(100)
dil_2_tanim nvarchar(100)
dil_3_tanim nvarchar(100)
dil_4_tanim nvarchar(100)
dil_5_tanim nvarchar(100)
101

• stokbelge:

Stok hareket işlemlerinin tutulduğu ana tablo (tüm satış işlemlerinin belge olarak

tutulduğu tablodur).

Tablo IV.4. Stokbelge Tablosu Yapısı

Alan Adı Veri Türü


stokbelge_id bigint
degistiren_carikart_id bigint
degistiren_tarih datetime
kayit_silindi bit
sirket_id smallint
ticari_grup_id tinyint
cari_islem_grup_id int
hareket_turu_id smallint
hareket_tipi_id smallint
giris_tarihi datetime
sezon_id int
stokyeri_carikart_id bigint
carikart_id bigint
ilgili_stokyeri_carikart_id bigint
evrak_tarihi date
evrak_no varchar(20)
adet float
ara_toplam money
yuzde_indirim_1 float
yuzde_indirim_2 float
yuzde_indirim_3 float
yuzde_indirim_4 float
yuzde_indirim_5 float
tutar_indirim money
tutar_indirim_kdvli money
tutar money
kdv_tutar money
tevkifat_orani tinyint
toplam money
pb varchar(5)
kur money
kaynak_stokbelge_id bigint
kasa_id bigint
banka_hesap_id bigint
102

• stokbelge_detay3:

Stokbelge tablosunun detay tablosudur, satılan ürünlerin beden bilgisi (barkod)

bulunmaktadır.

Tablo IV.5. Stokbelge_Detay3 Tablo Yapısı

Alan Adı Veri Türü


stokbelge_id bigint
sira_id int
degistiren_carikart_id bigint
degistiren_tarih datetime
barkod varchar(30)
stok_kodu varchar(50)
koli_no varchar(30)
irsaliye_no varchar(20)
fatura_no varchar(20)
stokkart_sezon_id smallint
ilgili_stokbelge_id bigint
ilgili_stokbelgeid_sira int
ort_vade int
aciklama varchar(250)
palet_id int

• stokbelge_detay2:

Stokbelge ana tablosunun detay tablosudur, satılan ürünlerin indirim bilgileri

tutulmaktadır.

Tablo IV.6. Stokbelge_Detay2 Tablo Yapısı

Alan Adı Veri Türü


stokbelge_id bigint
sira_id int
degistiren_carikart_id bigint
degistiren_tarih datetime
birim_id varchar(5)
dbirim_miktari float
dbirim_carpani float
yuzde_ind1_kmp float
yuzde_ind2_promosyon float
yuzde_ind3_kart float
yuzde_ind4_odeme float
yuzde_ind5_kullanici float
tutar_ind float
tutar_ind_kdvli float
belge_dibi_ind float
103

personel_carikart_id bigint
iaden_nedeni_id int
iade_yok bit
depodan_teslim bit
hediye_ceki bit
kmp_id bigint
prom_id bigint
kupon_no varchar(50)
mal_fazlasi bit
defolu_iade bit

• carikart_crm_karttipi:

Markanın müşteri ilişkileri kapsamında kullandığı kartların kod tanımlarının

tutulduğu tablodur.

Tablo IV.7. Carikart_Crm_Karttipi Tablo Yapısı

Alan Adı Veri Türü


carikart_id bigint
tarih date
degistiren_carikart_id bigint
degistiren_tarih datetime
kayit_silindi bit
crm_kart_tipi_id smallint

• carikart_crm_ozel:

Markanın müşteri ilişkileri kapsamındaki kartlı üyelerinin parametrik bilgilerinin

tutulduğu tablodur.

Tablo IV.8. Carikart_Crm_Ozel Tablo Yapısı

Alan Adı Veri Türü


carikart_id bigint
degistiren_carikart_id bigint
degistiren_tarih datetime
cep_tel varchar(14)
email varchar(100)
futbol_takimi_id int
basketbol_takimi_id int
cinsiyet char(1)
dogum_tarihi date
evlilik_tarihi date
sms_istemiyor tinyint
email_istemiyor tinyint
medeni_durum varchar(1)
104

dergi_id int
dergi_id2 int
gazete_id int
gazete_id2 int
giyim_tarzi_id int
kitap_turu_id int
kitap_turu_id2 int
meslek_id int
radyo_id int
radyo_id2 int
televizyon_id int
televizyon_id2 int
ogrenim_durumu_id int
ust_beden varchar(50)
alt_beden varchar(50)
alt_boy varchar(50)
fatura_degistir bit
puan_kullaniminda_mobil_app_ tinyint
kullanmaz
sms_onay_kodu varchar(10)
satis_engelli tinyint
iade_engelli tinyint
siparis_engelli tinyint

• carikart:

Markanın tedarikçi, müşteri, mağaza tanım bilgilerinin tutulduğu tablodur.

Tablo IV.9. Carikart Tablo Yapısı

Alan Adı Veri Türü


carikart_id bigint
degistiren_carikart_id bigint
degistiren_tarih datetime
kayit_silindi bit
kayit_yeri bigint
statu bit
carikart_turu_id tinyint
carikart_tipi_id tinyint
cari_unvan nvarchar(250)
ozel_kod nvarchar(20)
fiyattipi nvarchar(5)
giz_yazilim_kodu smallint
ana_carikart_id bigint
transfer_depo_id bigint
giz_kullanici_adi nvarchar(50)
giz_kullanici_sifre nvarchar(50)
cari_parametre_1 int
cari_parametre_2 int
cari_parametre_3 int
cari_parametre_4 int
105

cari_parametre_5 int
cari_parametre_6 int
cari_parametre_7 int
sube_carikart_id bigint

• carikart_crm_musteri_kart:

Markanın müşteri ilişkileri kapsamındaki üyelerine ait kayıt silindi ve durum

bilgilerinin tutulduğu tablodur.

Tablo IV.10. Carikart_Crm_Musteri_Kart Tablo Yapısı

Alan Adı Veri Türü


musteri_kart_no varchar(20)
degistiren_carikart_id bigint
degistiren_tarih datetime
carikart_id bigint
kayit_silindi bit
statu bit

• vstokkart_genel_tanım (view tablosu)

Model bilgisine ait tüm kategorik parametrelerin kod ve tanım olarak tek bir

tabloda toplanması amacıyla yapılmış view tablosudur. stokkart,

stokkart_rapor_parametre ve parametre_stokkart_rapor tablolarından yararlanılmıştır.

Kullanılan tabloların şematik görüntüsü Şekil IV.2. ‘de gösterilmektedir.


106

Şekil IV.2. Kullanılan Veritabanı Tablolarının Şeması


107

Çalışma kapsamında kullanılacak verilerin elde edilmesi için aşağıdaki SQL

sorgusu oluşturulmuştur.

Tablo IV.11. Çalışma Verisinin Oluşturulması İçin Kullanılan SQL Sorgusu

Setdateformat dmy

select
a.stokbelge_id,f.musteri_kart_no, a.giris_tarihi,year(a.giris_tarihi)as
Yıl,a.carikart_id as Carikodu ,
b.barkod,sum(h.dbirim_miktari *-1)as Satış_Adet,
(case d.cinsiyet when'K'then'Kadın'when'E'then'Erkek'else''end)as Cinsiyet,
e.cari_unvan,g.stok_kodu,g.stokalan_id_1_tanim as
Brand,g.stokalan_id_2_tanim as Category,
g.stokalan_id_11_tanim as Department,g.stokalan_id_13_tanim as Style,
g.stokalan_id_3_tanim as [Sub Category],g.stokalan_id_4_tanim as
[Group],g.stokalan_id_6_tanim as Section,
g.stokalan_id_8_tanim as [Year],g.stokalan_id_9_tanim as
Season,g.stokalan_id_17_tanim as Menşei,

(SELECT tanim FROM stokkart sk INNERJOIN stokkart_rapor_parametre s ON


s.stokkart_id=sk.stokkart_id INNERJOIN
parametre_stokkart_rapor p ON s.stokalan_id_25=p.parametre_id WHERE
p.parametre=25 AND p.kayit_silindi=0
AND s.stokkart_id=g.stokkart_id )as [Private Label]

into mgtez01

from GizFusion..stokbelge(nolock)as a innerjoin


GizFusion..stokbelge_detay3(nolock)as b on a.stokbelge_id=b.stokbelge_id
leftjoin GizFusion..stokbelge_detay2(nolock)as h on h.stokbelge_id=
b.stokbelge_id and h.sira_id=b.sira_id
leftjoin GizFusion..carikart_crm_karttipi(nolock)as c on
a.carikart_id=c.carikart_id
leftjoin GizFusion..carikart_crm_ozel(nolock)as d on
a.carikart_id=d.carikart_id
leftjoin GizFusion..carikart(nolock)as e on a.carikart_id=e.carikart_id
leftjoin GizFusion..carikart_crm_musteri_kart(nolock)as f on
a.carikart_id=f.carikart_id
leftjoin GizFusion..vstokkart_genel_tanim(nolock)as g on
b.stok_kodu=g.stok_kodu
where
(a.giris_tarihi>='01.01.2016'and a.giris_tarihi<='31.12.2019')and
crm_kart_tipi_id='21'and a.hareket_turu_id='251'

group by a.stokbelge_id,f.musteri_kart_no, a.giris_tarihi,a.carikart_id ,


b.barkod,d.cinsiyet,e.cari_unvan,g.stok_kodu,g.stokalan_id_1_tanim,g.stoka
lan_id_2_tanim,
g.stokalan_id_3_tanim,g.stokalan_id_4_tanim,g.stokalan_id_6_tanim,g.stokal
an_id_11_tanim,
g.stokalan_id_8_tanim,g.stokalan_id_9_tanim ,g.stokalan_id_17_tanim
,g.stokalan_id_13_tanim,g.stokkart_id
108

Bu sorgunun sonucu olarak “mgtez01” tablosuna oluşturulmuş, oluşan tablodan

çalışma kapsamında kullanılacak alanlar seçilerek, veri dosyası hazırlanmıştır.

Dosyanın alanları ve açıklamaları Tablo IV.12‘de gösterilmektedir.

Tablo IV.12. Çalışma Kapsamında Kullanılacak Verinin Yapısı

Veri Alanı Veri Türü Veri Açıklaması


Carikodu Kategorik Müşteri Tanım bilgisi
Stokkodu Kategorik Ürün tanım bilgisi
Stokadı Kategorik Ürün Adı
Category Kategorik Ürün Kategorisi bilgisi
Department Kategorik Ürün departman bilgisi
Section Kategorik Ürün Section bilgisi
Sub Category Kategorik Ürün Sub Category bilgisi
Group Kategorik Ürün Grup bilgisi
Style Kategorik Ürün Style bilgisi
Brand Kategorik Ürün Marka bilgisi
Satış Adeti Sayısal Ürün Satış adedi

• Carikodu: Müşteri kimlik bilgisi olarak kullanın kod bilgisidir.

• Stokkodu: Ürünü anlatan kod bilgisidir. Ürünlerin bedenleri barkodlar halinde

veritabanında durmaktadır. Tüm barkodlar, stokkodu olarak olarak tanımlanmış model

bilgisi altında saklanmaktadır. Stokkodu model bilgisini göstermektedir.

• Category: Ürünün kategorik olarak biçimlendirildiği ilk kırılımı

göstermektedir. Casual, formal, sports, kids tür bilgisinden oluşmaktadır.

• Department: Ürünün kadın, erkek, kadın çocuk, erkek çocuk veya unisex tür

bilgisini göstermektedir. Ana kırılımın altında yer alan ikinci kırılımdır.

• Section: Ürünün ayakkabı, bot, terlik, sandalet bilgisini göstermektedir.


109

• Sub Category: Ürünler section kırılımında ayakkabı, bot ve terlik gibi tür

bilgisi olarak ayrıldıktan sonra, sub category kısmında classic, comfort, sport, kid sport

gibi alt kırılım türü bilgisini göstermektedir. Örneğin ayakkabı-classic, ayakkabı-

confort gibi.

• Group: Ürünlerin türünü veya kullanılan alanını gösteren kategorik verilerdir.

flats, lifeStyle, outdoor, platforms, stiletto, sneaker, oxford, wet ground gibi

parametreler tanımlıdır.

• Style: Kategori verisidir. basketball, casual, classic, football, boot, indoor, koşu,

military, running gibi parametreler tanımlıdır.

• Brand: Modelin marka bilgisini göstermektedir.

• Satış Adeti: Ürünlerin müşteriler tarafından satınalma adedini göstermektedir.

Bu bilgi çalışma kapsamında müşterinin ürüne olan ilgisi olarak değerlendirilmektedir.


110

Tablo IV.13. Çalışma Verisinin Örneği

4.3. Veri Hazırlığı

Müşteri satın alma verileri veritabanında model bilgisi bazında sorgulanmaktadır.

Model bilgisi ürünü anlatan tekil değere sahip kod bilgisidir. Ürünlerin beden bilgilerini

gösteren barkod bilgisinin üst katman bilgisidir. Örneğin “5500M0223NL” stok kodlu

ürünün tüm bedenleri barkodlar halinde tanımlanmaktadır. Farklı bedenler barkod

bilgisi olarak tutulmaktadır. Ürünün farklı bedenlerinden yapılan satışlar, model bilgisi

olarak tek bir kodla temsil edilebilmektedir. Bu sebeple satış verileri model bazında

gruplandırılmaktadır. Kategorik verilerdeki eksikler kontrol edilmiştir. Kontrol

sonucunda “department”, “section”, “sub category”, “group”, “style” tablo alanlarına


111

ait değeri NULL ya da boşluk olan tanımların olduğu görülmüştür. Eksik olan

tanımlama satırları çalışma verisinden çıkartılmıştır. Çalışma “category” bilgisi

“casual”, “formal”, “kids” ve “sport” türünü kapsayan ürünler üzerinden yapılmıştır.

“category” bilgisi “accessories”, “promosyon” ve “ayakkabı” tanımlı olan satırları veri

setinden çıkarılmıştır. Müşterilerin satın aldıkları model sayısı kontrol edilmiştir.

Müşterilerin satın aldığı ürünlerin adetleri örtük derecelendirmesi olarak

değerlendirilmiştir. Kullanıcı-öğe derecelendirme matrisi üzerinden kullanıcılar

arasında benzerlik ve ürünler arasında benzerlik bulunarak ürün önerimi yapılması

amaçlanmaktadır. Bu sebeple kullanıcı-öğe matrisinde boş derecelendirmelerin sayısını

azaltmak için sadece bir model satın almış olan müşteriler veri setinden çıkartılmıştır.

Müşterilerin satınaldıkları model sayılarına ait grafik Tablo IV.14’de

gösterilmektedir.

Tablo IV.14. Satın Alınan Ürün ve Müşteri Sayısı


112

Tablo IV.14. görüldüğü üzere 3 yıllık müşteri satın alma verisinde sadece 1 ürün

satın alan müşteri sayısı 500,000 adetin üzerindedir. Hazırlanan veri seti markanın

mağazalarından alışveriş yapan kartlı müşterilerinin satın alma adetlerinden

hazırlanmaktadır. Veriler “müşteri”, “ürün”, “satın alma adeti’ olarak

gruplandırılmaktadır. Veri setinde 10 farklı ürün almış müşterilerin 8340 adetlik ürün

bilgisi bulunmaktadır. İşbirlikçi yöntemlerin uygulanması için oluşturulan kullanıcı-

öğe matrisindeki seyrekliğin çalışma performansına etkisi göz önüne alınarak 10 farklı

ürün almış müşteriler seçilmektedir. Kullanıcı-öğe matrisi erkek ve kadın müşteriler

birbirinden ayrı oluşturulmaktadır. Erkek müşteriler için oluşturulan matrisin boyutu

532x3792, kadın müşteriler için oluşturulan matrisin boyutu 302x2440’ dır.

Tablo IV.15. Çalışma Dosya Biçimi (Müşteri, Ürün ve Satınalma Adeti)

Müşteri Ürün Satınalma Adeti


768900000202 2000749794010 1
768900000202 2000924206402 1
768900000202 2000AH7378060 1
768900000202 4215015G0095H04 1
768900000202 4563075501200 1
768900000202 5215025M0225B140 1
768900000202 5225AS00093086 1
768900000202 6024600616110 1
768900000202 6086F51412200 1
768900000202 6086H0508240 1
768900000284 2000AO2810102 1
768900000284 2008C77124 1
768900000284 2050M574NN 1
768900000284 4137157001260 1
768900000284 4215015G0104S36 1
768900000284 42151021796003 1
768900000284 423660002G03 1
768900000284 4327200601200 1
768900000284 5427100903300 1
768900000284 6366006803220 1
113

768900000591 2000749794007 1
768900000591 2000807316012 1
768900000591 208051524NVGY 1
768900000591 41765612612100 1
768900000591 4215041Z143002 1
768900000591 5198053201270 1
768900000591 5249300201100 1
768900000591 5500M5423TL 1
768900000591 705590077T 1
768900000591 705592105 1
768900000665 1091NN0417 1
768900000665 1091NN0418 1
768900000665 2000922853012 1
768900000665 2000942237401 1
768900000665 2008AF6676 1
768900000665 2008EF0434 1
768900000665 40751535701100 1
768900000665 411410215200G21 1
768900000665 423622465G 1
768900000665 52141021510002 1
768900001127 104011016410W0 1
768900001127 2008B75795 1
768900001127 2070AS00053993 1
768900001127 4215025G0078B140 1
768900001127 514896501200 1
768900001127 5178100801300 1
768900001127 5215025M0109D04 1
768900001127 523632606S 1
768900001127 5255020102200 1

4.4. İşbirlikçi Filtreleme Yöntemi

4.4.1. Kullanıcı Tabanlı İşbirlikçi Filtreleme Yöntemi

Kullanıcı tabanlı filtreleme yönteminin genel çalışma yapısı Şekil IV.3’ de

gösterilmektedir. Kullanıcı tabanlı filtreleme yöntemleri kullanıcıların satın

aldığı/derecelendirdiği ürünleri kullanarak diğer kullanıcılarla arasında benzerlik


114

bulmaya çalışmaktadır. Benzer olan kullanıcıların derecelendirdiği öğeleri kullanarak

aktif kullanıcı için öneri oluşturmaktadır.

Şekil IV.3. Kullanıcı Tabanlı Filtreleme Yöntemlerinin Genel İşleyişi [37]

Kullanıcı tabanlı filtreleme yöntemi için oluşturulan uygulamanın işleyiş şeması

Şekil IV.4’ de gösterilmektedir.


115

Şekil IV.4. Kullanıcı Tabanlı Filtreleme Yönteminin Çalışması

Kullanıcı tabanlı filtreleme yönteminin çalışma aşamaları;

• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsft SQL

veritabanından sorgulanarak veri seti hazırlanmaktadır.

• Kullanıcı tabanlı filtreleme yönteminin uygulması için kullanıcı-öğe matrisi

oluşturulmaktadır.

• Benzerlik hesaplaması için Pearson Korelasyon Katsayısı fonksiyonu

kullanılmaktadır. Benzerlik hesaplamaları ile aktif kullanıcıya en yakın kullanıcılar

belirlenmektedir.
116

• En iyi benzerlik değerine sahip kullanıcıların satın aldıkları ürünlerden, aktif

kullanıcının satın almadığı ürünler için, derecelendirme tahmini yapılmaktadır.

• Derecelendirme tahmini yapıldıktan sonra en iyi dereceye sahip ürünler, aktif

kullanıcıya öneri olarak sunulmaktadır.

4.4.2. Kullanıcı Tabanlı İşbirlikçi Filtreleme Yönteminin Uygulanması

Kullanıcı tabanlı filtreleme yöntemi kullanılarak ürün önerisi oluşturmak için

Tablo IV.16’daki uygulama geliştirilmiştir. Uygulamada benzerlik algoritmalarının

optimize edilmiş hali ile oluşturulmuş Scikit Surprise kütüphanesi kullanılmaktadır.

Kullanıcılar arasında benzerlik hesaplamasında Pearson Korelasyon Katsayısı

fonksiyonu kullanılmaktadır. Uygulamanı kod bütünü “EK-1.2. Kullanıcı Tabanlı

Filtreleme Yönteminin Uygulanması” başlığı altında yer almaktadır.

Tablo IV.16. Kullanıcı Tabanlı İşbirlikçi Yönteminin Uygulanması user_based_cf.py


sqlconnection=pyodbc.connect('DRIVER={SQL Server};SERVER=10.10.1.10; \

1 DATABASE=gizfusion;UID=sa;PWD=xxxxxxxx')

2 cursor = sqlconnection.cursor()

DataSqlStr = "Select carikodu as users, stok_kodu as items, satis_adet as rating

4 \

5 from mgtez04_1 where gender = 'F' "

6 ProductSqlStr = 'Select distinct stok_kodu as items, stok_adi, Category, \

7 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'

9 userrating = pd.read_sql(DataSqlStr ,sqlconnection)

10 Products = pd.read_sql(ProductSqlStr,sqlconnection)

userItemMatrix=userrating.pivot_table(index='users',columns='items',

11 values='rating')

12

13 reader = Reader()
117

14 data = Dataset.load_from_df(userrating[['users','items','rating']], reader)

15 trainset = data.build_full_trainset()

16 testset = trainset.build_anti_testset()

17

18 sim_options = {'name':'pearson_baseline', 'user_based':True, 'shrinkage': 0}

19 algo = KNNBaseline(k=20,sim_options=sim_options)

20

21 algo.fit(trainset)

22 predictData = algo.test(testset)

23

24 for pr in predictData:

25 cursor.execute("insert into mg_kullanici_oneri(users,items,predict,method) \

26 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'user_based')

27

28 cross_validate(algo,data, measures=['RMSE','MSE','MAE'],cv=10, verbose=True)

29 trainSplit, testSplit = train_test_split(data, test_size = .25)

30 predictSplit = algo.fit(trainSplit).test(testSplit)

31 accuracy.rmse(predictSplit)

32 accuracy.mse(predictSplit)

33 accuracy.mae(predictSplit)

• Satır 1: Microsoft SQL Server veritabanına bağlantı yapılmaktadır.

• Satır 2: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere

cursor nesnesi oluşturulmaktadır.

• Satır 4..7: Veritabanında alınacak veriler için sorgu ifadeleri oluşturulmaktadır.

DataSqlStr değişkeninde kullanıcı-öğe etkileşim verileri için oluşturulan sorgu ifadesi,

ProductSqlStr değişkeninde ise ürün bilgileri için oluşturulan sorgu ifadesi

tutulmaktadır.
118

• Satır 9..10: Pandas kütüphanesinin “read_sql” metotu ile veritabanından bilgi

çekilmektedir.

• Satır 11: Kullanıcı-öğe matrisi oluşturulmaktadır.

• Satır 13: Surprise kütüphanesinin “Reader” metotu ile reader nesnesi

oluşturulmaktadır. Bu nesne ile dataframe den okunan veriler “user, item, rating” olarak

ayrıştırılmaktadır.

• Satır 14: Surprise kütüphanesinin “Dataset” nesnesinin “load_from_df” metotu

ile dataframe den okuma yapılmakta ve data nesnesi oluşturulmaktadır.

• Satır 15: Algoritmanın eğitimi için veri seti oluşturulmaktadır.

• Satır 16: Öneri ve tahmin yapılacak veri seti oluşturulmaktadır.

• Satır 18: “sim_options = {'name':'pearson_baseline', 'user_based':

True,'shrinkage':0}” ifadesi ile Surprise kütüphesine kullanılacak benzerlik

fonksiyonunun Pearson Korelasyon Katsayısı olduğu ve kullanıcı bazlı benzerlik

hesaplanması yapılacağı bilgisi parametre olarak verilmektedir.

• Satır 19: “KNNBaseline(sim_options=sim_options)” metotu çalışacak

algoritmayı barındıran genel bir metottur. Metota sim_options ile tanımlanan

parametreler verilmektedir.

• Satır 21: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın

çalıştırılması ile eğitim süreci tamamlanmış olmaktadır.

• Satır 22: Algoritmanın “test” metotu kullanılarak tahmin verisi

oluşturulmaktadır.

• Satır 24: 22. satırda oluşturulan tahmin verilerinin SQL veritabanına sırayla

kayıt edilmesi için döngü kurulmaktadır.


119

• Satır 25: SQL veritabanı için kayıt ekleme sorgusu çalıştırılmaktadır.

• Satır 28: Algoritmanın değerlendirilmesi amacıyla “cross_validate” metotu

çağrılmaktadır.

• Satır 29: Oluşturulan veri seti eğitim ve test veri seti olacak şekilde

ayrılmaktadır.

• Satır 30: Eğitim veri seti ile algoritmanın “fit” metotu ile yeniden eğitilmektedir.

Aynı satır içinde “test” metotu ile test veri seti kullanılarak tahmin datası

oluşturulmaktadır. Bu çalışma RMSE, MSE ve MEA değerlerinin hesaplanması için

kullanılmaktadır.

• Satır 31: “Accuracy” metotu ile RMSE değeri hesaplanmaktadır.

• Satır 32: “Accuracy” metotu ile MSE değeri hesaplanmaktadır.

• Satır 33: “Accuracy” metotu ile MAE değeri hesaplanmaktadır.

Kullanıcı tabanlı filtreleme yönteminde veritabanından alınan verilerle kullanıcı-

öğe matrisi oluşturulmakta ardından Pearson Korelasyon Katsayısı fonksiyonu

kullanılarak kullanıcılar arasında benzerlik değeri hesaplanmaktadır. Bulunan benzerlik

derecesine göre aktif kullanıcıya en yakın kullanıcılar belirlenmekte ve aktif

kullanıcının almadığı ürünler için tahmin derecesi hesaplanarak öneri

oluşturulmaktadır. Uygulamanın müşteri verileri üzerinden elde edilen sonuçları

Bölüm V’de yer almaktadır. İşbirlikçi filtreleme yöntemlerinden kullanıcı tabanlı

filtreleme yönteminin anlaşılmasına yönelik olarak örnek bir uygulama geliştirilmiştir.

Uygulamada Person Korelasyon Katsayısı ve tahmin derecesinin hesaplanması

yazılımsal olarak gösterilmektedir. Örnek çalışma için geliştirilen metotlar Tablo

IV.17’de gösterilmektedir. UserBasedSim metotu ile kullanıcı bazlı benzerlik


120

hesaplaması, UserBasedPrediction metotu ile tahmin derecesinin hesaplanması

yapılmaktadır. Uygulamanın kod bütünü “EK-1.1. İşbirlikçi Filtreleme Yöntemi Örnek

Uygulaması” başlığı altında yer almaktadır.

Tablo IV.17. Örnek Uygulama Kullanıcı Tabanlı Filtreleme Metotları


1 def UserBasedSim(matrix):

2 userxIndex = 0

3 simArray = [(0,0,0)]

4 userR1 = matrix.values

5 userR2 = matrix.values

7 for ru1 in userR1:

9 useryIndex = 0

10

11 for ru2 in userR2:

12

13 print('item:',userxIndex,'-',useryIndex)

14

15 numerator = np.nansum([x * y for x,y in zip(ru1, ru2)

16 if np.isfinite(x) and np.isfinite(y)])

denominator1 = np.sqrt(np.nansum([np.square(x) for x,y

17 in zip(ru1,ru2)

18 if np.isfinite(x) and np.isfinite(y) ]))

denominator2 = np.sqrt(np.nansum([np.square(y) for x,y in

19 zip(ru1,ru2)

20 if np.isfinite(x) and np.isfinite(y) ]))

21 simTheta = numerator / (denominator1 * denominator2 )

22 simArray.append((matrix.index[userxIndex],

23 matrix.index[useryIndex],simTheta))

24 useryIndex+=1

25 userxIndex+=1

26
121

27 del simArray[0]

28 useruserSim = pd.DataFrame(simArray)

29 useruserSim = useruserSim.rename(columns={0:'userx',1:'usery',2:'simm'})

30 useruserSim = useruserSim.sort_values(['userx','simm','usery'],

31 ascending=[True,False,True])

32 return useruserSim

33

34 def UserBasedPrediction(userRatings,userSim,userMatrix):

35 userIndex = 0

36 predictMatrix = pd.DataFrame(columns=['userx','items','theta'])

37 for userIndex in userMatrix.index:

38 print(userIndex)

39 dfx = userMatrix.loc[userIndex][userMatrix.isnull().any()]

40 dfx = dfx[dfx.isnull()]

41 frame = {'items2':dfx.index}

42 dfnan = pd.DataFrame(frame)

43

44 simdf = userSim[userSim['userx']==userIndex]

45 simdf = simdf[simdf['userx'] != simdf['usery']]

46 simdf = simdf.sort_values(by='simm',ascending=False)

47 simdf = simdf.head(2) #k=2#

48

49 rs4 = pd.merge(simdf,userRatings, how='left', left_on = 'usery',

50 right_on = 'users')

51 rs5 = pd.merge(rs4,dfnan, how='left', left_on = 'items',

52 right_on = 'items2')

53 rs5['simWeight'] = rs5[rs5['items2'].notna()].rating *

54 rs5[rs5['items2'].notna()].simm

55 rs6 = rs5.groupby(['userx','items'],

56 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})

57

58 mean = UserItemRatings[UserItemRatings['users'] == userIndex].mean()

59

60 rs6['theta'] = mean[0] + (rs6['simWeight'] / rs6['simm'])


122

61

62 predictMatrix= predictMatrix.append(rs6)

63 return predictMatrix

64

Kullanıcı benzerliği hesaplandıktan sonra aktif kullanıcının derecelendirmediği öğe

için derecelendirme tahmini yapılmaktadır

Şekil IV.5. Kullanıcı Benzerliği

Aktif kullanıcının derecelendirme yapmadığı Urun5 için hesaplanan tahmin değeri 4.85

olarak bulunmaktadır
123

Şekil IV.6. Kullanıcı Benzerliği İle Derece Tahmini


124

4.4.3. Öğe Tabanlı İşbirlikçi Filtreleme Yöntemi

Öğe tabanlı filtreleme yönteminin genel çalışma yapısı Şekil IV.7’ de

gösterilmektedir. Öğe tabanlı filtreleme yöntemleri aktif kullanıcının satın

aldığı/derecelendirdiği ürünleri kullanarak ürünler arasında benzerlik bulmaya

çalışmaktadır. Ürünler arasındaki benzerlik aynı kullanıcının iki ürüne verdiği

derecelendirme üzerinden yapılmaktadır. Benzer ürünler bulunduktan sonra aktif

kullanıcının derecelendirmediği ürünler için tahmini derece hesaplaması yapılarak,

ürün önerisi oluşturulmaktadır.

Şekil IV.7. Öğe Tabanlı Filtreleme Yöntemlerinin Genel İşleyisi [37]

Öğe tabanlı filtreleme yöntemi için oluşturulan uygulamanın işleyiş şeması Şekil

IV.8’ de gösterilmektedir.
125

Şekil IV.8. Öğe Tabanlı Filtreleme Yönteminin Çalışması

Öğe tabanlı filtreleme yönteminin çalışma aşamaları;

• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL

veritabanından sorgulanarak veri seti hazırlanmaktadır.

• Öğe tabanlı filtreleme yönteminin uygulanması için kullanıcı-öğe matrisi

oluşturulmaktadır.

• Benzerlik hesaplaması için Kosinüs benzerlik fonksiyonu kullanılmaktadır.

• En iyi benzerlik değerine sahip öğeler kullanılarak aktif kullanıcının

derecelendirmediği öğeler için derecelendirme tahmini hesaplanmaktadır.

• En iyi dereceye sahip öğeler aktif kullanıcıya öneri olarak sunulmaktadır.


126

4.4.4. Öğe Tabanlı İşbirlikçi Filtreleme Yönteminin Uygulanması

Öğe tabanlı filtreleme yöntemi kullanılarak ürün önerisi oluşturmak için

geliştirilen uygulamada kullanılan metotlar Tablo IV.18’da gösterilmektedir.

Uygulamada benzerlik algoritmalarının optimize edilmiş hali ile oluşturulmuş Scikit

Surprise kütüphanesi kullanılmaktadır. Öğeler arasında benzerlik hesaplamasında

Kosinüs fonksiyonu kullanılmaktadır. Uygulamanın kod bütünü “EK-1.3. Öğe Tabanlı

Filtreleme Yönteminin Uygulanması” başlığı altında yer almaktadır.

Tablo IV.18. Öğe Tabanlı İşbirlikçi Yöntemlerin Uygulanması item_based_cf.py


1 sim_options = {'name':'cosine', 'user_based':False}

2 algo = KNNBaseline(k=20,sim_options=sim_options)

• Satır 1: “sim_options = {'name':'cosine', 'user_based': False}” ifadesi ile

Surprise kütüphesine kullanılacak benzerlik fonksiyonunun Kosinüs olduğu ve öğe

bazlı benzerlik hesaplanması yapılacağı parametreleri verilmektedir.

• Satır 2: “KNNBaseline(k=20,sim_options=sim_options)” metotu, çalışacak

algoritmayı barındıran genel bir metottur. Metota sim_options ile tanımlanan

parametreler verilmektedir.

Öğe tabanlı filtreleme yönteminde veritabanından alınan verilerle kullanıcı-öğe

matrisi oluşturulmakta ardından Kosinüs fonksiyonu kullanılarak öğeler arasında

benzerlik değeri hesaplanmaktadır. Bulunan benzerlik derecesine göre aktif öğeye en

yakın öğeler belirlenmekte ve aktif öğe için tahmin derecesi hesaplanarak öneri

oluşturulmaktadır. Uygulamanın müşteri verileri üzerinden oluşturulmuş sonuçları

Bölüm V’de yer almaktadır. İşbirlikçi filtreleme yöntemlerinden öğe tabanlı filtreleme
127

yönteminin anlaşılmasına yönelik olarak örnek bir uygulama geliştirilmiştir.

Uygulamada Kosinüs ve tahmin derecesi hesaplanmakta ve örnek veriler üzerinden

çalıştırılmaktadır. Örnek çalışma için geliştirilen metotlar Tablo IV.19’da

gösterilmektedir. ItemBasedSim metotu ile öğe bazlı benzerlik hesaplaması,

ItemBasedPrediction metotu ile tahmin derecesinin hesaplanması yapılmaktadır.

Uygulamanın kod bütünü “EK-1.1. İşbirlikçi Filtreleme Yöntemi Örnek Uygulaması”

başlığı altında yer almaktadır.

Tablo IV.19. Öğe Tabanlı Filtreleme Metotları


43 def ItemBasedSim(matrix):

44 userxIndex = matrix.shape[0]

45 simArray = [(0,0,0)]

46 userR1 = matrix.values

47 userR2 = matrix.values

48

49 for x in range(0,userxIndex):

50

51 ru1 = userR1[:,x]

52 useryIndex = matrix.shape[1]

53 for y in range(0,useryIndex):

54 ru2 = userR2[:,y]

55 print('item:',x,'-',y)

56 numerator = np.nansum([x * y for x,y in zip(ru1, ru2)])

denominator1 = np.sqrt(np.nansum([np.square(x) for x,y in

57 zip(ru1,ru2)

58 if np.isfinite(x) and np.isfinite(y) ]))

denominator2 = np.sqrt(np.nansum([np.square(y) for x,y in

59 zip(ru1,ru2)

60 if np.isfinite(x) and np.isfinite(y) ]))

61 simTheta = numerator / (denominator1 * denominator2 )

62 simArray.append((matrix.columns[x],matrix.columns[y],simTheta))
128

63

64 del simArray[0]

65 useruserSim = pd.DataFrame(simArray)

66 useruserSim = useruserSim.rename(columns={0:'itemx',1:'itemy',2:'simm'})

67 useruserSim = useruserSim.sort_values(['itemx','simm','itemy'],

68 ascending=[True,False,True])

69

70 return useruserSim

101

102 def ItemBasedPrediction(itemRatings,itemSim,itemMatrix):

103 userIndex = 0

104 predictItemMatrix = pd.DataFrame(columns=['users','itemx','theta'])

105

106 for userIndex in itemMatrix.index:

107 print(userIndex)

108 dfx = itemMatrix.loc[userIndex][itemMatrix.isnull().any()]

109 dfx = dfx[dfx.isnull()]

110 frame = {'items2':dfx.index}

111 dfnan = pd.DataFrame(frame)

112 dfnanArr = dfnan.values

113

114 for y in range(0,dfnanArr.shape[0]):

115 itemIndex = dfnanArr[y,0]

116

117 simdf = itemSim[itemSim['itemx']==itemIndex]

118 simdf = simdf[simdf['itemx'] != simdf['itemy']]

119 simdf = simdf.sort_values(by='simm',ascending=False)

120 simdf = simdf.head(2) #k=2#

121

122 rs4 = pd.merge(simdf,itemRatings[itemRatings['users']==userIndex],

123 how='left', left_on = 'itemy',

124 right_on = 'items')

125 rs5 = pd.merge(rs4,dfnan, how='left', left_on = 'itemx',

126 right_on = 'items2')


129

127 rs5['simWeight'] = rs5[rs5['items2'].notna()].rating *

128 rs5[rs5['items2'].notna()].simm

129 rs6 = rs5.groupby(['itemx','users'],

130 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})

131 rs6['theta'] = rs6['simWeight'] / rs6['simm']

132

133 predictItemMatrix= predictItemMatrix.append(rs6)

134 return predictItemMatrix

Öğe benzerliği uygulanarak öğeler arasındaki benzerlik bulunmaktadır.

Şekil IV.9. Öğe Benzerliği

Öğeler arasında benzerlik hesaplandıktan sonra aktif kullancının derecelendirme

yapmadığı öğe için öğe benzerliği üzerinden tahmin derecesi hesaplanmaktadır.


130

Şekil IV.10. Öğe Benzerliği İle Derece Tahmini

Aktif kullanıcının derecelendirme yapmadığı Urun5 için hesaplanan tahmin 4.65

olarak bulunmaktadır.

4.4.5. Matris Ayrıştırma Modeli

Matris ayrıştırma yöntemimin genel çalışma yapısı Şekil IV.11’de

gösterilmektedir. Matris ayrıştırma yöntemi ile kullanıcı-öğe matrisindeki

seyrekliklerin azaltılması ve azaltılmış matris üzerinden öneri oluşturulması

amaçlanmaktadır.

Şekil IV.11. Matris Ayrıştırma Yönteminin Genel Şekli


131

Matris ayrıştırma yöntemi için oluşturulan uygulamanın işleyiş şeması Şekil

IV.12’de gösterilmektedir.

Şekil IV.12. Matris Ayrıştırma Yönteminin Çalışması

Matris ayrıştırma yönteminin çalışma aşamaları;

• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL

veritabanından sorgulanarak veri seti hazırlanmaktadır.

• Matris ayrıştırma yöntemi için tekil değer ayrıştırma yöntemi kullanılmaktadır.

• Tekil değer ayrıştırma yöntemi ile veri seti eğitilmektedir.

• Aktif kullanıcının derecelendirmediği ürünler için derece tahmini

yapılmaktadır.
132

• En yüksek tahmin derecesine sahip öğeler belirlenmektedir.

• En yüksek dereceye sahip ürünler, ürün önerisi olarak sunulmaktadır.

4.4.6. Matris Ayrıştırma Yönteminin Uygulanması

Matris ayrıştırma yöntemi kullanılarak ürün önerisi oluşturmak için geliştirilen

uygulamada kullanılan metotlar Tablo IV.20’de gösterilmektedir. Uygulamada matris

ayrıştırma algoritmalarının optimize edilmiş hali ile oluşturulmuş Scikit Surprise

kütüphanesi kullanılmaktadır Uygulamanın kod bütünü “EK-1.4. Matris Ayrıştırma

Yönteminin Uygulanması” başlığı altında yer almaktadır.

Tablo IV.20. Matris Ayrıştırma Modülü svd_based_cf.py

1 algo = SVD()

2 algo.fit(trainset)

3 predictData = algo.test(testset)

• Satır 1: “SVD” metotu matris ayrıştırma algoritmasının işletildiği metottur.

• Satır 2: Algoritmanın “fit” metotu ile veri seti eğitilmektedir. metotun

çalıştırılması ile eğitim süreci tamamlanmış olmaktadır.

• Satır 3: Algoritmanın “test” metotu kullanılarak tahmin verisi

oluşturulmaktadır.

Matris ayrıştırma yöntemi ile veritabanındaki verilerden oluşturulan kullanıcı-öğe

matrisi üzerinde boyut küçültülmesi yapılmaktadır. Matris ayrıştırma yöntemleri model

tabanlı yöntemlerden olduğundan, modelin önce eğitimi yapılmakta sonrasında derece

tahmini ve ürün önerisi oluşturulmaktadır.


133

4.4.7. Yapay Sinir Ağı Yöntemi

Yapay sinir ağı yönteminin için oluşturulan yapay sinir ağı modeli yapısı aşağıda

gösterilmektedir.

Şekil IV.13. Yapay Sinir Ağı Yönteminin Çalışması

Ağ bu yöntem de eğitimin her döngüsünde kullanıcı-öğe etkileşimini

öğrenmektedir. Müşteri, ürün ve satınalma adetlerinden oluşan veri seti

kullanılmaktadır.

Yapay sinir ağı yöntemi için oluşturulan uygulamanın işleyiş yapısı Şekil IV.14’de

gösterilmektedir.
134

Şekil IV.14. Yapay Sinir Ağı Modelinin Çalışma Yapısı

Yapay sinir ağı yönteminin çalışma aşamaları;

• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL

veritabanından sorgulanarak veri seti hazırlanmaktadır.

• Verilerin yapay sinir ağı modelinde kullanılması için gömülü katman yöntemi

kullanılarak sayısallaştırılmaktadır.

• Yapay sinir ağı modeli iki adet gizli katman ve bir çıkış katmanı olarak organize

edilmektedir.
135

• Gizli katmanlarda aktivasyon fonksiyonu olarak ReLU aktivasyon fonksiyonu

kullanılmaktadır.

4.4.8. Yapay Sinir Ağı Yönteminin Uygulanması

Yapay sinir ağı yöntemi kullanılarak ürün önerisi oluşturmak için Tablo

IV.21’deki uygulama geliştirilmiştir. Uygulamanın kod bütünü “EK-1.5. Yapay Sinir

Ağı Yönteminin Uygulanması” başlığı altında yer almaktadır.

Tablo IV.21. Yapay Sinir Ağı Modülü ysa_based_cf.py


1 items_input = Input(shape=[1], name='Item-Input')

2 items_embedding = Embedding(n_items+1,5,name='Item-Embedding') (items_input)

3 items_vec = Flatten(name='Flatten-items') (items_embedding)

4 user_input = Input(shape=[1], name='User-Input')

5 user_embedding = Embedding(n_users+1,5,name='User-Embedding') (user_input)

6 user_vec = Flatten(name='Flatten-Users') (user_embedding)

8 conc = Concatenate()([items_vec,user_vec])

9 fc1 = Dense(128,activation='relu')(conc)

10 fc2 = Dense(32,activation='relu')(fc1)

11 out = Dense(1)(fc2)

12 model = Model([user_input,items_input],out)

13 model.compile(loss='mean_squared_error', optimizer='adam')

14 model.compile(loss='mean_squared_error',optimizer='adam', metrics=['accuracy'])

15

history=model.fit([train.users_id,train.items_id],train.rating,

16 epochs=5,verbose=1)

17

18 model.evaluate([test.users_id,test.items_id],test.rating)

19 predictons = model.predict([data_test.users_id, data_test.items_id])


136

• Satır 1..3: Yapay sinir ağının öğeler için giriş katmanı oluşturulmaktadır.

Kullanıcı ve öğeler arasındaki etkileşimin makine öğrenmesi sırasında öğrenilebilmesi

için öğe ve kullanıcı için “Input”, “Embeding” ve “Flatten” katmanları yaratılmaktadır.

Keras kütüphanesinin “Sequential” nesneside ağ modeli oluşturmak için kullanılmakta,

fakat bu nesne bir giriş ve bir çıkış katmanının olduğu çok temel yapılar için tercih

edilmektedir. Flatten katmanında giriş için kullanılacak vektör dizisi oluşturulmaktadır.

• Satır 4..6: Yapay sinir ağının kullanıcı için giriş katmanı oluşturulmaktadır.

• Satır 8: Kullanıcı ve öğeler için yaratılmış kategorik veriler gizli katman

öncesinde “Concatenate” fonksiyonu ile birleştirilmektedir.

• Satır 9: Yüzyirmisekiz nörondan oluşan birinci gizli katman oluşturulmaktadır.

Birinci gizli katmanda “ReLU” aktivasyon fonksiyonu kullanılmaktadır.

• Satır 10: Otuziki nörondan oluşan ikinci gizli katman oluşturulmaktadır. İkinci

gizli katmanda “ReLU” aktivasyon fonksiyonu kullanılmaktadır.

• Satır 11: Tek nöronlu çıkış katmanı oluşturulmaktadır.

• Satır 12: Yapay sinir ağı nesnesi oluşturulmaktadır.

• Satır 13-14: Model eğitim için parametrik olarak tanımlanmaktadır. Modelin

eğitimi sırasında modelin oluşturduğu çıktı ile gerçek çıktı arasındaki hatanın kontrolü

için kullanılacak hata fonksiyonu olarak “mean_squared_error” kullanılmaktadır.

“optimize” parametresi olarak Adam algoritması kullanılmakadır. Adam algoritması

hesaplama açısından etkili ve az bellek kullanan bir algoritmadır. Adam algoritması

diğer optimizasyon algoritmalarıyla karşılaştırıldığında daha iyi sonuçlar vermektedir.

Keras kütüphanesinde ilkdeğer olarak kullanılan yöntemdir. Modelin “metrics”


137

parametresi yapay sinir ağının performansını ölçmek için kullanılmakta, ağın her

döngüsünde bu değerler kayıt edilmektedir.

• Satır 16: Modelin eğitimi yaptırılmaktadır. “epoch” parametresi eğitimin kaç

kez tekrarlanacağını, “verbose=1” parametresi ile de eğitim süreci süreç barı ile

gösterilmektedir. Modele kullanıcı ve öğe nesneleri giriş nesnesi olarak, çıktı olarak ise

müşteri satın almalarından doğru oluşan derecelendirme değerleri verilmektedir.

• Satır 18: Modelin başarısı hesaplanmaktadır.

• Satır 19: data_test nesnesi için tahmini derecelendirmeler hesaplatılmaktadır.

Model nesnesinin predict metotuna data_test nesnesinin kullanıcı ve öğe alanları

paramatre olarak verilmektedir.

Şekil IV.15’de modeli oluşturulan yapay sinir ağının şematik biçimi ile ağın katmanları

gösterilmektedir.
138

Şekil IV.15. Yapay Sinir Ağının Model Yapısı

Yapay sinir ağları model tabanlı yöntemlerdendir. Model veritabanından aldığı veriler

üzerinden öğrenme gerçekleştirmekte, ardından aktif kullanıcının almadığı ürünler için

tahmini derecelendirme yapılarak ürün önerisi oluşturulmaktadır.


139

BULGULAR VE SONUÇLAR

İşbirlikçi filtreleme yöntemleri; bellek tabanlı yöntemlerinden kullanıcı tabanlı

fitreleme yöntemi, öğe tabanlı filtreleme yöntemi ve model tabanlı yöntemlerden matris

ayrıştırma yöntemi, yapay sinir ağı yöntemidir. Bu bölümde müşterilerinin satın aldığı

ürün verileri üzerinde uygulanan işbirlikçi filtreleme yöntemleri bulguları ve sonuçları

yer almaktadır. Çalışmada uygulanan yöntemlerin sonuçları karşılaştırılmaktadır. Aynı

zamanda dijital satış kanallarında mevcutta uygulanan yöntemlere ait gözlemlerden de

bahsedilmektedir.

5.1. Geliştirilen Modelin Özellikleri

Model kapsamındaki yöntemlerin uygulanması ile elde edilen kişisel öneri

sonuçlarının özellikleri;

• Müşterilerin daha önce aldığı ürünlerin kategorik özelliklerini kapsayan aynı

marka ürünler önerilmektedir.

• Aynı kategorik özelliklere sahip farklı marka ürünler önerilmektedir.

• Ürünün kategorik özelliklerine yakın ürünler önerilmektedir.

• Müşteriye sezon ve yıldan bağımsız ürün önerimi yapılmaktadır.

• Kullanılan yöntemlere ait müşteri, ürün, tahmin derecesi ve kullanılan yöntem

bilgisi veritabanında tabloda saklanmaktadır. Tüm yöntemlere ait verilerden karma bir

model de oluşturulabilmektedir.

5.2. Karşılaştırmalı Sonuçlar

Model kapsamındaki yöntemlerin uygulaması sonucunda 12,615,237 adet öneri

verisi oluşturulmuştur. Öneri verilerinden her müşteri için en iyi tahmin derecesine

sahip on beş adet ürün öneri olarak sunulmak üzere seçilmektedir (k=15 Firmanın
140

pazarlama departmanı tarafından müşteriye sunulacak öneri ürünlerinin sayısı olarak

belirlenmiştir). Kullanılan dört yönteme ait öneri verileri veritabanında tabloda

saklanmakta, her bir müşteri için 15 adet önerilen ürün üzerinden oluşturulan tabloda

uygulanan dört yönteme ait 58,238 adet öneri verisi bulunmaktadır.

5.2.1. Kullanıcı Tabanlı Filtreleme Yöntemi

Kullanıcı tabanlı filtreleme yöntemi kullanıcı-öğe matrisi üzerinden çalışmaktadır.

Müşterilerin satınaldıkları ürün sayısı toplam ürün sayısına göre daha az olduğundan

derecelendirilmeyen ürün sayısı fazla olmakta, bu durumda müşterilere aynı ürünler

önerilebilmektedir. Kullanıcı tabanlı filtreleme yöntemleri müşterinin ilgi alanlarına ve

beğenilerine bağlıdır, dolayısıyla kullanıcı beğenisi zaman içinde değişebilmektedir.

Bu sebeple uygulamanın belirli aralıklarla yeniden çalıştırılarak oluşturulan önerilerin

güncellenmesi gerekmektedir.

Kullanıcı tabanlı filtreleme yönteminin uygulama sonucunda veri setindeki bir

müşterinin satın aldığı ürünler ve oluşturulan öneri tablosu Tablo V.1’de

gösterilmektedir (Tablo V.1. Kullanıcı Tabanlı Filtreleme Sonucu).

5.2.2. Öğe Tabanlı Filtreleme Yöntemi

Öğe tabanlı yöntemler, kullanıcı-öğe matrisini kullanarak öğeler arasındaki

benzerliğe göre aktif kullanıcı için ürün önerisi oluşturmakta, veri setindeki bir müşteri

için oluşturulan öneri tablosu Tablo V.2’de gösterilmektedir (Tablo V.2. Öğe Tabanlı

Filtreleme Sonucu)
carikodu stok_kodu stok_adi category department section subcategory groups style brand method

768900001127 104011016410W0 Crocs Crocband Navy CASUAL WOMEN SANDALS BEACHWEAR FLATS WET GROUND Crocs satis

768900001127 2008B75795 B75795 V RACER 2.0 SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE adidas satis

768900001127 2070AS00053993 AS00053993 LUNA HI WP SPORTS MEN BOOTS SPORTS OUTDOOR LIFE STYLE Kinetix satis

768900001127 5178100801300 Eclipse C.S. CMF-08 Siyah Deri CASUAL MEN SHOES COMFORT FLATS MR SMITH Eclipse Comfort System satis

768900001127 5215025M0109D04 M.KAU BOT 025M0109 GIBSON DARK BROWN CRAYZ DERI CASUAL MEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 4215025G0078B140 Harley Davidson 025G0078-B14 New/Worker Black Yağlı Deri CASUAL WOMEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 5255020102200 City Life BL-201 Kahve Floter CASUAL MEN SHOES CLASSIC FLATS LOAFER & MOCCASIN City Life satis

768900001127 6249201115300 Kiddo P492011 Pudra KIDS GIRL SHOES CLASSIC FLATS CASUALS Kiddo satis

768900001127 514896501200 Provoq 965 Siyah Deri FORMAL MEN BOOTS CLASSIC HEELEDS ANKLE ProvoQ satis

768900001127 523632606S Forelli 32606-H Siyah CASUAL MEN SHOES COMFORT FLATS MR SMITH Forelli satis

768900001127 2000749747111 749747-111 COURT ROYALE SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Nike user_based

768900001127 208052811BBK 52811BBK SUMMITS SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Skechers user_based

768900001127 2000AQ1779001 AQ1779-001 WMNS EBERNON LOW SPORTS WOMEN SHOES SPORTS LIFESTYLE LIFE STYLE Nike user_based

768900001127 52206178801100 Provoq 61788 Siyah Deri FORMAL MEN SHOES CLASSIC HEELEDS OXFORD & LACE-UPS ProvoQ user_based

768900001127 4497007501200 Eclipse C.S 0075 SIYAH Deri CASUAL WOMEN SHOES COMFORT FLATS MARY JANE Eclipse Comfort System user_based

768900001127 2000921442004 921442-004 STAR RUNNER (PSV) KIDS GIRL SHOES KIDS SPORT ATHLETIC LIFE STYLE Nike user_based

768900001127 6225AS00010581 U.S. Polo Assn. F-As00010581 Honey Lacivert KIDS BOY SHOES CLASSIC FLATS SNEAKERS U.S. Polo Assn. user_based

768900001127 52141021520002 Hammer Jack 102 15200-M Kahve Yıkama Nubuk CASUAL MEN BOOTS CLASSIC FLATS MILITARY Hammer Jack user_based
Tablo V.1. Kullanıcı Tabanlı Filtreleme Sonucu

768900001127 55991637501200 Provoq 16375 Siyah Deri FORMAL MEN SHOES CLASSIC HEELEDS OXFORD & LACE-UPS ProvoQ user_based

768900001127 432815093507200 Eclipse C.S 150935 KIRMIZI CASUAL WOMEN SANDALS COMFORT FLATS SANDALS Eclipse Comfort System user_based

768900001127 5225AS00163840 Lumberjack Venom Siyah CASUAL MEN SHOES CLASSIC FLATS SNEAKERS Lumberjack user_based

768900001127 5515401201100 Provoq 4012 Siyah Deri FORMAL MEN SHOES CLASSIC HEELEDS OXFORD & LACE-UPS ProvoQ user_based

768900001127 6225AS00133696 Spyman AS00133696 RICCO-5 Lacivert KIDS BOY BOOTS CLASSIC HEELEDS OUTDOOR Spyman user_based
141

768900001127 4497007801200 Eclipse C.S 0078 SIYAH Deri CASUAL WOMEN SHOES COMFORT FLATS MARY JANE Eclipse Comfort System user_based
768900001127 52141881000M01 Hammer Jack 1881000M Laci CASUAL MEN SHOES CLASSIC FLATS SNEAKERS Hammer Jack user_based
carikodu stok_kodu stok_adi category department section subcategory groups style brand method

768900001127 104011016410W0 Crocs Crocband Navy CASUAL WOMEN SANDALS BEACHWEAR FLATS WET GROUND Crocs satis

768900001127 2008B75795 B75795 V RACER 2.0 SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE adidas satis

768900001127 2070AS00053993 AS00053993 LUNA HI WP SPORTS MEN BOOTS SPORTS OUTDOOR LIFE STYLE Kinetix satis

768900001127 5178100801300 Eclipse C.S. CMF-08 Siyah Deri CASUAL MEN SHOES COMFORT FLATS MR SMITH Eclipse Comfort System satis

768900001127 5215025M0109D04 M.KAU BOT 025M0109 GIBSON DARK BROWN CRAYZ DERI CASUAL MEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 4215025G0078B140 Harley Davidson 025G0078-B14 New/Worker Black Yağlı Deri CASUAL WOMEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 5255020102200 City Life BL-201 Kahve Floter CASUAL MEN SHOES CLASSIC FLATS LOAFER & MOCCASIN City Life satis

768900001127 6249201115300 Kiddo P492011 Pudra KIDS GIRL SHOES CLASSIC FLATS CASUALS Kiddo satis

768900001127 514896501200 Provoq 965 Siyah Deri FORMAL MEN BOOTS CLASSIC HEELEDS ANKLE ProvoQ satis

768900001127 523632606S Forelli 32606-H Siyah CASUAL MEN SHOES COMFORT FLATS MR SMITH Forelli satis

768900001127 2000898464019 898464-019 RUNALLDAY SPORTS MEN SHOES SPORTS ATHLETIC RUNNING Nike item_based

768900001127 208052811BBK 52811BBK SUMMITS SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Skechers item_based

768900001127 52206178801100 Provoq 61788 Siyah Deri FORMAL MEN SHOES CLASSIC HEELEDS OXFORD & LACE-UPS ProvoQ item_based

768900001127 20562012272368 201227-2368 AEROLITE SLIP ON SPORTS WOMEN SHOES SPORTS LIFESTYLE LIFE STYLE Hummel item_based

768900001127 2000921442004 921442-004 STAR RUNNER (PSV) KIDS GIRL SHOES KIDS SPORT ATHLETIC LIFE STYLE Nike item_based

768900001127 6225AS00010581 U.S. Polo Assn. F-As00010581 Honey Lacivert KIDS BOY SHOES CLASSIC FLATS SNEAKERS U.S. Polo Assn. item_based

768900001127 52141021520002 Hammer Jack 102 15200-M Kahve Yıkama Nubuk CASUAL MEN BOOTS CLASSIC FLATS MILITARY Hammer Jack item_based
Tablo V.2. Öğe Tabanlı Filtreleme Sonucu

768900001127 2000749794410 749794-410 MD RUNNER 2 SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Nike item_based

768900001127 5225AS00163840 Lumberjack Venom Siyah CASUAL MEN SHOES CLASSIC FLATS SNEAKERS Lumberjack item_based

768900001127 4497007801200 Eclipse C.S 0078 SIYAH Deri CASUAL WOMEN SHOES COMFORT FLATS MARY JANE Eclipse Comfort System item_based

768900001127 2000870025100 870025-100 COURT BOROUGH LOW (PSV) KIDS BOY SHOES KIDS SPORT LIFESTYLE LIFE STYLE Nike item_based

768900001127 6225AS00133696 Spyman AS00133696 RICCO-5 Lacivert KIDS BOY BOOTS CLASSIC HEELEDS OUTDOOR Spyman item_based

768900001127 5515401201100 Provoq 4012 Siyah Deri FORMAL MEN SHOES CLASSIC HEELEDS OXFORD & LACE-UPS ProvoQ item_based

768900001127 52141881000M01 Hammer Jack 1881000M Laci CASUAL MEN SHOES CLASSIC FLATS SNEAKERS Hammer Jack item_based
142

768900001127 4332013401200 City Life 0134 Siyah Deri CASUAL WOMEN SHOES CLASSIC FLATS CASUALS City Life item_based
carikodu stok_kodu stok_adi category department section subcategory groups style brand method

768900001127 104011016410W0 Crocs Crocband Navy CASUAL WOMEN SANDALS BEACHWEAR FLATS WET GROUND Crocs satis

768900001127 2008B75795 B75795 V RACER 2.0 SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE adidas satis

768900001127 2070AS00053993 AS00053993 LUNA HI WP SPORTS MEN BOOTS SPORTS OUTDOOR LIFE STYLE Kinetix satis

768900001127 5178100801300 Eclipse C.S. CMF-08 Siyah Deri CASUAL MEN SHOES COMFORT FLATS MR SMITH Eclipse Comfort System satis

768900001127 5215025M0109D04 M.KAU BOT 025M0109 GIBSON DARK BROWN CRAYZ DERI CASUAL MEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 4215025G0078B140 Harley Davidson 025G0078-B14 New/Worker Black Yağlı Deri CASUAL WOMEN BOOTS CLASSIC FLATS MILITARY Harley Davidson satis

768900001127 5255020102200 City Life BL-201 Kahve Floter CASUAL MEN SHOES CLASSIC FLATS LOAFER & MOCCASIN City Life satis

768900001127 6249201115300 Kiddo P492011 Pudra KIDS GIRL SHOES CLASSIC FLATS CASUALS Kiddo satis

768900001127 514896501200 Provoq 965 Siyah Deri FORMAL MEN BOOTS CLASSIC HEELEDS ANKLE ProvoQ satis

768900001127 523632606S Forelli 32606-H Siyah CASUAL MEN SHOES COMFORT FLATS MR SMITH Forelli satis

768900001127 2000AH7355001 AH7355-001 JR VAPORX 12 CLUB GS TF KIDS UNISEX SHOES KIDS SPORT ATHLETIC FOOTBALL Nike svd_based

768900001127 2000AQ3542003 AQ3542-003 STAR RUNNER 2 (GS) SPORTS WOMEN SHOES SPORTS LIFESTYLE RUNNING Nike svd_based

768900001127 2000943305006 943305-006 REVOLUTION 4 (PSV) KIDS BOY SHOES KIDS SPORT ATHLETIC LIFE STYLE Nike svd_based

768900001127 2000AJ3738600 AJ3738-600 VAPOR 12 CLUB CR7 TF SPORTS MEN SHOES SPORTS ATHLETIC FOOTBALL Nike svd_based

768900001127 2000AT1803601 AT1803-601 STAR RUNNER 2 (TDV) KIDS GIRL SHOES KIDS SPORT LIFESTYLE RUNNING Nike svd_based

768900001127 2000838937001 838937-001 NIKE COURT BOROUGH LOW SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Nike svd_based

768900001127 1091J0168 Tw Raysa Pmb/Syh/Fsy 36/41 CASUAL WOMEN SLIPPERS INDOOR FLATS BALLERINAS Twigy svd_based
Tablo V.3. Matris Ayrıştırma Sonucu

768900001127 1012518204360 Eclipse R.S. Z.25182 Kum Deri CASUAL WOMEN SLIPPERS COMFORT FLATS OUTDOOR Eclipse Relax System svd_based

768900001127 2000749794410 749794-410 MD RUNNER 2 SPORTS MEN SHOES SPORTS LIFESTYLE LIFE STYLE Nike svd_based

768900001127 2000AO0579007 AO0579-007 PHANTOM VENOM CLUB TF SPORTS MEN SHOES SPORTS LIFESTYLE FOOTBALL Nike svd_based

768900001127 2000629746003 629746-003 WMNS NIKE FORCE SKY HIGH SPORTS WOMEN SHOES SPORTS LIFE STYLE LIFE STYLE Nike svd_based

768900001127 2000908994013 908994-013 WMNS DOWNSHIFTER 8 SPORTS WOMEN SHOES SPORTS ATHLETIC RUNNING Nike svd_based

768900001127 104014614070 Crocs Winter Puff Boot Women Black/Charcoal CASUAL WOMEN BOOTS CLASSIC FLATS WET GROUND Crocs svd_based

768900001127 2000943308603 943308-603 REVOLUTION 4 (TDV) KIDS GIRL SHOES KIDS SPORT ATHLETIC LIFE STYLE Nike svd_based
143

768900001127 1091L0125 Tw Candıce Pmb/Khv 36/40 CASUAL WOMEN SLIPPERS INDOOR FLATS HOME BOOTS Twigy svd_based
144

Tablo V.4. Yapay Sinir Ağı Yöntemi Sonucu


145

5.2.3. Matris Ayrıştırma Yöntemi

Matris ayrıştırma yöntemi ile kullanıcı-öğe matrisinin boyutu küçültülerek boş

alanlar ayrıştırılmakta, boyutu küçültülen matris kullanılarak ürün önerimi

yapılmaktadır. Veri setindeki bir müşteri için oluşturulan öneri tablosu Tablo V.3’de

gösterilmektedir (Tablo V.3. Matris Ayrıştırma Sonucu).

5.2.4. Yapay Sinir Ağı Yöntemi

Yapay sinir ağı yöntemi ile kullanıcılar ve öğeler arasındaki ilişki makine

öğrenmesi yoluyla öğretilerek, müşterinin almadığı ürünler için derece tahmini

yaptırılmaktadır. Veri setindeki bir müşteri için oluşturulan öneri tablosu Tablo V.4’de

gösterilmektedir (Tablo V.4. Yapay Sinir Ağı Yöntemi Sonucu).

Modelin eğitimi sırasında oluşan hata değerini gösteren grafik aşağıdaki gibidir.

Modelin her eğitim döngüsünde hata değeri azalarak düşmektedir.

Şekil V.1. Hata Fonksiyonu


146

Modelin eğitimi sırasında kullanıcı ve ürün girişlerinin ürettiği ağırlık değerlerinin

yoğunluk grafiği aşağıdaki gibidir. Kategorik girdilerin ağırlık değerleri eğitim

aşamasında birbirine yakınlaştığı görülmektedir.

Şekil V.2. Ürün Ağırlık Değerlerinin Yoğunluğu

Şekil V.3. Kullanıcı Ağırlık Değerlerinin Yoğunluğu


147

5.3. Derecelendirme Tahminine Göre Karşılaştırma

Model kapsamında çalıştırılan uygulamaların oluşturduğu tahmin derecelerine

göre yapılan karşılaşırmalar aşağıdadır. Dört farklı yöntemde ürünlere ait

derecelendirmeler karşılaştırılmakta, kullanıcı tabanlı filtreleme yöntemi ve öğe tabanlı

filtreleme yönteminde önerilen ürünlere ait tahmin derecelendirmelerinin birbirine çok

yakın olduğu görülmektedir. Matris ayrıştırma yöntemi ile önerilen ürünlerin tahmin

derecelerinin genel olarak daha yüksek olduğu, yapay sinir ağları yöntemi ile yapılan

önerilerin tahmin derecelerinin ise diğer yöntemlere göre daha ortada olduğu

görülmektedir.

Tablo V.5. Derecelendirmeye Göre Karşılaştırma

Tablo V.6. Derecelendirme Yapılan Ürün Sayısı


148

5.4. Ürün Kategorik Özelliklerine Göre Karşılaştırma

Model kapsamında uygulanan yöntemlerin oluşturduğu öneri ürün sonuçları ile

veri setindeki müşterilerin satın aldığı ürünlerin kategorik karşılaştırması yapılmakta,

ürün kategorik özelliklerinin kullanılan yöntemlerin önerdiği ürünler ile ne kadar

örtüştüğüne bakılmaktadır. Ürünlerin yedi farklı özelliği bulunmaktadır. Öncelikle her

bir yöntemin tek bir kategorik özellik ile ne kadar örtüştüğü incelenmekte, daha sonra

tüm kategorik özellikler ikili, üçlü, dörtlü, beşli, altılı ve yedili gruplar halinde ne kadar

örtüştüğüne bakılmaktadır. Karşılaştırma sonucunda, öğe tabanlı filtreleme

yöntemlerinin kullanıcı tabanlı filtreleme yöntemlere göre daha başarılı olduğu, genel

tüm karşılaştırmalarda ise matris ayrıştırma yönteminin daha başarılı olduğu

görülmektedir. Tablo V7.’de kullanılan tüm yöntemlerin ayrı ayrı kategorik

karşılaştırılması sonucunda matris ayrıştırma yönteminin diğer yöntemlere göre daha

başarılı olduğu gösterilmektedir.

Tablo V.7. Kategorik Karşılaştırma

Tablo V.8’de matris ayrıştırma yönteminin category ve department kategorileri ile

birlikte karşılaştırıldığında diğer yöntemlere göre daha başarılı olduğu

gösterilmektedir.
149

Tablo V.8. Kategorik Karşılaştırma (Category, Department)

Tablo V.9’da matris ayrıştırma yönteminin category, department ve section kategorileri

ile birlikte karşılaştırıldığında diğer yöntemlere göre daha başarılı olduğu

gösterilmektedir.

Tablo V.9. Kategorik Karşılaştırma (Category, Department, Section)

Tablo V.10’da matris ayrıştırma yönteminin category, department, section ve

subcategory kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre daha

başarılı olduğu gösterilmektedir


150

Tablo V.10. Kategorik Karşılaştırma (Category, Department, Section, SubCategory)

Tablo V.11’de matris ayrıştırma yönteminin category, department, section, subcategory

ve group kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre daha başarılı

olduğu gösterilmektedir

Tablo V.11. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups)

Tablo V.12’de öğe tabanlı yönteminin category, department, section, subcategory,

group ve style kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre daha

başarılı olduğu gösterilmektedir


151

Tablo V.12. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups, Style)

Tablo V.13’de öğe tabanlı yönteminin category, department, section, subcategory,

group, style ve brand kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre

daha başarılı olduğu gösterilmektedir

Tablo V.13. Kategorik Karşılaştırma (Category, Department, Section, SubCategory,


Groups, Style, Brand)

Dijital satış kanallarında uygulanan yöntemlerde, ürünün kategorik

özelliklerinden yararlanılmaktadır. Yöntem olarak içerik tabanlı filtreleme yöntemi

olarak gözükse de yapılan çalışmalar ürünlerin model özelliklerine göre gruplanması,

her gruba ait en iyi satan veya aynı gruptan beğeni derecesi yüksek ürünlerin sunulması

şeklinde gerçekleşmektedir.
152

SINIRLILIKLAR

Tez çalışmasında kullanılan müşteri verisi markanın kartlı müşterilerinin satın

alma verilerinden oluşmakta ve bu verilerden doğru oluşturulan kullanıcı-öğe matrisi

işbirlikçi filtreleme yöntemleri tarafından kullanılmaktadır. Müşterilerin tüm

ürünlerden satın almaları ya da derecelendirme yapmaları mümkün olmadığından

kullanıcı-öğe matrisi seyrek yapıda oluşmaktadır. Bu sebeple oluşturulan veri seti 10

ürün alan müşteriler ile sınırlı tutularak seyreklik sınırlı tutulmaya çalışılmaktadır.

Firma içindeki pazarlama sürecini profesyonel yetkinlikle yöneten Pazarlama ve E-

Ticaret bölümlerinin yönlendirmesi kartlı müşterilerin satın alma davranışları sürekli

olmadığından 10 ürün alan müşteriler üzerinden çalışmanın başlatılmasına karar

verilmiştir.

Firmanın yine Pazarlama ve E-Ticaret bölümlerinin yönlendirmesi ile çalışma

sırasında tüm yöntemlerin uygulanması sonucunda oluşturulan 12,615,237 adet

öneriden müşterilere sunulmak ve mağaza uygulamasında kullanmak üzere 15 adet

ürünün belirlenmesine karar verilmiştir

Bulgular ve Sonuçlar bölümünde yer alan kategorik karşılaştırmalar firmanın

kullandığı ürün kategori hiyerarşisi temel alınarak yapılmaktadır. İkili, üçlü, dörtlü,

beşli, altılı, yedili olarak oluşturulan gruplar ürün kategori hiyerarşisine göre sırasal bir

artışla oluşturulmaktadır. Farklı kombinasyonlarda kullanılan yöntemlerin performans

testi yapılmamaktadır.

Kullanıcı-öğe matrisinin etkileşim seyrekliği çok büyük satırların öneri yapılması

amacıyla belleğe yüklenmesi bir performans sorunu yaratmaktadır. Matris ayrıştırma

yöntemi ile boyut azaltılmış kullanıcı-öğe matrisi üzerinden öneri oluşturulmaktadır.


153

Bulgular ve Sonuçlar bölümünde dört farklı yöntemin karşılaştırmalarına yer

verilmektedir. Karşılaştırmalarda yakınsak değerlerde matris ayrıştırma yönteminin

verisi kullanılmıştır.
154

DEĞERLENDİRME

İçinde bulunduğumuz toplum bilgi toplumudur ve bilginin önemli bir sermaye

kaynağı olduğu bir toplum düzeni içindeyiz. Bu neden ile, gerek perakende sektörü gibi

müşteriyle birebir ilişki içinde bulunulan sektörlerde, gerekse internet üzerinden satış

yapılan sektörlerde müşteriye veri ile yaklaşılması önemlidir.

Bu çalışma kapsamında müşteriye yönelik kişisel öneri yöntemleri ile dijital

kanallarda uygulanmakta olan yöntemler araştırılmış ve genel bir yol haritası

belirlenmiştir. Perakende ayakkabı sektöründe faaliyet gösteren markanın kayıtlı

müşterileri için ürün önerme çalışması yapılmıştır. Bu çalışmada markanın

mağazalarında alışveriş yapan müşterilerin verileri üzerinden “müşteri”, “ürün” ve

“satın alma adeti” veri seti hazırlanmıştır. Öneri yapısı için işbirlikçi filtreleme

yönteminin bellek tabanlı yöntemlerinden kullanıcı tabanlı filtreleme yöntemi, öğe

tabanlı filtreleme yöntemi ve model tabanlı yöntemlerden matris ayrıştırma yöntemi ile

yapay sinir ağı yöntemleri kullanılmıştır. Müşteri sayısının fazla, satın alınan ürün

sayısının daha kısıtlı olmasından dolayı oluşan kullanıcı-öğe derecelendirme matrisi

seyrek bir yapıda oluşmuştur. Kullanılan veri sadece müşterinin satın alma verisinden

hazırlanmıştır. Müşterinin mağaza içinde ilgilendiği ürünlerle ilgili markanın

veritabanında veri bulunmamaktadır. Kullanıcı tabanlı filtreleme yönteminin

uygulanması için Pearson Korelasyon Katsayısı fonksiyonu ile benzerlik hesaplanmış

ve öneri bilgisi oluşturulmuştur. Öğeler arasında benzerlik hesaplamasında Kosinüs

benzerlik fonksiyonu kullanılmıştır. Kullanıcı-ürün matrisinin seyrek bir yapıda

olmasından dolayı tekil değer ayrıştırma yöntemi ile matrisin boyutu azaltılarak öneri
155

oluşturulmuş, aynı veri seti yapay sinir ağı yönteminde de kullanılmıştır. Kategorik

veriler gömme katmanı ile sayısallaştırılarak ağ içinde kullanılması sağlanmıştır.

Kullanılan yöntemlerin oluşturduğu öneri ürünleri tahmin derecesine göre ve

kategorik özelliklerine göre karşılaştırılmıştır.

Müşterinin açık veya örtük derecelendirmelerinden yararlanılarak kişisel öneriler

yapılmamaktadır. Müşterilerden ürünlere ait derecelendirme bilgisi alınmakta, fakat bu

derecelendirme bilgisi müşterinin ilgisinin anlaşılması yerine daha çok ürün beğenisini

görmek amaçlı kullanılmaktadır.

Tez kapsamında uygulanmış işbirlikçi filtreleme yöntemleri ile aşağıdaki faydalar

sağlanmaktadır;

• Perakende sektörünün temel amacı satıştır. Bu doğrultuda müşteri ilgi alanına

uygun ürünlere yönlendirilerek, satış potansiyelinin yükselmesi sağlanmaktadır.

• Müşterinin beğenisi yüksek olan ürünlerden farklı ürünlere de yönlendirilmesi

sağlanmaktadır.

• Müşterinin alışveriş deneyimine ait verilerden öneri oluşturularak, markaya

rekabetçi ortamda avantaj sağlanmaktadır.

• Müşterilerin ilgi alanlarının anlaşılmasına yardımcı olarak, markanın sezonluk

satın alınan ürün çeşitlerine ışık tutulmaktadır.

• Sezon dışı ürünlerde müşteriye öneri olarak sunulduğundan, farklı ürünlerin

satışa dönmesi sağlanmaktadır.

Bulgulardaki sonuçlara göre; uygulanan dört yöntemin tahmin dereceleri

üzerinden yapılan karşılaştırmada, matris ayrıştırma yönteminin daha iyi sonuç verdiği

görülmektedir. Yapay sinir ağı yöntemi ile oluşturulan tahmin derecelendirmesi ikinci
156

sırada yer almakta, kullanıcı ve öğe tabanlı yöntemlerin tahmin derecelerinin birbirine

yakın olmasına karşılık öğe tabanlı yöntemlerin kullanıcı tabanlı yöntemlere göre daha

iyi derecelendirme yaptığı görülmektedir.

Tüm kategorilerin tekli olarak karşılaştırılmasında matris ayrıştırma yöntemi üç

farklı kategoride diğer yöntemlere göre daha fazla örtüşme yakalamaktadır. Öğe tabanlı

yöntemler iki kategoride, kullanıcı tabanlı ve yapay sinir ağı yöntemleri de bir

kategoride örtüşme yakalanmaktadır. Tekli olarak yapılan kategorik karşılaştırmada

matris ayrıştırma yönteminin daha başarılı olduğu görülmektedir.

Kategorilerin çoklu karşılaştırmasında matris ayrıştırma yöntemi dört farklı çoklu

kategorik karşılaştırmada başarılı olurken, öğe tabanlı yöntem ise iki farklı çoklu

kategorik karşılaştırmada daha başarılı olduğu, kullanıcı tabanlı yönteminin ve yapay

sinir ağı yönteminin çoklu karşılaştırmalarda örtüşen grup bulamadıkları

görülmektedir. Yapılan tüm karşılaştırmaların genelinde matris ayrıştırma yönteminin

diğer yöntemlere göre daha başarılı olduğu ortaya çıkmaktadır.

Kişisel ürün önerimi yöntemleri sadece perakende veya dijital satış kanallarında

değil, müşteriye hitap eden tüm sektörlerde uygulanacak yöntemlerdir. Perakende

sektöründeki dijital dönüşümün anahtar noktalarından biridir. Müşteri-ürün

etkileşimine dayanan öneri yöntemleri için müşterinin mağaza içinde ilgilendiği

ürünlere ait bilgilerin kayıt altına alınması kişiselleştirilmiş öneri verisi olarak çok

değerli olmaktadır. Öneri yöntemlerinin bu tür veri setleriyle birlikte kullanılması,

müşterinin ilgi alanlarının anlaşılması ve daha iyi önerilerin oluşturulması için

önemlidir.
157

Perakende sektöründe faaliyet gösteren tüm markaların sadık müşterilerinin

verilerini, veri hazırlık aşamasından geçirerek değerlendirilebilir ve yararlı çıkarımlar

yapılabilir hale getirmeleri, perakende sektöründeki markalar açısından önemli bir

dijital dönüşüm olarak görülebilir.

Öneriye dayalı sezonsal satın alma tahmini, kullanıcıların beğeni tahminine göre

ürün kalitesi tercihlerinin belirlenmesi ve kalite tercihlerine göre üretim kararının

verilmesinde öneri yöntemleri firmaların kullanabileceği karar verme araçlarından biri

olabilir. Bilginin bir sermaye kaynağı olarak kabul edildiği günümüzde, perakende

sektör verileri üzerinde bu çalışmada kullanılan öneri ve tahmin yöntemlerinin çok daha

fazla kullanılacağı, bu yöntemlerden, finansal yarar sağlamak için gerekli yatırımların

destekleneceği öngörülmektedir.
158

KAYNAKLAR

[1] RILA, Accenture, "Delivering For The New Consumer," RILA, Accenture,

2018. [Online]. Available:

https://www.accenture.com/t20180905T060744Z__w__/us-

en/_acnmedia/PDF-85/Accenture-Report-The-Changing-Consumer-And-

The-New-Definition-of-Retail.pdf.

[2] D. Kılınç and N. Başeğmez, Uygulamalarla Veri Bilimi, İstanbul: Abakus,

2018.

[3] Accenture, Interactive, "Personalization Pulse Check," Accenture, 2016.

[Online]. Available:

https://www.accenture.com/t20161121T011402Z__w__/us-

en/_acnmedia/PDF-37/Accenture-Personalization-Pulse-Check-

Infographic.pdf#zoom=50.

[4] Amazon.com Inc, "Amazon," Amazon, 2020. [Online]. Available:

https://www.amazon.com.

[5] Pandora Media Inc, "Pandora," 2020. [Online]. Available:

https://www.pandora.com.

[6] Best Buy, "BestBuy," Best Buy, 2020. [Online]. Available:

https://www.bestbuy.com.

[7] Facebook, "facebook," Facebook, 2020. [Online]. Available:

https://www.facebook.com.
159

[8] Instagram, "Instagram," Instagram, 2020. [Online]. Available:

https://www.instagram.com.

[9] Twitter Inc, "Twitter," Twitter, 2020. [Online]. Available: https://twitter.com.

[10] Netflix Inc, "Netflix," Netflix, 2020. [Online]. Available:

https://www.netflix.com.

[11] R. Sharma and R. Singh, "Evolution of Recommender Systems from Ancient

Times to Modern Era," Indian Journal of Science and Technology, vol. Vol 9,

no. 20, 2016.

[12] M. Balabanovic and Y. Shoham, "Content-Based, Collaborative

Recommendation," Communications of the ACM, vol. 40, no. 3, pp. 66-72,

1997.

[13] G. D. Lindan, J. A. Jacobi and E. A. Benson, "United States Patent".

Washington, D.C. Patent 6.266.649, 2001.

[14] T. Hoffman, "Probabilistic Latent Semantic Indexing," Association for

Computing Machinery, pp. 50-57, 1999.

[15] J. R. Joyce, "Pandora and the Music Genome Project: Song structure Analysis

Tools Facilitate New Music Discovery," Scientific Computing, vol. 23, pp. 40-

41, 2006.

[16] Last.fm Ltd, "last.fm," Last.fm, 2020. [Online]. Available:

https://www.last.fm.

[17] J. Bobadilla, F. J. Ortega, A. Hernando and A. Gutierrez, "Recommender

Systems Survey," Knowledge Based Systems, vol. 46, p. 109–132, 2013.


160

[18] Epsilon, "New Epsilon research indicates 80% of consumers are more likely

to make a purchase when brands offer personalized experiences," Epsilon Data

Management, 2020. [Online]. Available:

https://us.epsilon.com/pressroom/new-epsilon-research-indicates-80-of-

consumers-are-more-likely-to-make-a-purchase-when-brands-offer-

personalized-experiences.

[19] P. Melville and V. Sindhwani, "Recommender Systems," in Encyclopedia of

Machine Learning and Data Mining, vol. 1, Springer, 2010, pp. 829-838.

[20] G. Adomavicius and A. Tuzhilin, "Toward the next generation of

recommender systems: A survey of the state-of-the-art and possible

extensions," IEEE transactions on knowledge and data engineering, vol. 17,

no. 6, pp. 734-749, 2005.

[21] eBay Inc, "ebay," eBay, 1995. [Online]. Available: https://www.ebay.com.

[22] Levi Strauss & Co., "Levis," Levi Strauss & Co., 2020. [Online]. Available:

https://www.levis.com.

[23] Movie Finder, "Movie Finder," Movie Finder, 2020. [Online]. Available:

http://moviefinder.ehubsoft.net.

[24] Google LLC, "Youtube," Google LLC, 2020. [Online]. Available:

https://www.youtube.com.

[25] E. Vozalis and K. G. Margaritis, "Analysis of Recommender Systems

Algorithms," in The 6th Hellenic European Conference on Computer

Mathematics & its Applications, Semantic Scholar, 2003, pp. 732-745.


161

[26] J. S. Breese, D. Hackerman and C. Kadie, "Empirical Analysis of Predictive

Algorithms for Collaborative Filtering," in Proceedings of the Fourteenth

Conference on Uncertainty in Artificial Intelligence}, Morgan Kaufmann

Publishers Inc., 1998, pp. 43-52.

[27] Ö. B. Tek and E. Özgül, Modern Pazarlama İlkeleri, İzmir: Birleşik

Matbaacılık, 2013.

[28] M. Çelik, R. Altunışık and N. Sütütemiz, "Bütünleşik Pazarlama İletişimi,

Marka Performansı ve Pazar Performansı İlişkisinin İncelenmesi,"

Uluslararası Yönetim İktisat ve İşletme Dergisi, vol. 9, no. 19, 2013.

[29] McKinsey & Company, "Consumers Value Personalization. Up Your Game

to Not Miss the Opportunity.," McKinsey & Company, 2018. [Online].

Available: https://www.mckinsey.com/business-functions/marketing-and-

sales/solutions/periscope/our-insights/surveys/consumers-value-

personalization-up-your-game-to-not-miss-the-opportunity.

[30] C. C. Aggarwal, Recommender Systems, Springer, 2016.

[31] H. Bulut and M. Milli, "İşbirlikçi Filtreleme İçin Yeni Tahminleme

Yöntemleri," Pamukkale Üniversitesi Mühendislik Bilimleri Dergisi, vol. 22,

no. 2, pp. 123-128, 2016.

[32] S. Taşcı, "İçerik Bazlı Medya Takip ve Haber Tavsiye Sistemi," Hacettepe

Üniversitesi Kütüphaneleri Açık Erişim Birimi, 2015. [Online]. Available:

http://openaccess.hacettepe.edu.tr:8080/xmlui/handle/11655/2604.
162

[33] R. Q. Wang and F. S. Kong, "Semantic-Enhanced Personalized Recommender

System," in 2007 International Conference on Machine Learning and

Cybernetics, IEEE, 2007, pp. 4069-4074.

[34] C. N. Ziegler, S. M. McNee, J. A. Konstan and G. Lausen, "Improving

Recommendation Lists through Topic Diversification," in Proceedings of the

14th International Conference on World Wide Web, Association for

Computing Machinery, 2005, pp. 22-32.

[35] C. Konstantinos and M. Gregoris, "A Topic-Based Recommender System For

Electronic Marketplace Platforms," Expert Systems with Applications, vol. 40,

no. 11, pp. 4370-4379, 2013.

[36] X. Luo, Y. Xia and Q. Zhu, "Incremental Collaborative Filtering

Recommender based on Regularized Matrix Factorization," Knowledge-

Based Systems, vol. 27, pp. 271-280, 2012.

[37] K. Falk, Practical Recomender Systems, Manning Publication Co., 2019.

[38] İ. Turan, Ü. Şimsek and H. Aslan, "Eğitim Araştırmalarında Likert Ölçeği ve

Likert Tipi Sorunların Kullanımı ve Analizi," Sakarya Üniversitesi Eğitim

Fakultesi Dergisi, vol. 30, no. 1, pp. 186-203, 2015.

[39] D. Jannach, M. Zanker, A. Felfernig and G. Friedrich, Recommender System

An Introduction, New York: Cambridge University Press, 2011.

[40] F. O. Isınkaye, Y. O. Folajimi and B. A. Ojokoh, "Recommendation

Systems:Principles, Methods and Evaluation," Egyption Informatics Journal,

vol. 16, no. 3, pp. 261-273, 2015.


163

[41] K. Grubinska and M. Thomas, "Correcting for Self-selection in Product

Rating: Causal Recommender Systems," 2019. [Online]. Available:

https://humboldt-

wi.github.io/blog/research/applied_predictive_modeling_19/causalrecommen

dersystem/.

[42] M. D. Ekstrand, J. T. Riedl and J. A. Konstan, "Collaborative Filtering

Recommender Systems," Foundations and Trends in Human-Computer

Interaction, vol. 4, no. 2, pp. 81-173, 2011.

[43] S. Doshi, "Brief On Recommender Systems," Towards Data Science, 2019.

[Online]. Available: https://towardsdatascience.com/brief-on-recommender-

systems-b86a1068a4dd.

[44] R. Banik, Hands-On Recommendation Systems with Python, Packt

Publishing Ltd, 2018.

[45] J. T. Ndengabaganizi and K. Rajkumar, "Product Recommendation Systems

based on Hybrid Approach Technology," International Research Journal of

Engineering and Technology (IRJET), vol. 4, no. 8, 2017.

[46] F. Ricci, L. Rokach, B. Shapira and P. B. Kantor, Recommender Systems

Handbook, Springer Science+Business Media,, 2011.

[47] F. B. Moghaddam and M. Elahi, "Cold Start Solutions For Recommendation

Systems," in Big Data Recommender Systems - Volume 2: Application

Paradigms, IET Digital Library, 2019, pp. 35-56.


164

[48] Y. Chen, C. Wu, M. Xie and X. Guo, "Solving the Sparsity Problem in

Recommender Systems Using Association Retrieval," Journal Of Computers,

vol. 6, no. 9, pp. 1896-1902, 2011.

[49] M. Grcar, D. Mladenic, B. Fortuna and M. Grobelnik, "Data Sparsity Issues In

The CollaborativeFiltering Framework," in International Workshop On

Knowledge Discovery On The Web, Springer, 2006, pp. 58-76.

[50] S. Khusro, Z. Ali and I. Ullah, "Recommender Systems: Issues, Challenges,

and Research Opportunities," in Information Science and Applications (ICISA)

2016, Springer, 2016, pp. 1179-1189.

[51] Oracle Türkiye, "Introduction to Oracle Database," Oracle, 2019. [Online].

Available: https://docs.oracle.com/en/database/oracle/oracle-

database/21/cncpt/introduction-to-oracle-database.html#GUID-A42A6EF0-

20F8-4F4B-AFF7-09C100AE581E.

[52] American National Standards, "The SQL Standard – ISO/IEC 9075:2016,"

ANSI, 2018. [Online]. Available: https://blog.ansi.org/2018/10/sql-standard-

iso-iec-9075-2016-ansi-x3-135/?_ga=2.173753188.636390433.1608631919-

532806038.1608631919.

[53] Learn Computer Science, "Relational Database Management System," Learn

Computer Science, 2020. [Online]. Available:

https://www.learncomputerscienceonline.com/relational-database/.
165

[54] Oracle Tutorial, "What is Oracle Database," Oracle Tutorial, 2017. [Online].

Available: https://www.oracletutorial.com/getting-started/what-is-oracle-

database/.

[55] İ. Şen, "Dağıtık Veritabanı Sistemleri," Slide Share, 2018. [Online]. Available:

https://www2.slideshare.net/smailEN3/datk-veritaban-

sistemleri?qid=6fcf5d3d-a7c1-461f-bd20-

150847377573&v=&b=&from_search=1.

[56] Uzaktan CRM Eğitimi, "Müşteri Odaklı Organizasyon-6," Uzaktan Crm

Eğitimi, 2019. [Online]. Available:

https://www.uzaktancrmegitimi.com/773/musteri-odakli-organizasyon-6.

[57] S. Öztürk and H. E. Atmaca, "İlişkisel ve İlişkisel Olmayan (NoSQL) Veri

Tabanı Sistemleri Mimari Performansının Yönetim Bilişim Sistemleri

Kapsamında İncelenmesi," Bilişim Teknolojileri Dergisi, vol. 10, no. 2, 2017.

[58] H. Akpınar, "Veri Tabanlarında Bilgi Keşfi ve Veri Madenciliği," İstanbul

Üniversitesi İşletme Fakültesi Dergisi, vol. 29, no. 1, pp. 1-22, 2000.

[59] G. Silahtaroğlu, Veri Madenciliği Kavram ve Algoritmalar, Papatya, 2016.

[60] S. Xiaoyuan and T. M. Khoshgoftaar, "A Survey of Collaborative Filtering

Techniques," Advances in Artificial Intelligence, vol. 2009, 2009.

[61] S. Gupta, "A Regression Modeling Technique in Data Mining," International

Journal of Computer Applications, vol. 116, no. 9, 2015.

[62] K. S. Köse, "Korelasyon ve Regresyon Analizi," 2008. [Online]. Available:

https://www.scribd.com/document/2066772/korelasyon-analizi.
166

[63] J. L. Herlocker, J. A. Konstan and R. John, "Explaining Collaborative Filtering

Recommendations," in Proceedings of the 2000 ACM conference on Computer

supported cooperative work, Association for Computing Machinery, 2000, pp.

241-250.

[64] A. Chakure, "K-Nearest Neighbors (KNN) Algorithm," Medium, 2019.

[Online]. Available: https://aaaanchakure.medium.com/k-nearest-neighbors-

knn-algorithm-bd375d14eec7.

[65] H. Chauhan and A. Chauhan, "Implementation Of Decision Tree Algorithm

c4.5," International Journal of Scientific and Research Publications, vol. 3,

no. 10, pp. 1-3, 2013.

[66] T. Zhang and V. S. Iyengar, "Recommender Systems Using Linear

Classifiers," Journal of Machine Learning Research, vol. 2, no. Feb, pp. 313-

334, 2002.

[67] R. Nisbet, J. Elder and G. Miner, Handbook of Statistical Analysis and Data

Mining Applications, Academic Press, 2009.

[68] R. Pupale, "Support Vector Machines(SVM) — An Overview," Towards Data

Science, 2018. [Online]. Available: https://towardsdatascience.com/https-

medium-com-pupalerushikesh-svm-f4b42800e989.

[69] M.-P. Thi Do, D. V. Nguyen and L. Nguyen, "Model-based Approach for

Collaborative Filtering," in 6th International Conference on Information

Technology for Education, Academia, 2010.


167

[70] M. Y. Avcılar and E. Yakut, "Association Rules in Data Mining: An

Application on a Clothing and Accessory Specialty Store," Canadian Social

Science, vol. 10, no. 3, pp. 75-83, 2014.

[71] T. Jayalakshmi and A. Santhakumaran, "Statistical Normalization And Back

Propagation For Classification," International Journal of Computer Theory

and Engineering, vol. 3, no. 1, pp. 1793-8201, 2011.

[72] C. Saranya and G. Manikandan, "A Study On Normalization Techniques For

Privacy Preserving Data Mining," International Journal of Engineering and

Technology, vol. 5, no. 3, pp. 2701-2704, 2013.

[73] J. Han, M. Kamber and J. Pei, Data Mining Concepts And Techniques,

Elsevier, 2012.

[74] E. Ş. Şeker, İş Zekası ve Veri Madenciliği, Cinius, 2013.

[75] Y. Malik, "Enformasyon ve Bilgi Kavramları Bağlamında Enformasyon

Yönetimi ve Bilgi Yönetimi," Ankara Üniversitesi Dil ve Tarih-Coğrafya

Fakültesi Dergisi, vol. 49, no. 1, pp. 95-118, 2009.

[76] Ç. A. Çilan, Sosyal Bilimlerde Kategorik Verilerle İlişki Analizi,Kontenjans

Tabloları Analiz, Pegem Akademi, 2013.

[77] D. Mishra, "Categorical Embedding and Transfer Learning," Towards Data

Science, 2019. [Online]. Available:

https://towardsdatascience.com/categorical-embedding-and-transfer-learning-

dd3c4af6345d.
168

[78] D. Yadav, "Categorical Encoding Using Label Encoding And One Hot

Encoder," Towards Data Science, 2019. [Online]. Available:

https://towardsdatascience.com/categorical-encoding-using-label-encoding-

and-one-hot-encoder-911ef77fb5bd.

[79] C. Guo and F. Berkhahn, "Entity Embeddings Of Categorical Variables,"

arXiv preprint arXiv:1604.06737, vol. abs/1604.06737, 2016.

[80] F. Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin, 2015.

[81] K. Aslan, A'dan Z'ye C Kılavuzu, Pusula Yayıncılık ve İletişim, 1997.

[82] J. Liberty, Programming C#, O'REİLY, 2002.

[83] A. B. Altıntaş, JAVA Programlama Dili, Papatya Yayıncılık, 2016.

[84] R. Nixon, Learning PHP, MySQL & JavaScript, O'Reilly, 2015.

[85] T. Karaçay, Python 3 Veri Yapıları, Seçkin Yayıncılık, 2017.

[86] M. Aydemir, Projeler ile Python, İstanbul: Kodlab Yayın Dağıtım Yazılım ve

Eğitim Hizmetleri San.ve Tic.Ltd.Şti, 2016.

[87] Python, "General Python FAQ," Python, 2020. [Online]. Available:

https://docs.python.org/3/faq/general.html.

[88] S. Cass, "The Top Programming Languages 2019," IEEE Spectrum, 2019.

[Online]. Available: https://spectrum.ieee.org/computing/software/the-top-

programming-languages-2019.

[89] Scikit-Learn, "Scikit-Learn Machine Learning in Python," Scikit-Learn, 2007.

[Online]. Available: https://scikit-learn.org/stable/getting_started.html.


169

[90] N. Huge, "Using prediction algorithms," 2015. [Online]. Available:

https://surprise.readthedocs.io/en/stable/prediction_algorithms.html.

[91] Awesome Python, "Compare Surprise And Crab's Popularity And Activity,"

2019. [Online]. Available: https://python.libhunt.com/compare-surprise-vs-

crab?rel=cmp-lib.

[92] Awesome Python, "Compare Surprise And Python-Recsys's Popularity And

Activity," 2019. [Online]. Available: https://python.libhunt.com/compare-

surprise-vs-python-recsys?rel=cmp-cmp.

[93] Awesome Python, "Compare Surprise And Keras's Popularity And Activity,"

2019. [Online]. Available: https://python.libhunt.com/compare-surprise-vs-

keras.

[94] Keras Special Interest Group (Keras SIG)., "Why choose Keras," Keras, 2020.

[Online]. Available: https://keras.io/why_keras/.

[95] NumPy, "NumPy: the absolute basics for beginners," NumPy, 2020. [Online].

Available: https://numpy.org/doc/stable/user/absolute_beginners.html.

[96] Tensorflow, "Why TensorFlow," Tensorflow, [Online]. Available:

https://www.tensorflow.org/about.

[97] M. Waskom, "seaborn: statistical data visualization," seaborn, 2020. [Online].

Available: https://seaborn.pydata.org.

[98] M. Kleehammer, "pyodbc," Python Software Foundation, 2020. [Online].

Available: https://pypi.org/project/pyodbc/.
170

[99] Spyder, "Welcome to Spyder’s Documentation," Spyder, 2020. [Online].

Available: https://docs.spyder-ide.org/current/index.html.

[100] A. Jorgensen, J. Segarra, P. Leblanc, J. Chinchilla and A. Nelson, Microsoft

SQL Server 2012 Bible, John Wiley and Sons, Inc, 2012.

[101] R. M. Riordan, Adım Adım Microsoft SQL Server 2000 Programlama,

Arkadaş Yayınevi, 2001.

[102] I. Ben-Gan, Microsoft SQL Server 2012 T-SQL Fundamentals, mspress, 2012.

[103] R. Burke, "Hybrid Recommender Systems: Survey and Experiments," User

Modeling And User-Adapted Interaction, vol. 12, no. 4, pp. 331-370, 2002.

[104] B. Rocca, "Introduction to Recommender Systems," Towards Data Science,

2019. [Online]. Available: https://towardsdatascience.com/introduction-to-

recommender-systems-6c66cf15ada.

[105] McKinsey & Company, "How Retailers Can Keep Up With Consumers,"

McKinsey & Company, 2013. [Online]. Available:

https://www.mckinsey.com/industries/retail/our-insights/how-retailers-can-

keep-up-with-consumers.

[106] O. Theobald, Machine Learning For Beginners: Make Your Own

Recommender System, Scatterplot Press, 2018.

[107] C. Pinela, "Recommender Systems — User-Based and Item-Based

Collaborative Filtering," Medium, 2017. [Online]. Available:

https://medium.com/@cfpinela/recommender-systems-user-based-and-item-

based-collaborative-filtering-5d5f375a127f.
171

[108] R. Devooght and H. Bersini, "Collaborative Filtering With Recurrent Neural

Networks," arXiv preprint arXiv:1608.07400, vol. abs/1608.07400, 2016.

[109] P. Boström and M. Filipsson, "Comparison of User Based and Item Based

Collaborative Filtering Recommendation Services," in Examenmsarbete Inom

Teknik, Grundniva, 15 HP Stockhom, Sverige 2017, 2017.

[110] H. Shimodaira, "Similarity And Recommender Systems," School of

Informatics, The University of Eidenburgh, vol. 21, 2014.

[111] A. Singh, A. Yadav and A. Rana, "K-means with Three different Distance

Metrics," International Journal of Computer Applications, vol. 67, no. 10,

2013.

[112] A. S. Tomar, A. Srivastava and S. Kumar, "An Implementation Of Pearson

Correlation Method For Predicting Items To User In E-Commerce,"

International Journal Of Engineering Sciences & Research Technology, vol.

3, 2016.

[113] Intellicia, "Comparison of different Word Embeddings on Text Similarity —

 A use case in NLP," Intellica.AI, 2019. [Online]. Available:

https://intellica.ai/blog/blog.html?comparison-of-different-word-

embeddings-on-text-similarity-a-use-case-in-nlp-e83e08469c1c.

[114] B. Sarwar, G. Karypis, J. Konstan and J. Riedl, "Item-Based Collaborative

Filtering Recommendation Algorithms," in Proceedings of the 10th

International Conference On World Wide Web, Association for Computing

Machinery, 2001, pp. 285-295.


172

[115] Y. Koren, R. Bell and C. Volinsky, Matrix Factorizition Techniques for

Recommender Systems, IEEE, 2009.

[116] D. Bokde, S. Girase and D. Mukhopadhyay, "Matrix factorization model in

collaborative filtering algorithms: A survey," Procedia Computer Science, vol.

49, pp. 136-146, 2015.

[117] L. I. Smith, "A Tutorial On Principal Components Analysis," Computer

Science Technical Report, vol. 12, 2002.

[118] S. Gower, "Netflix prize and SVD," Semantic Scholar, 2014.

[119] Y. Hu, Y. Koren and C. Volinsky, "Collaborative Filtering For Implicit

Feedback Datasets," in 2008 Eighth IEEE International Conference on Data

Mining, IEEE, 2008, pp. 263-272.

[120] S. Zhang, L. Yao, A. Sun and Y. Tay, "Deep learning based recommender

system: A survey and new perspectives," ACM Computing Surveys (CSUR),

vol. 52, pp. 1-38, 2019.

[121] Ç. Elmas, Yapay Zeka Uygulamaları, Ankara Seçkin Akademik ve Mesleki

Yayınlar, 2018.

[122] E. Öztemel, Yapay Sinir Ağları, Papatya Yayıncılık, 2016.

[123] S. Walczak and N. Cerpa, "Artificial Neural Networks," in Encyclopedia of

Physical Science and Technology (Third Edition), Academic Press, 2003, pp.

631-645.

[124] Arunava, "The Perceptron," Towards Data Science, 2018. [Online]. Available:

https://towardsdatascience.com/the-perceptron-3af34c84838c.
173

[125] S. Sharma, S. Sharma and A. Athaiya, "Activation Functions in Neural

Networks," International Journal of Engineering Applied Sciences and

Technology, vol. 4, no. 12, pp. 39-316, 2017.

[126] A. Mohanty, "Multi layer Perceptron (MLP) Models on Real World Banking

Data," Medium, 2019. [Online]. Available: https://becominghuman.ai/multi-

layer-perceptron-mlp-models-on-real-world-banking-data-f6dd3d7e998f.

[127] K. Swingler, "Lecture 2: Single Layer Perceptrons," 2018. [Online]. Available:

http://www.cs.stir.ac.uk/courses/ITNP4B/lectures/kms/2-Perceptrons.pdf.

[128] M. Mazur, "A Step by Step Backpropagation Example," 2015. [Online].

Available: https://mattmazur.com/2015/03/17/a-step-by-step-

backpropagation-example/.

[129] GangBoard, "What is Back Propagation," 2019. [Online]. Available:

https://www.gangboard.com/blog/backpropagation/.

[130] IBM, "What is a relational database ?," 2019. [Online]. Available:

https://www.ibm.com/analytics/relational-database.

[131] Netflix, "Netflix Prize," 2009. [Online]. Available:

https://www.netflixprize.com.

[132] Tutorials Point, "Supervised Learning," 2019. [Online]. Available:

https://www.tutorialspoint.com/artificial_neural_network/artificial_neural_ne

twork_supervised_learning.htm.
174

EK-1

EK-1.1. İşbirlikçi Filtreleme Yöntemi Örnek Uygulaması

İşbirlikçi filtreleme yöntemleriden kullanıcı tabanlı filtreleme ve öğe tabanlı

filtreleme yöntemlerinin benzerlik ve tahmin hesaplamasına ait örnek veriler üzerinde

bir uygulama geliştirilmiştir.


1 import numpy as np

2 import pandas as pd

3 def DataNormallestirme(Ratings):

4 Mean = Ratings.groupby(['users'],as_index=False,sort=False).mean()

5 Mean = Mean.rename(columns={'rating':'rating_mean'})

6 Ratings = pd.merge(Ratings,Mean,on='users',how='left',sort='False')

7 Ratings['rating_adjusted'] = Ratings['rating'] - Ratings['rating_mean']

8 return Ratings

10 def UserBasedSim(matrix):

11 userxIndex = 0

12 simArray = [(0,0,0)]

13 userR1 = matrix.values

14 userR2 = matrix.values

15 for ru1 in userR1:

16 useryIndex = 0

17 for ru2 in userR2:

18 numerator = np.nansum([x * y for x,y in zip(ru1, ru2)

19 if np.isfinite(x) and np.isfinite(y)])

denominator1 = np.sqrt(np.nansum([np.square(x) for x,y in

20 zip(ru1,ru2)

if np.isfinite(x) and np.isfinite(y)

21 ]))

denominator2 = np.sqrt(np.nansum([np.square(y) for x,y in

22 zip(ru1,ru2)
175

if np.isfinite(x) and np.isfinite(y)

23 ]))

24 simTheta = numerator / (denominator1 * denominator2 )

25 simArray.append((matrix.index[userxIndex],

26 matrix.index[useryIndex],simTheta))

27

28 useryIndex+=1

29 userxIndex+=1

30 del simArray[0]

31 useruserSim = pd.DataFrame(simArray)

32 useruserSim = useruserSim.rename(columns={0:'userx',1:'usery',2:'simm'})

33 useruserSim = useruserSim.sort_values(['userx','simm','usery'],

34 ascending=[True,False,True])

35

36 return useruserSim

37

38 def ItemBasedSim(matrix):

39 userxIndex = matrix.shape[0]

40 simArray = [(0,0,0)]

41 userR1 = matrix.values

42 userR2 = matrix.values

43

44 for x in range(0,userxIndex):

45 ru1 = userR1[:,x]

46 useryIndex = matrix.shape[1]

47 for y in range(0,useryIndex):

48 ru2 = userR2[:,y]

49 numerator = np.nansum([x * y for x,y in zip(ru1, ru2)])

denominator1 = np.sqrt(np.nansum([np.square(x) for x,y in

50 zip(ru1,ru2)

if np.isfinite(x) and np.isfinite(y)

51 ]))

denominator2 = np.sqrt(np.nansum([np.square(y) for x,y in

52 zip(ru1,ru2)
176

if np.isfinite(x) and np.isfinite(y)

53 ]))

54 simTheta = numerator / (denominator1 * denominator2 )

55 simArray.append((matrix.columns[x],matrix.columns[y],simTheta))

56 del simArray[0]

57 useruserSim = pd.DataFrame(simArray)

58 useruserSim = useruserSim.rename(columns={0:'itemx',1:'itemy',2:'simm'})

59 useruserSim = useruserSim.sort_values(['itemx','simm','itemy'],

60 ascending=[True,False,True])

61 return useruserSim

62 def UserBasedPrediction(userRatings,userSim,userMatrix):

63 userIndex = 0

64 predictMatrix = pd.DataFrame(columns=['userx','items','theta'])

65 for userIndex in userMatrix.index:

66 print(userIndex)

67 dfx = userMatrix.loc[userIndex][userMatrix.isnull().any()]

68 dfx = dfx[dfx.isnull()]

69 frame = {'items2':dfx.index}

70 dfnan = pd.DataFrame(frame)

71 simdf = userSim[userSim['userx']==userIndex]

72 simdf = simdf[simdf['userx'] != simdf['usery']]

73 simdf = simdf.sort_values(by='simm',ascending=False)

74 simdf = simdf.head(2) #k=2#

75 rs4 = pd.merge(simdf,userRatings, how='left', left_on = 'usery',

76 right_on = 'users')

77 rs5 = pd.merge(rs4,dfnan, how='left', left_on = 'items',

78 right_on = 'items2')

79 rs5['simWeight'] = rs5[rs5['items2'].notna()].rating *

80 rs5[rs5['items2'].notna()].simm

81 rs6 = rs5.groupby(['userx','items'],

82 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})

83 mean = UserItemRatings[UserItemRatings['users'] == userIndex].mean()

84 rs6['theta'] = mean[0] + (rs6['simWeight'] / rs6['simm'])


177

85 predictMatrix= predictMatrix.append(rs6)

86 return predictMatrix

87

88 def ItemBasedPrediction(itemRatings,itemSim,itemMatrix):

89

90 userIndex = 0

91 predictItemMatrix = pd.DataFrame(columns=['users','itemx','theta'])

92 for userIndex in itemMatrix.index:

93 dfx = itemMatrix.loc[userIndex][itemMatrix.isnull().any()]

94 dfx = dfx[dfx.isnull()]

95 frame = {'items2':dfx.index}

96 dfnan = pd.DataFrame(frame)

97 dfnanArr = dfnan.values

98 for y in range(0,dfnanArr.shape[0]):

99 itemIndex = dfnanArr[y,0]

100 simdf = itemSim[itemSim['itemx']==itemIndex]

101 simdf = simdf[simdf['itemx'] != simdf['itemy']]

102 simdf = simdf.sort_values(by='simm',ascending=False)

103 simdf = simdf.head(2) #k=2#

104 rs4 = pd.merge(simdf,itemRatings[itemRatings['users']==userIndex],

105 how='left', left_on = 'itemy',

106 right_on = 'items')

107 rs5 = pd.merge(rs4,dfnan, how='left', left_on = 'itemx',

108 right_on = 'items2')

109 rs5['simWeight'] = rs5[rs5['items2'].notna()].rating *

110 rs5[rs5['items2'].notna()].simm

111 rs6 = rs5.groupby(['itemx','users'],

112 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})

113 rs6['theta'] = rs6['simWeight'] / rs6['simm']

114 predictItemMatrix= predictItemMatrix.append(rs6)

115 return predictItemMatrix

116 UserItemRatings = pd.read_csv('D:\TezCalismasi\TezData\cftest.csv',sep=';')

117 UserItemNorm = DataNormallestirme(UserItemRatings)


178

UserBasedData=pd.DataFrame({'users':UserItemNorm['users'],'items':UserItemNorm[

118 'items'], 'rating':UserItemNorm['rating_adjusted']})

119 UserItemMatrix = UserBasedData.pivot_table(index='users',columns='items',

120 values='rating')

121 UserSimMatrix = UserBasedSim(UserItemMatrix)

122 UserSimMatrixP = UserSimMatrix.pivot_table(index='userx',columns='usery',

123 values='simm')

124 UsersPredMatrix=UserBasedPrediction(UserBasedData,UserSimMatrix,UserItemMatrix)

125 ItemSimMatrix = ItemBasedSim(UserItemMatrix)

126 ItemSimMatrixP = ItemSimMatrix.pivot_table(index='itemx',columns='itemy',

127 values='simm')

ItemPredMatrix=ItemBasedPrediction(UserItemRatings,ItemSimMatrix,UserItemMatrix

128 )

• Satır 1..2: Numpy ve Panda kütüphanaleri uygulamaya katılmaktadır.

• Satır 3: DataNormalleştirme fonksiyonu tanımlanmaktadır. Bu fonksiyon ile

kullanıcı bazında ortalama derecelendirme hesaplanır, hesaplanan değer kullanıcı

derecelendirmelerinden çıkarılarak ortalama-merkezli (mean-centering)

derecelendirme hesaplanmaktadır.

• Satır 10: UserBasedSim fonksiyonu tanımlanmakta, bu fonksiyon ile kullanıcı

tabanlı filtreleme yöntemi uygulanarak kullanıcılar arasındaki benzerlik

hesaplanmaktadır. Benzerlik fonksiyonu olarak Pearson Korelasyon Katsayısını

hesaplayan fonksiyon programlanmıştır.

• Satır 38: ItemBasedSim fonksiyonu tanımlanmakta, bu fonksiyon ile Öğe

tabanlı benzerlik hesaplanmaktadır. Benzerlik fonksiyonu olarak Ayarlanmış Kosinüs

(Adjustment Cosinus) fonksiyonu programlanmıştır.


179

• Satır 62: UserBasedPrediction fonksiyonu tanımlanmakta, bu fonksiyon ile

UserBasedSim fonksiyonu ile hesaplanan kullanıcı benzerliği değerlerinden

faydanalanılarak aktif kullanıcıya en yakın (k=2) iki kullanıcı bulunmaktadır. Aktif

kullanıcının derecelendirmediği öğe için ortalama merkezli derecelendirmeler ve aktif

kullanıcının ortalama derecelendirme değeri kullanılarak öğe için tahmin

yapılmaktadır.

• Satır 88: ItemBasedPrediction fonksiyonu tanımlanmakta, bu fonksiyon ile

ItemBasedSim fonksiyonu ile hesaplanan öğe tabanlı benzerlik değerlerinden

faydanalanılarak aktif öğeye (aktif kullanıcı tarafından derecelendirilmeyen öğeye) en

yakın (k=2) iki öğe bulunmaktadır. Aktif kullanıcının en yakın öğeler için yaptığı

derecelendirmeler kullanılarak aktif öğe için benzerlik hesaplanmaktadır.

• Satır 116: “cftest.csv” dosyasından örnek uygulamada kullanılacak veriler

okunmaktadır.

• Satır 117: DataNormallestirme fonksiyonu ile okunan test verilerinin kullanıcı

bazlı ortalaması bulunmakta, bulunan ortalamadan her kullanıcının öğeler için verdiği

derecelendirmeler çıkartılarak derecelendirme değerleri normalleştirilmektedir.

• Satır 118..120: Normalleştirme fonksiyonun çalışmasından sonra kullanıcı-öğe

matrisi oluşturulmaktadır.

• Satır 121..123: Örnek veri setine kullanıcı tabanlı filtreleme yöntemi

uygulanmaktadır.

• Satır 124: Kullanıcı tabanlı tahmin fonksiyonu uygulanarak

derecelendirilmemiş öğe için derece tahmini yapılmaktadır.


180

• Satır 125..127: Örnek veri setine öğe tabanlı filtreleme yöntemi

uygulanmaktadır.

• Satır 128: Öğe tabanlı tahmin fonksiyonu uygulanarak derecelendirilmemiş öğe

için derece tahmini yapılmaktadır.

Uygulama da kullanılan örnek veri seti aşağıdaki gibidir.

Tablo EK-1.0.1 Örnek Veri Seti

users items rating


Aktif Kullanici Ürun1 5
Aktif Kullanici Ürun2 3
Aktif Kullanici Ürun3 4
Aktif Kullanici Ürun4 4
Kullanicı1 Ürun1 3
Kullanicı1 Ürun2 1
Kullanicı1 Ürun3 2
Kullanicı1 Ürun4 3
Kullanicı1 Ürun5 3
Kullanicı2 Ürun1 4
Kullanicı2 Ürun2 3
Kullanicı2 Ürun3 4
Kullanicı2 Ürun4 3
Kullanicı2 Ürun5 5
Kullanicı3 Ürun1 3
Kullanicı3 Ürun2 3
Kullanicı3 Ürun3 1
Kullanicı3 Ürun4 5
Kullanicı3 Ürun5 4
Kullanicı4 Ürun1 1
Kullanicı4 Ürun2 5
Kullanicı4 Ürun3 5
Kullanicı4 Ürun4 2
Kullanicı4 Ürun5 1
181

Örnek veri seti üzerinde veri normalleştirmesi yapılmakta, kullanıcı bazında

derecelendirme ortalaması ile kullanıcıların derecelendirmelerinin ortalamadan

çıkartılmış merkezi ortalamaları hesaplanmaktadır.

Şekil EK-1.0.1.Örnek Uygulama Veri Normalleştirmesi

Şekil EK-1.0.2 Kullanıcı Benzerliği


182

Kullanıcı benzerliğinden sonra aktif kullanıcının derecelendirmediği öğe için

derecelendirme tahmini yapılmaktadır.

Şekil EK-1.0.3. Kullanıcı Benzerliği İle Derece Tahmini

Aktif kullanıcının derecelendirme yapmadığı Urun5 için hesaplanan tahmin değeri

4.85 olarak bulunmakta, örnek veri seti üzerinden öğe benzerliği uygulanarak öğeler

arasındaki benzerlik tesbitedilmektedir.

Şekil EK-1.0.4. Öğe Benzerliği


183

Öğeler arasında benzerlik hesaplandıktan sonra aktif kullanıcının derecelendirme

yapmadığı ürün için öğe benzerliği üzerinden tahmini derece hesaplanmaktadır.

Şekil EK-1.0.5. Öğe Benzerliği İle Derece Tahmini

Aktif kullanıcının derecelendirme yapmadığı Urun5 için hesaplanan tahmin 4.65

olarak bulunmaktadır.

Şekil EK-1.0.6. Örnek Uygulama Kullanıcı-Ürün Derecelendirme Matrisi


184

EK-1.2. Kullanıcı Tabanlı Filtreleme Yönteminin Uygulanması

Kullanıcı tabanlı filtreleme yöntemi kullanılarak müşteri satın alma verilerinden

öneri üreten bir uygulama geliştirilmiştir.


1 import pandas as pd

2 import numpy as np

3 from surprise import Reader

4 from surprise import Dataset

5 from surprise import KNNBaseline

6 from surprise.model_selection import train_test_split

7 from surprise.similarities import pearson

8 from surprise import accuracy

9 from surprise.model_selection import cross_validate

10 import pyodbc

11

12 sqlconnection = pyodbc.connect('DRIVER={SQL Server};SERVER=10.10.1.10; \

13 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')

14 cursor = sqlconnection.cursor()

15

DataSqlStr = "Select carikodu as users, stok_kodu as items, satis_adet as rating

16 \

17 from mgtez04_1 where gender = 'F' "

18 ProductSqlStr = 'Select distinct stok_kodu as items, stok_adi, Category, \

19 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'

20

21 userrating = pd.read_sql(DataSqlStr ,sqlconnection)

22 Products = pd.read_sql(ProductSqlStr,sqlconnection)

23

userItemMatrix=userrating.pivot_table(index='users',columns='items',

24 values='rating')

25

26 reader = Reader()

27 data = Dataset.load_from_df(userrating[['users','items','rating']], reader)


185

28 trainset = data.build_full_trainset()

29 testset = trainset.build_anti_testset()

30 sim_options = {'name':'pearson_baseline', 'user_based':True, 'shrinkage': 0}

31 algo = KNNBaseline(k=20,sim_options=sim_options)

32

33 algo.fit(trainset)

34 predictData = algo.test(testset)

35

36 y = 0;

37 for pr in predictData:

38 y+=1

39 cursor.execute("insert into mg_kullanici_oneri(users,items,predict,method) \

40 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'user_based')

41 cursor.commit()

42

43 cross_validate(algo,data, measures=['RMSE','MSE','MAE'],cv=10, verbose=True)

44 trainSplit, testSplit = train_test_split(data, test_size = .25)

45 predictSplit = algo.fit(trainSplit).test(testSplit)

46

47 accuracy.rmse(predictSplit)

48 accuracy.mse(predictSplit)

49 accuracy.mae(predictSplit)

• Satır 1..10: Uygulama içinde kullanılacak Python kütüphaneleri uygulamaya

eklenmektedir. Benzerlik ve öneri oluşturmak amacıyla Scikit-Learn Surprise

kütüphanesi kullanılmaktadır. Surprise kütüphanesi içinde Pearson Korelasyon

Katsayısı fonksiyonunun optimize edilmiş kod hali bulunmaktadır. Optimize edilmiş

kodların çalışması daha hızlı olacağı için Surprise kütüphanesinin fonksiyonundan

yararlanılmakta, oluşturulan kullanıcı tabanlı filtreleme yöntemine ait veriler SQL


186

veritabanında “mg_kullanıcı_öneri” tablosuna kayıt edilmektedir. SQL veritabanı

bağlantısı için Pyodbc kütüphanesi kullanılmaktadır.

• Satır 12..13: SQL veritabanına bağlantı yapılmaktadır.

• Satır 14: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere

cursor nesnesi oluşturulmaktadır.

• Satır 16..19: SQL veritabanında alınacak veriler için sorgu ifadeleri

oluşturulmaktadır. DataSqlStr değişkeninde kullanıcı-öğe etkileşim verileri içi

oluşturulan sorgu ifadesi, ProductSqlStr değişkeninde ise ürün bilgileri için oluşturulan

sorgu ifadesi tutulmaktadır.

• Satır 21..22: Pandas kütüphanesinin “read_sql” metotu ile veritabanından bilgi

çekilmektedir.

• Satır 24: Kullanıcı-öğe matrisi oluşturulmaktadır.

• Satır 26: Surprise kütüphanesinin “Reader” metotu ile reader nesnesi

oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak

ayrıştırılmaktadır.

• Satır 27: Surprise kütüphanesinin “Dataset” nesnesinin “load_from_df” metotu

ile dataframe den okuma yapılmakta ve data nesnesi oluşturulmaktadır.

• Satır 28: Algoritmanın eğitimi için veri seti oluşturulmaktadır.

• Satır 29: Öneri ve tahmin yapılacak veri seti oluşturulmaktadır.

• Satır 30: “sim_options = {'name':'pearson_baseline',

'user_based':True,'shrinkage':0}” ifadesi ile Surprise kütüphesine kullanılacak

benzerlik fonksiyonunun Pearson Korelasyon Katsayısı olduğu ve kullanıcı bazlı

benzerlik hesaplanması yapılacağı parametreleri verilmektedir.


187

• Satır 31: “KNNBaseline(sim_options=sim_options)” metotu, çalışacak

algoritmayı barındıran genel bir metottur. Metota sim_options ile tanımlanan

parametreler verilmektedir.

• Satır 33: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın

çalıştırılması ile eğitim süreci tamamlanmış olmaktadır.

• Satır 34: Algoritmanın “test” metotu kullanılarak tahmin verisi

oluşturulmaktadır.

• Satır 36: SQL veritabanına yapılan kayıt sayısını göstermek amacıyla değişken

tanımlanmaktadır.

• Satır 37: Satırda oluşturulan tahmin verilerinin SQL veritabanına sırayla kayıt

edilmesi için döngü kurulmaktadır.

• Satır 38: Kayıt sayısı için değişken değeri 1 arttırılmaktadır.

• Satır 39..40: SQL veritabanı için kayıt ekleme sorgusu çalıştırılmaktadır.

• Satır 41: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı

belleğinden tabloya yazılması tamamlanmaktadır.

• Satır 43: Algoritmanın değerlendirilmesi amacıyla “cross_validate” metotu

çağrılmaktadır.

• Satır 44: Oluşturulan veri seti eğitim ve test veri seti olacak şekilde

ayrılmaktadır.

• Satır 45: Eğitim veri seti ile algoritmanın “fit” metotu ile yeniden eğitilmektedir.

Aynı satır içinde “test” metotu ile test veri seti kullanılarak tahmin datası

oluşturulmaktadır. Bu çalışma RMSE, MSE ve MEA değerlerinin hesaplanması için

kullanılmaktadır.
188

• Satır 47: “Accuracy” metotu ile RMSE değeri hesaplanmaktadır.

• Satır 48: “Accuracy” metotu ile MSE değeri hesaplanmaktadır.

• Satır 49: “Accuracy” metotu ile MAE değeri hesaplanmaktadır.

EK-1.3. Öğe Tabanlı Filtreleme Yönteminin Uygulanması

Öğe tabanlı filtreleme yöntemi kullanılarak müşteri satın alma verilerinden öneri

üreten bir uygulama geliştirilmiştir.


1 import pandas as pd

2 import numpy as np

3 from surprise import Reader

4 from surprise import Dataset

5 from surprise import KNNBaseline

6 from surprise.model_selection import train_test_split

7 from surprise import accuracy

8 from surprise.model_selection import cross_validate

9 import pyodbc

10

11 sqlconnection = pyodbc.connect('DRIVER={SQL Server};SERVER=10.10.1.10; \

12 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')

13 cursor = sqlconnection.cursor()

14

DataSqlStr = "Select carikodu as users, stok_kodu as items, satis_adet as

15 rating from mgtez04_1 where gender = 'M' "

ProductSqlStr = 'Select distinct stok_kodu as items, stok_adi, Category,

16 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'

17 userrating = pd.read_sql(DataSqlStr ,sqlconnection)

18 Products = pd.read_sql(ProductSqlStr,sqlconnection)

userItemMatrix = userrating.pivot_table(index='users',columns='items',

19 values='rating')

20 reader = Reader()

data=Dataset.load_from_df(userrating[['users','items','rating']],

21 reader)
189

22 trainset = data.build_full_trainset()

23 testset = trainset.build_anti_testset()

24

25 sim_options = {'name':'cosine', 'user_based':False}

26 algo = KNNBaseline(k=20,sim_options=sim_options)

27 algo.fit(trainset)

28 predictData = algo.test(testset)

29

30 y = 0;

31 for pr in predictData:

32 y+=1

cursor.execute("insert into

33 mg_kullanici_oneri(users,items,predict,method)\

34 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'item_based')

35 cursor.commit()

36

cross_validate(algo,data,measures=['RMSE','MSE','MAE'],cv=10,

37 verbose=True)

38 trainSplit, testSplit = train_test_split(data, test_size = .25)

39 predictSplit = algo.fit(trainSplit).test(testSplit)

40

41 accuracy.rmse(predictSplit)

42 accuracy.mse(predictSplit)

43 accuracy.mae(predictSplit)

• Satır 1..9: Uygulama içinde kullanılacak Python kütüphaneleri uygulamaya

eklenmektedir. Benzerlik ve öneri oluşturmak amacıyla Scikit-Learn Surprise

kütüphanesi kullanılmaktadır. Surprise kütüphanesi içinde Kosinüs fonksiyonunun

optimize edilmiş kod hali bulunmaktadır. Optimize edilmiş kodların çalışması daha

hızlı olacağı için Surprise kütüphane fonksiyonundan yararlanılmakta, oluşturulan

kullanıcı tabanlı filtreleme yöntemine ait veriler SQL veritabanında


190

“mg_kullanıcı_öneri” tablosuna kayıt edilmektedir. SQL veritabanı bağlantısı için

Pyodbc kütüphanesi kullanılmaktadır.

• Satır 11..12: SQL veritabanına bağlantı yapılmaktadır.

• Satır 13: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere

cursor nesnesi oluşturulmaktadır.

• Satır 15..16: SQL veritabanında alınacak veriler için sorgu ifadeleri

oluşturulmaktadır. DataSqlStr değişkeninde kullanıcı-öğe etkileşim verileri içi

oluşturulan sorgu ifadesi tutulmakta, ProductSqlStr değişkeninde ise ürün bilgileri için

oluşturulan sorgu ifadesi tutulmaktadır.

• Satır 17..18: Pandas kütüphanesinin “read_sql” metotu ile veritabanından bilgi

çekilmektedir.

• Satır 19: Kullanıcı-öğe matrisi oluşturulmaktadır.

• Satır 20: Surprise kütüphanesinin “Reader” metotu ile reader nesnesi

oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak

ayrıştırılmaktadır.

• Satır 21: Surprise kütüphanesinin “Dataset” nesnesinin “load_from_df” metotu

ile dataframe den okuma yapılmakta ve data nesnesi oluşturulmaktadır.

• Satır 22: Algoritmanın eğitimi için veri seti oluşturulmaktadır.

• Satır 23: Öneri ve tahmin yapılacak veri seti oluşturulmaktadır.

• Satır 25: “sim_options = {'name':'cosine', 'user_based': False}” ifadesi ile

Surprise kütüphesine kullanılacak benzerlik fonksiyonunun Kosinüs olduğu ve öğe

bazlı benzerlik hesaplanması yapılacağı parametreleri verilmektedir.


191

• Satır 26: “KNNBaseline(k=20,sim_options=sim_options)” metotu çalışacak

algoritmayı barındıran genel bir metottur. Metota sim_options ile tanımlanan

parametreler verilmektedir.

• Satır 27: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın

çalıştırılması ile eğitim süreci tamamlanmış olmaktadır.

• Satır 28: Algoritmanın “test” metotu kullanılarak tahmin verisi

oluşturulmaktadır.

• Satır 30: SQL veritabanına yapılan kayıt sayısını göstermek amacıyla değişken

tanımlanmaktadır.

• Satır 31: Satırda oluşturulan tahmin verilerinin SQL veritabanına sırayla kayıt

edilmesi için döngü kurulmaktadır.

• Satır 32: Kayıt sayısı için değişken değeri 1 arttırılmaktadır.

• Satır 33..34: SQL veritabanı için kayıt ekleme sorgusu çalıştırılmaktadır.

• Satır 35: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı

belleğinden tabloya yazılması tamamlanmaktadır.

• Satır 37: Algoritmanın değerlendirilmesi amacıyla “cross_validate” metotu

çağrılmaktadır.

• Satır 38: Oluşturulan veri seti eğitim ve test veri seti olacak şekilde

ayrılmaktadır.

• Satır 39: Eğitim veri seti ile algoritmanın “fit” metotu ile yeniden eğitilmektedir.

Aynı satır içinde “test” metotu ile test veri seti kullanılarak tahmin datası

oluşturulmaktadır. Bu çalışma RMSE, MSE ve MEA değerlerinin hesaplanması için

kullanılmaktadır.
192

• Satır 41: “Accuracy” metotu ile RMSE değeri hesaplanmaktadır.

• Satır 42: “Accuracy” metotu ile MSE değeri hesaplanmaktadır.

• Satır 43: “Accuracy” metotu ile MAE değeri hesaplanmaktadır.

EK-1.4. Matris Ayrıştırma Yönteminin Uygulanması

Matris ayrıştırma yöntemi kullanılarak müşteri satın alma verilerinden öneri

üreten bir uygulama geliştirilmiştir.


import pandas as pd

2 import numpy as np

3 from surprise import Reader

4 from surprise import Dataset

5 from surprise import SVD

6 from surprise.model_selection import train_test_split

7 from surprise import accuracy

8 from surprise.model_selection import cross_validate

9 import pyodbc

10

sqlconnection=pyodbc.connect('DRIVER={SQL Server};SERVER=10.10.1.10;

11 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')

12 cursor = sqlconnection.cursor()

13

DataSqlStr = "Select carikodu as users, stok_kodu as items, satis_adet

14 as rating from mgtez04_1 where gender = 'M' " \

ProductSqlStr = 'Select distinct stok_kodu as items, stok_adi,

Category, Department, Section [Sub Category] , [Group], Style, Brand, Yil

15 From mgtez03'

16 userrating = pd.read_sql(DataSqlStr ,sqlconnection)

17 Products = pd.read_sql(ProductSqlStr,sqlconnection)

18

19 reader = Reader()
193

data = Dataset.load_from_df(userrating[['users','items','rating']],

20 reader)

21 trainset = data.build_full_trainset()

22 testset = trainset.build_anti_testset()

23

24 algo = SVD()

25 algo.fit(trainset)

26 predictData = algo.test(testset)

27

28 y = 0;

29 for pr in predictData:

30 y+=1

cursor.execute("insert into

31 mg_kullanici_oneri(users,items,predict,method)\

32 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'svd_based')

33 cursor.commit()

34

cross_validate(algo,data,measures=['RMSE','MSE','MAE'],cv=10,

35 verbose=True)

36 trainSplit, testSplit = train_test_split(data, test_size = .25)

37 predictSplit = algo.fit(trainSplit).test(testSplit)

38

39 accuracy.rmse(predictSplit)

40 accuracy.mse(predictSplit)

41 accuracy.mae(predictSplit)

• Satır 1..9: Uygulama içinde kullanılacak Python kütüphaneleri uygulamaya

eklenmektedir. Benzerlik ve öneri oluşturmak amacıyla Scikit-Learn Surprise

kütüphanesi kullanılmaktadır. Optimize edilmiş kodların çalışması daha hızlı olacağı

için Surprise kütüphane fonksiyonundan yararlanılmakta, oluşturulan kullanıcı tabanlı

filtreleme yöntemine ait veriler SQL veritabanında “mg_kullanıcı_öneri” tablosuna


194

kayıt edilmektedir. SQL veritabanı bağlantısı için Pyodbc kütüphanesi

kullanılmaktadır.

• Satır 11: SQL veritabanına bağlantı yapılmaktadır.

• Satır 12: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere

cursor nesnesi oluşturulmaktadır.

• Satır 14..15: SQL veritabanında alınacak veriler için sorgu ifadeleri

oluşturulmaktadır. DataSqlStr değişkeninde kullanıcı-öğe etkileşim verileri içi

oluşturulan sorgu ifadesi, ProductSqlStr değişkeninde ise ürün bilgileri için oluşturulan

sorgu ifadesi tutulmaktadır.

• Satır 16..17: Pandas kütüphanesinin “read_sql” metotu ile veritabanından bilgi

çekilmektedir.

• Satır 19: Surprise kütüphanesinin “Reader” metotu ile reader nesnesi

oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak

ayrıştırılmaktadır.

• Satır 20: Surprise kütüphanesinin “Dataset” nesnesinin “load_from_df” metotu

ile dataframe den okuma yapılmakta ve data nesnesi oluşturulmaktadır.

• Satır 21: Algoritmanın eğitimi için veri seti oluşturulmaktadır.

• Satır 22: Öneri ve tahmin yapılacak veri seti oluşturulmaktadır.

• Satır 24: “SVD” metotu çalışacak algoritmayı barındıran genel bir metottur.

• Satır 25: Algoritmanın “fit” metotu ile veri seti eğitilmektedir. Algoritmanın

çalıştırılması ile eğitim süreci tamamlanmış olmaktadır.

• Satır 26: Algoritmanın “test” metotu kullanılarak tahmin verisi

oluşturulmaktadır.
195

• Satır 28: SQL veritabanına yapılan kayıt sayısını göstermek amacıyla değişken

tanımlanmaktadır.

• Satır 29: Satırda oluşturulan tahmin verilerinin SQL veritabanına sırayla kayıt

edilmesi için döngü kurulmaktadır.

• Satır 30: Kayıt sayısı için değişken değeri 1 arttırılmaktadır.

• Satır 31..32: SQL veritabanı için kayıt ekleme sorgusu çalıştırılmaktadır.

• Satır 33: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı

belleğinden tabloya yazılması tamamlanmaktadır.

• Satır 35: Algoritmanın değerlendirilmesi amacıyla “cross_validate” metotu

çağrılmaktadır.

• Satır 36: Oluşturulan veri seti eğitim ve test veri seti olacak şekilde

ayrılmaktadır.

• Satır 37: Eğitim veri seti ile algoritmanın “fit” metotu ile yeniden eğitilmektedir.

Aynı satır içinde “test” metotu ile test veri seti kullanılarak tahmin datası

oluşturulmaktadır. Bu çalışma RMSE, MSE ve MEA değerlerinin hesaplanması için

kullanılmaktadır.

• Satır 39: “Accuracy” metotu ile RMSE değeri hesaplanmaktadır.

• Satır 40: “Accuracy” metotu ile MSE değeri hesaplanmaktadır.

• Satır 41: “Accuracy” metotu ile MAE değeri hesaplanmaktadır.


196

EK-1.5. Yapay Sinir Ağı Yönteminin Uygulanması

Yapay sinir ağı yöntemi kullanılarak müşteri satın alma verilerinden öneri üreten

bir uygulama geliştirilmiştir.


1 import numpy as np

2 import pandas as pd

3 import matplotlib.pyplot as plt

4 from keras.layers import Input, Embedding, Flatten, Dot, Dense, Concatenate

5 from keras.models import Model

6 from keras.utils import plot_model

7 from sklearn.model_selection import train_test_split

8 import pyodbc

9 from sklearn.decomposition import PCA

10 import seaborn as sns

11

12 sqlconnection = pyodbc.connect('DRIVER={SQL Server};SERVER=10.10.1.10; \

13 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')

14 cursor = sqlconnection.cursor()

15

16 DataSqlStr = "Select carikodu_u as users_id, stokkart_id_u as items_id, \

17 satis_adet as rating from mgtez05_2"

18

19 TestDataSqlStr = 'Select carikodu_u as users_id, stokkart_id_u as items_id,\

20 carikodu, stokkart_id, stok_kodu from mgtez05_test'

21

22 dataset = pd.read_sql(DataSqlStr ,sqlconnection)

23 data_test = pd.read_sql(TestDataSqlStr,sqlconnection)

24 train, test = train_test_split(dataset,test_size=0.2,random_state=42)

25 n_users = len(dataset.users_id.unique())

26 n_items = len(dataset.items_id.unique())

27

28 items_input = Input(shape=[1], name='Item-Input')

29 items_embedding = Embedding(n_items+1,5,name='Item-Embedding') (items_input)


197

30 items_vec = Flatten(name='Flatten-items') (items_embedding)

31 user_input = Input(shape=[1], name='User-Input')

32 user_embedding = Embedding(n_users+1,5,name='User-Embedding') (user_input)

33 user_vec = Flatten(name='Flatten-Users') (user_embedding)

34 conc = Concatenate()([items_vec,user_vec])

35 fc1 = Dense(128,activation='relu')(conc)

36 fc2 = Dense(32,activation='relu')(fc1)

37 out = Dense(1)(fc2)

38 model = Model([user_input,items_input],out)

39 plot_model(model,show_shapes=True, to_file='ysa_based.png')

40 model.compile(loss='mean_squared_error',optimizer='adam', metrics=['accuracy'])

41

history=model.fit([train.users_id,train.items_id],train.rating,

42 epochs=5,verbose=1)

43

44 model.evaluate([test.users_id,test.items_id],test.rating)

45

46 plt.plot(history.history['loss'])

47 plt.xlabel("Epocs")

48 plt.ylabel("Training Error")

49

50 items_em = model.get_layer('Item-Embedding')

51 items_em_weights = items_em.get_weights()[0]

52 items_em_weights[:5]

53

54 pca = PCA(n_components=2)

55 pca_result = pca.fit_transform(items_em_weights)

56 sns.scatterplot(x=pca_result[:,0], y=pca_result[:,1])

57

58 users_em = model.get_layer('User-Embedding')

59 users_em_weights = users_em.get_weights()[0]

60 users_em_weights[:5]

61

62 pca2 = PCA(n_components=2)
198

63 pca2_result = pca2.fit_transform(users_em_weights)

64 sns.scatterplot(x=pca2_result[:,0], y=pca2_result[:,1])

65

66 predictons = model.predict([data_test.users_id, data_test.items_id])

67 y = 0;

68 for i in range(0,len(predictons)):

69 y+=1

cursor.execute("insert into mg_kullanici_oneri(users,items,predict,method)

70 values(?,?,?,?)",data_test.carikodu.iloc[i],data_test.stok_kodu.iloc[i],

71 float(predictons[i]),'ysa_based')

72 cursor.commit()

• Satır 1..10: Uygulama içinde kullanılacak Python kütüphaneleri uygulamaya

eklenmektedir. Yapay sinir ağı uygulaması için Keras kütüphanesinden

yararlanılmıştır. Optimize edilmiş kodların çalışması daha hızlı olacağı için Keras

kütüphane fonksiyonundan yararlanılmaktadır. Oluşturulan kullanıcı tabanlı filtreleme

yöntemine ait veriler SQL veritabanında “mg_kullanıcı_öneri” tablosuna kayıt

edilmektedir. SQL veritabanı bağlantısı için Pyodbc kütüphanesi kullanılmaktadır.

Yapay sinir ağının eğitimi sırasında oluşan ağırlık değerlerinin grafik gösterimi için

Sklearn.Decomposition ve Seaborn kütüphanelerinden yararlanılmaktadır.

• Satır 12..13: SQL veritabanına bağlantı yapılmaktadır.

• Satır 14: Oluşturulan bağlantı nesnesi ile veritabanı işlemleri yapmak üzere

cursor nesnesi oluşturulmaktadır.

• Satır 16..20: SQL veritabanından alınacak veriler için sorgu ifadeleri

oluşturulmaktadır. DataSqlStr değişkeninde kullanıcı-öğe etkileşim verileri için

oluşturulan sorgu ifadesi tutulmaktadır. TestDataSqlStr değişkeninde kullanıcıların


199

satınalmadığı ve tahmini derecelendirme yapılacak veriseti için sorgu ifadesi

bulunmaktadır.

• Satır 22..23: Pandas kütüphanesinin “read_sql” metotu ile veritabanından bilgi

çekilmektedir. Veritabanından alınan veriler dataset ve data_test dataframe nesnesinde

saklanmaktadır.

• Satır 24:Model için eğitim ve test veri seti hazırlanmaktadır.

• Satır 25: Kullanıcılarin tekil olarak sayısı “n_users” değişkeninde

saklanmaktadır.

• Satır 26: Öğelerin yani ürünlerin tekil olarak sayısı “n_items” değişkeninde

saklanmaktadır.

• Satır 28..30: Yapay sinir ağının öğeleri için giriş katmanları oluşturulmaktadır.

Kullanıcı ve öğeler arasındaki etkileşimin makine öğrenmesi sırasında öğrenilebilmesi

için öğe ve kullanıcı için “Input”, “Embeding” ve “Flatten” katmanları yaratılmaktadır.

Keras kütüphanesinin “Sequential” nesnesi ağ modeli oluşturmak için kullanılmakta,

fakat bu nesne bir giriş ve bir çıkış katmanının olduğu çok temel yapılar için tercih

edilmektedir. Flatten katmanında giriş için kullanılacak vektör dizisi oluşturulmaktadır.

• Satır 31..33: Yapay sinir ağının kullanıcı için giriş katmanları

oluşturulmaktadır. Kullanıcı ve öğeler arasındaki etkileşimin makine öğrenmesi

sırasında öğrenilebilmesi için öğe ve kullanıcı için “Input”, “Embeding” ve “Flatten”

katmanları yaratılmaktadır. Flatten katmanında giriş için kullanılacak vektör dizisi

oluşturulmaktadır.

• Satır 34: Kullanıcı ve öğeler için yaratılmış kategorik veriler gizli katman

öncesinde “Concatenate” fonksiyonu ile birleştirilmektedir.


200

• Satır 35: Yüzyirmisekiz nörondan oluşan birinci gizli katman

oluşturulmaktadır. Birinci gizli katmanda “ReLU” aktivasyon fonksiyonu

kullanılmaktadır.

• Satır 36: Otuziki nörondan oluşan ikinci gizli katman oluşturulmaktadır. İkinci

gizli katmanda “ReLU” aktivasyon fonksiyonu kullanılmaktadır.

• Satır 37: Tek nöronlu çıkış katmanı oluşturulmaktadır.

• Satır 38: Yapay sinir ağı nesnesi oluşturulmaktadır.

• Satır 39: Yapay sinir ağı modelinin şeması oluşturulmaktadır.

• Satır 40: Model eğitim için konfigure edilmektedir. Modelin eğitimi sırasında

modelin oluşturduğu çıktı ile gerçek çıktı arasındaki hatanın kontrolü için kullanılacak

hata fonksiyonu olarak “mean_squared_error” kullanılmaktadır. “optimize”

parametresi olarak Adam algoritması kullanılmakadır. Adam algoritması hesaplama

açısından etkili ve az bellek kullanan bir algoritmadır. Adam algoritması diğer

optimizasyon algoritmalarıyla karşılaştırıldığında daha iyi sonuçlar vermektedir. Keras

kütüphanesinde ilkdeğer olarak kullanılan yöntemdir, “metrics” parametresi, yapay

sinir ağının performansını ölçmek için kullanılmaktadır. Ağın her döngüsünde bu

değerler kayıt edilmektedir.

• Satıs 42: Modelin eğitimi yaptırılmaktadır. “epoch” parametresi eğitimin kaç

kez tekrarlanacağını göstermektedir. “verbose=1” parametresi ile eğitim süreci süreç

barı ile gösterilmektedir. Modele kullanıcı ve öğe nesneleri giriş nesnesi olarak

verilmektedir. Çıktı olarak müşteri satın almalarından doğru oluşan örtük

derecelendirme değerleri verilmektedir.

• Satır 44: Modelin başarısı hesaplanmaktadır.


201

• Satır 46..48 : Modelin eğitimi sırasında oluşan hata değerleri grafik olarak

gösterilmektedir.

• Satır 50..52: Modelin eğitimi sırasında öğe değerleri için oluşan ağırlık değerleri

elde edilmektedir.

• Satır 54..56: Öğeler için elde edilen ağırlık değerleri için yoğunluk grafiği

oluşturulmaktadır.

• Satır 58..60: Modelin eğitimi sırasında kullanıcı değerleri için oluşan ağırlık

değerleri elde edilmektedir.

• Satır 62..64: Kullanıcılar için elde edilen ağırlık değerleri için yoğunluk grafiği

oluşturulmaktadır.

• Satır 66: data_test nesnesi için tahmini derecelendirmeler hesaplatılmaktadır.

Model nesnesinin predict metoduna data_test nesnesinin kullanıcı ve öğe alanları

paramatre olarak verilmektedir.

• Satır 68..72: Döngü içinde oluşan tahmini derecelendirmeler SQL

veritabanındaki mg_kullanıcı_öneri tablosuna yazılmaktadır.


202

EK-2

EK-2.1. Mağaza İçinde Öneri Yöntemlerinin Uygulanmasına Yönelik Çalışmalar

Müşterilerin mağaza içinde ilgilendiği ürünleri kayıt altına almak için bir mobil

uygulama geliştirildi. Mobil uygulama ile mağazaya gelen müşteriler, müşteri ilişkileri

sisteminde kayıtlı telefon numaraları üzerinden sorgulanmaktadır. Markanın kayıtlı

müşterilerinden ise müşterinin alışveriş bilgilerine ulaşılmaktadır.

Şekil EK-2.1.0.1. Ürün Önerimi Mobil Uygulama


203

Müşterinin verileri veritabanı üzerinden sorgulandıktan sonra mağazadaki satış

temsilcisine müşteriyle ilgi üç başlık altında toplanan veriler sunulmaktadır.

• Önceki alışverişleri;

Bu bölümde müşterinin daha önce yaptığı alışverişler müşteri temsicisine

gösterilmektedir.

Şekil EK-2.1.0.2. Ürün Önerimi Mobil Uygulama -2


204

• Özel promosyon;

Bu bölümde müşteri ilişkileri çerçevesinde müşteriye özel promosyon varsa

mağazadaki satış temsilcisine bu promosyonun bilgisi verilmektedir.

Şekil EK-2.1.0.3. Ürün Önerimi Mobil Uygulama -3

• Önerilerimiz;

Bu bölümde tez kapsamında uygulanmış yöntemler sonucunda veritabanında

oluşmuş öneri verilerinden yararlanılarak kişiselleştirilmiş öneri sunulmaktadır. Farklı

yöntemlerle oluşmuş verilerden karma bir veri oluşturulmaktadır. Oluşturulan ürün

önerisi müşteri temsilcisine verilmektedir. Müşterinin mağaza içinde ilgilendiği tüm

ürünlerin bilgileri mobil uygulama ile kayıt altına alınmaktadır. Bu bilgiler müşterinin

ilgisini anlamak ve kişisel öneri oluşturmak için kullanılmaktadır. Bu şekilde

müşterinin ürünlere olan ilgisi hakkında daha fazla bilgi toplanmış olmaktadır.
205

EK-2.2. Dijital Satış Kanallarında Uygulanan Öneri Sistemleri

Dijital satış kanallarında mevcutta uygulanan örnekler kişisel ürün önerimi yerine

daha çok ürünü ve ürünün beğenisi üzerine yapılan öneriler olduğu gözlemlenmektedir.

• Aynı marka ürünün, farklı renkleri öneri olarak sunulmaktadır.

Şekil EK-2.2.0.4. Aynı Marka Ürünün Farklı Renkleri

• Aynı marka ürünün, aynı kategoriden farklı modelleri öneri olarak

sunulmaktadır
206

Şekil EK-2.2.0.5. Aynı Marka Ürünün Aynı Kategorisi

• Ürünün kategorisinden bağımsız olarak beğenisi yüksek ürünler öneri olarak

sunulmaktadır.

Şekil EK-2.2.0.6 Beğenisi Yüksek Ürünler


207

• En çok satan ürünler öneri olarak sunulmaktadır.

Şekil EK-2.2.0.7 En Çok Satan Ürünler


208

ÖZGEÇMİŞ

KİŞİSEL BİLGİLER

Adı Soyadı: Sungu Murat GEDİKOĞLU

Uyruğu: T.C.

Doğum Tarihi ve Yeri:

Tel:

Email:

EĞİTİM

Derece Eğitim Birimi Eğitim Tarihi

Lisans Eskişehir Anadolu Üni. / İktisat 1989 - 1995

Lise Şişli Lisesi 1985 - 1988

İŞ DENEYİMLERİ

Kurum Görev Yıl

You might also like