Professional Documents
Culture Documents
OCAK 2021
tarafından
YÜKSEK LİSANS
OCAK 2021
ÖZET
YÖNTEMLERİN UYGULANMASI
bulumaya çalışmaktadırlar.
alan yazından elde edilen araştırma bilgileri çalışmanın giriş bölümünde yer almaktadır.
kümeleme, veri tabanı gibi konulara yer verilmektedir. Üçüncü bölümde işbirlikçi
benzerliği, öğe benzerliği, tekil değer ayrıştırma (SVD Singular Value Decomposition)
bölümünde tercih edilen teknolojik altyapı, kullanıcı ve öge benzerliği, tekil değer
yorumlaması yapılmaktadır.
bulunulmaktadır.
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
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
Within the scope of this study, personal product suggestions are made using
collaborative filtering methods and customer purchasing data in the retail store sector.
collaborative filtering
v
TEŞEKKÜR
çok değerli hocam Dr. Ögr. Üyesi Feridun Özçakır’a, sevgili eşim İlke Gökçek
OCAK 2021
vi
İÇİNDEKİLER
İÇİNDEKİLER ........................................................................................................ vi
GİRİŞ..................................................................................................................... 1
3.18.6. Çok Katmanlı Yapay Sinir Ağları İle Örnek Problem Çözümü 85
SINIRLILIKLAR .............................................................................................152
DEĞERLENDİRME .......................................................................................154
KAYNAKLAR ......................................................................................................158
EK-1 ......................................................................................................................174
EK-2 ......................................................................................................................202
xii
ÖZGEÇMİŞ ...........................................................................................................208
xiii
ŞEKİL TABLOSU
Şekil II.7. Soğuk Başlangıç Sorunu (Yeni Kullanıcı Ekleme ve Yeni Ürün Ekleme) . 20
Şekil II.17. Destek Vektör Makineleri Algoritması Marj Çizgisi [68] ....................... 34
xiv
Şekil III.12. Kullanıcı Tabanlı Filtreleme ve Ürün Tabanlı Filtreleme [43] ............... 63
Şekil III.22. Basit Algılayıcı ile Yapay Sinir Ağının Öğrenmesi ............................... 82
Ş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.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 IV.3. Kullanıcı Tabanlı Filtreleme Yöntemlerinin Genel İşleyişi [37] ............ 114
Şekil IV.7. Öğe Tabanlı Filtreleme Yöntemlerinin Genel İşleyisi [37] .................... 124
Şekil IV.14. Yapay Sinir Ağı Modelinin Çalışma Yapısı ........................................ 134
TABLO LİSTESİ
Tablo IV.11. Çalışma Verisinin Oluşturulması İçin Kullanılan SQL Sorgusu ......... 107
Tablo IV.15. Çalışma Dosya Biçimi (Müşteri, Ürün ve Satınalma Adeti)................ 112
Tablo IV.17. Örnek Uygulama Kullanıcı Tabanlı Filtreleme Metotları ................... 120
KISALTMALAR
GİRİŞ
tarafında farklı bir noktaya gelmiştir. Kullanılan akıllı cihazlar ile dünyanın her
istemektedir. Her alışveriş sırasında bıraktığı kişisel deneyimin kendisine kişisel olarak
Kişilerin istediği ürünü bulmak için dijital satış kanallarını dolaşması ve bulduğu
dijital kanallarda ürünler üzerinde beğeni veya yorumlar yaparak iz bırakırlar. Bu izler
tanıyan, hatırlayan ve bunları sunan markalarla alışveriş yapma olasığı yüksek olarak
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],
farklı ürünler sunmak ve müşteri bağlılığı yaratmak gibi hedefleri bulunmaktadır. Öneri
gelecekteki seçimler için belirteç olmaktadır. Sharma [11] ve arkadaşlarına göre öneri
alan olsa da, yüzyıllarca toplumda var olmuştur. Balabanovic [12] ve arkadaşlarına göre
olacak bir öneri sistemi geliştirilmiştir. Amazon [4] tarafından öğe bazlı işbirlikçi
Hoffman [14] 1999 yılında olasılıklı sementik analizi duyurmuş ve işbirlikçi filtreleme
ş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
projesi bir bilgisayar bilimleri projesi olarak Richard Jones tarafından İngiltere’de
1.1. Amaç
çok mağazalı markanın, kartlı müşterilerinin satın alma verilerini işbirlikçi filtreleme
tabanlı filtreleme yöntemi, model tabanlı yöntemlerden matris ayrıştırma ve yapay sinir
1.2. Önem
ü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
tüketiciler daha bilinçli davranmaya başlamışlardır. İstedikleri ürünü bulmak için farklı
sağlamaktır [18].
5
GENEL BİLGİLER
almaktayız. Bir yandan da değişik sektörlerde büyümeye devam eden farklı ürünler
Tüketici herhangi bir ürün almadan önce ürünün kendisi için ne kadar uygun olup
satın alma aktiviteleri yapmadan önce fikir sahibi olmasını sağlamaktadır. Melville’ye
filtrelemeler yaparak bilgi sahibi olmadığı ürünler için öneriler sunmaktır. 1990’lı
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
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
müşterilerin belirli bir filme benzer filmleri bulmasını sağlamaktadır. Youtube [24]
yeni videolar önermektedir. Facebook [7] sosyal medya sitesi kullanıcılarının profil
platformlar kullanıcılarından satın aldıkları ürün ile ilgili yorum ya da puanlama bilgisi
göre temel amaç kullanıcıların daha önce görmedikleri ürünler için ilgilerini
tabanlı yöntemlerdir.
gelirleri için önemlidir. Ancak markalar için daha önemli olan kazanılmış müşterilerin
karşılıklı bir ilişki kurulması markalar için arzulanan bir temeldir. Çelik’e [28] göre
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
• İlgi Düzeyi: Kullanıcılar ilgisini çeken ürünlere daha fazla yönelme ve tüketme
ö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
taze tutmaktadır. Yeni bir öneri, kullanıcının başka bir yöntemle bulması veya
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
kullanmışlardır.
Taşçı [32] haber öneri yöntemlerinde doğruluk oranını arttırmak için bir çalışma
kullanılmıştır.
için bir öneri sistemi geliştirilmiştir. Bu çalışmada ürünlerin kategori başlıkları ve ürün
hesaplanmıştır.
kısmen çözebilmişlerdir.
5’li likert sistemi genel olarak kullanılan yöntemlerdendir. Turan [38] ve arkadaşlarına
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
beğenme ya da beğenmeme gibi bir değeri tercih etmektedir. Bu özel bir durumu
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
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
göstermemektedir. Örtülü veriler açık verilere göre daha bol ve daha kolay
olmakta ve kullanıcı sadece bunu yapmayı seçtiğinde açık geri bildirim vermektedir.
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.
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
Şekil II.3’deki matris altı kullanıcılı ve beş öğeden oluşmaktadır. Bu matrise göre
gösterilmektedir.
14
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
(ürünlerlerle ilgili yapılan yorumlar, ilgili anahtar kelimeler, demografik özellikler gibi)
toplanmaktadır.
Ekstrand’a [42] göre işbirlikçi filtreleme yöntemi, kullanıcılar ile öğeler arasındaki
yöntemleri model tabanlı ve bellek tabanlı yöntemler olarak ikiye ayrılmaktadır. Model
oluşturulmaktadır.
Banik’in [44] çalışmasında belirttiği üzere karma yöntemler bir çok öneri
yöntemin başarısız yanını, diğerinin başarılı yanı ile kırmayı deneyen yapılardır.
birden fazla öneri yöntemini bir araya getirerek önerinin doğruluğunu ve etkinliğini
arttırmaktadır.
öneride bulunmak için hem işbirlikçi filtreleme yöntemlerini hem de içerik tabanlı
Tablo II.2 de bilindik bazı sosyal ağ, film, müzik, e-ticaret, e-kütüphane, video ve
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
kaynaklanmaktadır.
19
ürünleri anlamak için yeterli ürün bilgisi bulunması gereklidir. Aksi takdirde etkili bir
adlandırılmaktadır. Sürekli olarak aynı kategoriden ürün alan bir müşteriye aynı
aktif kulanıcıya benzer kulllanıcıların grubundan hareket edildiği için farklı bir
öneri oluşturmada kullanılamamaktadır. İçerik tabanlı sistemlerde ise yeni ürünü diğer
yararlanarak, ilgi alanı benzer olan kullanıcıları ya da öğeleri bularak yeni öneriler
bulunması ya da bir kullanıcının mağaza içindeki tüm ürünlerden satın alması olası
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
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)
satış sistemine yeni katılan ürün, herhangi bir kullanıcı derecelendirmesine sahip
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
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
oluşturulmaktadır.
• Yeni Kullanıcı Soğuk Başlangıç Sorunu: Yeni bir kullanıcı bir dijital satış
yöntemlerinin ilk kez karşılaştığı kullanıcı anlamına gelmektedir. Yeni kullanıcı için
oluşturmaktadır.
yöntemleri “aynı ürün mü?”, yoksa “farklı ürün mü?” olduğunu anlayamamaktadır.
öğeleri ayırt etmek için yeterli bilgiyi içermediğinden kullanıcılara yeni ürünler
filtreleme yöntemlerinde aynı sınırlı içeriğe sahip iki farklı ürün öneri sistemleri
2.9. Veritabanı
Oracle [51] Türkiye sitesinde belirttiği üzere veritabanı verilerin belirli düzen
halinde tutulan veriler, yapısal sorgulama dili (SQL Structured Query Language)
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
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
haberleşmektedirler.
25
Oracle’a [54] göre veri ambarları birden çok kaynaktan verileri merkezi olarak
miktarda geçmiş verileri barındırmaktadır. Şekil II.10’da örnek bir veri ambarı
veritabanları ile internet üzerindeki verilerin yapısal bir biçime sokulmadan tutulması
• Sınıflama
• Kümeleme
• Bağlantı analizleri
Her modelin kendi içinde kullanılan farklı algoritmaları vardır. Öneri yöntemleri
kurallar oluşturur.
Sınıflama, veri setindeki verilerin özelliklerine göre veri seti içinde dağıtılmasıdır.
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
denklemidir.
𝑦 = 𝑎 + 𝑏 𝑥 (II.1)
edilen faktöre bağımlı değişken, bağımlı değişkenin değerini tahmin etmek için
𝑦 = 𝑎5 + 𝑎6 𝑥 + 𝑎( 𝑥 + 𝑎* 𝑥 … … … . . 𝑎9 𝑥9 (II.2)
2.10.1.2. Korelasyon
Köse’ye [62] göre korelasyon iki değişken arasındaki ilişkiyi inceleyen ilişkinin
denilmektedir.
sınıflanmış verileri kullanarak, yeni verinin hangi sınıf içinde olması gerektiğini
hesaplayan yöntemdir.
𝑐6 mevcut sınıfı göstermektedir. p(𝑐6 ⁄𝑥% ) ile 𝑥% nin 𝑐6 sınıfında olma olasılığını
Herlocker [63] ve arkadaşlarına göre bayes sınıflaması ile benzer tercihleri olan
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ı
fonksiyonlardan yararlanılmaktadır.
yöntemlerdendir. Elbow metotu her bir noktanın küme merkezine olan uzaklığının
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
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
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
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
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
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
marj denilmektedir. Marjın maksimum olduğu hiper düzlem, optimum hiper düzlemi
oluşturmaktadır.
Destek vektör makineleri, iki sınıf arasındaki mesafenin mümkün olduğu kadar
Thi Do [69] ve arkadaşlarına göre aynı kümede olan öğelerin (veri) aynı ilgiye
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
ilişkiler incelenmektedir.
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
verileri üzerinde yapılan çalışmalar olmasına rağmen birliktelik kuralı veri madenciliği
çalışabilir hale gelmesi sağlanmaktadır. Verilerin aşırı büyük olması veya aşırı küçük
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.
sapmaya göre, ortalamanın ne kadar üstünde veya ne kadar altında olduğunu analiz
𝑍 verinin z-skor değeri, 𝑥% veri setindeki değer, 𝑥PQR , veri setindeki 𝑥’lerin
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.
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)
hareket ettirilmesi ile yapılmaktadır. Ondalık kısmın ne kadar hareket edeceği, sayının
Ş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
Çı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
• 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
Casual 1
Formal 2
Sports 3
Kıds 4
• 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
Casual 1 0 0 0
Formal 0 1 0 0
Sports 0 0 1 0
Kıds 0 0 0 1
Tekil sıcak kodlama yapılarak kategorik veriler ikili (binary) sayılarla temsil
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ğı
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
Birleşme katmanında sonra yapay sinir ağına girdi olarak alınmakta ve öğrenme süreci
başlamaktadır.
alanı için temel olan bir programlama dili başka bir uzmanlık için etkisiz
41
ile ifade edilmektedir. Yazılımlar uygulama alanlarına göre beş sınıfa ayrılmaktadır.
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
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
uygulamalar, java sanal makinesi (JVM Java Virtual Machine) teknolojisi ile işletim
üzerinden çalışan basit, esnek ve dinamik bir programlama dilidir. Web sayfalarına
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.
gibi daha önce yazılmış, makine koduna çevrilmiş ve genellikle belli bir konuya yönelik
Tez kapsamındaki model; karar verme aşaması için İşbirlikçi Filtreleme yöntemi,
oluşmaktadır.
model tabanlı modellerden tekil değer ayrışması ve yapay sinir ağları yöntemleri
kullanılmaktadır.
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
taşınabilmektedir. Python dilinin kullanılan iki sürümü vardır; 2.x. ve 3.x. En yaygın
Python 3.x sürümünün 2.x sürümüne uyumluluğu yoktur. Python dilinin bazı
özellikleri;
Python programlama dili IEEE Spectrum’a göre 2019 yılında en çok tercih edilen
iyi belgelenmiş, kullanımı kolay ve çok yönlü program ara birimine (API Application
edilmektedir.
Surprise [90] kütüphanesi öneri sistemleri için kullanımı kolay açık kaynaklı bir
basit Python öneri sistem motoru (SurPRISE, Simple Recommendation System Engine)
olarak ta isimlendirilmektedir.
Crab kütüphanesi Python için hazırlanmış bir öneri kütüphanesidir. İki kütüphanenin
Kılınç [2] ve arkadaşlarına göre Keras kütüphanesi yapay zeka, makine öğrenmesi
tanımlamaktadır.
seviyeli bir kütüphanedir ve içerdiği fonksiyonlar sayesinde daha kolay derin öğrenme
modelleri oluşturulabilmektedir.
dataframe gibi güçlü iki data yapısını pyhton diline katmıştır. Pandas dış ortamdaki veri
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
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
kullanılarak geliştirilen Tensorflow kütüphanesi geldiği noktada C#, C++, Java gibi
istatiksel grafikler çizmek için kullanılan bir kütüphanedir. Çizim işlemleri Python veri
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.
değişkenli bir veri kümesini ayrıştırmak için kullanılmaktadır. Bir çok makine öğernim
Spyder [99] Python programlama dili ile geliştirilmiştir. Geliştirme aracı çeşitli
gibi etkin kod yürütme özelliği bulunmakta, gerçek zamanlı kod analizi bulunmaktadır.
işlevselliği (Cloud Functionality) ile bütünleşik bir platformdur. SQL Server’ın kökleri
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
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,
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ş
kullanılarak yeni bir veritabanı yaratabilir ya da daha önce yaratılmış olan veritabanı
(stored procedure) aracılığı ile farklı programlama dilleri içinden saklı yordamların
alabilir, sonuç döndürebilirler. Bir kullanıcıya tablolar üzerinde işlem yapma yetkisini
tablodan doğrudan veri silmesi engellenebilir. Ayrıca saklı yordamlar ile bu işlem
öğ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
İ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
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ı
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
kullanmaktadır.
58
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önteminde bir kullanıcı ile geçmişte benzer ürünleri beğenen veya satın alan diğer
Öğ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
göre sadece C ürününü beğenen kullanıcı 3 için A ürünü öneri olarak sunulmaktadır.
yol çıkarak benzer kullanıcıları bulmaktadır. Kullanıcılar genel olarak tüm öğelerle
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
tabanlı yöntemlerde aktif öğeye benzeyen öğeler bulunur ve aktif kullanıcının benzer
63
kullanılmaktadır.
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,
Ö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
𝑎( + 𝑏( = 𝑐 ( (III.1)
yapılmaktadır.
𝑐 = √𝑎( + 𝑏( (III.2)
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
İki nokta arasındaki mesafe yatay ve dikey şeklinde ise manhattan mesafesi
kullanılmaktadır.
İki nokta arasındaki mesafe ölçümü iki nokta arasındaki farkın mutlak toplamı ile
ölçüsüdür. İki veri noktası arasındaki mesafeyi farklı şekillerde hesaplamak için
kullanılır.
𝑝 = 1 Manhattan Mesafesi
Bir 𝑗 öğesi için, bir 𝑢 kullanıcısının ortalama merkezli derecelendirmesi 𝑠g& , ortalama
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
𝑈1 = (4 + 5 + 4 + 3 + 3) / 5 = 3.8 (III.9)
𝑈2 = (3 + 3 + 3 + 2 + 4 + 5) / 6 = 3.33 (III.10)
67
açı değeri 0 ise Kosinüs benzerliği 1, açı değeri 90 ise Kosinüs benzerliği 0 olarak sonuç
∑ QmA .Qm]
𝑏𝑒𝑛𝑧𝑒𝑟𝑙𝑖𝑘(𝑖, 𝑗) = 𝑐𝑜𝑠(𝑖, 𝑗) = (III.12)
V∑ QmA t .`∑ Qm] t
çıkarılmaktadır.
69
Kullanıcının iki öğeyi de derecelendirmiş olması önemli olmaktadır (𝑈% ∩ 𝑈& ). İki öğeyi
hesaplanmaktadır.
katsayısı iki veri seti arasındaki mesafeyi ölçmek için kullanılmaktadır. Tüm öğeler veri
benzerlik bu veri seti kullanılarak hesaplanmaktadır. Falk’a [37] göre Jaccard benzerliği
ürün sayısı, iki kullanıcının birlikte aldığı ürün sayısına bölünmektedir. Şekil III.16’ya
gibidir.
(
𝑗𝑎𝑐𝑐𝑎𝑟𝑑“6,“( = ” = 0,5 (III.16)
kullanılmaktadır.
kullanmaktadır. Model tabanlı yöntemler bellek tabanlı yöntemlere göre daha özet bir
yöntemlerdendir.
kullanıcı-öğe matrisi, kullanıcı ve öğe matrisi olarak iki ayrı matris bileşenine
Temel Bileşen Analizi (PCA Principal Component Analysis), Tekel Değer Ayrıştırma
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
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
Öznitelik çıkarımı yaparak en az bilgi kaybı ile boyutu küçültmek amaçlanan bir
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
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ı
yöntemde aynı anda bir özellik vektörünün çözülmesi gereklidir. Ayrıca iki farklı
Alternatif En Küçük Kare yöntemi matrisi çarpanlarına ayırmak için kullanılan bir
𝑅 @ 𝑈𝑉 (III.19)
etmediği düşünülmektedir. (𝑝g,% = 0) tercih edilmeyen bir ürün düşük güven ilişkilidir.
1 𝑅 > 0
𝑃g,% £ R=𝑟g,% (III.20)
0 𝑅 = 0
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
oluşturmaktadır. Her aşamada orijinal verilerin çarpanlara ayrılmış daha yakın bir
76
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.
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ı
Öğrenme yapay sinir ağlarının öğrendiği veriye bağlı olarak, benzer verilerde benzer
bilgi üretmektedir.
77
• Bilgiler ağa dağıtılmış durumdadır. Tek bir katmanın önemi yoktur ağın
Ö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 negatif veya pozitif olabilir. Etkisinin hangi yöne doğru olduğunu
başlangıç değerlerinin ne olması gerektiği ile ilgili olarak belirli bir tanım
belirlenmektedir.
değerleri hücrede tek bir giriş değeri elde etmek amacıyla toplanmaktadır. Giriş
kullanılmaktadır.
ç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
kullanılmaktadır.
çıktısını oluşturmaktadır.
Elmas’a [121] göre yapay sinir ağlarının çalışma şekli aşağıdaki gibidir.
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
değer almaktadır. Fonksiyonun çıktısı sıfırdan küçükse sonuç sıfıra eşittir, eğer
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
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
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
Çı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
katmanlardaki hücreler ile birbirlerine bağlıdırlar. Her hücreye bir önceki katmandaki
Öztemel’e [122] göre yapay sinir ağları üzerindeki çalışmalar tek katmanlı ağlar
geliştirilmiştir.
Tek katmanlı yapay sinir ağları girdi ve çıktı katmanlarından oluşmaktadır. Tüm
fonksiyonu ile hesaplanmış net girdisi ve aktivasyon fonksiyonu ile hesaplanmış çıktısı
• 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.
ile ağın çıktısı arasındaki farkın (hata değeri) azaltılması esastır. Hatanın azaltılarak
yapılmaktadır.
Elmas’a [121] göre tek katmanlı yapay sinir ağları iki sınıfı birbirinden ayıran
çalışmalar uzun yıllar durmuştur. Daha sonra geliştirilen çok katmanlı ağlar, bu
Öztemel’e [122] göre çok katmanlı ağlar XOR problemine çözüm olarak
denilmektedir.
84
katmanlı ağların hesaplanmasında bias sabit değer devreye girmektedir ve her zaman 1
bias değeri giriş sinyallerinin sıfırdan farklı bir değer olmasını sağlamaktadır.
ulaşılmaya çalışılmaktadır. Hata fonksiyonu ağın hedef çıktısı ile gerçekleşen çıktısı
85
karesi).
6
𝐻𝑎𝑡𝑎RPcZIG = ∑ ( ³ℎ𝑒𝑑𝑒𝑓çµ9Rµ − 𝑔𝑒𝑟ç𝑒𝑘𝑙𝑒ş𝑒𝑛çµ9Rµ · 2 (III.24)
Ş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ü
katmandan oluşmaktadır. Girdi katmanı, ara katman ve çıkış katmanıdır. Her bir
isimlendirilmektedir.
Girdi değerleri
Çıktı değerleri
86
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.
çı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ı
İ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
çalışılmaktadır.
• Çı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.
oranında bir değerinin yeni ağırlık değişim değerine katılmasını için kullanılmaktadır.
90
hızlandırmaktadır.
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.
hesaplanmaktadır.
91
• Çıktı katmanındaki hatanın oluşmasında ara katmanın da payı olduğu için ara
Ş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
hata değerinin minimuma ya da bir eşik hata değeri olarak bir değere ulaşıncaya kadar
devam etmektedir.
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.
yöntemi, model tabanlı yöntemlerden matris ayrıştırma yöntemi ve yapay sinir ağları
uygulandıktan sonra veri setindeki müşterilerin daha önce aldığı ürünler ile modelin
işlemcisi Intel Core i7-7500U, hızı 2.7Ghz, belleği 8 GB, işletim sistemi 64-bit
markanın müşteri ilişkileri kapsamında takip ettiği kartlı müşterilerin satın alma
hazırlanmaktadır.
99
• stokkart tablosu:
Ürün model bilgilerinin bulunduğu model tanım tablosudur.
• stokkart_rapor_parametre:
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:
• stokbelge:
Stok hareket işlemlerinin tutulduğu ana tablo (tüm satış işlemlerinin belge olarak
tutulduğu tablodur).
• stokbelge_detay3:
bulunmaktadır.
• stokbelge_detay2:
tutulmaktadır.
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:
tutulduğu tablodur.
• carikart_crm_ozel:
tutulduğu tablodur.
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:
cari_parametre_5 int
cari_parametre_6 int
cari_parametre_7 int
sube_carikart_id bigint
• carikart_crm_musteri_kart:
Model bilgisine ait tüm kategorik parametrelerin kod ve tanım olarak tek bir
sorgusu oluşturulmuştur.
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,
into mgtez01
• Department: Ürünün kadın, erkek, kadın çocuk, erkek çocuk veya unisex tür
• 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
confort gibi.
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,
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
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
ait değeri NULL ya da boşluk olan tanımların olduğu görülmüştür. Eksik olan
azaltmak için sadece bir model satın almış olan müşteriler veri setinden çıkartılmıştır.
gösterilmektedir.
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
gruplandırılmaktadır. Veri setinde 10 farklı ürün almış müşterilerin 8340 adetlik ürün
öğe matrisindeki seyrekliğin çalışma performansına etkisi göz önüne alınarak 10 farklı
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
• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsft SQL
oluşturulmaktadır.
belirlenmektedir.
116
1 DATABASE=gizfusion;UID=sa;PWD=xxxxxxxx')
2 cursor = sqlconnection.cursor()
4 \
7 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'
10 Products = pd.read_sql(ProductSqlStr,sqlconnection)
userItemMatrix=userrating.pivot_table(index='users',columns='items',
11 values='rating')
12
13 reader = Reader()
117
15 trainset = data.build_full_trainset()
16 testset = trainset.build_anti_testset()
17
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:
26 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'user_based')
27
30 predictSplit = algo.fit(trainSplit).test(testSplit)
31 accuracy.rmse(predictSplit)
32 accuracy.mse(predictSplit)
33 accuracy.mae(predictSplit)
tutulmaktadır.
118
çekilmektedir.
oluşturulmaktadır. Bu nesne ile dataframe den okunan veriler “user, item, rating” olarak
ayrıştırılmaktadır.
parametreler verilmektedir.
• Satır 21: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın
oluşturulmaktadır.
• Satır 24: 22. satırda oluşturulan tahmin verilerinin SQL veritabanına sırayla
ç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ı
kullanılmaktadır.
2 userxIndex = 0
3 simArray = [(0,0,0)]
4 userR1 = matrix.values
5 userR2 = matrix.values
9 useryIndex = 0
10
12
13 print('item:',userxIndex,'-',useryIndex)
14
17 in zip(ru1,ru2)
19 zip(ru1,ru2)
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'])
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]
46 simdf = simdf.sort_values(by='simm',ascending=False)
48
50 right_on = 'users')
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
59
61
62 predictMatrix= predictMatrix.append(rs6)
63 return predictMatrix
64
Aktif kullanıcının derecelendirme yapmadığı Urun5 için hesaplanan tahmin değeri 4.85
olarak bulunmaktadır
123
Öğe tabanlı filtreleme yöntemi için oluşturulan uygulamanın işleyiş şeması Şekil
IV.8’ de gösterilmektedir.
125
• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL
oluşturulmaktadır.
2 algo = KNNBaseline(k=20,sim_options=sim_options)
parametreler verilmektedir.
yakın öğeler belirlenmekte ve aktif öğe için tahmin derecesi hesaplanarak öneri
Bölüm V’de yer almaktadır. İşbirlikçi filtreleme yöntemlerinden öğe tabanlı filtreleme
127
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)
57 zip(ru1,ru2)
59 zip(ru1,ru2)
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
103 userIndex = 0
105
107 print(userIndex)
113
116
121
128 rs5[rs5['items2'].notna()].simm
130 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})
132
olarak bulunmaktadır.
amaçlanmaktadır.
IV.12’de gösterilmektedir.
• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL
yapılmaktadır.
132
1 algo = SVD()
2 algo.fit(trainset)
3 predictData = algo.test(testset)
oluşturulmaktadır.
Yapay sinir ağı yönteminin için oluşturulan yapay sinir ağı modeli yapısı aşağıda
gösterilmektedir.
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
• Müşteri, ürün kod bilgisi ve satın alma adet verisi, markanın Microsoft SQL
• 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
kullanılmaktadır.
Yapay sinir ağı yöntemi kullanılarak ürün önerisi oluşturmak için Tablo
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)
• Satır 1..3: Yapay sinir ağının öğeler için giriş katmanı oluşturulmaktadır.
fakat bu nesne bir giriş ve bir çıkış katmanının olduğu çok temel yapılar için tercih
• Satır 4..6: Yapay sinir ağının kullanıcı için giriş katmanı oluşturulmaktadır.
• Satır 10: Otuziki nörondan oluşan ikinci gizli katman oluşturulmaktadır. İkinci
eğitimi sırasında modelin oluşturduğu çıktı ile gerçek çıktı arasındaki hatanın kontrolü
parametresi yapay sinir ağının performansını ölçmek için kullanılmakta, ağın her
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
Şekil IV.15’de modeli oluşturulan yapay sinir ağının şematik biçimi ile ağın katmanları
gösterilmektedir.
138
Yapay sinir ağları model tabanlı yöntemlerdendir. Model veritabanından aldığı veriler
BULGULAR VE SONUÇLAR
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ığı
bahsedilmektedir.
sonuçlarının özellikleri;
bilgisi veritabanında tabloda saklanmaktadır. Tüm yöntemlere ait verilerden karma bir
model de oluşturulabilmektedir.
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
saklanmakta, her bir müşteri için 15 adet önerilen ürün üzerinden oluşturulan tabloda
Müşterilerin satınaldıkları ürün sayısı toplam ürün sayısına göre daha az olduğundan
güncellenmesi gerekmektedir.
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
yapılmaktadır. Veri setindeki bir müşteri için oluşturulan öneri tablosu Tablo V.3’de
Yapay sinir ağı yöntemi ile kullanıcılar ve öğeler arasındaki ilişki makine
yaptırılmaktadır. Veri setindeki bir müşteri için oluşturulan öneri tablosu Tablo V.4’de
Modelin eğitimi sırasında oluşan hata değerini gösteren grafik aşağıdaki gibidir.
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.
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
yöntemlerinin kullanıcı tabanlı filtreleme yöntemlere göre daha başarılı olduğu, genel
gösterilmektedir.
149
gösterilmektedir.
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
group ve style kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre daha
group, style ve brand kategorileri ile birlikte karşılaştırıldığında diğer yöntemlere göre
her gruba ait en iyi satan veya aynı gruptan beğeni derecesi yüksek ürünlerin sunulması
şeklinde gerçekleşmektedir.
152
SINIRLILIKLAR
ürün alan müşteriler ile sınırlı tutularak seyreklik sınırlı tutulmaya çalışılmaktadır.
verilmiştir.
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
testi yapılmamaktadır.
verisi kullanılmıştır.
154
DEĞERLENDİRME
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ış
“satın alma adeti” veri seti hazırlanmıştır. Öneri yapısı için işbirlikçi filtreleme
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
seyrek bir yapıda oluşmuştur. Kullanılan veri sadece müşterinin satın alma verisinden
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
derecelendirme bilgisi müşterinin ilgisinin anlaşılması yerine daha çok ürün beğenisini
sağlanmaktadır;
sağlanmaktadır.
ü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
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
kategorik karşılaştırmada başarılı olurken, öğe tabanlı yöntem ise iki farklı çoklu
Kişisel ürün önerimi yöntemleri sadece perakende veya dijital satış kanallarında
ürünlere ait bilgilerin kayıt altına alınması kişiselleştirilmiş öneri verisi olarak çok
önemlidir.
157
Öneriye dayalı sezonsal satın alma tahmini, kullanıcıların beğeni tahminine göre
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
destekleneceği öngörülmektedir.
158
KAYNAKLAR
[1] RILA, Accenture, "Delivering For The New Consumer," RILA, Accenture,
https://www.accenture.com/t20180905T060744Z__w__/us-
en/_acnmedia/PDF-85/Accenture-Report-The-Changing-Consumer-And-
The-New-Definition-of-Retail.pdf.
2018.
[Online]. Available:
https://www.accenture.com/t20161121T011402Z__w__/us-
en/_acnmedia/PDF-37/Accenture-Personalization-Pulse-Check-
Infographic.pdf#zoom=50.
https://www.amazon.com.
https://www.pandora.com.
https://www.bestbuy.com.
https://www.facebook.com.
159
https://www.instagram.com.
https://www.netflix.com.
Times to Modern Era," Indian Journal of Science and Technology, vol. Vol 9,
1997.
[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.
https://www.last.fm.
[18] Epsilon, "New Epsilon research indicates 80% of consumers are more likely
https://us.epsilon.com/pressroom/new-epsilon-research-indicates-80-of-
consumers-are-more-likely-to-make-a-purchase-when-brands-offer-
personalized-experiences.
Machine Learning and Data Mining, vol. 1, Springer, 2010, pp. 829-838.
[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.
https://www.youtube.com.
Matbaacılık, 2013.
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.
[32] S. Taşcı, "İçerik Bazlı Medya Takip ve Haber Tavsiye Sistemi," Hacettepe
http://openaccess.hacettepe.edu.tr:8080/xmlui/handle/11655/2604.
162
https://humboldt-
wi.github.io/blog/research/applied_predictive_modeling_19/causalrecommen
dersystem/.
systems-b86a1068a4dd.
[48] Y. Chen, C. Wu, M. Xie and X. Guo, "Solving the Sparsity Problem in
Available: https://docs.oracle.com/en/database/oracle/oracle-
database/21/cncpt/introduction-to-oracle-database.html#GUID-A42A6EF0-
20F8-4F4B-AFF7-09C100AE581E.
iso-iec-9075-2016-ansi-x3-135/?_ga=2.173753188.636390433.1608631919-
532806038.1608631919.
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.
https://www.uzaktancrmegitimi.com/773/musteri-odakli-organizasyon-6.
Üniversitesi İşletme Fakültesi Dergisi, vol. 29, no. 1, pp. 1-22, 2000.
https://www.scribd.com/document/2066772/korelasyon-analizi.
166
241-250.
knn-algorithm-bd375d14eec7.
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
medium-com-pupalerushikesh-svm-f4b42800e989.
[69] M.-P. Thi Do, D. V. Nguyen and L. Nguyen, "Model-based Approach for
[73] J. Han, M. Kamber and J. Pei, Data Mining Concepts And Techniques,
Elsevier, 2012.
https://towardsdatascience.com/categorical-embedding-and-transfer-learning-
dd3c4af6345d.
168
[78] D. Yadav, "Categorical Encoding Using Label Encoding And One Hot
https://towardsdatascience.com/categorical-encoding-using-label-encoding-
and-one-hot-encoder-911ef77fb5bd.
[86] M. Aydemir, Projeler ile Python, İstanbul: Kodlab Yayın Dağıtım Yazılım ve
https://docs.python.org/3/faq/general.html.
[88] S. Cass, "The Top Programming Languages 2019," IEEE Spectrum, 2019.
programming-languages-2019.
https://surprise.readthedocs.io/en/stable/prediction_algorithms.html.
[91] Awesome Python, "Compare Surprise And Crab's Popularity And Activity,"
crab?rel=cmp-lib.
surprise-vs-python-recsys?rel=cmp-cmp.
[93] Awesome Python, "Compare Surprise And Keras's Popularity And Activity,"
keras.
[94] Keras Special Interest Group (Keras SIG)., "Why choose Keras," Keras, 2020.
[95] NumPy, "NumPy: the absolute basics for beginners," NumPy, 2020. [Online].
Available: https://numpy.org/doc/stable/user/absolute_beginners.html.
https://www.tensorflow.org/about.
Available: https://seaborn.pydata.org.
Available: https://pypi.org/project/pyodbc/.
170
Available: https://docs.spyder-ide.org/current/index.html.
SQL Server 2012 Bible, John Wiley and Sons, Inc, 2012.
[102] I. Ben-Gan, Microsoft SQL Server 2012 T-SQL Fundamentals, mspress, 2012.
Modeling And User-Adapted Interaction, vol. 12, no. 4, pp. 331-370, 2002.
recommender-systems-6c66cf15ada.
[105] McKinsey & Company, "How Retailers Can Keep Up With Consumers,"
https://www.mckinsey.com/industries/retail/our-insights/how-retailers-can-
keep-up-with-consumers.
https://medium.com/@cfpinela/recommender-systems-user-based-and-item-
based-collaborative-filtering-5d5f375a127f.
171
[109] P. Boström and M. Filipsson, "Comparison of User Based and Item Based
[111] A. Singh, A. Yadav and A. Rana, "K-means with Three different Distance
2013.
3, 2016.
https://intellica.ai/blog/blog.html?comparison-of-different-word-
embeddings-on-text-similarity-a-use-case-in-nlp-e83e08469c1c.
[120] S. Zhang, L. Yao, A. Sun and Y. Tay, "Deep learning based recommender
Yayınlar, 2018.
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
[126] A. Mohanty, "Multi layer Perceptron (MLP) Models on Real World Banking
layer-perceptron-mlp-models-on-real-world-banking-data-f6dd3d7e998f.
http://www.cs.stir.ac.uk/courses/ITNP4B/lectures/kms/2-Perceptrons.pdf.
Available: https://mattmazur.com/2015/03/17/a-step-by-step-
backpropagation-example/.
https://www.gangboard.com/blog/backpropagation/.
https://www.ibm.com/analytics/relational-database.
https://www.netflixprize.com.
https://www.tutorialspoint.com/artificial_neural_network/artificial_neural_ne
twork_supervised_learning.htm.
174
EK-1
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')
8 return Ratings
10 def UserBasedSim(matrix):
11 userxIndex = 0
12 simArray = [(0,0,0)]
13 userR1 = matrix.values
14 userR2 = matrix.values
16 useryIndex = 0
20 zip(ru1,ru2)
21 ]))
22 zip(ru1,ru2)
175
23 ]))
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]
50 zip(ru1,ru2)
51 ]))
52 zip(ru1,ru2)
176
53 ]))
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'])
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]
73 simdf = simdf.sort_values(by='simm',ascending=False)
76 right_on = 'users')
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})
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'])
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]
110 rs5[rs5['items2'].notna()].simm
112 as_index=False).agg({'simm':np.sum,'simWeight':np.sum})
UserBasedData=pd.DataFrame({'users':UserItemNorm['users'],'items':UserItemNorm[
120 values='rating')
123 values='simm')
124 UsersPredMatrix=UserBasedPrediction(UserBasedData,UserSimMatrix,UserItemMatrix)
127 values='simm')
ItemPredMatrix=ItemBasedPrediction(UserItemRatings,ItemSimMatrix,UserItemMatrix
128 )
derecelendirme hesaplanmaktadır.
yapılmaktadır.
yakın (k=2) iki öğe bulunmaktadır. Aktif kullanıcının en yakın öğeler için yaptığı
okunmaktadır.
bazlı ortalaması bulunmakta, bulunan ortalamadan her kullanıcının öğeler için verdiği
matrisi oluşturulmaktadır.
uygulanmaktadır.
uygulanmaktadır.
4.85 olarak bulunmakta, örnek veri seti üzerinden öğe benzerliği uygulanarak öğeler
olarak bulunmaktadır.
2 import numpy as np
10 import pyodbc
11
13 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')
14 cursor = sqlconnection.cursor()
15
16 \
19 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'
20
22 Products = pd.read_sql(ProductSqlStr,sqlconnection)
23
userItemMatrix=userrating.pivot_table(index='users',columns='items',
24 values='rating')
25
26 reader = Reader()
28 trainset = data.build_full_trainset()
29 testset = trainset.build_anti_testset()
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
40 values(?,?,?,?)",pr.uid,pr.iid,pr.est,'user_based')
41 cursor.commit()
42
45 predictSplit = algo.fit(trainSplit).test(testSplit)
46
47 accuracy.rmse(predictSplit)
48 accuracy.mse(predictSplit)
49 accuracy.mae(predictSplit)
• Satır 14: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere
oluşturulan sorgu ifadesi, ProductSqlStr değişkeninde ise ürün bilgileri için oluşturulan
çekilmektedir.
oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak
ayrıştırılmaktadır.
parametreler verilmektedir.
• Satır 33: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın
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
• Satır 41: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı
ç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ı
kullanılmaktadır.
188
Öğe tabanlı filtreleme yöntemi kullanılarak müşteri satın alma verilerinden öneri
2 import numpy as np
9 import pyodbc
10
12 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')
13 cursor = sqlconnection.cursor()
14
16 Department, Section [Sub Category] , [Group], Style, Brand, Yil From mgtez03'
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
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)
39 predictSplit = algo.fit(trainSplit).test(testSplit)
40
41 accuracy.rmse(predictSplit)
42 accuracy.mse(predictSplit)
43 accuracy.mae(predictSplit)
optimize edilmiş kod hali bulunmaktadır. Optimize edilmiş kodların çalışması daha
• Satır 13: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere
oluşturulan sorgu ifadesi tutulmakta, ProductSqlStr değişkeninde ise ürün bilgileri için
çekilmektedir.
oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak
ayrıştırılmaktadır.
parametreler verilmektedir.
• Satır 27: Algoritmanın “fit” metotu ile veri seti eğitilmekte, algoritmanın
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
• Satır 35: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı
ç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ı
kullanılmaktadır.
192
2 import numpy as np
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
15 From mgtez03'
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)
37 predictSplit = algo.fit(trainSplit).test(testSplit)
38
39 accuracy.rmse(predictSplit)
40 accuracy.mse(predictSplit)
41 accuracy.mae(predictSplit)
kullanılmaktadır.
• Satır 12: Oluşturulan bağlantı nesnesi ile veritabanı işlemlerini yapmak üzere
oluşturulan sorgu ifadesi, ProductSqlStr değişkeninde ise ürün bilgileri için oluşturulan
çekilmektedir.
oluşturulmakta, bu nesne ile dataframe den okunan veriler “user, item, rating” olarak
ayrıştırılmaktadı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
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
• Satır 33: SQL veritabanına yapılan kayıt işlemi “commit” komutu ile veritabanı
ç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ı
kullanılmaktadır.
Yapay sinir ağı yöntemi kullanılarak müşteri satın alma verilerinden öneri üreten
2 import pandas as pd
8 import pyodbc
11
13 DATABASE=gizfusion;UID=sa;PWD=!Thereaper')
14 cursor = sqlconnection.cursor()
15
18
21
23 data_test = pd.read_sql(TestDataSqlStr,sqlconnection)
25 n_users = len(dataset.users_id.unique())
26 n_items = len(dataset.items_id.unique())
27
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
67 y = 0;
68 for i in range(0,len(predictons)):
69 y+=1
70 values(?,?,?,?)",data_test.carikodu.iloc[i],data_test.stok_kodu.iloc[i],
71 float(predictons[i]),'ysa_based')
72 cursor.commit()
yararlanılmıştır. Optimize edilmiş kodların çalışması daha hızlı olacağı için Keras
Yapay sinir ağının eğitimi sırasında oluşan ağırlık değerlerinin grafik gösterimi için
• Satır 14: Oluşturulan bağlantı nesnesi ile veritabanı işlemleri yapmak üzere
bulunmaktadır.
saklanmaktadır.
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.
fakat bu nesne bir giriş ve bir çıkış katmanının olduğu çok temel yapılar için tercih
oluşturulmaktadır.
• Satır 34: Kullanıcı ve öğeler için yaratılmış kategorik veriler gizli katman
kullanılmaktadır.
• Satır 36: Otuziki nörondan oluşan ikinci gizli katman oluşturulmaktadır. İkinci
• 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
barı ile gösterilmektedir. Modele kullanıcı ve öğe nesneleri giriş nesnesi olarak
• 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
• 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.
EK-2
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
• Önceki alışverişleri;
gösterilmektedir.
• Özel promosyon;
• Önerilerimiz;
ürünlerin bilgileri mobil uygulama ile kayıt altına alınmaktadır. Bu bilgiler müşterinin
müşterinin ürünlere olan ilgisi hakkında daha fazla bilgi toplanmış olmaktadır.
205
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.
sunulmaktadır
206
sunulmaktadır.
ÖZGEÇMİŞ
KİŞİSEL BİLGİLER
Uyruğu: T.C.
Tel:
Email:
EĞİTİM
İŞ DENEYİMLERİ