Kural tabanlı sınıflandırma ile potansiyel müşteri getirisi hesaplama

ANIL NEBİ ŞENTÜRK
2 min readDec 14, 2021

--

Bir oyun şirketi müşterilerinin bazı özelliklerini kullanarak

seviye tabanlı (level based) 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 istemektedir.

Örneğin:

Türkiye’den IOS kullanıcısı olan 25 yaşındaki bir erkek

kullanıcının ortalama ne kadar kazandırabileceği

belirlenmek isteniyor.

Persona.csv 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.
import pandas as pd
df=pd.read_csv(‘C:/Users/Lenovo/PycharmProjects/pythonProject3/persona.csv’)
def check_df(dataframe, head=5):
print(“##################### Shape #####################”)
print(dataframe.shape)
print(“##################### Types #####################”)
print(dataframe.dtypes)
print(“##################### Head #####################”)
print(dataframe.head(head))
print(“##################### Tail #####################”)
print(dataframe.tail(head))
print(“##################### NA #####################”)
print(dataframe.isnull().sum())
print(“##################### Quantiles #####################”)
print(dataframe.quantile([0, 0.05, 0.50, 0.95, 0.99, 1]).T)
check_df(df)
PRICE — Müşterinin harcama tutarı

Değişkenler

SOURCE — Müşterinin bağlandığı cihaz türü

SEX — Müşterinin cinsiyeti

COUNTRY — Müşterinin ülkesi

AGE — Müşterinin yaşı

persona.csv

df["SOURCE"].unique()
print(df["SOURCE"].unique())
print(df["SOURCE"].nunique())
print(df["SOURCE"].value_counts())
df["PRICE"].unique()
df["PRICE"].nunique()
print(df["PRICE"].value_counts())
df["COUNTRY"].value_counts()
print(df.groupby("COUNTRY").agg({"PRICE": "sum"}))
print(df.groupby("SOURCE").count())
print(df.groupby("COUNTRY").agg({"PRICE": "mean"}))
print(df.groupby("SOURCE").agg({"PRICE": "mean"}))
print(df.groupby(["COUNTRY", "SOURCE"]).agg({"PRICE": "mean"}))
print(df.groupby(["COUNTRY", "SOURCE", "SEX", "AGE"]).agg({"PRICE": "mean"}))
agg_df = df.groupby(["COUNTRY", "SOURCE", "SEX", "AGE"]).agg({"PRICE": "mean"}).sort_values(by=["PRICE"], ascending=False)
print(agg_df)
agg_df = agg_df.reset_index()
agg_df["AGE_CAT"] = pd.cut(agg_df["AGE"], [0, 19, 24, 31, 41, 70])
agg_df["customer_level_based"] = [str(i[0]).upper() + "_" + str(i[1]).upper() + "_" + str(i[2]).upper() + "_" + str(i[5]).upper() for i in agg_df.values]
print(agg_df)
print(agg_df.groupby("customer_level_based").agg({"PRICE": "mean"}))
print(agg_df)
agg_df["SEGMENT"] = pd.qcut(agg_df["PRICE"], 4, labels=["D", "C", "B", "A"])
print(agg_df)
print(agg_df.groupby("SEGMENT").agg({"PRICE": ["mean", "max", "sum"]}))
agg_df[agg_df["SEGMENT"] == "C"]
print(agg_df[agg_df["SEGMENT"] == "C"])
new_user = "TUR_ANDROID_FEMALE_(31, 41]"
agg_df[agg_df["customer_level_based"] == new_user]
new_user = "FRA_IOS_FEMALE_(31, 41]"
new_user

--

--

No responses yet