Beta
Customer Relationship Management
Main Topics
- Customer Lifecycle/journey/funnel
- Communication
- New Customers Processes
- Churn Management
- Cross-sell - Up-sell
- Customer Segmentation Processes
Key Performance Indicators
- Customer Acquisiton Rate
- Customer Retention Rate
- Customer Churn Rate
- Conversion Rate
- Growth Rate
Cohort Analysis
Analysis of a group of people with common characteristics on KPIs.
RFM
Recency
How recent was the customer's last purchase ?
Frequency
How often did this customer make a purchase in a given period ?
Monetary
How much money did the customer spend in a given period ?
RFM Segments
RFM SEGMENTATION
Importing Modules and Dataset
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
pd.set_option("display.max_columns", None)
pd.set_option("display.float_format", lambda x: "%.2f" % x)
data2010 = pd.read_excel("online_retail_II.xlsx", sheet_name="Year 2009-2010")
data2011 = pd.read_excel("online_retail_II.xlsx", sheet_name="Year 2010-2011")
data = data2010.append(data2011)
data.reset_index(drop = True, inplace=True)
Exploratory Data Analysis
Check Data
def check(df, head = 5):
print("**********************************HEAD**********************************")
print(df.head(head))
print("**********************************TAIL**********************************")
print(df.tail(head))
print("**********************************TYPES**********************************")
print(df.dtypes)
print("**********************************SHAPE**********************************")
print(df.shape)
print("**********************************NA**********************************")
print(df.isnull().sum())
print("**********************************QUANTILES**********************************")
print(df.describe([0, 0.05, 0.5, 0.95]))
check(data)
Grab Columns
def grab_col_names(dataframe, cat_th=10, car_th=20):
"""
Veri setindeki kategorik, numerik ve kategorik fakat kardinal değişkenlerin isimlerini verir.
Not: Kategorik değişkenlerin içerisine numerik görünümlü kategorik değişkenler de dahildir.
Parameters
------
dataframe: dataframe
Değişken isimleri alınmak istenilen dataframe
cat_th: int, optional
numerik fakat kategorik olan değişkenler için sınıf eşik değeri
car_th: int, optinal
kategorik fakat kardinal değişkenler için sınıf eşik değeri
Returns
------
cat_cols: list
Kategorik değişken listesi
num_cols: list
Numerik değişken listesi
cat_but_car: list
Kategorik görünümlü kardinal değişken listesi
Examples
------
import seaborn as sns
df = sns.load_dataset("iris")
print(grab_col_names(df))
Notes
------
cat_cols + num_cols + cat_but_car = toplam değişken sayısı
num_but_cat cat_cols'un içerisinde.
Return olan 3 liste toplamı toplam değişken sayısına eşittir: cat_cols + num_cols + cat_but_car = değişken sayısı
"""
# cat_cols, cat_but_car
cat_cols = [col for col in dataframe.columns if dataframe[col].dtypes == "O"]
num_but_cat = [col for col in dataframe.columns if dataframe[col].nunique() < cat_th and
dataframe[col].dtypes != "O"]
cat_but_car = [col for col in dataframe.columns if dataframe[col].nunique() > car_th and
dataframe[col].dtypes == "O"]
cat_cols = cat_cols + num_but_cat
cat_cols = [col for col in cat_cols if col not in cat_but_car]
# num_cols
num_cols = [col for col in dataframe.columns if dataframe[col].dtypes != "O"]
num_cols = [col for col in num_cols if col not in num_but_cat]
print(f"Observations: {dataframe.shape[0]}")
print(f"Variables: {dataframe.shape[1]}")
print(f'cat_cols: {len(cat_cols)}')
print(f'num_cols: {len(num_cols)}')
print(f'cat_but_car: {len(cat_but_car)}')
print(f'num_but_cat: {len(num_but_cat)}')
return cat_cols, num_cols, cat_but_car
cats,nums,cards = grab_col_names(data)
cards
nums