Churn Modelleme Uygulaması #1
Kütüphanelerin ve Veri Setinin Yüklenmesi

Bu yazımızda sizinle farklı makine öğrenmesi algoritmalarını kullanarak Churn modelleme uygulamasına başlayacağız. Burada yapacağımız Churn modelleme uygulamasının kapsamı yalnızca makine öğrenme algoritmalarının kullanılması olmayacak.

Buna ek olarak, bu algoritmalar ile kullanacağımız veri seti üzerinde veriden bilgi edinme, veri ön işleme, veri görselleştirme ve farklı algoritmaları birbirleriyle farklı başarı kriterlerine göre kıyaslama gibi işlemleri de gerçekleştireceğiz. Bu kıyaslama işlemi ile birlikte her algoritmanın bu farklı başarı kriterleri ile veri üzerindeki başarısını göreceğiz ve ardından genel bir değerlendirme yapacağız.

Yazımıza başlıkta da kullandığımız Churn’un ne anlam ifade ettiğini açıklamakla başlayalım.

Churn Nedir?

Terminolojik olarak kayıp anlamına gelir. Bu herhangi bir alandaki bir hedef verinin kaybı olarak yorumlanabilir.  Yaygın olarak bu çalışmadaki Churn ise, belli bir dönem içerisinde bir işletmenin ne kadar müşteri kaybettiğini ifade eder. Churn modelleme ile herhangi bir işletmenin müşteri kaybı analizini yapabiliriz. Bu analiz sayesinde işletmeler, kendileri ile artık çalışma yapmayacak müşterileri tahmin edebilirler.

Bu uygulamamızı yaparken kullanacağımız veri setine buradan erişebilirsiniz. Veri setimizi diğer yazılarımızda olduğu gibi Google Colab üzerinden Python kullanarak inceleyeceğiz. Bunun için öncelikle veri setini ilgili siteden indirip Google Drive’a yüklemelisiniz. Google Drive için kullandığınız e-posta adresiniz ile Google Colab’ta oturum açtıktan sonra veri kümesini artık kullanabilir durumda olacaksınız.

Yukarıda gerçekleştirdiğimiz adımlardan sonra artık veri seti üzerinde işlem yapabilir durumdayız. Öncelikle veri seti üzerinden kullanacağımız kütüphaneleri yüklememiz gerekmektedir. Bunun için aşağıdaki kod bloğunu kullanabiliriz:

!pip install researchpy
!pip install keras-tuner

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import researchpy as rp
import lightgbm as lgb
warnings.filterwarnings("ignore")
from sklearn.metrics import roc_auc_score, accuracy_score, confusion_matrix,classification_report,roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB,MultinomialNB,ComplementNB,BernoulliNB
from sklearn.metrics import roc_curve, auc

roc_auc_score, accuracy_score, confusion_matrix, classification_report ve roc_auc_score’u, algoritmaların başarılarını ölçmek için kullanacağız. Buradan elde ettiğimiz sonuçları birbirleri ile kıyaslayıp hangi algoritmanın hangi metrik ile ne kadar başarılı olduğunu görebiliriz.

Veri setimiz Excel formatında olduğundan Python ortamında yüklemek için pandas kütüphanesinin read_csv metodunu kullanacağız. Verilerimizi yükledikten sonra head metodunu kullanacağız ve böylelikle veri kümemiz içerisinden belirlediğimiz sayı kadar veriyi ekrana göstereceğiz.

data = pd.read_csv("/content/drive/MyDrive/Churn_Modelling.csv")
data.head(10)

Veri kümemiz içerisinde yer alan parametrelerin açıklamaları aşağıda yer alan tablodaki gibidir.

ParametreAçıklaması
CreditScoreMüşterinin kredi skorunu belirtir.
GeographyMüşterinin ülkesini belirtir.
GenderMüşteri cinsiyetini belirtir.
AgeMüşterinin yaşını belirten sütundur.
TenureMüşterinin banka ile çalışma süresini belirten sütundur.
BalanceMüşterinin bakiyesini belirten sütundur.
   NumOfProductsMüşterinin sahip olduğu ürün sayısını belirten sütundur.
HasCrCardMüşterinin Kredi kartı sahibi olup olmadığını belirten sütundur.
IsActiveMemberMüşterinin aktif kullanıcı olup olmadığımı belirten sütundur.
EstimatedSalaryMüşterinin tahmini yıllık maaşını belirten sütundur.
ExitedMüşterinin bankadan ayrılıp ayrılmadığını belirten sütundur.
RowNumberMüşterinin sütun numarasını belirtir.
CustomerIdMüşterinin kullanıcı numarasını belirten sütundur.
SurnameMüşteri soyadını belirten sütundur.

Veri setimizi ve parametreleri incelediğimizde RowNumber, CustomerId ve Surname parametreler önemsiz olduğundan veri setimiz içerisinden silmemiz gerekmektedir. Aynı zamanda kişinin yaşadığı bölge ve cinsiyeti bankaden ayrılıp ayrılmayacağını belirlemediği için bu değerleri nümerik hale dönüştürürken One Hot dönüşümü yapacağız.

Bu işlemlerin ardından yaş grubunu belli aralıklara göre gruplayıp kategorik hale dönüştüreceğiz ve ardından One Hot dönüşümü ile nümerik hale getireceğiz.

Yukarıda belirttiğimiz işlemleri gerçekleştirmeden önce veriden bilgi edinmeye çalışalım.

Veri Setinden Bilgi Edinme

Veri setimizde “Exited” sütunu olduğunu görüyoruz. Bu değer müşterinin bankadan ayrılıp ayrılmadığını belirttiğinden bu sütunun toplamı alırsak bankadan ayrılan toplam müşteri sayısını elde edebiliriz.

INPUT:

data["Exited"].sum()

OUTPUT :


2037

Veri setinde 2037 tane bankadan ayrılmış müşterinin var olduğunu görüyoruz.

INPUT:

data.isna().sum()

OUTPUT:

RowNumber          0
CustomerId         0
Surname            0
CreditScore        0
Geography          0
Gender             0
Age                0
Tenure             0
Balance            0
NumOfProducts      0
HasCrCard          0
IsActiveMember     0
EstimatedSalary    0
Exited             0
dtype: int64

Veri setinde boş değer yer almamaktadır.

INPUT:

data.info()

OUTPUT:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 14 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   RowNumber        10000 non-null  int64  
 1   CustomerId       10000 non-null  int64  
 2   Surname          10000 non-null  object 
 3   CreditScore      10000 non-null  int64  
 4   Geography        10000 non-null  object 
 5   Gender           10000 non-null  object 
 6   Age              10000 non-null  int64  
 7   Tenure           10000 non-null  int64  
 8   Balance          10000 non-null  float64
 9   NumOfProducts    10000 non-null  int64  
 10  HasCrCard        10000 non-null  int64  
 11  IsActiveMember   10000 non-null  int64  
 12  EstimatedSalary  10000 non-null  float64
 13  Exited           10000 non-null  int64  
dtypes: float64(2), int64(9), object(3)
memory usage: 1.1+ MB

Dönen değerleri incelediğimizde veri setinde boş değer olmadığını bir kez daha görmüş olduk. Aynı zamanda veri setinde yer alan sütunların veri tiplerini de görebiliriz.

INPUT

data["Geography"].unique()

OUTPUT:

array(['France', 'Spain', 'Germany'], dtype=object)

Veri setimizde 3 farklı ülkeden insanlar bulunmaktadır. Bunlar; İspanya, Fransa ve Almanya’dır.

Veri setimizde yer alan kategorik sütunların içerisinde sınıfların dağılım yüzdelerini incelemek için aşağıdaki kod bloğunu kullanabiliriz:

INPUT:

fig, axarr = plt.subplots(2, 3, figsize=(30, 10))
data["Gender"].value_counts().plot.pie(explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][0]);
data["Geography"].value_counts().plot.pie(explode = [0.05,0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][1]);
data["IsActiveMember"].value_counts().plot.pie(labels = ["Active","Inactive"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][2]);
data["NumOfProducts"].value_counts().plot.pie(explode = [0.05,0.05,0.05,0.06], autopct = '%1.1f%%',ax=axarr[1][0]);
data["HasCrCard"].value_counts().plot.pie(labels = ["Yes","No"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[1][1]);
data["Exited"].value_counts().plot.pie(labels = ["Not Exited","Exited"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[1]

Yukarıda yer alan pasta grafiklerini incelediğimizde:

  • Veri setinde yer alan insanların çoğunluğunun erkek olduğunu,
  • Müşterilerimizin çoğu Fransız müşteriler olduğunu; aynı zamanda Fransız müşterilerin varlığının, Alman ve İspanyol müşterilerin varlığının neredeyse 2 katı olduğunu,
  • Müşterilerimizin çoğunluğu aktif kullanıcı olmasına rağmen aktif olmayan kullanıcılarımızın yüzdesinin bir hayli yüksek olduğunu,
  • Müşterilerimizin %96,7’sinin en fazla 2 ürüne sahip olduğunu,
  • Müşterilerimizin çoğunluğunun kredi kartına sahip olduğunu,
  • Veri setimizdeki müşterilerin %79,6’sının bankanın müşteri olmaya devam ettiğini görebiliriz.

Veri setimizde kaç sütun ve veri örneği olduğunu öğrenmek istersek aşağıdaki kod bloğunu kullanabiliriz:

INPUT:

data.shape

OUTPUT:

(10000, 14)

Kodu bloğu çalıştırıldığında (10000, 14) sonucunu elde ederiz. Bu 10000 veri örneği, 14 sütun olduğunu gösterir.

Bir sonraki yazımızda veri setimiz üzerinde görselleştirme yaparak verilerimizden bilgi edinmeye devam edeceğiz.

Buraya tıklayarak bir sonraki yazımıza erişebilirsiniz.

MCHNLRNRU95A10517