17 Eylül 2017 Pazar

Kobiler İçin Knime ile Kayıp Müşteri Analizi

Kobiler için Knime ile Kayıp Müşteri Analizi

Knime Churn Analysis


Kobi'lerimizin dış ticaret içinde yararlanabileceği bir başka analiz olan "Churn Analysis" yani Kayıp Müşteri Analizinden bahsetmek istiyorum.

Churn Analizi Nedir? Müşteri Kayıp Oranı (Churn Rate), müşterilerin bir ürünü ya da hizmeti kullanmayı bırakma olasılığı olarak tanımlanabilir.

Bildiğiniz gibi yeni müşteri bulmak bir sorun, elindeki müşteriyi tutmak ayrı bir sorun olarak karşımıza çıkmakta. Müşteri verilerini, bizlerden aldıkları hizmetler, yaptıkları şikayetleri, şikayetlerin kaç günde çözüldüğü bilgisini ne kadar derin tutarsak, bizden ayrılması muhtemel müşteriler bulma ve o müşterilere özel teklifler yapıp, onları sistem içinde tutma şansımız o kadar artacaktır.

Özellikle abone bazında iş yapan firmalar bu analizi kullanmakta ve verim elde etmektedirler. 

Bu gün çok basit olarak Knime üzerinden kayıp müşteri analizi nasıl yapılır onu göstermeye çalışacağım. Bu konuyu takip edebilmeniz için temel Knime bilgisine sahip olmanız lazım. Bu anlatım için, knime workflow, node sistemini bilmeniz yeterli.İlk yapmamız gereken Knime programını açmak. Sonrasında yeni bir work flow oluşturmak.
Burada örnek dosyamızı tanımlamamız lazım. Öncelikle onu "File Reader" node ile tanımlıyoruz. churn.csv dosyası aşağıdaki ayarlar ile çağrılıyor. Bu ayarları her node için, node üstüne gelerek sağ tıkla "Configure" kısmından ayarlayabilirsiniz.





Yukarıdaki ayarları yaptıktan sonra "Apply" diyelim. Sonrasında node üstüne gelip sağ tıklama ile açılan pencereden "Execute" komutu ile çalıştıralım. Şu anda artık 3000 den fazla veriye sahip olan setimiz yüklenmiştir.

Veriyi inceleyelim; File Reader üzerinde sağ tık ile en aşağıda olan "File Table" tıklayalım. Açılan sayfa bize verimizi, ve içeriğini gösterecektir. "Spec" üst bölmesine bastığımızda;


Veriyi oluşturan kolonlar ve kolon çeşitlerini, her kolonun aldığı en az ve en fazla değerli göreceksiniz. Veriye baktığımızda verinin bir telefon operatörüne ait olduğunu görmekteyiz. Verinin en altında ise Müşterinin Kayıp müşteri olup olmadığı ile ilgili bölüm var. "Churn?" kolonu bize kayıp müşterileri vermekte. Burada "True" cevabı bize müşteriyi kaybettiğimizi söylemekte. 

Burada bir önemli konu var, bu analizin çalışması için Churn? kısmının "String" olması gerekmekte. Bazen bizler verileri girerken bu bölümü numara olarak da doldurabiliriz. 0-1 verebiliriz. Öyle bir durumda veri "String" değil ise ona string yapmamız gerekmekte. Bizim veride öyle bir sorun yok.




İkinci aşama verimizi daha anlaşılır kılma için onu renklendiriyoruz. Yani Churn? kolonu üstünden veriyi renklendireceğiz. Bunun için önce "Color Manager" node yüklüyoruz. İki node arasını da birbirine bağlıyoruz.



Kolon kısmından "Churn?" seçip atayacağımız renkleri belirliyoruz. "True" sistemden çıkan müşterileri temsil ettiği için, ben kırmızı rengi seçtim. Seçimleri iki değer içinde seçip, "Apply" basıyoruz.

Bir sonraki aşama kayıp müşteri analizi yapabilmemiz için, karar ağacı oluşturacağız. Bunun için öncelikle verimizi ikiye bölmeli, bir kısmı ile veri öğrenilmeli, diğer kısmı ile de öğrenilen algoritma test edilmeli. Bunun için veriyi ikiye ayıracağız. Bunu bizim adımıza "Partitioning" node ekliyoruz.



Color Manager nodu ile Partitioning nodu yukarıda gösterilen şekilde bağlıyoruz. Bağlantı yapıldıktan sonra, node artık ayarlamaya hazır. Ayarlardan verimizi %80 öğrenme, %20 test seti olarak ikiye ayırıyoruz.




Artık verimiz ikiye ayrıldı. Partitioning Node baktığımızda iki adet çıkışı olduğunu görüyoruz. Üsteki küçük üçgen %80 kısmın çıkışı, alttaki üçgen ise %20 veri çıkışı temsil etmekte. Artık karar ağacı öğrenmesini gerçekleşmek için "Decision Tree Learner" node yükleyebiliriz. Bu mode bizim makinemizin eldeki veriler ile öğrenmesini sağlayacak. Onun için bu node "Partitioning" node üst bölümüne bağlanmalı.





Node ayarlarını aşağıdaki gibi yapıyoruz:



Apply deyip, node çalıştırıyoruz. %80 verimiz ile yapılan "Churn?" kolonu temel alınarak yapılan öğrenme "Execute" ile çalıştırdığında gerçekleşmiş olacak.

Çalıştırma bittiğinde node üzerinde sağ tıklayarak karar ağacımızı "Decision Tree View" sekmeksinden görebiliriz.



Karar ağacımız yukarıda görülmekte. Görüldüğü gibi + işaretlerine basılarak, aşağıya doğru dallanmakta.
Şimdi makinemizin öğrendiği karar ağacı şemasının ne kadar doğru olduğunu test etmemiz gerekmekte. Bunun içinde test için ayırdığımız %20 verimizi kullanacağız.

"Decision Tree Predictor" nodu bize bu test imkanını veriyor. Node yükleyelim. Node giriş kısmı iki bölümden oluşmakta. "Decision Tree Learner" ile bu node mavi kısımlarından birbirine bağlayalım. "Decision Tree Predictor" node alt girişi boş kaldı. Bunu da "Partitioning" node alt kısmı ile bağlayalım. Node üzerinde hiçbir değişiklik yapmadan nodu çalıştıralım.

Şu anda tahminleri ve yaptığımız öğrenmenin doğruluğuna bakabiliriz. Görüleceği üzerine bu öğrenme verimize üç kolon daha ekledi.





Elde ettiğimiz öğrenmenin ne kadar başarılı olduğunu öğrenmek için "Score" node ekliyoruz ve sonuca bağlıyoruz. Score node içinde ilk kolonu "Tahmin edilen Churn" ikinci kolonu ise gerçek "Churn" girip node çalıştırıyoruz.



Şimdi node üzerine sağ tıklayıp; Accuracy Statistic kısmında verimiz değerlendirebiliriz. Bu tabloda yapılan öğrenmenin eldeki veriler ile %88,4 doğruluk ile çalıştığını tespit etmiş bulunmaktayız.



Buraya kadar öğrenme gerçekleşti ve test edildi. Gerçek hayatta ne işimize yarayacak diye sorduğunuzu duyar gibiyim.

Artık elimizde bir algoritma var, bu algoritma - öğrenmeyi mevcut müşterilerimize uygulayıp kayıp müşteri olma olasılığı olup olmadığını görebiliriz. "JPMML Classifer" nodu getirip, "Decision Tree Learner" ile bağlıyoruz ( Mavi-Mavi).



Sonrasında gerçek sorgu yapmak istediğimiz müşteri bilgilerini bir excel veya csv dosyası ile yüklüyoruz. Bu veri içinde herhangi bir churn verisi yok.



Bu müşteri bilgilerini "JPMML Classifer" bağlıyoruz ve çalıştırıyoruz. "JPMML" node sonuçlarına baktığımızda;



Öğrenme algoritmasının çalıştığı, mevcut müşteri için tahminleme yapıldığını, bu örnek için %95 olasılık ile müşterinin kayıp müşteri olacağı bilgisi bize veriliyor. Artık bu müşteri için pazarlama departmanı önlem alabilir, kayıp müşteri olmaması adına değişik teklifler sunabilir.

Gerçek hayatta bu bilgiler müşteri ekranında beliriyor. Bunu da öğrenme yaptıktan sonra müşteri ekranına eklemek çok kolay.
Umarım yararlı olmuştur.
Veri setleri için lütfen benim ile iletişime geçiniz.



12 Eylül 2017 Salı

R ile RFM analizi

R Studio; Kobiler için: 5 Satır Kod ile RFM Analizi

Kobi_RStudio_RFM
Kobilerin e-ticaret içinde kullanabilecekleri basit analizlere yer vermeye devam ediyorum. 

Bu yazımda RFM analizinin detaylarına girmek istemiyorum. Lakin basit bir şekilde Müşteri İlişkileri Yönetimi açısından son derece kolay ve yararlı bir analiz olduğunu vurgulamak isterim.

RFM; Recency(Güncellik), Frequency(Frekans) ve Moneatry(Tutar) kelimelerinin kısaltması olup, müşteri bakımından en son ne zaman alışveriş yaptığını, bizden kaç kere alışveriş yaptığını ve toplamda bizlere kaç para kazandığını hesapladığımız bir analiz yöntemidir.

Hepimizin veri tabanında Müşteri ID, Müşteri Fatura No, Fatura tutarı ve Fatura tarihi bulunmakta. Bu veriler ile çok basit RFM analizi yapmak mümkün. Ben sizin için çok kısa R-Studio kodu yazdım. Umarım sizlere faydalı olur. İsteyen arkadaşıma analizde kullandığım veri setini gönderebilirim.

Kodumuz kısaca söyle;

##Aşağıdaki kod ile veri tabanını çağırıyoruz.


df <- read.table(file.choose(),header=F)



##Veri tabanındaki verilerden yukarıdaki veriler ile yeni bir data.frame oluşturuyoruz.
df <- as.data.frame(cbind(df[,1],df[,2],df[,3],df[,4]))
  
##Sonra ilgili satırlarımıza Müşteri ID için id, Müşteri Fatura Tarihi için data ve Müşteri Ödemesi için de payment olarak kolon isimlerini değiştiriyoruz. 

names <- c("id", "date", "NumberCd", "payment")
    
names(df) <- names
    
##Sonrasında date için format belirliyoruz.
      
df[,2] <- as.Date(as.character(df[,2]),"%Y%m%d")

### ilgili analiz için gerekli paketi indirip yüklüyoruz

install.packages("devtools") # if you have not installed "devtools" package
devtools::install_github("hoxo-m/easyRFM")
library(dplyr)
require(easyRFM)

####Bu paketi çalıştırmak için sadece "rfm_auto("datasetiniz") yeterli

result <- rfm_auto(df)
head(result)

###Artık aşağıdaki kodlar ile günlük olarak müşteri analizi yapabilirsiniz.

degerli_musteri <- result$get_sliced_rfm(R_slice=5:6, F_slice=4:5, M_slice=4:5)
gelistirebilir_musteri <- result$get_sliced_rfm(R_slice=1:2, F_slice=1:2, M_slice=4:5)
sıfırınaltında_musteri <- result$get_sliced_rfm(R_slice=1:2, F_slice=1:2, M_slice=1:2)
kayıp_musteri<- result$get_sliced_rfm(R_slice=1:2, F_slice=2:3, M_slice=4:5)
azalan_musteri<- result$get_sliced_rfm(R_slice=5:4, F_slice=5:4, M_slice=1:2)
yeni_karli_musteri<- result$get_sliced_rfm(R_slice=5:4, F_slice=1:2, M_slice=4:5)

Umarım yararlı bulmuşsunuzdur.




11 Eylül 2017 Pazartesi

Yayınladığınız Tweetlerinizi Google Analytic İle İzleme

Tweetlerimizi Google Analitik ile İzlememiz Mümkün mü?

Kobilerimizin karşılaştığı sorunların başında dış ticarette pazarlama da gelmektedir. E- Ticaret sistemi içinde pazarlamanın yeri kuşkusuz büyüktür. Twitter ile tanıtımda bunlarında başında gelmektedir.

Bir çok arkadaşım bana attığımız tweetleri "Google Analitik" ile izleyip izleyemeyeceğimizi soruyor. Atılan bir tweetin başarısını izleme şansımız var. 

Bunun için öncelikle; tweet olarak attığınız ve takip etmek istediğiniz aksiyonun ineceği sayfanın linkini Google URL builder ile kısaltmamız gerek.


Bu sayfada istenilen yerleri doldurmanız gerekiyor.

Web site URL de tıklayan takipçinin inmesini istediğiniz sayfa yazmalı. Campaign Source da ise küçük harf kullanmalıyız. Bu gün ben twitter da paylaşımımı takip edeceğim. O neden ile küçük harfler ile "twitter" yazdım. Campanya da takip etmek istediğim ise CPC olduğu için onu da Campaign Medium kısmına küçük harfler ile yazdım. Diğer boşlukları da doldurdum. Sonra aşağıdaki bölümde;


"Convert URL to Short Linki seçip, takibe uygun kısaltılmış URL oluşturuyoruz.
Oluşturulan link benim için;

https://goo.gl/FcDfSZ

Bu aşamadan sonra tweetimiz oluşturulmalı ve bu link kullanılmalı.

Yukarıdaki linki kullanarak tweet hazırlıyorum.

Sonrasında tweet gönderiliyor. Bu kadar basit. Bundan sonra tek yapmamız gereken Google Analitik üzerinden tweetlerin başarısını takip etmek.
Google Analitik açıldıktan sonra "Edinme" sekmesi içinde kampanyalarda istatistik bilgilere erişmeye başlayacaksınız.


Umarım yardımcı olmuşumdur.

10 Eylül 2017 Pazar

Kobiler İçin Basit Pazar Analizi

R Studio ile Kobi’ler için Pazar Analizi

Bu gün R Studio programı ile basit pazar analizi nasıl yapılır, sosyal ağ analizi nasıl yapılır kısaca onu göstermeye çalışacağım.
Öncelikle daha önceki bölümde gösterdiğim şekilde bu ders için ilk etapta gerekli R Studio programı açılır. Yeni bir scrip yaratılır ve bu script bir klasör içine kaydedilir.
Sonrasında aşağıdaki paketler gösterilen şekilde yazılıma çağırılır. Bundan sonra yapacağınız çalışmaların da yer aldığı klasor aşağıdaki şekilde yazıma kaydedilir.
library(XML)
library(tm)
library(twitteR)
library(RJSONIO)
library(RCurl)
library(stringr)
library(ROAuth)
library(SocialMediaLab)
library(SocialMediaMineR)
library(twitteR)
library(dplyr)
Bu örnekte kobilerimizin yurtdışına Kurutulmuş Kayısı ihraç etmek istediği üzerine çalışmamız kurgulanmıştır.
Öncelikle Kurutulmuş kayısı için google üzerinden hangi ülkelerin arama yaptığı tespit edilmeye çalışılacaktır. Bu aramada Dried Apricot kelimesi kullanımlış ve gtrendsR paketi ile Google Trends bağlıntısı yapılmıştır.

Google Trend ile Arama Yapmak

devtools::install_github("PMassicotte/gtrendsR")
library(gtrendsR); library(dplyr); library(ggplot2); library(scales)
kayisi<- gtrends(c("Dried apricot"), time = "today 12-m") # last 12 months
plot(kayisi)
Yukarıda arama sonuçları verildi. Şimdi aşağıdaki kod ile hangi ülkelerden arama yapıldığını kolayca görebiliriz.
head(kayisi$interest_by_region)
##               location hits       keyword   geo gprop
## 1 United Arab Emirates  100 Dried apricot world   web
## 2            Australia   95 Dried apricot world   web
## 3               Canada   42 Dried apricot world   web
## 4                India   40 Dried apricot world   web
## 5       United Kingdom   38 Dried apricot world   web
## 6        United States   26 Dried apricot world   web
İstersek sonradan e-ticaret sitemizde kullanmak üzere hangi kelimer üzerinden kuru kayısı araması yapıldığını görme şansımız var.
head(kayisi$related_topics)
##   subject related_topics         value       keyword category
## 1     100            top       Apricot Dried apricot        0
## 2      90            top Dried apricot Dried apricot        0
## 3      20            top   Food drying Dried apricot        0
## 4      15            top        Recipe Dried apricot        0
## 5      15            top         Fruit Dried apricot        0
## 6      10            top       Calorie Dried apricot        0
Buradan ilk etapta çıkan sonuç “kuru kayısı” için en fazla arama Birleşik Arap Emirlikleri, Avustralya, Kanada, Hindistan üzerinden olmakta. Muhtemelen bu ülkelerde yüksek miktarda arama yapılmakta. Bu da ihracat için bize hedef ülkeleri vermekte.
Araştırmamızı biraz daha derinleştirelim.

Google Global Market Finder ile derinleşme:

Google Market Finder ile hem ülke bazında kuru kayısı aramalarını, hemde sonradan adwords üzerinden yapacağımız reklamlarda kullanılacak anahtar kelime bazında içerkleri almaya çalışalım.
Global Pazar
Global Pazar

Trade Map ile mevcut ithalat ve ihracat durumlarına bakma:

Trade Map ile mevcut durum analizi yapılabilir.
Trade Map
Trade Map

Twitter Üzerinden arama yapmak ve varsa fırsatları değerlendirmek:

Bunun için öncelikle twitter bağlantısı yapılmalı. bunun için lütfen aşağıdaki kodu çalıştırınız.
consumer_key <- 'xxxx' 
consumer_secret <- 'xxxx'
access_token <- '94534735-xxx' 
access_secret <- 'xxxx'

my_oauth <-setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
## [1] "Using direct authentication"
1
## [1] 1
Bağlantı sağlandıktan sonra aşağıdaki kod yardımı ile aramamızı gerçekleştiriyoruz.
aranankelime="Dried apricot"
N=1000
kurukayisi <- as.data.frame (CollectDataTwitter(searchTerm=aranankelime ,numTweets=N ,writeToFile=F,verbose=TRUE, language="en"))
## Now retrieving data based on search term: Dried apricot
## Warning in doRppAPICall("search/tweets", n, params = params,
## retryOnRateLimit = retryOnRateLimit, : 1000 tweets were requested but the
## API can only return 148
## Done
## Cleaning and sorting the data...
## Done
Bu armada 1000 sonuç istemem karşı twitter API bana 149 sonuç verdi. Bu aramada ben lokasyon bazlı arama yapmadım. İstenirse yukarıdaki verilerden elde edilen bilgiler ile geocode= kodu eklenerek lokasyon bazlı tweetlerde çekilebilir.
head(kurukayisi$text, n=10)
##  [1] "Dried Apricot Soup with Emmer https://t.co/BzxMbFIT3t https://t.co/wjS5C737oq"                                             
##  [2] "Dried Apricot Soup with Emmer https://t.co/BzxMbFIT3t https://t.co/jk6BoRBcBA"                                             
##  [3] "RT @_FitnessHub_: #detox #health Dried Apricot Soup with Emmer ==&gt;&gt; https://t.co/7Mhas4mXvJ https://t.co/Wm078fha7m" 
##  [4] "#detox #health Dried Apricot Soup with Emmer ==&gt;&gt; https://t.co/7Mhas4mXvJ https://t.co/Wm078fha7m"                   
##  [5] "Dried Apricot Soup with Emmer https://t.co/BzxMbFIT3t https://t.co/jxsGyr5zRB"                                             
##  [6] "Dried Apricot Soup with Emmer https://t.co/BzxMbFIT3t https://t.co/wbuXCPx9kN"                                             
##  [7] "Super Tart and dry has the flavor of dried apricot. Wis... (Keen Observation (Echo Series)) https://t.co/zGFqIPa7Jm #photo"
##  [8] "Dried Apricot Soup with Emmer https://t.co/BzxMbFIT3t https://t.co/khQreagxJ4"                                             
##  [9] "RT @_FitnessHub_: #detox #health Dried Apricot Soup with Emmer ==&gt;&gt; https://t.co/7Mhas4mXvJ https://t.co/JxrjPKtON2" 
## [10] "#detox #health Dried Apricot Soup with Emmer ==&gt;&gt; https://t.co/7Mhas4mXvJ https://t.co/JxrjPKtON2"
Elimizde sadece bir anlık veri olsa da bu tweetler için sosyal ağ analizi yapabiliriz.

Twitter ve Gephi ile sosyal ağ analizi:

Twitter verilerini bizim kullanabileceğimiz gephi verisine çeviren kodlar aşağıda sunulmuştur. Bu kodlar sayesinde istediğimiz bilgiler .graphml formatında kayıt edilecektir.
g_actor_twitter <- Create(kurukayisi, type = "Actor", writeToFile = TRUE)
## Generating the network...
## Twitter actor network was written to current working directory, with filename:
## Eyl_10_19_05_17_2017_EEST_TwitterActorNetwork.graphml
## Done.
g_bimodal_twitter <- Create(kurukayisi, type = "bimodal", writeToFile = TRUE)
## [1] "Generating Twitter bimodal network..."
## Twitter bimodal network was written to current working directory, with filename:
## Eyl_10_19_05_25_2017_EEST_TwitterBimodalNetwork.graphml
## Done
g_semantic_twitter <- Create(kurukayisi, type = "semantic", writeToFile = TRUE)
## [1] "Generating Twitter semantic network..."
## Twitter semantic network was written to current working directory, with filename:
## Eyl_10_19_05_25_2017_EEST_TwitterSemanticNetwork.graphml
## Done.
Şimdi elde ettiğimiz bilgiler ile sosyal ağ analizi yapılabilir. Yüklenen dosyaları açık kaynak kodlu Gephi ile görselleştirebiliriz. Ağ analizi ile ilgili ayrıntılı bir ders yazmayı düşünüyorum.
Veriler ışığında yaptığımız ağ analizinde kimlerin kimler ile ilgili olduğu, nasıl bir ağ içinde hareket ettiklerini, tweetlere göre kimlerin pazarda oyuncu olduğunu, kimler ile ilişki içinde oldukları tespit edilebilir. Trade Map
Umarım bu yazım yararlı olmuştur. Yararlı olduğunuzu düşünürseniz lütfen paylaşınız.