Kural tabanlı sınıflandırma ile potansiyel müşteri getirisi hesaplama
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