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.
Parametre | Açıklaması |
CreditScore | Müşterinin kredi skorunu belirtir. |
Geography | Müşterinin ülkesini belirtir. |
Gender | Müşteri cinsiyetini belirtir. |
Age | Müşterinin yaşını belirten sütundur. |
Tenure | Müşterinin banka ile çalışma süresini belirten sütundur. |
Balance | Müşterinin bakiyesini belirten sütundur. |
NumOfProducts | Müşterinin sahip olduğu ürün sayısını belirten sütundur. |
HasCrCard | Müşterinin Kredi kartı sahibi olup olmadığını belirten sütundur. |
IsActiveMember | Müşterinin aktif kullanıcı olup olmadığımı belirten sütundur. |
EstimatedSalary | Müşterinin tahmini yıllık maaşını belirten sütundur. |
Exited | Müşterinin bankadan ayrılıp ayrılmadığını belirten sütundur. |
RowNumber | Müşterinin sütun numarasını belirtir. |
CustomerId | Müşterinin kullanıcı numarasını belirten sütundur. |
Surname | Müş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.