Kural Tabanlı Sınıflandırma ile Potansiyel Müşteri Getirisi Hesaplama Projesi

Merve Tatlıdil
5 min readJun 4, 2021

--

İlüstratör: Çağatay Metin

Merhaba,

Bundan sonraki yazılarımda Veri Bilimi Okulu Bootcamp’te yaptığım projeleri anlatmaya çalışacağım. Bugün anlatmak istediğim proje : kural tabanlı sınıflandırma ile potansiyel müşteri getirisi hesaplama.

Önce iş probleminden bahsedelim. Bir oyun şirketi müşterilerinin bazı özelliklerine göre seviye tabanlı (level based) olarak yeni müşteri tanımları (persona) oluşturmak ve bu yeni müşteri tanımlarına göre segmentler oluşturup bu segmentlere göre yeni gelebilecek müşterilerin şirkete ortalama ne kadar kazandırabileceğini tahmin etmek istiyor. Örnek vermek gerekirse Amerikalı olup IOS kullanan 35 yaşındaki bir kadının şirkete ortalama olarak ne kadar kazandırabileceğini belirlemek istiyoruz.

Peki bu personaları neden oluşturuyoruz? Müşterilerin nelerle ilgilendiklerini, tercihlerini, ihtiyaçlarını bilirsek müşterileri en fazla ve en az en kârlı şekilde gruplandırabilir ve böylece müşteriler için yapabileceğimiz eylemlerimizi buna göre planlayabiliriz.

Gelelim veri setine. Veri seti uluslararası bir oyun şirketinin sattığı ürünlerin fiyatlarını ve bu ürünleri satın alan kullanıcıların bazı demografik bilgilerini barındırmaktadır. Veri seti her satış işleminde oluşan kayıtlardan meydana gelmektedir.

Hedefimiz belirli demografik özelliklere sahip bir kullanıcının birden fazla alışveriş yapmış olabildiği bu veri setinde kurallar belirleyip, bu kurallara göre müşterilerimizi belli grupların içine almak.

Veri setindeki değişkenler :

  1. PRICE : Müşterinin harcama tutarı

2. SOURCE : Müşterinin bağlandığı cihaz türü

3. SEX : Müşterinin cinsiyeti

4. COUNTRY : Müşterinin ülkesi

5. AGE : Müşterinin yaşı

İlk olarak çalışacağımız veri setini tanıyalım.

df.shape() ile bir dataframe’in satır ve sütun bilgisine ulaşabiliyorduk. Veri seti 5000 satır 5 kolona sahip. Şimdi değişkenlerin ayrıntısına bakalım.

Veri setinde 2 numerik, 3 kategorik değişken var. Null değer bulunan değişkenimiz yok.

Artık veri setini tanıdık, asıl hedefimize aşama aşama ilerleyebiliriz.Veri setinin ilk 5 satırını görelim.

Burada birşeye dikkatinizi çekmek istiyorum. Yukarıda gördüğünüz 0 ve 1. satırlardaki müşterinin özellikleri aynı. Bunlar aynı müşteri olabilirler. Zaten projedeki amacımız da benzer özellikli olan müşterileri aynı grupta toplamak. Benzer özelliklerden bahsedince aklımıza ilk group by() metodu gelmeli.

Yukarıdaki python sorgusu şunu ifade ediyor : müşterileri ülke, kullandığı cihaz türü, cinsiyet ve yaş’a göre grupla. Son olarak da bu benzer özellikle olan grupların toplam ne kadar harcadığını bul. Çünkü hedefimiz benzer gruplardan ne kadar kazandığımızı bulmak. Buna göre şirketimiz için bazı hedefler belirleyeceğiz.

Şimdi yukarıdaki yaptığımız işlemi hem yeni bir dataframe olarak kaydedelim, hem de grupların toplam fiyatlarını büyükten küçüğe sıralatalım.

Burada şöyle bir problemimiz var : bizim veri setinde 5 kolon vardı, ama python yukarıda oluşan dataframe’de 1 kolon olduğunu söylüyor. Yani python’a göre price dışındaki tüm değişkenler index isimleridir.Bunları tekrar değişken isimlerine çevirelim.

reset_index() ile dataframe’i 5 kolonlu hâle getirdik.

Projenin en başında değişkenlerin türlerine bakmıştık. 2 değişken numerik 3 değiken kategorikti. Kategorik değişkenler belirli sayıda değerlere sahip oldukları için onlarla uğraşmak kolay ama numerik değişkenler için aynı şeyi söylemiyoruz maalesef. Çünkü :

AGE değişkeni 46 tane farklı değere sahipmiş.Her yaş için ayrı ayrı grup oluşturursak işimiz zor.Bu nedenle bir düzenleme yapmalıyız. AGE değişkenini de kategorik hâle getirmeliyiz.

Burada “AGE_CAT “ adında bir değişken oluşturuyoruz. Sonra AGE değişkeni içindeki yaşları belirli aralıklara bölüyoruz. Bu aralıklar sizin insiyatifinizde. Veri setine göre mobil oyun şirketi olduğumuz için gençlerin daha önemli olduğunu düşünerek bu yaş aralıklarını daha sık böldüm. Yepyeni bir değişkenimiz oldu.

Bu aşamamızda yazının en başından beri bahsettiğim personalarımızı oluşturacağız.

Personalarımız için yeni bir değişken oluşturduk.

Örneğin 0.satırda şunu dedik : Amerikalı olup android kullanan 0–18 yaş arası erkekleri bir gruba al. Bunların toplam harcamaları 3917 birim.Burada dikkat etmemiz gereken bir yer var :

5 ve 6. satırlardaki durum oluşabilir. Aynı ülke, aynı cihaz türü, aynı cinsiyet, aynı kategorik yaş grubunda olabilirler ama yaşları farklı bu kişilerin.Aslında aynı gruba giriyor bu kişiler. Bu yüzden aynı gruptakilerin (persona) fiyata göre ortalamasını alırız ki bu grubun tamamına yönelik bir ortalama bir fiyat söyleyebilelim.

Son aşamada bizim için önemli olan sadece hangi persona hangi ortalama fiyata sahip olduğu için sadece bu değişkenlerle devam ediyoruz.Yeni müşterileri (Örneğin : USA_ANDROID_MALE_0_18) PRICE’a göre 4 segmente ayıralım.Bunun için yeni bir SEGMENT isimli değişken oluşturalım.

Yine bu işlemden sonra reset_index() yapmalıyız dataframe 2 kolon olarak görünmekte.

Vee personalarımızı başarıyla oluşturduk.

“33 yaşında ANDROID kullanan bir Türk kadını hangi segmente aittir ve ortalama ne kadar gelir kazandırması beklenir? “ sorusunun yanıtı nedir?

Ve cevabımız : ortalama 413.75 birim ve B segmenti :)

Sağlıkla kalın!

Teşekkürler :

Proje kodlarına buradan ulaşabilirsiniz

--

--

No responses yet