Professional Documents
Culture Documents
Banka Verileriyle Ürün Öneri Sistemi: T.C. Bahçeşehir Üniversitesi
Banka Verileriyle Ürün Öneri Sistemi: T.C. Bahçeşehir Üniversitesi
BAHÇEŞEHİR ÜNİVERSİTESİ
EKİN ERDOĞDU
İSTANBUL, 2020
T.C.
BAHÇEŞEHİR ÜNİVERSİTESİ
EKİN ERDOĞDU
İSTANBUL, 2020
T.C.
BAHÇEŞEHİR ÜNİVERSİTESİ
Bu tezin Yüksek Lisans tezi olarak gerekli şartları yerine getirmiş olduğu Fen Bilimleri
Enstitüsü tarafından onaylanmıştır.
Bu tezin Yüksek Lisans tezi olarak gerekli şartları yerine getirmiş olduğunu onaylarım.
Bu Tez tarafımızca okunmuş, nitelik ve içerik açısından bir Yüksek Lisans tezi olarak
yeterli görülmüş ve kabul edilmiştir.
Üye ------------------------------------
Dr. Öğr. Üyesi Betül Erdoğdu ŞAKAR
Üye ------------------------------------
Dr. Öğr. Üyesi Can RAZBONYALI
TEŞEKKÜR
Çalışma süresince bilgisi, yönlendirmesi ve yaklaşımıyla bana her zaman destek olan
değerli hocam Dr. Özge Yücel Kasap'a sonsuz teşekkürlerimi sunarım.
Çalışma hayatımda bana yön veren değerli arkadaşım Celal Bilici'ye, dostluğuyla her
zaman yanımda olan Meryem Akgül'e, çalışmam boyunca bana her zaman yardımcı
olan Fatih Erdoğdu’ya, beni motive eden arkadaşlarıma, yöneticilerime
Ve hayatımın her alanında desteklerini benden hiçbir zaman esirgemeyen en kıymetli
hazinem olan aileme teşekkürlerimle...
Ekin ERDOĞDU
Bilgi Teknolojileri
Bu bilgi yığınının içinde kaybolan kararsız müşteriler için karar vermek bir hayli
zorlaşmaktadır. Bu durumun bilincinde olan firmalar müşterilerini kaybetmemek ve
sektördeki rakiplerine karşı güçlü olabilmek için ürün tavsiye sistemlerini kullanmaya
başlamıştır. Ürün önerme sistemleri müşterilerin davranışlarını inceleyerek gelecekte
alabileceği ürün hakkında tahminler üretmeye çalışır. Şirketler için müşteri
memnuniyeti önemli bir konudur çünkü uzun vadede gelecek müşteri portföyü için bir
yatırım aracıdır.
Çalışma sonucunda bir müşterinin aldığı ürünlere bakıp benzer davranışlara sahip diğer
müşterime hangi ürünleri önerebilirim sorusunun cevabı aranmaktadır.
iv
ABSTRACT
Ekin ERDOĞDU
Information Technologies
Today, with the widespread use of the internet and the advancement of technology, it
is possible to access thousands of terabytes of information within seconds.
For unstable customers who are lost in this pile of information, it becomes very difficult
to decide. Companies that are aware of this situation have started to use product
recommendation systems in order to avoid losing their customers and to be strong
against their competitors in the sector. Product suggestion systems examine the
behavior of customers and try to produce predictions about the future product.
Customer satisfaction is an important issue for companies because it is an investment
tool for the future customer portfolio in the long run.
Within the scope of this study, the product suggestion system has been evaluated in the
field of Banking sector. Considering that the banking sector is an area open to
competition, customer experience emerges as an issue to be focused on. The
developments in the field of artificial intelligence, which have gained popularity
recently, have also helped the bank to offer a more personalized service to its
customers.
As a result of the study, the answer to the question of which products can I recommend
to my other customer with similar behaviors is sought.
v
İÇİNDEKİLER
TABLOLAR ................................................................................................................... ix
ŞEKİLLER ...................................................................................................................... x
KISALTMALAR .......................................................................................................... xii
SEMBOLLER .............................................................................................................. xiii
1.GİRİŞ ............................................................................................................................ 1
2.LITERATUR TARAMASI ......................................................................................... 6
2.1 ÜRÜN TAHMİNLEMEYLE İLGİLİ YAPILAN ÇALIŞMALAR……………..6
3. VERİ VE YÖNTEM ................................................................................................. 14
vi
3.4.2 İşbirliğine Dayalı Filtreleme Sistemleri (Collaborative Filtering Systems) .. 29
3.4.3 Hibrit Tavsiye Sistemleri ..................................................................................... 33
3.4.4 Popülarite Tabanlı Tavsiye Sistemleri ............................................................... 33
3.5 TAVSİYE SİSTEMLERİNDE KARŞILAŞILAN ZORLUKLAR…………… 33
3.6 TAVSİYE SİSTEMLERİNDE UZUN KUYRUK ( LONG TAIL)…………… 35
3.7 WEKA…………………………………………………………………………….. 36
4.UYGULAMA .............................................................................................................. 41
KAYNAKÇA…………………………………………………………………………. 73
EKLER
Ek A.1 min_support değerinin hesaplanması........................................... 82
Ek A.2 Ürün 14’e benzeyen 15 adet ürün................................................. 83
Ek A.3 Cosine Similarity benzerliğinden yararlanılarak bulunan
benzer müşteriler.......................................................................................... 84
Ek A.4 Benzer ürünleri alan müşteriler için verinin Apriori
algoritmasına uygun hale getirilmesi.......................................................... 86
Ek A.5 Hibrit model için min_support değerinin hesaplanması............ 87
Ek A.6 Apriori algoritması......................................................................... 88
Ek A.7 Sankey diyagramı........................................................................... 89
vii
Ek A.8 Hibrit sistemin test müşterisi için performansı.......................... 93
Ek A.9 %30 Test verisiyle hibrit sistemin doğruluk oranı
Performansı……………………………………………………………...... 94
Ek A.10 %30 Test verisiyle hibrit sistemin hassasiyet oranı
performansı ................................................................................................. 95
Ek A.11 %30 Test verisiyle hibrit sistemin hatırlama oranı
performansı……………………………………………………………….. 96
Ek A.12 %30 Test verisiyle hibrit sistemin f1-score oranı
performansı……………………………………………………………...... 97
Ek A.13 Weka Apriori algoritmasının test müşterisi için
performansı……………………………………………………………….. 98
Ek A.14 %30 Test verisiyle Weka Apriori algoritmasının
performansı……………………………………………………………..… 99
Ek A.15 %30 Test verisiyle Weka Apriori algoritmasının
hassasiyet oranı performansı…………………………………………… 100
Ek A.16 %30 Test verisiyle Weka Apriori algoritmasının
hatırlama oranı performansı………………………………………….... 101
Ek A.17 %30 Test verisiyle Weka Apriori algoritmasının
f1-score oranı performansı……………………………………………... 102
ÖZGEÇMİŞ……………..……………………………………………………….... 103
viii
TABLOLAR
ix
ŞEKİLLER
x
Şekil 5.10: Weka Apriori Algoritmasının Test Seti İçin Performans Metrikleri ........ 67
Şekil 5.11: Weka Apriori Algoritmasının Test Seti İçin Toplam Hassasiyet Oranı
(Precision) ................................................................................................................... 67
Şekil 5.12: Weka Apriori Algoritmasının Test Seti İçin Toplam Hatırlama Oranı
(Recall) ........................................................................................................................ 68
Şekil 5.13: Weka Apriori Algoritmasının Test Seti İçin Toplam F1-Score Oranı...... 68
Şekil 5.14: Değerlendirme Sonuçları .......................................................................... 68
Şekil 5.15: Değerlendirme Grafiği .............................................................................. 69
Şekil 5.16: Sankey Diyagramıyla Veri Görselleştirme ............................................... 70
xi
KISALTMALAR
AC : Associative Classification
ARFF : Attribute Relationship File Format
CBA : Classification Based on Association
CF : Collaborative Filtering
CRISP-DM : Cross-Industry Standard Process for Data Mining
EM : Enterprise Miner
KNN : K Nearest Neighborhood
KVKK : Kişisel Verilerin Korunması Kanunu
MCAR : Multi-class Classification Based On Association Rule
RIPPER : Repeated Incremental Pruning to Produce Error
Reduction
RFM : Recency Frequency Moneatry Analysis
SAS : Statistical Analysis System
SPSS : Statistical Package for the Social Sciences Programme
SVM : Support Vector Machine
WEKA : Waikato Environment for Knowledge Analysis
xii
SEMBOLLER
Distance :d
xiii
1.GİRİŞ
Bankacılık sektörü sadece para ve bunlarla ilgili işlemler değildir. Sigorta birimi,
pazarlama, satış, bilgi teknolojileri gibi büyük alanlardan oluşur. Teknolojiyi
sürekli takip etmek, kendini güncel tutmak zorunda olan bir alandır. Bu alanların
her biri maliyetleri optimize ederek ve performanslarını artırarak güncel
teknolojiyi takip edip aynı zamanda rakiplerinden öne çıkmayı amaçlar.
Hizmetlerin, aslında veriyi koruyarak işlemek, yönetmek amacıyla insanlar
tarafından işlenmesiyle birlikte her kurumun kendine ait bir kurum kültürünün
birikimine sebep olmuştur. Gelişmiş bilgi birikimi ve sürekli büyüyen veriyi
anlamlandırmak, daha bilimsel yaklaşım gerektiren istatistiksel hesaplamalar,
anlık verilerin işlenmesi noktasında bilgisayar programlarının kendi başlarına
öğrenebilme ve zamanla gelişebilme kabiliyeti büyük şirketlerin yapay zeka ve
makine öğrenmesi teknolojilerine ilgi duymaya başlamasına sebep olmuştur.
Makine öğrenimi verileri işlerken olayları tek yönlü ele almaz. Denklemleri
otomatik olarak en iyi deseni saptamak için ayarlar ve hangi algoritmanın daha
iyi çalıştığını test ederek sonuca ulaşmaya çalışır.
Bazı bankalar, odak noktasına müşteri, pazar payı ve marka geçmişinden oluşan
riskleri geleneksel yöntemlerle yerleştirip ilerlerken, yeni nesil bankalar odak
noktasına müşteri deneyimini alarak, düşük maliyetle kısa zamanda daha fazla
ürün sunup çevik stratejiyle ilerlemektedir. Teknolojiye direnmek imkansız
olduğu için, bankalar açısından kaçınılmaz son müşteri kaybı yaşamaktır.
Gartner raporuna göre, 2020 yılına kadar bankaların ve işletmelerin yüzde
85’inin yapay zeka chatbotları yardımıyla müşteri bağlılığını sağlayacağı
belirtilmiştir. Juniper’ın araştırması da 2022 yılına kadar maliyet tasarrufunun
chatbotlarla 8 milyar dolara yakın olacağı yönündedir.1
1
https://chatbot.com.tr/bankacilik-sektorunde-yapay-zeka-teknolojisinin-onemi/
1
Türkiye’de bankaların yüzde 13’ü müşterilerine çeşitli platformlardan chatbot
deneyimi sunduğu, yüzde 9 ‘unun bu konuyla ilgili olarak projelerine devam
ettiği, yüzde 20’sinin de iki yıllık stratejik planlarına dahil ettiği bilinmektedir.
Chatbot’un raporunda müşterilerin bu teknolojiyi sosyal sohbetler (yüzde 8),
kredi faizi hesaplama (yüzde 11), kredi kartı bilgisi alma (yüzde 7) , kur/hisse
senedi bilgisi alma (yüzde 4), vadeli mevduat hesaplaması (yüzde 15)
alanlarında kullandığı açıklanmaktadır.2
Medici Research tarafından 2018 yılında yapılan araştırmaya göre daha çok
kurumsal bankacılık çözümlerine ağırlık veren BNP Paribas, Goldman Sachs,
Credit Suisse, Barclays gibi bankalar da yapay zeka çözümlerini
kullanmaktadır.3
2
https://www.cbot.ai/tr/turkiyedeki-banka-musterileri-chatbot-iletisimini-benimsedi/
3
https://fintechistanbul.org/2018/05/02/bankalar-yapay-zekayi-ne-icin-kullaniyor/
4
https://www.accenture.com/t20170322T205838__w__/us-en/_acnmedia/PDF-47/Accenture-
Banking- Technology-Vision-2017.pdf#zoom=50
2
Müşteriler, kendi alışkanlıklarına uyan ve kolay kullanabildikleri avantaj elde
ettikleri sistemleri kullanmaya eğilimlidir. Burada bankaların yarış içinde
oldukları konu müşteriyi elinde tutmaktır.
Bir banka müşterilerinden özel bilgilerini doğrudan alamayabilir. Ancak
müşterilerin işlem geçmişinden yararlanılarak davranışsal özelliklerini,
alışkanlıklarını farkında olmadan dolaylı olarak bankayla paylaştığı
görülmektedir . Bu işlenmemiş veriler içinde müşteri ve piyasayla ilgili pek çok
bilgi bulunabilir. Bu bilgiler çevrimiçi kredi ararken müşteri davranışından kredi
değerini belirlemek için kullanılan veriler veya bir müşteriye kasko teklifi
önerirken sigortalının kaza yapma ihtimalini ya da hasar maliyetini öngörecek
ve müşteriyi riskli müşteri kategorisine sokacak karmaşık pek çok bilgi
içerebilir. Veri Bilimi bu noktada müşterinin tanınması ve segmentasyonunun
belirlenmesi, piyasa analizi ve hizmetlerin doğru müşteriye doğru bir şekilde
önerilmesini kolaylaştıran makine öğrenmesi ve yapay zeka teknolojileriyle
bütünleşebilen bir alan olarak karşımıza çıkmaktadır.
Doğru bir şekilde planlanması yapılan makine öğrenmesi algoritmalarıyla
bankalar karlılıklarını önemli ölçüde artırabilir. Milyonlarca müşterinin yaş, iş,
cinsiyet, finansal durumları, sigorta bilgileri makine öğrenmesi algoritmalarıyla
sürekli analiz edilerek temel eğilimleri belirlenir. Müşteriler için bireysel risk
planlaması çıkarılabilir, kişiselleştirilmiş sigorta profili oluşturularak yeni ve
eski müşterilere ne tür öneriler yapılabileceği çıkarılır.
Robo-Danışmanlar da makine öğrenmesinin yaygın kullanıldığı bir
uygulamalardandır. Müşterinin yatırım portföyünü oluşturmak ve yönetmek için
kullanılır. Müşteriyi varlıkları ve belirlediği hedefe göre risk tolerans profilini de
göz önünde bulundurarak çeşitli yatırım seçeneklerine yönlendirir.
Makine öğreniminin bankacılıkta kullanıldığı önemli alanlardan biri de
sahtekarlık tespitlerinin önlenmesi konusundadır. Sistemler anormallikleri tespit
edip bunları güvenlik ekipleri için işaretleyebilir. Yapılan işlemleri hesap
geçmişiyle karşılaştırarak hileli olma durumunu değerlendirebilir.
Web siteleri ve mobil uygulamalarda sıkça karşımıza çıkan chatbotların amacı
da kullanıcı deneyimini geliştirmektir. Müşteri hizmetleri ve çevrim içi
kanallarda maliyeti düşürmek ve kısa sürede hizmet sağlamak konusunda
3
chatbotlardan faydanılmaktadır.
5
https://www.altexsoft.com/blog/datascience/machine-learning-use-cases-in-finance/
4
Uygulama bölümünde elimizdeki verinin kullanılabilir hale gelmesi için yazılan
algoritmalardan bahsedilmiş, bulgular bölümünde bu algoritmaların sonuçları
değerlendirilmiş ve veri görselleştirilmesi yapılmıştır.
Tezin son bölümü olan tartışma ve sonuç kısmında ise çalışmada çıkan sonuçlar
yorumlar gelecek çalışmalara hangi konuda yol gösterebileceği belirtilmiştir.
5
2. LITERATUR TARAMASI
6
bulundurarak inceler. Ama bu yöntem de, cari dönemdeki verileri kullanmaz. Bu
sebeple Duen-Ren Liu, Wang-Jung Lee, Chin-Hui Lai çalışmalarında hem
zaman parametresini hem de cari dönemdeki satın alma verilerini de dikkate
alacak şekilde; İlişkilendirme kuralını bulmak için Apriori algoritmasını,
tahminleme çalışması için de Segmentasyon Tabanlı Sıralı Kural ve
Segmentasyon Tabanlı KNN-CF yöntemini birleştirerek hibrit yöntem
sunmuşlardır (Liu, Lee ve Lai 2009, ss. 3505-3519).
Dongwon Lee, Sung-Hyuk Park, Songchun Moon fayda temelli ürün seti
madenciliği yaklaşımı üzerine çalışmışlardır. Bu çalışmayı yapmalarındaki
amaç mevcut ilişkilendirme kuralı madenciliğinin öğe sıklığına odaklanıp,
anlamsal öneminin göz ardı edildiğini düşünmeleriydi. Bu durum düşük
frekanslı öğelerin ihmal edilmesine yol açmaktaydı. Çalışma için Kore'deki bir
mağazanın süpermarket veritabanından 10 ay boyunca satın alma geçmişi verisi
almışlardır. Bu madencilik yaklaşımı büyük veritabanlarıyla çalışmak için yeni
budama stratejileri gerektirdiği için çalışma kapsamında yeni algoritmalar
geliştirmişlerdir (Lee, Park, ve Moon 2013, ss. 2715-2725).
Yuanchun Jian, Jennifer Shan ve Yezheng Liu'a göre mevcut çalışmalar bir öneri
sisteminin başarısını müşterinin bu ürünü satın alması olarak görmektedir.
Ancak tavsiye edilen ürünün satın alınması müşterinin bu üründen memnun
olduğu anlamına gelmemektedir. Bu çalışma kapsamında müşterinin profili ve
geri bildirimlerine de bakılarak daha verimli bir derecelendirme sınıflandırma
7
modeli önermektedir. Geleneksel yöntemler, birbirleriyle çelişen
derecelendirmeleri barındırmazlar ancak aynı tercihlere sahip müşteriler satın
aldıkları ürünlere farklı derecelendirmeler yapmış olabilir bu sebeple çok
sınıflı veriyi koruma konusunda yetersiz kalmaktadır. Bu çalışma
derecelendirme verilerinden çok sınıflı verileri çıkarma konusunda yeni bir
ilişkisel sınıflandırma yöntemi sunmaktadır (Jian, Shan ve Liu 2010, ss. 470-
479).
Francisco Guil ve Roque Marin sık kalıp madenciliği(frequent pattern) alanında
çalışmışlardır. Bu tip patternli madencilik için en uygun algoritma Aprioridir
ancak bu da çok fazla desenin ortaya çıkmasını sağlar. Bu da yorumlama sürecini
zorlaştırmaktadır. Çalışmalarında sık kullanılan kalıp kümelerini kanıt grupları
olarak ele almış ve bunlarla ilişkilendirme kuralları oluşturmayı amaçlamışlardır
(Guil ve Marin 2013, ss. 3121-3127).
Fadi Thabtah, Peter Cowling ve Suhel Hammoud ilişki kuralına dayalı çok sınıflı
sınıflandırma adı verilen MCAR, yeni bir ilişkilendirilebilir sınıflandırma
yöntemi sunmuşlardır.
Bu yöntemi bulmalarındaki amaç, diğer AC algoritmaları kuralı keşfetmek için
yatay düzen gösterimini kullanmaktadırlar ancak MCAR dikey yerleşim
gösterimini kullanmaktadır bu da veri seti içinde bir kez tarama yapılması
anlamına gelmektedir. Diğer yöntemler eğitim verilerinden birden fazla kez
geçerken MCAR rowId leri kullanarak her kural için eğitim örneklerini
bulmaktadır. 20 farklı veri setiyle yaptıkları çalışmayı C4.5, RIPPER, CBA
algoritmalarıyla kıyasladıklarında etkili sonuçlar almışlardır (Thabtah, Cowling,
Hammoud 2006, ss. 414-426).
8
özelliklerine göre gruplandırıp, çapraz satış yapmak ve tüketimi teşvik edip, iyi
müşteri ilişkileri kurma fırsatı sağlaması açısından banka veritabanları için iyi
bir yöntem sunmaktadır ( Hsieh 2004, ss. 623-633).
Wen-Yu Chiang ise müşteri analitiği alanında sık kullanılan yöntemlerden biri
olan RFM skorlama tekniğini geliştirerek RFMDR modelini oluşturmuştur.
RFM, yenilik, frekans ve parasal kavramlarından oluşmaktadır. Chiang'ın
geliştirdiği modelde bu yöntemlere ek olarak D değişkeni indirim, R değişkeni
ise geri gönderim maliyeti olarak benimsenmiştir. Çalışmada online alışverişte
müşteri değerlerinin analiz edilmesine odaklanılmış, ilişkilendirme kuralı olarak
Apriori algoritması kullanılmış, veriler de anket yoluyla sağlanmıştır. Ankette
Tayvan'ın beş şehri için müşterilerin altı ay içinde alışveriş yapması
beklenmiştir. Çalışma sonucunda RFM modeli RFMDR modeli ile geliştirilmiş
ortaya çıkan yeni prosedürün pazarlama işlemlerine uygulanması hedeflenmiştir
(Chiang 2011, ss. 1716-1722).
Ding-An Chiang, Yi-Hsin Wang, Shao-Ping Chen çalışmalarında sık satın alınan
9
ürünlerin tekrar satın alınma davranışına odaklanmışlardır. Kozmetik
şirketinden toplanan verileri kullanarak, ilişkilendirme kurallarını çıkarmak için
Apriori algoritmasından yararlanılmış ve yeni bir metodoloji önerilmiştir
(Chiang, Wang, Chen, 2010, ss. 757-768).
Luis Cavique ise büyük veritabanlarında pazar sepet analizi ve çapraz satış
stratejilerinin uygulanması konusunda Apriori algoritmasının yetersiz kaldığını
düşünerek Similis algoritmasını geliştirmiştir (Cavique, 2007, ss. 400-407).
10
yapabileceğini kanıtlamıştır (Gülce, 2010).
Derya Ay, bir süpermarkete ait verileri inceleyip SPSS Clementine programı ve
Apriori algoritmasını kullanarak birlikte satın alınan ürünler üzerinden market
yerleşim düzeni önermiştir (Ay, 2009).
Tuğba Tosun, Yapı Kredi Bankası'nın kredi kartı müşteri verilerini inceleyerek
müşteri kayıplarının sebebi, kaybedilen müşterinin profili ve kaybın ne zaman
gerçekleştiğini tahmin etmeye çalışmıştır. Bu çalışmada karar ağacı yöntemini
kullanmıştır (Tosun, 2006).
Feridun Cemal Özçakır da Apriori algoritmasını bir pastane için satış verileri
üzerinde kullanmış,birlikte satın alınan ürünler içindeki benzerliği bulmayı
amaçlamıştır. Algoritmanın her aşamasında uygulanan işlemleri izleyebilmek
için de Microsoft .NET platformunda Microsoft Visual Basic.NET programlama
dili kullanarak web tabanlı bir uygulama yazılımı geliştirmiştir (Özçakır, 2006).
11
Ayşe Onat, Apriori algoritmasını uygulamak için ASP tabanlı bir web yazılımı
geliştirmiş, kullanıcı arama yaptığı anda işlemler veritabanına aktarılıp Apriori
algoritması uygulanmıştır. Çalışmada kullanıcının yaş, cinsiyet, eğitim durumu
vb. özelliklerine bakılarak kişilerin birbirleriyle olan uyumlulukları tahmin
edilmeye çalışılmış, kişinin aradığı özelliklere uygun olan farklı kişileri sürekli
sayfasında görmesi sağlanarak siteye olan üyeliğini devam ettireceği
düşünülmüş, bu şekilde siteye verilen reklam gelirlerinin artırılması
amaçlanmıştır. Aynı zamanda üye sayısının artırılması, kullanıcının sitede uzun
süre kalması için ne gibi promosyonlar yapılması gerektiği konusunda da
çalışmıştır (Onat, 2008).
12
Elif Şafak Sivri ise makalesinde e-ticaret sektöründeki verileri kullanarak
WEKA programı üzerinde Apriori ve Fp-Growth algoritmalarını lift değerlerine
göre analiz edip her ikisi için de ayrı ayrı birliktelik kuralları bulmuştur. Daha
sonra kümeleme analizi işlemi için K-means uygulayıp benzerlikleri bulmak için
de Jaccard, Cosine ve Pearson algoritmalarını kullanmıştır. Daha sonra bu analiz
sonuçlarının yüzde kaç doğrulukla çalıştığını araştırmıştır (Sivri, 2015).
Tuğçe Yüksel ise anlık sepet analizi yapabilmek için dağıtık sistemleri
kullanarak, tüm veritabanı içinde iki kez tarama işlemi yapıp büyük veri
tabanlarında daha hızlı sonuç üreten Fp-Growth birliktelik algortiması üzerinde
çalışmıştır (Yüksel, 2019).
Waleed Abdullah, Türk Parekende Şirketi'nin elektrikli ürünler satan veri setini
kullanarak ürünler arasındaki benzerlikleri bulmak için Apriori ve Fp-Growth
algoritmalarını uygulamıştır. İşbirlikçi filtreleme için benzerlik matrislerini
oluşturarak Cosinüs, Jaccard, Pearson benzerliklerini hesaplamıştır. KNN
algoritması ile tavsiye edilen ürünleri almış, analiz için WEKA ve Python
GraphLab kütüphanesini kullanmıştır. Python uygulamasını Jupyter notebook
içinde geliştirmiş Jaccard benzerliği ve Fp-Growth algoritmasının birlikte iyi
sonuçlar verdiğini gözlemlemiştir (Abdullah, 2019).
13
3. VERİ VE YÖNTEM
6
https://issuu.com/oguzhancoban6/docs/__ltek_b__lten
7
https://www.researchgate.net/publication/224103240_Some_Studies_in_Machine_Learning_Usin
g_the_G ame_of_Checkers_II-Recent_Progress
14
Makine öğrenimini şu an da hayatımızda yaygın olarak kullanmakta olduğumuz
uygulamalar için de görebiliriz. Siri, insan etkileşimini taklit etmek için,
Facebook, tanıdık yüzleri önermek için, Netflix, beğeneceğimizi düşündüğü
filmleri bize sunarken, Spotify, bize uygun şarkı öneri listesini bize sunarken,
PayPal, dolandırıcılıkla mücadele etemek müşteri verilerini analiz edip riski
değerlendirirken makine öğrenmesini kullanmaktadır.
Makine öğrenmesi teknikleri de üç grup altında toplanmaktadır:
15
Birliktelik Kuralları için; Apriori, Eclat, Fp-Growth.
Veri madenciliği farklı bilim dallarını da içinde barındıran bir çalışma alanıdır.
Makine öğrenmesi, istatistik, veri tabanı teknolojileri, görselleştirme gibi pek
çok tekniği kullanır. Veri madenciliği ve bu bahsedilen teknolojileri birbirinden
ayrı sınıflandırmak zordur çünkü çalışma alanı olarak çok içe içe geçmişlerdir.
Hangi tekniğin ya da teknoloji türünün kullanılacağı çalışılacak olan alana
bağlıdır. 9
8
https://dergipark.org.tr/en/download/article-file/387269
9
https://blog.euromsg.com/data-mining-veri-madenciligi-nedir/
16
Veri madenciliği pek çok sektörde kullanılmaktadır. Bankacılık ve sigortacılık
alanında pazarlama ve müşteri ilişkileri departmanlarında kullanılabilir.
Müşterinin davranışı için model oluşturulması, müşterilerin sınıflandırılıp
pazarlama stratejilerinin oluşturulması, kredi taleplerinin değerlendirilmesi,
çapraz satış gibi öneriler için firmalar yığın halde bulunan verileri anlamlı
bilgiye dönüştürerek gelecek yatırımlarına karar verebilirler.
10
https://blog.euromsg.com/data-mining-veri-madenciligi-nedir/
17
Şekil 3.1: Anaconda Navigator arayüzü
18
objesine çevirmek gibi işlemler kolaylıkla yapılabilir.
Matplotlib, iki boyutlu grafik çizimleri için kolaylık sunan bir kütüphanedir.
NumPy dizileri üzerine kurulu daha geniş SciPy yığınıyla çalışmak üzere
tasarlanmıştır.
Plotly, web tabanlı bir görselleştirme aracıdır. 3B grafikler ve sunduğu apilerle
bazı dillere görselleştirme imkanı sağlar.
19
bu veriler arasındaki anlamsal ilişkilerle ileriye yönelik tahminler yapılmasına
yardımcı olan bir yaklaşımdır.11 Birliktelik kuralları algoritmaları kategorik
verilerle çok başarılı çalışır.
11
https://www.slideshare.net/uslumetin/birliktelik-kurallar-kullanlarak-pazar-sepeti-analizi-
market-basket-analysis-using-association-rules
12
https://www.quora.com/Which-companies-use-recommender-recommendation-systems
20
Şekil 3.2: Amazon'un kullandığı tavsiye sistemi örneği
Kaynak: https://marutitech.com/recommendation-engine-benefits/
Netflix 1990'lı yıllarda DVD kiralama hizmeti veren hüçük bir şirketken 20 yıl
içinde sektörde son yılların en başarılı şirketlerinden biri olma yolunda
ilerlemektedir. 2006 yılında Netflix, Netflix Prize yarışmasını organize ederek
kullanıcıları için film tavsiyelerinde bulunacak ekibin 1 milyon dolar ödül
kazanacağını duyurmuştur. BellKor’s Pragmatic Chaos adlı algoritma 2009
yılında bu ödülü kazanmıştır. Bu algoritma sonraki yıllarda kullanılmasa da
Netflix 2009'dan 2019 'a kadar olan süreç içinde yapay zeka ve çeşitli
teknolojilere yatırım yaparak daha kompleks bir algoritma tasarlamıştır.
Araştırma raporlarına göre klasik Tv içeriklerinde başarı oranı yüzde 30 - 40
aralığındayken, Netflix orijinal içeriklerinde bu oran yüzde 80 'i aşmaktadır.13
13
http://www.sertacdoganay.com/netflix-algoritmasi/
21
3.3.2 Pazar Sepet Analizi
Bu konuyla ilgili olarak en popüler örnek bira ve bebek bezi ürünleri arasındaki
bağdır. Normalde bu iki ürün arasında hiçbir bağ yokmuş gibi düşünülebilir.
Literatürde bu konuyla ilgili hikayeye göre Walmart ismindeki süpermarket
zinciri "Yeni çocukları olan aileler vakit olmadığı için cuma günü dışarı
çıkamıyor, bira alıp evde zaman geçiriyorlar. Bu sebeple bebek bezi alan baba
yanında bira da alır." çıkarımında bulunmuşlardır. Bu doğrultuda iki ürünü yan
yana koyarak satışları artırmayı hedeflemişlerdir.14
14
https://zeynepaygun.wordpress.com/2016/01/07/sepet-analizi-ve-birliktelik-kurallari/
22
3.3.4 Birliktelik Kurallarının Belirlenmesi İçin Kullanılan Algoritmalar
Start
Load Dataset
Support of every
item calculate
Yes No
Insert to frequent Remove item
Support >= min_sup
itemset
Determine No
Confidence >= min_conf Remove item
confidence
Yes
Strong rules
Stop
23
Algoritma, 1994 yılında Agrawal ve Srikant tarafından önerilmiştir.15
Veriler arasındaki ilişkiyi çıkarmak için geliştirilmiştir. Algoritma bottom-up
yaklaşımını kullanır ve her seferinde bir veriyi inceleyip diğer veriyle olan
ilişkisine bakar.
Temel yaklaşım olarak, eğer k tane elemanı olan öğe kümesi minimum destek
değerini sağlıyorsa, alt kümeleri de bu değeri sağlamalıdır.16
Kullanılacak veriseti Tabular ya da Transactional olarak tutulmalı ve kategorik
yapıda olmalıdır.
Tabular Veri Seti; verileri sütun bazlı tutan veri yapısıdır. Tablo 3.1’de
belirtilmiştir.
Kaynak: https://www.veribilimiokulu.com/associationrulesanalysis/
15
https://en.wikipedia.org/wiki/Apriori_algorithm
16
https://www.veribilimiokulu.com/associationrulesanalysis/
24
Transactional Veri Seti, Verilerin satır bazlı tutan veri yapısıdır. Tablo 3.2’de
belirtilmiştir.
Id Itemsets
100 Milk
100 Bread
100 Cheese
101 Eggs
… …
… …
108 Eggs
108 Cheese
109 Coffee
Kaynak: https://www.veribilimiokulu.com/associationrulesanalysis/
Itemset ; nitelik kümesidir.d tane eleman için 2d tane olasılıkta itemset vardır.
Kaynak: https://www.kdnuggets.com/2016/04/association-rules-apriori-algorithm-tutorial.html
25
𝐶𝑜𝑛𝑓𝑖𝑑𝑒𝑛𝑐𝑒 (𝑋, 𝑌) = (𝑋, 𝑌)𝑆𝑎𝑦𝚤𝑠𝚤⁄𝑋 ′ 𝑖 İç𝑒𝑟𝑒𝑛 İş𝑙𝑒𝑚 𝑆𝑎𝑦𝚤𝑠𝚤 (3.2)
Kaynak: https://www.kdnuggets.com/2016/04/association-rules-apriori-algorithm-tutorial.html
Asansör (Lift) ; X ürünü satıldığında Y ürününün satış oranındaki artışı ifade eder.
Denklem 3.3'te gösterilmiştir.
Apriori algoritması için değerler hesaplandıktan sonra data seti içindeki her
öğenin destek değerinin hesaplaması gerekir. Minimum destek değerinden daha
düşük değerde olan öğeler çıkarılır ve işlem sonunda tekli birliktelikler dikkate
alınarak ikili birliktelikler çıkarılır. Bulunmak istenen birliktelik kuralı sayısı
arttıkça aynı şekilde işlem devam ettirilir.
Makine öğrenmesi çok geniş bir kavramdır bu nedenle pek çok tekniğe uyacak
şekilde bükülebilir. Öneri sistemleri, büyük miktarda depolanan verilerden
faydalı içerikleri filtreleyerek kullanıcıya en anlamlı ve doğru ürünleri sunmayı
amaçlayan algoritmalardır. Algoritma veya veri türüne bağlı olarak denetimli
öğrenme de denetimsiz öğrenme de olabilir. Çıktıya bağlı olarak bir
sınıflandırma veya takviye öğrenimi de olabilir. Bu nedenle tek bir makine
öğrenmesi kategorisinde sınıflandıramayız. Aslında öneri sistemleri hedef
kullanıcıya öneri sunabilmek için makine öğrenmesi tekniklerinden herhangi
birini kullanabilen bilgi edinme alt alanı olarak düşünülebilir. Öneri motorları da
26
kullanıcının seçimlerini öğrenerek veri setindeki desenleri keşfeder bu
doğrultuda sonuçlar üretir. Daha çok veri, daha çok öğrenme sonuç olarak daha
verimli öneri sunma demektir.
Şekil 3.4’te belirtildiği üzere öneri sistemi kurmak için en çok kullanılan
metotlar şunlardır;
Tavsiye Sistemleri
27
Şekil 3.5: İçeriğe dayalı filtreleme sistemleri çalışma prensibi
Kaynak: https://visualbi.com/blogs/business-intelligence/data-science/data-
science-series-content-based-recommender-system-using-azure-databricks/
28
3.4.2 İşbirliğine Dayalı Filtreleme Sistemleri (Collaborative Filtering
Systems)
29
Şekil 3.6: İşbirliğine dayalı filtreleme sistemleri çalışma prensibi
Kaynak: https://visualbi.com/blogs/business-intelligence/data-science/data-science-series-
content-based-recommender-system-using-azure-databricks/
k : komşu kullanıcılar
u : kullanıcı
i: öğe
sim(u,v) : u ve v kullanıcıları arasındaki benzerliği
µu ve µv : u ve v kullanıcılarının değerlendirme puanlarının ortalaması
𝑁𝑢𝑖 (k) : i öğesi hakkında değerlendirmede bulunan, k yakın kullanıcılar kümesi
𝑁𝑢𝑖 (k)
İfade ederse u kullanıcısının i öğesi hakkındaki değerlendirme puanını tahmin
etmek için aşağıdaki eşitlik kullanılır: (Hameed, Jadaan, Ramachandram, 2012)
(Bobadilla, Ortega, Hernando, Alcala, 2011).
30
∑ 𝑠𝑖𝑚 (𝑢,𝑣)(𝑟𝑣𝑖 − 𝜇𝑣 )
𝑢 ∈𝑁𝑘
𝑢 (𝑖)
𝑟𝑢𝑖 = 𝜇𝑢 + ∑
(3.4)
𝑠𝑖𝑚 (𝑢,𝑣)
𝑢 ∈ 𝑁𝑘
𝑢 (𝑖)
𝐴 . 𝐵
Similarity=cos(𝜃)= (3.5)
‖𝐴‖ ‖𝐵‖
Kaynak : https://en.wikipedia.org/wiki/Cosine_similarity
∑𝑥∑𝑦
∑ 𝑥𝑦−
𝑁
Pearson(x,y)= (3.6)
2 2
√(∑ 𝑥 2 − (∑ 𝑥) ). (∑ 𝑦 2 −
(∑ 𝑦)
)
𝑁 𝑁
Kaynak: https://en.wikipedia.org/wiki/Pearson_correlation_coefficient
31
1⁄
(∑𝑛𝑖=1|𝑥𝑖 − 𝑦𝑖 |𝑝 ) 𝑝 (3.7)
p = 1, Manhattan Distance
p = 2, Euclidean Distance
Kaynak: https://en.wikipedia.org/wiki/Minkowski_distance
Manhattan Distance, grid yapısı gibi yollar arasında yatay veya dikey birer birer
gidilerek ölçülür. Minkowski Distance'da P değeri 1 alınarak hesaplanır.
Aşağıdaki formülde gösterilmiştir:
d = ∑𝑛𝑖=1|𝑥𝑖 − 𝑦𝑖 | (3.8)
d(x,y)=√∑𝑛𝑖=1(𝑥𝑖 − 𝑦𝑖 )2 (3.9)
Kaynak : https://en.wikipedia.org/wiki/Euclidean_distance
32
3.4.3 Hibrit Tavsiye Sistemleri
Hibrit sistemler, iki öneri sistemi ayrı ayrı uygulanıp daha sonra bu iki
yaklaşımın birleştirilmesiyle uygulanmaktadır. Hibrit sistemlerin saf
yaklaşımlardan daha doğru tavsiyeler verdiği literatürdeki çalışmalarda
gözlemlenmiştir. Daha doğru tavsiyeler sunmasının yanı sıra veri yetersizliği
gibi sorunların üstesinden gelmek için de hibrit yaklaşımlar tercih edilebilir.
Anasayfa önerilerinde kişiye özel tavsiyede bulunmak daha zordur. Kişi daha
önce bu sayfayı ziyaret etmişse geçmiş ziyaretlerine bakılarak bir öneride
bulunulabilir ancak tavsiye yazılımları ilk kez sayfaya giren bu müşterinin
verisine ulaşamaz. Bu sorun soğuk başlangıç problemi olarak bilinir (Cold start
problem). Bu tip durumlarla karşılaşılan sistemlerde fallback scenario yaklaşımı
uygulanır. Site içindeki genel kullanıcı faaliyetleri değerlendirilerek bir öneri
sunmaya çalışılır. 17 İşbirlikçi yaklaşımın temel problemlerinden biri olmakla
birlikte site içinde popüler bir ürün veya yeni öğe için kural bazlı bazı filtreler
eklenerek bu problem önlenmeye çalışılır.
17
https://www.digitalbursa.com/urun-oneri-sistemleri-ile-pazarlama/
33
İçerik tabanlı filtrelemeyle bu sorunu çözebilmektedir. Ziyaretçi bir süre ikincil
olurken, sistem ürünlerin meta verilerini kullanır. Örneğin yalnızca göz atmak
için sitede olan müşteriler giyimden elektroniğe kadar neredeyse tüm ürünlere
bakarken, sistem yalnızca ziyaret amaçlı orada bulunduğunu varsayar ve öneriler
için tıklama geçmişini kullanmaz.18
Bir başka yaklaşımda siteyi ilk kez ziyaret edenlerin kayıt olma ihtimallerinin
düşük olması sebebiyle kullanıcı çerezlerle tanımlanır. Ziyaretçi çerezleri siler
ya da engellerse bu sınıflandırılmış siteleri her ziyaret ettiklerinde yeni kullanıcı
olarak tanımlanır.19
İşbirlikçi filtrelemenin içerik bazlı filtrelemeye göre biraz daha karmaşık olması
yorumlanabilirlik sorununa yol açabilmektedir ( Interpretability).
18 19
https://www.yuspify.com/blog/cold-start-problem-recommender-systems/
20
https://medium.com/@rabinpoudyal1995/challenges-in-building-recommendation-systems-
719a4d3cf5b2
34
Eş anlamlılık (synonymy) da, bir kitabın farklı basımları işbirlikçi filtrelemeyle
ürün açıklanması kullanılmadığından gözden kaçabilir. Bu sorunu önlemek için
de verilerden gizli faktörleri tanımlayan bir algoritma olan gizli ortak filtreleme
ile çözülebilir.
Kaynak: https://medium.com/@kyasar.mail/recommender-systems-what-long-tail-tells-
91680f10a5b2
Mavi alanda kalan popüler ürünler rekabetçi ürünlerdir. Yeşil alanda kalan
uzun kuyruk alanındaki ürünler popüler olmayan ancak pazardaki ürünlerdir.
Çok satılan ürünlerin kar oranı düşüktür çünkü bütün rakipler aynı fiyat
bandından satmak zorunluluğundadır.
35
Yapılan araştırmalar sonucunda uzun kuyruk etkisini doğru yorumlayan
firmaların gelirlerinin büyük kısmı çok satılan ürünlerden ziyade uzun kuyruk
bölümünden gelmektedir. Az satılan ürünler doğru müşterilere önerilirse
karlılık artmaktadır.21
3.7 WEKA
Program ilk açıldığında ana menü Şekil 3.8 ‘de belirtildiği gibidir.
21
https://webrazzi.com/2009/09/09/tavsiye-sistemleri-long-tail-uzun-kuyruk-ile-karliligi-
artirmak/
22
https://medium.com/@kyasar.mail/recommender-systems-what-long-tail-tells-91680f10a5b2
23
http://bilgisayarkavramlari.sadievrenseker.com/2009/06/01/weka/
36
Şekil 3.8: Weka ana menü
37
Şekil 3.9: Preprocess panel
38
Şekil 3.11’de belirtildiği üzere Knowledge Flow kısmı; sürükle bırak veri
madenciliği modellerini kurulan kullanıcı grafik ara yüzü kısmıdır. 24
39
Şekil 3.12: Workbench panel
Şekil 3.13’te belirtildiği üzere Simple CLI kısmı; komut satırı ara yüzüdür.
Model çağırma ve parametre ayarlama komut istemi kısmından da yapılabilir.24
24
https://www.veribilimiokulu.com/association-rules-analysis-with-weka/
40
4.UYGULAMA
Kaynak: https://ugurozmen.com/crm/en-iyi-teklif-sss-3
41
İşin anlaşılması adımında yapmak istediğimiz çalışma belirlenmiş, işe nasıl bir
katkı sağlayacağı netleştirilmiştir.
Verinin anlaşılması adımında, veri ilgili kaynaklardan çekilerek, analizin
yapılacağı ortamlara yüklenmiştir. Verilerin sayısı, aralarındaki ilişki anlamaya
çalışılmıştır.
Verinin hazırlanması adımında, veri model oluşturma işlemine hazır hale
getirilmeye çalışılmış, eldeki hangi verinin hangi modelde kullanılabileceği
belirlenmiştir.
Modelleme adımında, modelleme sırasında kullanılacak teknik belirlenmiştir.
Değerlendirme ve canlıya alma adımları iş birimleri tarafından iş amaçları
açısından değerlendirilmediği için tez kapsamında oluşturulan model gerçek
hayat içinde kullanıma geçmemiştir.
42
Şekil 4.2: Veritabanına data import işlemi
43
Şekil 4.3: Banka verilerinin içeriği
44
DECLARE
SELECT
@columns += QUOTENAME(URUN_NO) + ','
FROM
(
SELECT DISTINCT URUN_NO FROM DataImport
) AS ÜRÜN
SELECT * FROM
(
SELECT MUSTERI_NO, URUN_NO FROM DataImport GROUP BY
MUSTERI_NO,URUN_NO
) t
PIVOT(
COUNT(URUN_NO)
FOR URUN_NO IN ('+ @columns + ')
)AS pivot_table;'
Şekil 4.4’de belirtildiği üzere sorgu sonucunda elde edilen ekran görüntüsü
aşağıdaki gibidir.
45
4.3 WEKA İLE APRİORİ ALGORİTMASININ UYGULANMASI
46
Tablo 4.1: Her Bir Ürün İçin
Bulunan min_support Değerleri
Ürün ID Min Support
URUN2 0.025641
URUN39 0.485966
URUN34 0.386891
URUN45 0.020027
URUN124 0.008496
URUN51 0.127143
URUN3 0.000607
URUN21 0.107116
URUN23 0.542861
URUN46 0.048703
URUN11 0.011379
URUN4 0.008648
URUN35 0.116523
URUN111 0.379609
URUN49 0.126536
URUN53 0.002731
URUN22 0.118647
URUN54 0.112123
URUN52 0.045213
URUN10 0.540586
URUN27 0.141557
URUN121 0.115005
URUN47 0.325747
URUN43 0.05811
URUN38 0.093764
URUN24 0.001972
URUN14 0.854043
URUN19 0.063875
URUN20 0.07404
URUN44 0.044151
URUN120 0.744804
URUN17 0.285996
URUN37 0.123653
URUN8 0.978152
URUN125 0.536034
URUN48 0.348961
URUN1 0.218631
URUN9 0.34623
URUN18 0.026703
47
Tablo 4.2: min support Değerinin
Ürünleri toplam sayıları da Tablo 4.3’te belirtildiği gibidir. Tablo 4.3’e göre en
çok alınan ürün Ürün 8, en az alınan ürün ise Ürün 3’tür.
48
Tablo 4.3: Ürünlerin Toplamı
Ürün ID Toplam
URUN2 169
URUN39 3203
URUN34 2550
URUN45 132
URUN124 56
URUN51 838
URUN3 4
URUN21 706
URUN23 3578
URUN46 321
URUN11 75
URUN4 57
URUN35 768
URUN111 2502
URUN49 834
URUN53 18
URUN22 782
URUN54 739
URUN52 298
URUN10 3563
URUN27 933
URUN121 758
URUN47 2147
URUN43 383
URUN38 618
URUN24 13
URUN14 5629
URUN19 421
URUN20 488
URUN44 291
URUN120 4909
URUN17 1885
URUN37 815
URUN8 6447
URUN125 3533
URUN48 2300
URUN1 1441
URUN9 2282
URUN18 176
dtype:int64
49
Datalar WEKA ortamına import edildikten sonra Numeric To Nominal
seçilmiştir. Weka’da Apriori algoritmasının uygulanabilmesi için datalar
nominal olmalıdır. Bu sebeple Filter bölümünden Numeric To Nominal filtresi
uygulanmıştır. Şekil 4.5’te gösterilmiştir.
50
Şekil 4.6: WEKA’da metriklerin yazılması
51
Tablo 4.4: Ürün14’e Benzeyen Ürünler
Benzerlik
Ürün ID Oranı
URUN14 1.000.000
URUN8 0.789825
URUN120 0.751951
URUN23 0.617501
URUN39 0.577945
URUN125 0.572819
URUN10 0.508999
URUN111 0.4721
URUN34 0.471919
URUN9 0.445109
URUN48 0.443289
URUN47 0.431233
URUN17 0.424817
URUN1 0.331182
URUN121 0.294497
Name:URUN14, dtype: float64
Benzer ürünleri alan müşterileri bulmak için yazılan sql sorgusuyla bu benzer
ürünleri alan müşteriler bulunmuştur.
52
4.5 APRİORİ ALGORİTMASI
53
Tablo 4.6: Hibrit Model İçin min_
54
select
YEAR(CONVERT(datetime, KONTRAT_BAS, 104)) AS YIL,
MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) AS AY,
(CASE
WHEN MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) BETWEEN 1 AND 3 THEN
'Q1'
WHEN MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) BETWEEN 4 AND 6 THEN
'Q2'
WHEN MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) BETWEEN 7 AND 9 THEN
'Q3'
WHEN MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) BETWEEN 10 AND 12 THEN
'Q4'
END) AS CEYREK,
COUNT(MONTH(CONVERT(datetime, KONTRAT_BAS, 104))) AS ADET
FROM DataImport
GROUP BY YEAR(CONVERT(datetime, KONTRAT_BAS, 104)),
MONTH(CONVERT(datetime, KONTRAT_BAS, 104)) ORDER BY YIL, AY
55
5.BULGULAR
56
Şekil 5.1: Müşteri benzerliği için yapılan Cosine Similarity sonuçlarının
bir kısmı
Ürün ID
URUN1
URUN10
URUN111
URUN120
URUN125
URUN14
URUN23
URUN27
URUN34
URUN8
URUN9
57
Bu ürünlere göre Hibrit sistemin bulduğu sonuçlar aşağıdaki gibidir;
[RelationRecord(items=frozenset({'URUN125', 'URUN111'}),
support=0.5105105105105106,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN111'}), items_add=frozenset({'URUN125'}),
confidence=0.9902912621359223, lift=1.4092606422703509),
OrderedStatistic(items_base=frozenset({'URUN125'}),
items_add=frozenset({'URUN111'}),
confidence=0.7264957264957265, lift=1.4092606422703509)]),
RelationRecord(items=frozenset({'URUN125', 'URUN111',
'URUN120'}), support=0.5035035035035035,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN111'}), items_add=frozenset({'URUN125', 'URUN120'}),
confidence=0.9766990291262134, lift=1.443376227954271),
OrderedStatistic(items_base=frozenset({'URUN125'}),
items_add=frozenset({'URUN111', 'URUN120'}),
confidence=0.7165242165242165, lift=1.4090702604482133),
OrderedStatistic(items_base=frozenset({'URUN111',
'URUN120'}), items_add=frozenset({'URUN125'}),
confidence=0.9901574803149606, lift=1.409070260448213),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120'}), items_add=frozenset({'URUN111'}),
confidence=0.7440828402366864, lift=1.443376227954271)]),
RelationRecord(items=frozenset({'URUN125', 'URUN111',
'URUN8'}), support=0.5105105105105106,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN111'}), items_add=frozenset({'URUN125', 'URUN8'}),
confidence=0.9902912621359223, lift=1.4092606422703509),
OrderedStatistic(items_base=frozenset({'URUN125'}),
items_add=frozenset({'URUN111', 'URUN8'}),
confidence=0.7264957264957265, lift=1.4092606422703509),
OrderedStatistic(items_base=frozenset({'URUN111',
'URUN8'}), items_add=frozenset({'URUN125'}),
confidence=0.9902912621359223, lift=1.4092606422703509),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN8'}), items_add=frozenset({'URUN111'}),
confidence=0.7264957264957265, lift=1.4092606422703509)]),
RelationRecord(items=frozenset({'URUN125', 'URUN10',
'URUN14', 'URUN120'}), support=0.5315315315315315,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN10', 'URUN120'}), items_add=frozenset({'URUN125',
'URUN14'}), confidence=0.7984962406015038,
lift=1.1835278106244842),
OrderedStatistic(items_base=frozenset({'URUN10',
'URUN14'}), items_add=frozenset({'URUN125', 'URUN120'}),
confidence=0.7996987951807228, lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120'}), items_add=frozenset({'URUN10', 'URUN14'}),
confidence=0.7855029585798817, lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN14'}), items_add=frozenset({'URUN10', 'URUN120'}),
confidence=0.7878338278931751, lift=1.1835278106244842)]),
58
RelationRecord(items=frozenset({'URUN125', 'URUN111',
'URUN120', 'URUN8'}), support=0.5035035035035035,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN111'}), items_add=frozenset({'URUN125', 'URUN120',
'URUN8'}), confidence=0.9766990291262134,
lift=1.443376227954271),
OrderedStatistic(items_base=frozenset({'URUN125'}),
items_add=frozenset({'URUN111', 'URUN120', 'URUN8'}),
confidence=0.7165242165242165, lift=1.4090702604482133),
OrderedStatistic(items_base=frozenset({'URUN111',
'URUN120'}), items_add=frozenset({'URUN125', 'URUN8'}),
confidence=0.9901574803149606, lift=1.409070260448213),
OrderedStatistic(items_base=frozenset({'URUN111',
'URUN8'}), items_add=frozenset({'URUN125', 'URUN120'}),
confidence=0.9766990291262134, lift=1.443376227954271),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120'}), items_add=frozenset({'URUN111', 'URUN8'}),
confidence=0.7440828402366864, lift=1.443376227954271),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN8'}), items_add=frozenset({'URUN111', 'URUN120'}),
confidence=0.7165242165242165, lift=1.4090702604482133),
OrderedStatistic(items_base=frozenset({'URUN111',
'URUN120', 'URUN8'}), items_add=frozenset({'URUN125'}),
confidence=0.9901574803149606, lift=1.409070260448213),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120', 'URUN8'}), items_add=frozenset({'URUN111'}),
confidence=0.7440828402366864, lift=1.443376227954271)]),
RelationRecord(items=frozenset({'URUN14', 'URUN39',
'URUN120', 'URUN23'}), support=0.5075075075075075,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN39'}), items_add=frozenset({'URUN14', 'URUN120',
'URUN23'}), confidence=0.7848297213622292,
lift=1.180790499459137),
OrderedStatistic(items_base=frozenset({'URUN120',
'URUN23'}), items_add=frozenset({'URUN14', 'URUN39'}),
confidence=0.757847533632287, lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN14',
'URUN39'}), items_add=frozenset({'URUN120', 'URUN23'}),
confidence=0.7996845425867508, lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN14', 'URUN120',
'URUN23'}), items_add=frozenset({'URUN39'}),
confidence=0.7635542168674698, lift=1.1807904994591367)]),
RelationRecord(items=frozenset({'URUN120', 'URUN14',
'URUN8', 'URUN125', 'URUN10'}), support=0.5315315315315315,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN10', 'URUN120'}), items_add=frozenset({'URUN125',
'URUN14', 'URUN8'}), confidence=0.7984962406015038,
lift=1.1835278106244842),
OrderedStatistic(items_base=frozenset({'URUN10',
'URUN14'}), items_add=frozenset({'URUN125', 'URUN120',
'URUN8'}), confidence=0.7996987951807228,
lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN10', 'URUN8'}),
59
items_add=frozenset({'URUN125', 'URUN14', 'URUN120'}),
confidence=0.7751824817518248, lift=1.1804989318141357),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120'}), items_add=frozenset({'URUN10', 'URUN14',
'URUN8'}), confidence=0.7855029585798817,
lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN14'}), items_add=frozenset({'URUN10', 'URUN120',
'URUN8'}), confidence=0.7878338278931751,
lift=1.1835278106244842),
OrderedStatistic(items_base=frozenset({'URUN10', 'URUN120',
'URUN8'}), items_add=frozenset({'URUN125', 'URUN14'}),
confidence=0.7984962406015038, lift=1.1835278106244842),
OrderedStatistic(items_base=frozenset({'URUN10', 'URUN14',
'URUN8'}), items_add=frozenset({'URUN125', 'URUN120'}),
confidence=0.7996987951807228, lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN125', 'URUN14',
'URUN120'}), items_add=frozenset({'URUN10', 'URUN8'}),
confidence=0.8094512195121952, lift=1.180498931814136),
OrderedStatistic(items_base=frozenset({'URUN125',
'URUN120', 'URUN8'}), items_add=frozenset({'URUN10',
'URUN14'}), confidence=0.7855029585798817,
lift=1.1818033970200328),
OrderedStatistic(items_base=frozenset({'URUN125', 'URUN14',
'URUN8'}), items_add=frozenset({'URUN10', 'URUN120'}),
confidence=0.7878338278931751, lift=1.1835278106244842)]),
RelationRecord(items=frozenset({'URUN120', 'URUN14',
'URUN8', 'URUN39', 'URUN23'}), support=0.5075075075075075,
ordered_statistics=[OrderedStatistic(items_base=frozenset({
'URUN39'}), items_add=frozenset({'URUN23', 'URUN14',
'URUN120', 'URUN8'}), confidence=0.7848297213622292,
lift=1.180790499459137),
OrderedStatistic(items_base=frozenset({'URUN120',
'URUN23'}), items_add=frozenset({'URUN14', 'URUN39',
'URUN8'}), confidence=0.757847533632287,
lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN14',
'URUN39'}), items_add=frozenset({'URUN23', 'URUN120',
'URUN8'}), confidence=0.7996845425867508,
lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN39', 'URUN8'}),
items_add=frozenset({'URUN14', 'URUN120', 'URUN23'}),
confidence=0.7848297213622292, lift=1.180790499459137),
OrderedStatistic(items_base=frozenset({'URUN14', 'URUN120',
'URUN23'}), items_add=frozenset({'URUN39', 'URUN8'}),
confidence=0.7635542168674698, lift=1.1807904994591367),
OrderedStatistic(items_base=frozenset({'URUN8', 'URUN120',
'URUN23'}), items_add=frozenset({'URUN14', 'URUN39'}),
confidence=0.757847533632287, lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN14', 'URUN39',
'URUN8'}), items_add=frozenset({'URUN120', 'URUN23'}),
confidence=0.7996845425867508, lift=1.1941477698716951),
OrderedStatistic(items_base=frozenset({'URUN14', 'URUN8',
60
'URUN120', 'URUN23'}), items_add=frozenset({'URUN39'}),
confidence=0.7635542168674698, lift=1.1807904994591367)])]
Bölüm 5’te bahsedildiği üzere verisetinin %70’i eğitim, %30’u test olarak
kullanılmıştır. Test müşterisi 272479359 için oluşturulan confusion matrix Tablo
5.2’de gösterilmiştir.
Confusion matrix test setindeki her bir test müşterisi için Ek-9’daki kod sonucunda
oluşturulmaktadır.
61
Gerçek Negatifler (TN): Gerçek değerin 0 ve tahmin edilen değerin de 0 olduğu
durumlardır.
Yanlış Pozitifler (FP): Gerçek değerin 0 ancak tahmin edilen değerin 1 olduğu
durumlardır.
Yanlış Negatifler (FN): Gerçek değerin 1 ancak tahmin edilen değerin 0 olduğu
durumlardır.
𝑇𝑃+𝑇𝑁
𝐷𝑜ğ𝑟𝑢𝑙𝑢𝑘 = (5.1)
𝑇𝑃+𝐹𝑃+𝑇𝑁+𝐹𝑁
Kaynak: https://www.geeksforgeeks.org/confusion-matrix-machine-learning/
𝑇𝑃
𝐻𝑎𝑠𝑠𝑎𝑠𝑖𝑦𝑒𝑡 = (5.2)
𝑇𝑃+𝐹𝑃
Kaynak: https://www.geeksforgeeks.org/confusion-matrix-machine-learning/
𝑇𝑃
𝐻𝑎𝑡𝚤𝑟𝑙𝑎𝑚𝑎 = (5.3)
𝑇𝑃+𝐹𝑁
Kaynak: https://www.geeksforgeeks.org/confusion-matrix-machine-learning/
2
𝐹1_𝑠𝑐𝑜𝑟𝑒 = 1 1 (5.4)
+
𝐻𝑎𝑠𝑠𝑎𝑠𝑖𝑦𝑒𝑡 𝐻𝑎𝑡𝚤𝑟𝑙𝑎𝑚𝑎
Kaynak: https://www.geeksforgeeks.org/confusion-matrix-machine-learning/
Ek – 8’deki kodlar yazılarak test müşterisi için Denklem 5.1, 5.2, 5.3, 5.4’teki
değerler hesaplanmıştır. Çıktı sonucu Şekil 5.2’deki gibidir.
Test müşterisi için Confusion matrix Şekil 5.3’teki gibidir.
62
Şekil 5.2: Hibrit sistemin test müşterisi 272479359 için performans
metrikleri
Şekil 5.2’de görüldüğü üzere hibrit sistemin Test Müşterisi 272479359 için
doğruluk oranı (accuracy) %73’tür. Hassasiyet oranı (precision) %75’tir.
Hatırlama oranı (recall) %73’tür. F1-score oranı %73’tür.
Actual
Confusion Matrix 0 1
0 TN = 4 FN= 3
Hibrit sistemin 998 toplam verisinin; %30 test müşterisiyle elde ettiği başarı
63
Şekil 5.4: Hibrit sistemin test seti için performans metrikleri
Şekil 5.4’te görüldüğü üzere hibrit sistemin test setindeki tüm müşteriler için
doğruluk oranı %67.8’dir.
Şekil 5.5: Hibrit Sistemin test seti için toplam hassasiyet oranı (precision)
Şekil 5.5’te görüldüğü üzere hibrit sistemin test seti için toplam hassasiyet oranı
(precision) Ek-10’da belirtilen kod sonucu %71.3’tür.
Şekil 5.6: Hibrit Sistemin test seti için toplam hatırlama oranı (recall)
Şekil 5.6’da görüldüğü üzere hibrit sistemin test seti için toplam hatırlama oranı
(recall) Ek-11’de belirtilen kod sonucu %77.4’tür.
64
Şekil 5.7: Hibrit Sistemin test seti için toplam f1-score oranı
Şekil 5.7’de görüldüğü üzere hibrit sistemin test seti için toplam f1-score oranı Ek-
12’de belirtilen kod sonucu %71.2’dir.
65
Şekil 5.8: WEKA’da bulunan kurallar
66
Algoritmasının 6590 verisinin; %30 test müşterisiyle elde ettiği başarı Ek-14 ‘teki
kod sonucunda Şekil 5.10’daki gibidir.
Şekil 5.10’da görüldüğü üzere Weka Apriori algoritmasının test seti için toplam
doğruluk oranı %37.3’tür.
Şekil 5.11: Weka Apriori algoritmasının test seti için toplam hassasiyet
oranı(precision)
Şekil 5.11’de görüldüğü üzere Weka Apriori algoritmasının test seti için toplam
hassasiyet oranı (precision) Ek-15’te belirtilen kod sonucu %67.5’tir.
67
Şekil 5.12: Weka Apriori algoritmasının test seti için toplam hatırlama
oranı (recall)
Şekil 5.12’de görüldüğü üzere Weka Apriori algoritmasının test seti için toplam
hatırlama oranı (recall) Ek-16’da belirtilen kod sonucu %62.6’dir.
Şekil 5.13: Weka Apriori algoritmasının test seti için toplam f1-score oranı
Şekil 5.13’te görüldüğü üzere Weka Apriori algoritmasının test seti için toplam f1-
score oranı Ek-17’de belirtilen kod sonucu %64.5’tir.
68
Şekil 5.15: Değerlendirme grafiği
DEĞERLENDİRME GRAFİĞİ
90
75 77.4
80 71.3 73 73 71.2 73
67.8 66 67.5
70 62.6 61 64.5
56 56
60
50
37.3
40
30
20
10
0
F1-Score
F1-Score
Hassasiyet(precision)
Hatırlama(recall)
Hassasiyet(precision)
Hatırlama(recall)
Doğruluk (accuracy)
Doğruluk (accuracy)
Hibrit Sistem Başarı Performansı(%) Weka Apriori Algoritması Başarı
Performansı(%)
Hibrit sistemin test setindeki her bir müşteri için toplam doğruluk oranı %67.8,
Weka Apriori algoritmasının test setindeki her bir müşteri için toplam doğruluk
oranı %37.3’tür. Hibrit sistem test setindeki her bir müşteri için %71.3 hassasiyet,
%77.4 hatırlama, %71.2 f1-score oranı yakalarken, Weka Apriori algoritması test
setindeki her bir müşteri için %67.5 hassasiyet, %62.6 hatırlama, %64.5 f1-score
oranı yakalamıştır.
69
5.4 SANKEY DİYAGRAMI İLE VERİ GÖRSELLEŞTİRME
70
6. TARTIŞMA VE SONUÇ
71
Gelecek çalışmalarda daha önce satın aldığı ürünü olmayan, sisteme yeni gelen
bir müşterinin verileri de eklenerek modelin başarısı artırılabilir. Sadece
bankacılık sistemi dataları kullanılmadan demografik bilgilerle de şehir,
cinsiyet, eğitim durumu gibi benzerliklere de bakılarak ürün önermesi
yapılabilir.
72
KAYNAKÇA
Kitaplar
Kotu V., Deshpande B., 2015. Predictive Analytics and Data Mining, Chapter 6:
Association Analysis, ss.195-216.
73
Süreli Yayınlar
Atalay M., Çelik E., 2017. Büyük Veri Analizinde Yapay Zeka ve Makine
Öğrenmesi Uygulamaları, 22. , Aralık 2017,
Çoban O., 2017. İltek Bülten Machine Learning, 12. İltek Günleri [online] 13 Mart
2017,https://issuu.com/oguzhancoban6/docs/__ltek_b__lten. [erişim tarihi:
05.02.2020] .
Taşcı S., 2015. İçerik Bazlı Medya Takip ve Haber Tavsiye Sistemi. [online] 11
Haziran 2015,https://docplayer.biz.tr/18224823-Icerik-bazli-medya-takip-ve-
haber-tavsiye-sistemi-content-based-media-tracking-and-news-recommendation-
system.html. [erişim tarihi: 13.03.2020] .
Utku A., Akçayol A., 2017. Tavsiye Sistemlerinde Büyük Verinin Kullanımı
Üzerine Kapsamlı Bir İnceleme , Marmara Fen Bilimleri Dergisi, 4: 339-357.
[online] 2018, https://dergipark.org.tr/tr/download/article-file/624359 . [erişim
tarihi: 13.03.2020] .
Utku A., Akçayol A., 2017. Öğrenebilen ve Adaptif Tavsiye Sistemleri İçin
Karşılaştırmalı ve Kapsamlı Bir İnceleme , Erciyes Üniversitesi Fen Bilimleri
EnstitüsüDergisi, Cilt 33, Sayı 3. [online]
2017,https://dergipark.org.tr/tr/download/article-file/437577 [erişim tarihi:
13.03.2020] .
74
Diğer Yayınlar
Abdullah W., (2019). E-Ticaret için Ürün Tavsiye Sistem Geliştirmesi. Yüksek
Lisans Tezi. İstanbul: İstanbul Ticaret Üniversitesi.
Agrawal R., Imielinski T., Swami A., 1993. Mining Association Rules Between
Sets of Items in Large Databases [online], ResearchGate,
https://www.researchgate.net/publication/200043124_Mining_Association_Rules
_Be
tween_Sets_of_Items_in_Large_Databases_SIGMOD_Conference . [erişim tarihi:
09.02.2020].
Akbulut S., (2006). Veri Madenciliği Teknikleri ile Bir Kozmetik Markanın
Ayrılan Müşteri Analizi ve Müşteri Segmentasyonu. Yüksek Lisans Tezi. Ankara:
Gazi Üniversitesi.
75
Başarslan M., (2017). Telekomünikasyon Sektöründe Müşteri Kayıp Analizi.
Yüksek Lisans Tezi. Düzce: Düzce Üniversitesi.
Beser S., 2018. Makine Öğrenmesi Türkçe Kaynak: Makine Öğrenmesine Giriş,
Neden Makine Öğrenmesi Kullanıyoruz?
https://github.com/SerayBeser/makine-ogrenmesi/blob/master/README.md#1
Cavique L., 2007. A Scalable Algorithm For The Market Basket Analysis, Journal
of Retailing and Consumer Services, Volume 14, Issue 6, 6 November 2007
Lisboa, Portugal, ss. 400-407.
Chiang W., 2011. To Mine Association Rules of Customer Values Via A Data
Mining Procedure with Improved Model: An Empirical Case Study, Expert System
with Aplications, Volume 38, 2011 Aletheia University, Taiwan, ss. 1716-1722.
Chiang D., Wang Y., Chen S., 2010. Analysis On Repeat-Buying Patterns,
Knowledge- Based Systems, Volume 23, Issue 8, December 2010 Taipei, Taiwan,
ss. 757-768.
Gülce D., (2015). İş Zekası Uygulamalarında Pazar Sepet Analizi. Yüksek Lisans
Tezi. İstanbul: İstanbul Üniversitesi.
76
Gürgen G., (2008). Birliktelik Kuralları ile Sepet Analizi ve Uygulaması. Yüksek
Lisans Tezi. İstanbul: Marmara Üniversitesi.
Hong T., Horng C., Wu C., Wang S., 2009. An Improved Data Mining Approach
Using Predictive Itemsets, Expert System with Applications, Volume 36, Issue 1,
January 2009 Kaohsiung, Taiwan, ss. 72-80.
Hsieh N., 2004. An integrated data mining and behavioral scoring model for
analyzing bank customers, Expert Systems with Applications, Volume 27, Issue 4,
November 2004 Taipei, Taiwan, ss. 623-633.
Jian Y., Shang J., Liu Y., 2010. Maximizing Customer Satisfaction Through an
Online Recommendation System: A novel associative classification model,
Decision Support System, Volume 48, Issue 3, February 2010 Anhui, China, ss.
470-479.
Kaur M., Kang S., 2016. Market Basket Analysis: Identify the Changing Trends of
Market Data Using Association Rule Mining, Procedia Computer Science, Volume
85, 2016 Sangrur, India, ss. 78-85.
Koçtürk Y., (2010). Veri Madenciliğinde Bağlılık. Yüksek Lisans Tezi. İstanbul:
İstanbul Teknik Üniversitesi.
Liu D., Lai C., Lee W., 2009. A Hybrid of Sequential Rules and Collaborative
Filtering For Product Recommendation, Information Sciences, Volume 179, Issue
20, 29 September 2009 Hsinchu, Taiwan, ss. 3505-3519.
77
Lee D., Park S., Moon S., 2013. Utility-Based Association Rule Mining: A
Marketing Solution For Cross-Selling, Expert System with Applications, Volume
40, Issue 7, 1 June 2013 Seoul, Korea, ss. 2715-2725.
Lee C. H., Kim Y. H., Rhee P. K., 2001. Web Personalization Expert With
Combining Collaborative Filtering and Association Rule Mining Technique,
Expert System with Applications, Volume 21, Issue 3, October 2001, South Korea,
ss. 131-137.
Liao S., Hsieh C., Huang S., 2008. Mining Product Maps For New Product
Development, Expert System with Applications, Volume 34, Issue 1, January 2008
Taipei, Taiwan, ss. 50-62.
https://zeynepaygun.wordpress.com/2016/01/07/sepet-analizi-ve-birliktelik-
kurallari/ [erişim tarihi : 09.02.2020].
78
Samuel A., Wikipedia, https://en.wikipedia.org/wiki/Arthur_Samuel [erişim tarihi
03.02.2020].
Sivri E., (2015). Veri Madenciliği/E-Ticaret Sitesi İçin Ürün Tavsiye Sistemi
Geliştirilmesi. Yüksek Lisans Tezi. İstanbul: İstanbul Ticaret Üniversitesi.
Suh E., Lim S., Hwang H., Kim S., 2004. A Prediction Model For The Purchase
Probability of Anonymous Customers to Support Real Time Web Marketing: A
Case Study, Expert Systems with Applications, Volume 27, Issue 2, 2 August 2004,
Korea, ss. 245-255.
Şen K., (2014). Bankacılıkta Müşteri Terk Modeli. Yüksek Lisans Tezi. İstanbul:
Yıldız Teknik Üniversitesi.
Thabtah F., Cowling P., Hammoud S., 2006. Improving Rule Sorting, Predictive
Accuracy and Training Time in Associative Classification, Expert Systems with
Applications, 2 August 2006, UK, ss. 414-426.
Uslu M., 2013. Birliktelik Kuralları Kullanılarak Pazar Sepet Analizi ( Market
Basket Analysis Using Association Rules)[online],
https://www.slideshare.net/uslumetin/birliktelik-kurallar-kullanlarak-pazar-sepeti-
analizi-market-basket-analysis-using-association-rules [erişim tarihi 9.02.2020].
79
Veri Madenciliği Nedir?,
https://www.quora.com/Which-companies-use-recommender-recommendation-
systems.[erişim tarihi 09.02.2020].
Wen C., Liao S., Chang W., Hsu P., 2012. Mining Shopping Behavior In The
Taiwan Luxury Products Market, Expert System with Applications, Volume 39,
Issue 12, 15 September 2012 Taipei, Taiwan, ss. 11257-11268.
Weng C., 2017. Revenue Prediction By Mining Frequent Itemsets With Customer
Analysis, Engineering Applications of Artifical Intelligence, Volume 63, August
2017 Taichung, Taiwan, ss. 85-97.
Yüksel T., (2019). Dağıtık Sistemlerde Birliktelik Kuralları ile Sepet Analizi.
Yüksek Lisans Tezi. İstanbul: İstanbul Aydın Üniversitesi.
80
EKLER
81
Ek A.1 min_support değerinin hesaplanması
import pandas as pd
import numpy as np
df = pd.read_excel("C:\\Users\ekin\Desktop\ÜrünlerinToplamıSupport.xls")
df
sum_row=df[["URUN2","URUN39","URUN34","URUN45","URUN124","U
RUN51","URUN3","URUN21","URUN23","URUN46","URUN11","URUN4"
,"URUN35","URUN111","URUN49","URUN53","URUN22","URUN54","U
RUN52","URUN10","URUN27","URUN121","URUN47","URUN43","URU
N38","URUN24","URUN14","URUN19","URUN20","URUN44","URUN120
","URUN17","URUN37","URUN8","URUN125","URUN48","URUN1","UR
UN9","URUN18"]].sum()
sum_total = sum_row.sum()
divide = sum_total/6591
min_support = divide/39
min_support
for i in sum_row:
i= i/6591
print(i)
82
Ek A.2 Ürün 14’e benzeyen 15 adet ürün
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse
data = pd.read_excel('C:\\Users\ekin\Desktop\Filtering.xlsx')
data_items = data.drop('MUSTERI_NO', 1)
magnitude = np.sqrt(np.square(data_items).sum(axis=1))
data_items = data_items.divide(magnitude, axis='index')
def calculate_similarity(data_items):
data_sp = sparse.csr_matrix(data_items)
similarities = cosine_similarity(data_sp.transpose())
sim = pd.DataFrame(data=similarities, index= data_items.columns, columns=
data_items.columns)
return sim
data_matrix = calculate_similarity(data_items)
data_matrix.loc['URUN14'].nlargest(15)
Kaynak: https://medium.com/radon-dev/item-item-collaborative-filtering-with-binary-or-unary-data-
e8f0b465b2c3
83
Ek A.3 Cosine Similarity benzerliğinden yararlanılarak bulunan benzer
müşteriler
import pandas as pf
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
musteriUrun = pf.read_excel("C:\\Users\ekin\Desktop\musteri_urun.xlsx")
musteriListesi = musteriUrun['MUSTERI_NO'].unique().tolist()
urunListesi = musteriUrun['URUN_ID'].unique().tolist()
musteriUrun
musteriUrunListesi = []
kosinusDizisi = []
musteriSayisi = int(1000)
urunSayisi = int(10)
for musteri in musteriListesi[:musteriSayisi]:
musteriUrunListesi = []
for urun in urunListesi[:urunSayisi]:
kontrol = musteriUrun.where(musteriUrun['MUSTERI_NO'] ==
int(musteri)).where(musteriUrun['URUN_ID'] == int(urun)).count()
if kontrol.MUSTERI_NO and kontrol.URUN_ID:
musteriUrunListesi.append(int(urun))
else:
musteriUrunListesi.append(int(0))
kosinusDizisi.append([int(musteri), musteriUrunListesi])
oran = []
for i in range(musteriSayisi):
for j in range(musteriSayisi):
if j+1 < int(musteriSayisi):
a = np.array(kosinusDizisi[i][1])
b = np.array(kosinusDizisi[j][1])
if (kosinusDizisi[i][0] != kosinusDizisi[j][0]):
84
oran.append([kosinusDizisi[i][0],kosinusDizisi[j][0],
cosine_similarity(a.reshape(1,urunSayisi), b.reshape(1,urunSayisi))])
oran
85
Ek A.4 Benzer ürünleri alan müşteriler için verinin Apriori algoritmasına
uygun hale getirilmesi
import pandas as pf
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
data = pf.read_excel('C:\\Users\ekin\Desktop\data.xlsx')
musteriUrun = pf.read_excel('C:\\Users\ekin\Desktop\musteri_urun.xlsx')
urunListesi = musteriUrun['URUN_ID'].unique().tolist()
musteri1Listesi = data['MUSTERI1'].unique().tolist()
musteri2Listesi = data['MUSTERI2'].unique().tolist()
#urunListesi = musteriUrun['URUN_ID'].unique().tolist()
musteri2Listesi.append(musteri1Listesi[0])
urunSayisi = int(15)
musteriUrunListesi = []
aprioriDizisi = []
for musteri in musteri2Listesi:
musteriUrunListesi = []
for urun in urunListesi[:urunSayisi]:
kontrol = musteriUrun.where(musteriUrun['MUSTERI_NO'] ==
int(musteri)).where(musteriUrun['URUN_ID'] == int(urun)).count()
if kontrol.MUSTERI_NO and kontrol.URUN_ID:
musteriUrunListesi.append(int(1))
else:
musteriUrunListesi.append(int(0))
aprioriDizisi.append([int(musteri), musteriUrunListesi])
aprioriDizisi
86
Ek A.5 Hibrit model için min_support değerinin hesaplanması
import pandas as pd
import numpy as np
df = pd.read_excel("C:\\Users\ekin\Desktop\ÜrünlerinToplamı2.xls")
df
sum_row=df[["URUN111","URUN14","URUN10","URUN120","URUN39","
URUN8","URUN47","URUN34","URUN23","URUN9","URUN121","URUN
48","URUN17","URUN125","URUN1"]].sum()
sum_total = sum_row.sum()
divide = sum_total/999
min_support = divide/15
min_support
for i in sum_row:
i= i/999
print(i)
87
Ek A.6 Apriori algoritması
import numpy as np
import pandas as pd
from apyori import apriori
book_data=pd.read_excel("C:\\Users\ekin\Desktop\Azalan.xlsx",header=None
)
book_data
book_data.loc[0,~book_data.loc[0,:].isnull()]
items=[]
for i in np.arange(book_data.shape[0]):
items.append([str(book_data.values[i,j]) for j in range(0,15)])
for row in items:
for cell in row:
if cell=='0':
row.remove(cell)
else:continue
items
final_rule=apriori(items,min_support=0.5,min_confidence=0.7,min_lift=1.18,
min_length=3)
final_result=list(final_rule)final_result=list(final_rule)
len(final_result)
88
Ek A.7 Sankey diyagramı
ceyrekSatisMiktari.append(data.where(data['CEYREK']=="Q1").where(data['
YIL'] == i)['ADET'].sum())
ceyrekSatisMiktari.append(data.where(data['CEYREK']=="Q2").where(data['
YIL'] == i)['ADET'].sum())
ceyrekSatisMiktari.append(data.where(data['CEYREK']=="Q3").where(data['
YIL'] == i)['ADET'].sum())
89
ceyrekSatisMiktari.append(data.where(data['CEYREK']=="Q4").where(data['
YIL'] == i)['ADET'].sum())
label.append("Toplam Satış")
temp = ""
for yil in yilListesi:
for j in range(0, len(data['CEYREK'].unique().tolist())):
if (temp == yil):
source.append(source[len(source) - 1])
dictSource[yil] = source[len(source) - 1]
else:
source.append(source[len(source) - 1] + 1)
dictSource[yil] = source[len(source) - 1]
temp = yil
temp = ""
for ceyrek in data['CEYREK'].unique().tolist():
if(temp == ceyrek):
source.append(source[len(source) - 1])
dictSource[ceyrek] = source[len(source) - 1]
else:
source.append(source[len(source) - 1] + 1)
dictSource[ceyrek] = source[len(source) - 1]
90
temp = ceyrek
for yil in yilListesi:
target.append(dictSource[str(yil)])
for i in range(0, len(yilListesi)):
for ceyrek in data['CEYREK'].unique().tolist():
target.append(dictSource[ceyrek])
red = str(int(r.uniform(0, 255)))
green = str(int(r.uniform(0,255)))
blue = str(int(r.uniform(0, 255)))
temp = ""
for i in range(0, len(yilListesi)):
if temp != yilListesi[i]:
temp = yilListesi[i]
red = str(int(r.uniform(0, 255)))
green = str(int(r.uniform(0,255)))
blue = str(int(r.uniform(0, 255)))
for i in range(0,len(data['CEYREK'].unique().tolist())):
color.append("rgb(255, 0, 0)")
colorLine.append("rgba(255, 0, 0, 0.3)")
91
value = yilSatisMiktari + ceyrekSatisMiktari
sankey = dict(
type='sankey',
node = dict(
pad = 15,
thickness = 20,
line = dict(
color = "black",
width = 0.5
),
label=label,
color=color
),
link = dict(
source = source,
target = target,
value = value,
color = colorLine ))
fig = dict(data=[sankey])
py.offline.iplot(fig, validate=False)
92
Ek A.8 Hibrit sistemin test müşterisi için performansı
import pandas as pd
import seaborn as sn
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
predicted = [1,1,1,1,1,1,0,0,1,0,0,0,0,1,0]
actual = [1,1,1,1,0,1,0,1,1,1,0,0,0,1,1]
matrix = confusion_matrix(predicted,actual, labels=[0,1])
print('Confusion matrix : \n',matrix)
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
print('Outcome values : \n', tp , fn , fp , tn)
matrix = classification_report(predicted,actual,labels=[0,1])
print('Classification report : \n',matrix)
93
EK A.9 %30 Test verisiyle hibrit sistemin doğruluk oranı performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import balanced_accuracy_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Matris.xlsx')
kayitSayisi = 300
aprioriListesi = data.values.tolist()
actualListe = []
predicted =[1,1,1,1,1,1,0,0,1,0,0,0,0,1,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
94
Ek A.10 %30 Test verisiyle hibrit sistemin hassasiyet oranı performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Matris.xlsx')
kayitSayisi = 300
aprioriListesi = data.values.tolist()
actualListe = []
predicted =[1,1,1,1,1,1,0,0,1,0,0,0,0,1,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
#print('Classification report : \n',matrix)
score = score + precision_score(predicted, actual)
print('Toplam hassasiyet oranı:',score / len(actualListe));
95
Ek A.11 %30 Test verisiyle hibrit sistemin hatırlama oranı performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import recall_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Matris.xlsx')
kayitSayisi = 300
aprioriListesi = data.values.tolist()
actualListe = []
predicted =[1,1,1,1,1,1,0,0,1,0,0,0,0,1,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
#print('Classification report : \n',matrix)
score = score + recall_score(predicted, actual)
print('Toplam hatırlama oranı:',score / len(actualListe));
96
Ek A.12 %30 Test verisiyle hibrit sistemin f1-score oranı performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import f1_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Matris.xlsx')
kayitSayisi = 300
aprioriListesi = data.values.tolist()
actualListe = []
predicted =[1,1,1,1,1,1,0,0,1,0,0,0,0,1,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
#print('Classification report : \n',matrix)
score = score + f1_score(predicted, actual)
print('Toplam f1-score oranı:',score / len(actualListe));
97
Ek A.13 Weka Apriori algoritmasının test müşterisi için performansı
import pandas as pd
import numpy as np
import seaborn as sn
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import average_precision_score
from sklearn.metrics import balanced_accuracy_score
predicted =
[1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]
actual =
[0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0]
matrix = confusion_matrix(predicted,actual, labels=[0,1])
print('Confusion matrix : \n',matrix)
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
print('Outcome values : \n', tp , fn , fp , tn)
matrix = classification_report(predicted,actual,labels=[0,1])
print('Classification report : \n',matrix)
98
Ek A.14 %30 Test verisiyle Weka Apriori algoritmasının performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import balanced_accuracy_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Wekatestmetrik.xlsx')
kayitSayisi = 1978
aprioriListesi = data.values.tolist()
actualListe = []
predicted=
[1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
print('Classification report : \n',matrix)
score = score + balanced_accuracy_score(predicted, actual)
print('Toplam başarı:', score / len(actualListe));
99
Ek A.15 %30 Test verisiyle Weka Apriori algoritmasının hassasiyet oranı
performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Wekatestmetrik.xlsx')
kayitSayisi = 1978
aprioriListesi = data.values.tolist()
actualListe = []
predicted =
[1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
score = score + precision_score(predicted, actual, average='weighted')
print('Toplam hassasiyet oranı:', score / len(actualListe));
100
Ek A.16 %30 Test verisiyle Weka Apriori algoritmasının hatırlama oranı
performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import recall_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Wekatestmetrik.xlsx')
kayitSayisi = 1978
aprioriListesi = data.values.tolist()
actualListe = []
predicted =
[1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
score = score + precision_score(predicted, actual, average='weighted')
print('Toplam hatırlama oranı:', score / len(actualListe));
101
Ek A.17 %30 Test verisiyle Weka Apriori algoritmasının f1-score oranı
performansı
import pandas as pd
import seaborn as sn
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import f1_score
data = pd.read_excel('C:\\Users\ekin\Desktop\Wekatestmetrik.xlsx')
kayitSayisi = 1978
aprioriListesi = data.values.tolist()
actualListe = []
predicted=
[1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]
for apriori in aprioriListesi[:kayitSayisi]:
apriori.pop(0)
actualListe.append(apriori)
score = 0
for actual in actualListe:
matrix = confusion_matrix(predicted,actual, labels=[0,1])
tp , fn , fp , tn = confusion_matrix(predicted,actual,labels=[0,1]).reshape(-1)
matrix = classification_report(predicted,actual,labels=[0,1])
score = score + f1_score(predicted, actual, average='weighted')
print('Toplam f1-score oranı:', score / len(actualListe));
102
ÖZGEÇMİŞ
Adres: Mecidiyeköy/İstanbul
103