Kural Bazlı Sınıflandırma(Level Based Classification)

Hatice Ebrar Alıcı
4 min readMay 31, 2021

--

Herkese merhaba, bu yazımda makine öğrenmesi algoritmaları kullanmadan, temel metodlar ile persona ve segment kavramlarını kullanarak, bir iş problemini çözmeye yönelik geliştirdiğim küçük çaplı bir projeden söz etmek istiyorum.

Önce persona ne demek kısaca tanımlayalım. Yeni bir girişimin başarı ile sürdürülebilmesi için pazarlama sürecini tabiri caiz ise baştan sıkı tutmakta yarar vardır. Bunun için de önce personalar yaratılması ve hedef kitle özelliklerinin detaylı olarak tanımlanması gerekir. Persona nedir sorusunun yanıtını şu şekilde verelim. Persona, farklı kaynaklardan edinilen karakteristik bilgilerin incelenmesi, bu bilgiler ışığında ideal müşteri profilinin ortaya çıkması şeklinde tanımlanabilir. Persona için aslında bir analiz sürecidir diyebiliriz.

Geliştirdiğim bu projede amacımız, bir şirkete ait müşterilerin bazı özelliklerini kullanarak seviye tabanlı yeni müşteri tanımları oluşturmak ve bu yeni müşteri tanımlarına göre segmentler oluşturup bu segmentlere göre yeni gelecek müşterilerin şirkete ortalama ne kadar kazandırabileceğini tahmin etmektir.

Veri Seti Hikayesi ve Değişkenler

Veri seti bir şirketin belirli bir zaman aralığında yaptığı satış kayıtlarından oluşmaktadır. İçerisinde müşterilere ait harcama tutarı, kullanılan cihaz türü, müşterinin ülkesi, yaş ve cinsiyet değişkenleri bulunmaktadır.

Öncelikle veri setini inceleyelim.

import pandas as pd
df = pd.read_csv("datasets/persona.csv")
df.head()

Veri setini analiz edip daha fazla bilgi edindikten sonra değişkenlerimze bazı kırılımlar yapıp gruplama ve toplulaştırma işlemleri ile segment oluşturmak için ilk adımlarımızı atalım.

df.groupby("COUNTRY").agg({"PRICE": "sum"})
df.groupby("SOURCE").agg({"PRICE": "count"})
df.groupby("COUNTRY").agg({"PRICE":"mean"})
df.groupby(["COUNTRY","SOURCE"]).agg({"PRICE":"mean"})

Önce değişkenlerimizi groupby() metodu ile gruplayıp harcama tutarlarının toplamlarına göre toplulaştırıp yeni bir dataframe de tutalım.

agg_df = df.groupby(["COUNTRY","SOURCE","SEX","AGE"]).agg({"PRICE":    "sum"}).sort_values(("PRICE"),ascending=False)

Elde ettiğimiz çıktı sonucunda, USA’ de yaşayan android kullanan 15 yaşında-ki erkek müşterilere toplam 3917 birimlik satış yapılmış. Aynı şekilde Türkiye’de yaşayan ios kullanan 47 yaşındaki erkek müşterilere toplam 19 birimlik satış yapılmış gibi yorumlar yapılabilir. Çıktıda görüldüğü gibi PRICE değişkeni hariç diğer değişkenler index konumunda. İndexi resetleyerek bu değişkenleri kolonlara getirelim.

agg_df.index
agg_df = agg_df.reset_index()
agg_df.head()

Şimdi AGE değişkenimizi sınıflara ayırarak yeni bir kategorik değişken oluşturalım. Burada pandas kütüphanesinden cut() fonksiyonu ile yaşları belirli aralıklardan keserek beş kategoriye ayıralım.

label_list=["0_18","19_23","24_31", "31_41","41_70"]
agg_df["AGE_CAT"] = pd.cut(agg_df["AGE"], [0, 18, 24, 30, 40, 70], labels = label_list)
agg_df.head()

Artık veri setimiz seviye tabanlı müşterileri yani personaları oluşturmak için hazır. Bunun için “COUNTRY”, “SOURCE”, “SEX” ve “AGE_CAT” kolonlarının değerlerinden oluşan “customers_level_based” değişkenini tanımlayıp veri setimize ekleyelim. Burada list comprehension kullanabiliriz.

agg_df["customers_level_based"] = [ str(val[0]).upper() + "_" + str(val[1]).upper() + "_" +str(val[2]).upper() + "_" + str(val[5]).upper() for val in agg_df[agg_df.columns].values]

Elimizde çok sayıda aynı müşteri düzeylerinden olduğu için bunların tekilleştirilmesi gerekmektedir.

agg_df=agg_df.groupby("customers_level_based").agg({"PRICE":"mean"}).reset_index()

Görüldüğü gibi personaları oluşturmuş olduk. Şimdi bu personaları segmentlere ayıralım ve yeni gelen müşterilerin hangi segmente ait olduğunu belirleyerek şirkete ortalama ne kadar kazanç sağladığını tahmin edelim.

agg_df["SEGMENT"] = pd.qcut(agg_df["PRICE"],4, labels=["D", "C", "B", "A"])
agg_df.groupby("SEGMENT").agg({"PRICE": ["mean", "max", "sum"]})

İşin son ve en keyifli aşamasına geldik. Artık şirkete yeni gelen müşteriler için tahminler yapabiliriz. Örneğin 33 yaşında android kullanan bir Türk kadını hangi segmente aittir ve şirkete ortalama ne kadar gelir kazandırması beklenir?

new_user = "TUR_ANDROID_FEMALE_31_41" 
agg_df[agg_df["customers_level_based"] == new_user]

Tanımlanan özelliklere sahip bir müşterinin, C segmentine ait olduğunu ve şirkete ortalama 229 birimlik bir kazanç sağladığını söyleyebiliriz.

Bir sonraki yazımda görüşmek üzere…

Kaynakça:

https://bootcamp.veribilimiokulu.com/egitim/veri-bilimci-yetistirme-programi/

--

--